示例#1
0
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 -- */
示例#2
0
文件: handler.c 项目: exeasy/pma2
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);
}