Magellan Linux

Diff of /trunk/mkinitrd-magellan/busybox/networking/libiproute/iptunnel.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 983 by niro, Fri Apr 24 18:33:46 2009 UTC revision 984 by niro, Sun May 30 11:32:42 2010 UTC
# Line 75  static int do_ioctl_get_ifindex(char *de Line 75  static int do_ioctl_get_ifindex(char *de
75   struct ifreq ifr;   struct ifreq ifr;
76   int fd;   int fd;
77    
78   strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name));   strncpy_IFNAMSIZ(ifr.ifr_name, dev);
79   fd = xsocket(AF_INET, SOCK_DGRAM, 0);   fd = xsocket(AF_INET, SOCK_DGRAM, 0);
80   xioctl(fd, SIOCGIFINDEX, &ifr);   xioctl(fd, SIOCGIFINDEX, &ifr);
81   close(fd);   close(fd);
# Line 88  static int do_ioctl_get_iftype(char *dev Line 88  static int do_ioctl_get_iftype(char *dev
88   int fd;   int fd;
89   int err;   int err;
90    
91   strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name));   strncpy_IFNAMSIZ(ifr.ifr_name, dev);
92   fd = xsocket(AF_INET, SOCK_DGRAM, 0);   fd = xsocket(AF_INET, SOCK_DGRAM, 0);
93   err = ioctl_or_warn(fd, SIOCGIFHWADDR, &ifr);   err = ioctl_or_warn(fd, SIOCGIFHWADDR, &ifr);
94   close(fd);   close(fd);
# Line 114  static int do_get_ioctl(const char *base Line 114  static int do_get_ioctl(const char *base
114   int fd;   int fd;
115   int err;   int err;
116    
117   strncpy(ifr.ifr_name, basedev, sizeof(ifr.ifr_name));   strncpy_IFNAMSIZ(ifr.ifr_name, basedev);
118   ifr.ifr_ifru.ifru_data = (void*)p;   ifr.ifr_ifru.ifru_data = (void*)p;
119   fd = xsocket(AF_INET, SOCK_DGRAM, 0);   fd = xsocket(AF_INET, SOCK_DGRAM, 0);
120   err = ioctl_or_warn(fd, SIOCGETTUNNEL, &ifr);   err = ioctl_or_warn(fd, SIOCGETTUNNEL, &ifr);
# Line 129  static int do_add_ioctl(int cmd, const c Line 129  static int do_add_ioctl(int cmd, const c
129   int fd;   int fd;
130    
131   if (cmd == SIOCCHGTUNNEL && p->name[0]) {   if (cmd == SIOCCHGTUNNEL && p->name[0]) {
132   strncpy(ifr.ifr_name, p->name, sizeof(ifr.ifr_name));   strncpy_IFNAMSIZ(ifr.ifr_name, p->name);
133   } else {   } else {
134   strncpy(ifr.ifr_name, basedev, sizeof(ifr.ifr_name));   strncpy_IFNAMSIZ(ifr.ifr_name, basedev);
135   }   }
136   ifr.ifr_ifru.ifru_data = (void*)p;   ifr.ifr_ifru.ifru_data = (void*)p;
137   fd = xsocket(AF_INET, SOCK_DGRAM, 0);   fd = xsocket(AF_INET, SOCK_DGRAM, 0);
# Line 155  static int do_del_ioctl(const char *base Line 155  static int do_del_ioctl(const char *base
155   int fd;   int fd;
156    
157   if (p->name[0]) {   if (p->name[0]) {
158   strncpy(ifr.ifr_name, p->name, sizeof(ifr.ifr_name));   strncpy_IFNAMSIZ(ifr.ifr_name, p->name);
159   } else {   } else {
160   strncpy(ifr.ifr_name, basedev, sizeof(ifr.ifr_name));   strncpy_IFNAMSIZ(ifr.ifr_name, basedev);
161   }   }
162   ifr.ifr_ifru.ifru_data = (void*)p;   ifr.ifr_ifru.ifru_data = (void*)p;
163   fd = xsocket(AF_INET, SOCK_DGRAM, 0);   fd = xsocket(AF_INET, SOCK_DGRAM, 0);
# Line 189  static void parse_args(char **argv, int Line 189  static void parse_args(char **argv, int
189   int key;   int key;
190    
191   memset(p, 0, sizeof(*p));   memset(p, 0, sizeof(*p));
192   memset(&medium, 0, sizeof(medium));   medium[0] = '\0';
193    
194   p->iph.version = 4;   p->iph.version = 4;
195   p->iph.ihl = 5;   p->iph.ihl = 5;
# Line 222  static void parse_args(char **argv, int Line 222  static void parse_args(char **argv, int
222   }   }
223   p->iph.protocol = IPPROTO_IPV6;   p->iph.protocol = IPPROTO_IPV6;
224   } else {   } else {
225   bb_error_msg_and_die("%s tunnel mode", "cannot guess");   bb_error_msg_and_die("%s tunnel mode", "can't guess");
226   }   }
227   } else if (key == ARG_key) {   } else if (key == ARG_key) {
228   unsigned uval;   unsigned uval;
# Line 232  static void parse_args(char **argv, int Line 232  static void parse_args(char **argv, int
232   if (strchr(*argv, '.'))   if (strchr(*argv, '.'))
233   p->i_key = p->o_key = get_addr32(*argv);   p->i_key = p->o_key = get_addr32(*argv);
234   else {   else {
235   if (get_unsigned(&uval, *argv, 0) < 0) {   uval = get_unsigned(*argv, "key");
  invarg(*argv, "key");  
  }  
236   p->i_key = p->o_key = htonl(uval);   p->i_key = p->o_key = htonl(uval);
237   }   }
238   } else if (key == ARG_ikey) {   } else if (key == ARG_ikey) {
# Line 244  static void parse_args(char **argv, int Line 242  static void parse_args(char **argv, int
242   if (strchr(*argv, '.'))   if (strchr(*argv, '.'))
243   p->o_key = get_addr32(*argv);   p->o_key = get_addr32(*argv);
244   else {   else {
245   if (get_unsigned(&uval, *argv, 0) < 0) {   uval = get_unsigned(*argv, "ikey");
  invarg(*argv, "ikey");  
  }  
246   p->i_key = htonl(uval);   p->i_key = htonl(uval);
247   }   }
248   } else if (key == ARG_okey) {   } else if (key == ARG_okey) {
# Line 256  static void parse_args(char **argv, int Line 252  static void parse_args(char **argv, int
252   if (strchr(*argv, '.'))   if (strchr(*argv, '.'))
253   p->o_key = get_addr32(*argv);   p->o_key = get_addr32(*argv);
254   else {   else {
255   if (get_unsigned(&uval, *argv, 0) < 0) {   uval = get_unsigned(*argv, "okey");
  invarg(*argv, "okey");  
  }  
256   p->o_key = htonl(uval);   p->o_key = htonl(uval);
257   }   }
258   } else if (key == ARG_seq) {   } else if (key == ARG_seq) {
# Line 291  static void parse_args(char **argv, int Line 285  static void parse_args(char **argv, int
285   p->iph.saddr = get_addr32(*argv);   p->iph.saddr = get_addr32(*argv);
286   } else if (key == ARG_dev) {   } else if (key == ARG_dev) {
287   NEXT_ARG();   NEXT_ARG();
288   strncpy(medium, *argv, IFNAMSIZ-1);   strncpy_IFNAMSIZ(medium, *argv);
289   } else if (key == ARG_ttl) {   } else if (key == ARG_ttl) {
290   unsigned uval;   unsigned uval;
291   NEXT_ARG();   NEXT_ARG();
292   key = index_in_strings(keywords, *argv);   key = index_in_strings(keywords, *argv);
293   if (key != ARG_inherit) {   if (key != ARG_inherit) {
294   if (get_unsigned(&uval, *argv, 0))   uval = get_unsigned(*argv, "TTL");
  invarg(*argv, "TTL");  
295   if (uval > 255)   if (uval > 255)
296   invarg(*argv, "TTL must be <=255");   invarg(*argv, "TTL must be <=255");
297   p->iph.ttl = uval;   p->iph.ttl = uval;
# Line 320  static void parse_args(char **argv, int Line 313  static void parse_args(char **argv, int
313   }   }
314   if (p->name[0])   if (p->name[0])
315   duparg2("name", *argv);   duparg2("name", *argv);
316   strncpy(p->name, *argv, IFNAMSIZ);   strncpy_IFNAMSIZ(p->name, *argv);
317   if (cmd == SIOCCHGTUNNEL && count == 0) {   if (cmd == SIOCCHGTUNNEL && count == 0) {
318   struct ip_tunnel_parm old_p;   struct ip_tunnel_parm old_p;
319   memset(&old_p, 0, sizeof(old_p));   memset(&old_p, 0, sizeof(old_p));
# Line 365  static void parse_args(char **argv, int Line 358  static void parse_args(char **argv, int
358   }   }
359  }  }
360    
   
