void sr_integ_hw_setup(struct sr_instance* sr) { printf(" ** sr_integ_hw(..) called \n"); //init_rawsockets((router_state*)sr->interface_subsystem); init_router_list(sr); init_rtable(sr); init_cli(sr); } /* -- sr_integ_hw_setup -- */
int process_neighbor_list(char* xml){ if(rList == NULL) init_router_list(); int agent_id; struct in_addr router_addr; struct in_addr ctl_addr; xmlDocPtr doc = NULL; xmlNodePtr root_node = NULL; doc = xmlParseDoc((xmlChar *)xml); if (doc == NULL) { DEBUG(ERROR, "xmlParseDoc failed %s", strerror(errno)); return -1; } root_node = xmlDocGetRootElement(doc); if (root_node == NULL) { xmlFreeDoc(doc); DEBUG(ERROR, "xmlDocGetRootElement failed %s", strerror(errno)); return -1; } xmlNodePtr cur_node = NULL; xmlNodePtr child_node = NULL; xmlChar * cur_data = NULL; char *endptr = NULL; int base = 10; int count = 0; for ( cur_node = root_node->children; cur_node != NULL; cur_node = cur_node->next) { if(xmlStrcmp(cur_node->name, (const xmlChar*)("timestamp")) == 0) { continue; } if(xmlStrcmp(cur_node->name, (const xmlChar*)("PMA"))==0) { count++; xmlChar* pma_id = xmlGetProp(cur_node, "id"); agent_id = strtol((char *)pma_id, &endptr, base); pthread_mutex_lock(&router_list_mutex); for(child_node = cur_node->children;child_node!=NULL;child_node = child_node->next){ if (child_node->type == XML_ELEMENT_NODE) { if(xmlStrcmp(child_node->name, (const xmlChar* )("router_id"))== 0){ xmlChar* addr = xmlNodeListGetString(doc, child_node->xmlChildrenNode, 1); inet_pton(AF_INET,addr,&router_addr); xmlFree(addr); } else if( xmlStrcmp(child_node->name, (const xmlChar*)("agent_control_ip")) == 0){ xmlChar* addr = xmlNodeListGetString(doc, child_node->xmlChildrenNode, 1); inet_pton(AF_INET, addr, &ctl_addr); xmlFree(addr); } } } insert_router_list(agent_id, router_addr.s_addr,ctl_addr.s_addr); xmlFree(pma_id); pthread_mutex_unlock(&router_list_mutex); } } if (router_list_timer == -1) { router_list_timer = set_timer(5,send_router_list_to_ic,NULL,0); } else { update_timer(router_list_timer); } xmlFreeDoc(doc); }