summaryrefslogtreecommitdiff
path: root/networking/libiproute
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2002-12-02 00:35:23 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2002-12-02 00:35:23 +0000
commitc82f2324bd28fe065bbde8a981caad6aebf289ae (patch)
tree8b98d7b279309fcc0a638675e553cb97c97973a3 /networking/libiproute
parentb963875a3e7c57f7cce58205f15bbf426b796927 (diff)
downloadbusybox-w32-c82f2324bd28fe065bbde8a981caad6aebf289ae.tar.gz
busybox-w32-c82f2324bd28fe065bbde8a981caad6aebf289ae.tar.bz2
busybox-w32-c82f2324bd28fe065bbde8a981caad6aebf289ae.zip
Save a hundred bytes or so on the do_iproute function
Diffstat (limited to 'networking/libiproute')
-rw-r--r--networking/libiproute/ip_common.h2
-rw-r--r--networking/libiproute/iproute.c100
2 files changed, 49 insertions, 53 deletions
diff --git a/networking/libiproute/ip_common.h b/networking/libiproute/ip_common.h
index 771ca48bd..0686136c7 100644
--- a/networking/libiproute/ip_common.h
+++ b/networking/libiproute/ip_common.h
@@ -9,10 +9,8 @@ extern int ipaddr_list(int argc, char **argv);
9extern int ipaddr_list_link(int argc, char **argv); 9extern int ipaddr_list_link(int argc, char **argv);
10extern int iproute_monitor(int argc, char **argv); 10extern int iproute_monitor(int argc, char **argv);
11extern void iplink_usage(void) __attribute__((noreturn)); 11extern void iplink_usage(void) __attribute__((noreturn));
12extern void iproute_reset_filter(void);
13extern void ipaddr_reset_filter(int); 12extern void ipaddr_reset_filter(int);
14extern void ipneigh_reset_filter(void); 13extern void ipneigh_reset_filter(void);
15extern int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg);
16extern int do_ipaddr(int argc, char **argv); 14extern int do_ipaddr(int argc, char **argv);
17extern int do_iproute(int argc, char **argv); 15extern int do_iproute(int argc, char **argv);
18extern int do_iprule(int argc, char **argv); 16extern int do_iprule(int argc, char **argv);
diff --git a/networking/libiproute/iproute.c b/networking/libiproute/iproute.c
index b5833d7cc..cef67c34f 100644
--- a/networking/libiproute/iproute.c
+++ b/networking/libiproute/iproute.c
@@ -30,7 +30,6 @@
30 30
31#include "rt_names.h" 31#include "rt_names.h"
32#include "utils.h" 32#include "utils.h"
33#include "ip_common.h"
34 33
35#include "busybox.h" 34#include "busybox.h"
36 35
@@ -60,7 +59,7 @@ static struct
60 inet_prefix msrc; 59 inet_prefix msrc;
61} filter; 60} filter;
62 61
63int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) 62static int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
64{ 63{
65 FILE *fp = (FILE*)arg; 64 FILE *fp = (FILE*)arg;
66 struct rtmsg *r = NLMSG_DATA(n); 65 struct rtmsg *r = NLMSG_DATA(n);
@@ -238,7 +237,7 @@ int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
238 return 0; 237 return 0;
239} 238}
240 239
241int iproute_modify(int cmd, unsigned flags, int argc, char **argv) 240static int iproute_modify(int cmd, unsigned flags, int argc, char **argv)
242{ 241{
243 struct rtnl_handle rth; 242 struct rtnl_handle rth;
244 struct { 243 struct {
@@ -402,6 +401,13 @@ static int rtnl_rtcache_request(struct rtnl_handle *rth, int family)
402 return sendto(rth->fd, (void*)&req, sizeof(req), 0, (struct sockaddr*)&nladdr, sizeof(nladdr)); 401 return sendto(rth->fd, (void*)&req, sizeof(req), 0, (struct sockaddr*)&nladdr, sizeof(nladdr));
403} 402}
404 403
404static void iproute_reset_filter(void)
405{
406 memset(&filter, 0, sizeof(filter));
407 filter.mdst.bitlen = -1;
408 filter.msrc.bitlen = -1;
409}
410
405static int iproute_list(int argc, char **argv) 411static int iproute_list(int argc, char **argv)
406{ 412{
407 int do_ipv6 = preferred_family; 413 int do_ipv6 = preferred_family;
@@ -516,7 +522,7 @@ static int iproute_list(int argc, char **argv)
516} 522}
517 523
518 524
519int iproute_get(int argc, char **argv) 525static int iproute_get(int argc, char **argv)
520{ 526{
521 struct rtnl_handle rth; 527 struct rtnl_handle rth;
522 struct { 528 struct {
@@ -671,54 +677,46 @@ int iproute_get(int argc, char **argv)
671 exit(0); 677 exit(0);
672} 678}
673 679
674void iproute_reset_filter()
675{
676 memset(&filter, 0, sizeof(filter));
677 filter.mdst.bitlen = -1;
678 filter.msrc.bitlen = -1;
679}
680
681int do_iproute(int argc, char **argv) 680int do_iproute(int argc, char **argv)
682{ 681{
683 if (argc < 1) { 682 const char *ip_route_commands[] = { "add", "append", "change", "chg",
684 return iproute_list(0, NULL); 683 "delete", "get", "list", "show", "prepend", "replace", "test", 0 };
685 } 684 unsigned short command_num = 6;
686 685 unsigned int flags = 0;
687 if (matches(*argv, "add") == 0) { 686 int cmd = RTM_NEWROUTE;
688 return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_EXCL, 687
689 argc-1, argv+1); 688 if (*argv) {
690 } 689 command_num = compare_string_array(ip_route_commands, *argv);
691 if (matches(*argv, "change") == 0 || strcmp(*argv, "chg") == 0) { 690 }
692 return iproute_modify(RTM_NEWROUTE, NLM_F_REPLACE, 691 switch(command_num) {
693 argc-1, argv+1); 692 case 0: /* add*/
694 } 693 flags = NLM_F_CREATE|NLM_F_EXCL;
695 if (matches(*argv, "replace") == 0) { 694 break;
696 return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_REPLACE, 695 case 1: /* append */
697 argc-1, argv+1); 696 flags = NLM_F_CREATE|NLM_F_APPEND;
698 } 697 break;
699 if (matches(*argv, "prepend") == 0) { 698 case 2: /* change */
700 return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE, 699 case 3: /* chg */
701 argc-1, argv+1); 700 flags = NLM_F_REPLACE;
702 } 701 break;
703 if (matches(*argv, "append") == 0) { 702 case 4: /* delete */
704 return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_APPEND, 703 cmd = RTM_DELROUTE;
705 argc-1, argv+1); 704 break;
706 } 705 case 5: /* get */
707 if (matches(*argv, "test") == 0) { 706 return iproute_get(argc-1, argv+1);
708 return iproute_modify(RTM_NEWROUTE, NLM_F_EXCL, 707 case 6: /* list */
709 argc-1, argv+1); 708 case 7: /* show */
710 } 709 return iproute_list(argc-1, argv+1);
711 if (matches(*argv, "delete") == 0) { 710 case 8: /* prepend */
712 return iproute_modify(RTM_DELROUTE, 0, 711 flags = NLM_F_CREATE;
713 argc-1, argv+1); 712 case 9: /* replace */
714 } 713 flags = NLM_F_CREATE|NLM_F_REPLACE;
715 if (matches(*argv, "list") == 0 || matches(*argv, "show") == 0 714 case 10: /* test */
716 || matches(*argv, "lst") == 0) { 715 flags = NLM_F_EXCL;
717 return iproute_list(argc-1, argv+1); 716 default:
718 } 717 error_msg_and_die("Unknown command %s", *argv);
719 if (matches(*argv, "get") == 0) { 718 }
720 return iproute_get(argc-1, argv+1); 719
721 } 720 return iproute_modify(cmd, flags, argc-1, argv+1);
722 error_msg_and_die("Command \"%s\" is unknown, try \"ip route help\".", *argv);
723} 721}
724 722