361  /* Return value becomes exitcode. It's okay to not return at all */  /* Return value becomes exitcode. It's okay to not return at all */
362  static int do_add(int cmd, char **argv)  static int do_add(int cmd, char **argv)
363  {  {
# Line 385  static int do_add(int cmd, char **argv) Line 377  static int do_add(int cmd, char **argv)
377   case IPPROTO_IPV6:   case IPPROTO_IPV6:
378   return do_add_ioctl(cmd, "sit0", &p);   return do_add_ioctl(cmd, "sit0", &p);
379   default:   default:
380   bb_error_msg_and_die("cannot determine tunnel mode (ipip, gre or sit)");   bb_error_msg_and_die("can't determine tunnel mode (ipip, gre or sit)");
381   }   }
382  }  }
383    
# Line 444  static void print_tunnel(struct ip_tunne Line 436  static void print_tunnel(struct ip_tunne
436   printf(" inherit");   printf(" inherit");
437   if (p->iph.tos & ~1)   if (p->iph.tos & ~1)
438   printf("%c%s ", p->iph.tos & 1 ? '/' : ' ',   printf("%c%s ", p->iph.tos & 1 ? '/' : ' ',
439         rtnl_dsfield_n2a(p->iph.tos & ~1, b1, sizeof(b1)));         rtnl_dsfield_n2a(p->iph.tos & ~1, b1));
440   }   }
441   if (!(p->iph.frag_off & htons(IP_DF)))   if (!(p->iph.frag_off & htons(IP_DF)))
442   printf(" nopmtudisc");   printf(" nopmtudisc");
# Line 507  static void do_tunnels_list(struct ip_tu Line 499  static void do_tunnels_list(struct ip_tu
499   continue;   continue;
500   type = do_ioctl_get_iftype(name);   type = do_ioctl_get_iftype(name);
501   if (type == -1) {   if (type == -1) {
502   bb_error_msg("cannot get type of [%s]", name);   bb_error_msg("can't get type of [%s]", name);
503   continue;   continue;
504   }   }
505   if (type != ARPHRD_TUNNEL && type != ARPHRD_IPGRE && type != ARPHRD_SIT)   if (type != ARPHRD_TUNNEL && type != ARPHRD_IPGRE && type != ARPHRD_SIT)

Legend:
Removed from v.983  
changed lines
  Added in v.984