void sr_integ_hw_setup(struct sr_instance* sr) { printf(" ** sr_integ_hw(..) called \n"); struct sr_router* subsystem = (struct sr_router*)sr_get_subsystem(sr); printf(" ** sr_integ_hw(..) adding entries to static rtable \n"); // read rtable file sr_load_rt(sr, sr->rtable); // add static entries to routing table printf(" ** sr_integ_hw(..) initial state of routing table\n"); llist_display_all(subsystem->rtable->rtable_list, display_route_t); // set link state info uint32_t area_id = PWOSPF_AREA_ID; uint16_t lsuint = PWOSPF_LSU_INTERVAL; set_ls_info_id(subsystem, area_id, lsuint); // get hardware fds for each hw interface #ifdef _CPUMODE_ sr_cpu_init_interface_socket(subsystem); #endif // initialize neighbor db neighbor_db_init(subsystem); // display initial state of neighbor db printf(" ** sr_integ_hw(..) initial state of neighbor db\n"); display_neighbor_vertices(subsystem); // initialize pwospf pwospf_init(subsystem); } /* -- sr_integ_hw_setup -- */
static void sr_load_rt_wrap(struct sr_instance* sr, char* rtable) { if(sr_load_rt(sr, rtable) != 0) { fprintf(stderr,"Error setting up routing table from file %s\n", rtable); exit(1); } printf("Loading routing table\n"); //printf("-----------------------------------------------------------------------\n"); sr_print_routing_table(sr); //printf("-----------------------------------------------------------------------\n"); }
int main(int argc, char **argv) { int c; char *host = DEFAULT_HOST; char *client = 0; char *server = DEFAULT_SERVER; char *rtable = DEFAULT_RTABLE; unsigned int port = DEFAULT_PORT; unsigned int topo = DEFAULT_TOPO; char *logfile = 0; struct sr_instance sr; while ((c = getopt(argc, argv, "hs:v:p:c:t:r:l:")) != EOF) { switch (c) { case 'h': usage(argv[0]); exit(0); break; case 'p': port = atoi((char *) optarg); break; case 't': topo = atoi((char *) optarg); break; case 'v': host = optarg; break; case 'c': client = optarg; break; case 's': server = optarg; break; case 'l': logfile = optarg; break; case 'r': rtable = optarg; break; } /* switch */ } /* -- while -- */ /* -- zero out sr instance -- */ sr_init_instance(&sr); /* -- set up routing table from file -- */ if(sr_load_rt(&sr, rtable) != 0) { fprintf(stderr,"Error setting up routing table from file %s\n", rtable); exit(1); } printf("Loading routing table\n"); printf("---------------------------------------------\n"); sr_print_routing_table(&sr); printf("---------------------------------------------\n"); sr.topo_id = topo; strncpy(sr.host,host,32); if(! client ) { sr_set_user(&sr); } else { strncpy(sr.user, client, 32); } /* -- set up file pointer for logging of raw packets -- */ if(logfile != 0) { sr.logfile = sr_dump_open(logfile,0,PACKET_DUMP_SIZE); if(!sr.logfile) { fprintf(stderr,"Error opening up dump file %s\n", logfile); exit(1); } } Debug("Client %s connecting to Server %s:%d\n", sr.user, server, port); Debug("Requesting topology %d\n", topo); /* connect to server and negotiate session */ if(sr_connect_to_server(&sr,port,server) == -1) { return 1; } /* call router init (for arp subsystem etc.) */ sr_init(&sr); /* -- whizbang main loop ;-) */ while( sr_read_from_server(&sr) == 1); sr_destroy_instance(&sr); return 0; }/* -- main -- */