diff options
author | Glenn L McGrath <bug1@ihug.co.nz> | 2002-12-02 00:35:23 +0000 |
---|---|---|
committer | Glenn L McGrath <bug1@ihug.co.nz> | 2002-12-02 00:35:23 +0000 |
commit | c82f2324bd28fe065bbde8a981caad6aebf289ae (patch) | |
tree | 8b98d7b279309fcc0a638675e553cb97c97973a3 /networking/libiproute | |
parent | b963875a3e7c57f7cce58205f15bbf426b796927 (diff) | |
download | busybox-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.h | 2 | ||||
-rw-r--r-- | networking/libiproute/iproute.c | 100 |
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); | |||
9 | extern int ipaddr_list_link(int argc, char **argv); | 9 | extern int ipaddr_list_link(int argc, char **argv); |
10 | extern int iproute_monitor(int argc, char **argv); | 10 | extern int iproute_monitor(int argc, char **argv); |
11 | extern void iplink_usage(void) __attribute__((noreturn)); | 11 | extern void iplink_usage(void) __attribute__((noreturn)); |
12 | extern void iproute_reset_filter(void); | ||
13 | extern void ipaddr_reset_filter(int); | 12 | extern void ipaddr_reset_filter(int); |
14 | extern void ipneigh_reset_filter(void); | 13 | extern void ipneigh_reset_filter(void); |
15 | extern int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg); | ||
16 | extern int do_ipaddr(int argc, char **argv); | 14 | extern int do_ipaddr(int argc, char **argv); |
17 | extern int do_iproute(int argc, char **argv); | 15 | extern int do_iproute(int argc, char **argv); |
18 | extern int do_iprule(int argc, char **argv); | 16 | extern 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 | ||
63 | int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) | 62 | static 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 | ||
241 | int iproute_modify(int cmd, unsigned flags, int argc, char **argv) | 240 | static 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 | ||
404 | static void iproute_reset_filter(void) | ||
405 | { | ||
406 | memset(&filter, 0, sizeof(filter)); | ||
407 | filter.mdst.bitlen = -1; | ||
408 | filter.msrc.bitlen = -1; | ||
409 | } | ||
410 | |||
405 | static int iproute_list(int argc, char **argv) | 411 | static 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 | ||
519 | int iproute_get(int argc, char **argv) | 525 | static 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 | ||
674 | void iproute_reset_filter() | ||
675 | { | ||
676 | memset(&filter, 0, sizeof(filter)); | ||
677 | filter.mdst.bitlen = -1; | ||
678 | filter.msrc.bitlen = -1; | ||
679 | } | ||
680 | |||
681 | int do_iproute(int argc, char **argv) | 680 | int 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 | ||