⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipc.c

📁 wifi 无线网络路由协议OLSR linux下C代码
💻 C
📖 第 1 页 / 共 2 页
字号:
  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 + -