📄 ipc.c
字号:
printf("\tTC interval: %d\n", ntohs(msg->tc_int)); printf("\tNeighbor hold time: %d\n", ntohs(msg->neigh_hold)); printf("\tTopology hold: %d\n", ntohs(msg->topology_hold)); */ if(msg->ipv6 == 0) { ipversion = AF_INET; ipsize = sizeof(struct in_addr); sprintf(&info[0],"IP version 4\nMain address: %s\nMid addresses: %d\nHna addresses: %d\nHELLO interval: %d\nHELLO LAN interval: %d\nTC interval: %d\nNeighbor hold time: %d\nTopology hold: %d\n", ip_to_string(&msg->main_addr), msg->mids, msg->hnas, ntohs(msg->hello_int), ntohs(msg->hello_lan_int), ntohs(msg->tc_int), ntohs(msg->neigh_hold), ntohs(msg->topology_hold)); } else { ipversion = AF_INET6; ipsize = sizeof(struct in6_addr); sprintf(&info[0],"IP version 6\nMain address: %s\nMid addresses: %d\nHna addresses: %d\nHELLO interval: %d\nHELLO LAN interval: %d\nTC interval: %d\nNeighbor hold time: %d\nTopology hold: %d\n", ip_to_string(&msg->main_addr), msg->mids, msg->hnas, ntohs(msg->hello_int), ntohs(msg->hello_lan_int), ntohs(msg->tc_int), ntohs(msg->neigh_hold), ntohs(msg->topology_hold)); } memcpy(&main_addr, &msg->main_addr, ipsize); set_net_info(&info[0], 0); return 0;}intipc_eval_route_packet(struct routemsg *msg){ struct route_entry rt_ent; char dev[5]; char gw[16]; char itoa_buf[10]; dev[4] = '\0'; memset(&gw[0], 0, 16); printf("Processing route packet\n"); memset(rt_ent.if_name, 0, MAX_IF_NAMESIZ); /* Fill struct */ memcpy(&rt_ent.gw, &msg->gateway_addr, ipsize); memcpy(&rt_ent.dst, &msg->target_addr, ipsize); memcpy(rt_ent.if_name, msg->device, 4); rt_ent.hopcnt = msg->metric; if(msg->add) { memcpy(&dev[0], &msg->device[0], 4); /*Add node to node list */ memcpy(&gw[0], ip_to_string(&msg->gateway_addr), 16); gui_itoa(msg->metric, itoa_buf); route_list_add(ip_to_string(&msg->target_addr), gw, dev, itoa_buf); printf("\tRoute to %s(hc %d) added\n", ip_to_string(&msg->target_addr), rt_ent.hopcnt); /* printf("\tRoute to %s added\n", ip_to_string(&msg->target_addr)); printf("\tGateway %s\n", gw); printf("\tInterface %s\n", msg->device); printf("\tMetric %d\n", msg->metric); */ } else { if(route_list_del(ip_to_string(&msg->target_addr)) < 1) printf("COULD NOT FIND ROUTE TO DELETE!\n\n"); printf("\tRoute to %s deleted\n", ip_to_string(&msg->target_addr)); } return 1;}intprocess_hello(int size, olsr_u8_t vtime, union olsr_ip_addr *originator, union hello_message *m){ struct hellinfo *neigh; struct hellinfo6 *neigh6; int i; int nsize; int type, link; printf("Processing HELLO from %s size = %d\n", ip_to_string(originator), size); if(!update_timer_node(originator, vtime)) add_node(originator, vtime); /* Add neighbors if any */ size = size - 4 - 8 - ipsize; /* size of neighbors(size - olsrheder- helloheader) */ if(!size) return 0; /* Get the neighbortype-blocks start */ neigh = m->v4.hell_info; neigh6 = m->v6.hell_info; //printf("HELLO Size: %d\n", size); while(size > 0) { //printf("\tNEIGH: 0x%x\n", (int)neigh); if(ipversion == AF_INET) { nsize = ntohs(neigh->size); type = EXTRACT_STATUS(ntohs(neigh->link_code)); link = EXTRACT_LINK(ntohs(neigh->link_code)); //printf("TYPE: %d\n", neigh->link_code); } else { nsize = ntohs(neigh6->size); type = EXTRACT_STATUS(ntohs(neigh6->link_code)); link = EXTRACT_LINK(ntohs(neigh6->link_code)); } size -= nsize; nsize = nsize - 4; /* - hellinfo header */ //printf("Size left: %d Current hellinfo: %d\n", size, nsize); i = 0; while(nsize > 0) { //printf("Adding neighbor %s...\n", ip_to_string((union olsr_ip_addr *)&neigh->neigh_addr[i])); /* if(MPR) update_timer_mpr((union olsr_ip_addr *)&mprsinfo->addr, originator); */ if(ipversion == AF_INET) /* Update MPRs */ { if(type == MPR_NEIGH) { //printf("MPR from HELLO\n"); update_timer_mpr((union olsr_ip_addr *)&neigh->neigh_addr[i], originator, vtime); } add_node((union olsr_ip_addr *)&neigh->neigh_addr[i++], vtime); } else { if(type == MPR_NEIGH) /* Update MPRs */ { //printf("MPR from HELLO\n"); update_timer_mpr((union olsr_ip_addr *)&neigh6->neigh_addr[i], originator, vtime); } add_node((union olsr_ip_addr *)&neigh6->neigh_addr[i++], vtime); } nsize = nsize - ipsize; //printf("Nsize: %d\n", nsize); } neigh = (struct hellinfo *) &neigh->neigh_addr[i]; neigh6 = (struct hellinfo6 *) &neigh6->neigh_addr[i]; } //printf("DONE\n"); return 0;}intprocess_tc(int size, olsr_u8_t vtime, union olsr_ip_addr *originator, union tc_message *m){ struct neigh_info *mprsinfo; struct neigh_info6 *mprsinfo6; printf("Processing TC from %s size = %d\n", ip_to_string(originator), size); /* Updating timer */ if(!update_timer_node(originator, vtime)) add_node(originator, vtime); /* Calculate size of the mprsinfo */ size = size - 4 - 8 - ipsize; //printf("TC Size: %d\n", size); if(ipversion == AF_INET) mprsinfo = &m->v4.neigh[0]; else mprsinfo6 = &m->v6.neigh[0]; while(size > 0) { if(ipversion == AF_INET) { //printf("\tprocessing TC: %s\n", ip_to_string((union olsr_ip_addr *)&mprsinfo->addr)); add_node((union olsr_ip_addr *)&mprsinfo->addr, vtime); update_timer_mpr((union olsr_ip_addr *)&mprsinfo->addr, originator, vtime); mprsinfo++; } else { //printf("\tprocessing TC: %s\n", ip_to_string((union olsr_ip_addr *)&mprsinfo6->addr)); //printf("TC: add node %s\n", ip_to_string((union olsr_ip_addr *)&mprsinfo6->addr)); add_node((union olsr_ip_addr *)&mprsinfo6->addr, vtime); update_timer_mpr((union olsr_ip_addr *)&mprsinfo6->addr, originator, vtime); mprsinfo6++; } size = size - ipsize; //printf("\tsize: %d\n", size); } //printf("DONE\n"); return 0;}intprocess_mid(int size, olsr_u8_t vtime, union olsr_ip_addr *originator, union mid_message *m){ struct midaddr *midaddr; struct midaddr6 *midaddr6; printf("Processing MID from %s size = %d\n", ip_to_string(originator), size); /* Calculate size of the midinfo */ size = size - 4 - 4 - ipsize; if(ipversion == AF_INET) midaddr = &m->v4.mid_addr[0]; else midaddr6 = &m->v6.mid_addr[0]; //printf("MID size: %d\n", size); while(size > 0) { if(ipversion == AF_INET) { //printf("MID: add node %s\n", ip_to_string((union olsr_ip_addr *)&midaddr->addr)); add_mid_node(originator, (union olsr_ip_addr *)&midaddr->addr, vtime); midaddr++; } else { add_mid_node(originator, (union olsr_ip_addr *)&midaddr6->addr, vtime); //printf("MID: add node %s\n", ip_to_string((union olsr_ip_addr *)&midaddr6->addr)); midaddr6++; } size = size - ipsize; } //printf("DONE\n"); return 0;}intprocess_hna(int size, olsr_u8_t vtime, union olsr_ip_addr *originator, union hna_message *m){ printf("Processing HNA size = %d\n", size); struct hnapair *hnapairs; struct hnapair6 *hnapairs6; /* Calculate size of the hnainfo */ size = size - 4 - 4 - ipsize; if(ipversion == AF_INET) hnapairs = &m->v4.hna_net[0]; else hnapairs6 = &m->v6.hna_net[0]; while(size > 0) { if(ipversion == AF_INET) { //printf("\tHNA:%s\n", ip_to_string((union olsr_ip_addr *)&hnapairs->addr)); add_hna_node(originator, (union olsr_ip_addr *)&hnapairs->addr, (union olsr_ip_addr *)&hnapairs->netmask, vtime); hnapairs++; } else { add_hna_node(originator, (union olsr_ip_addr *)&hnapairs6->addr, (union olsr_ip_addr *)&hnapairs6->netmask, vtime); hnapairs6++; } size = size - ipsize - ipsize; } return 0;}char *ip_to_string(union olsr_ip_addr *addr){ char *ret; struct in_addr in; if(ipversion == AF_INET) { in.s_addr=addr->v4; ret = inet_ntoa(in); } else { /* IPv6 */ ret = (char *)inet_ntop(AF_INET6, &addr->v6, ipv6_buf, sizeof(ipv6_buf)); } return ret;}intgui_itoa(int i, char *buf){ char tmp[10]; if(sprintf(buf, "%hd", i)) { /* This shitty string needs to be converted to UTF-8 */ strcpy(tmp, g_locale_to_utf8(buf, -1, NULL, NULL, NULL)); strcpy(buf, tmp); return 1; //return ret; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -