diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-11-13 00:05:17 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-11-13 00:05:17 +0000 |
| commit | 4d47692fb899be6dec58e7e1ae22893ebb92fa37 (patch) | |
| tree | 106aa3f2945afd92e88a94a39704a18b5ffc0e75 | |
| parent | fd5a3d28127f051887b6feb3462928aee045c9ef (diff) | |
| download | busybox-w32-4d47692fb899be6dec58e7e1ae22893ebb92fa37.tar.gz busybox-w32-4d47692fb899be6dec58e7e1ae22893ebb92fa37.tar.bz2 busybox-w32-4d47692fb899be6dec58e7e1ae22893ebb92fa37.zip | |
arp: stop using globals
function old new delta
hw_set 1 - -1
arp_main 1559 1558 -1
sockfd 8 4 -4
hw 4 - -4
device 4 - -4
ap 4 - -4
packed_usage 25402 25393 -9
------------------------------------------------------------------------------
(add/remove: 0/4 grow/shrink: 0/3 up/down: 0/-27) Total: -27 bytes
| -rw-r--r-- | include/usage.h | 11 | ||||
| -rw-r--r-- | networking/arp.c | 72 |
2 files changed, 50 insertions, 33 deletions
diff --git a/include/usage.h b/include/usage.h index d38a16e90..9f7358906 100644 --- a/include/usage.h +++ b/include/usage.h | |||
| @@ -61,12 +61,11 @@ | |||
| 61 | "\n -v Verbose" \ | 61 | "\n -v Verbose" \ |
| 62 | 62 | ||
| 63 | #define arp_trivial_usage \ | 63 | #define arp_trivial_usage \ |
| 64 | "\n" \ | 64 | "\n[-vn] [-H type] [-i if] -a [hostname]" \ |
| 65 | "[-vn] [-H type] [-i if] -a [hostname]\n" \ | 65 | "\n[-v] [-i if] -d hostname [pub]" \ |
| 66 | "[-v] [-i if] -d hostname [pub]\n" \ | 66 | "\n[-v] [-H type] [-i if] -s hostname hw_addr [temp]" \ |
| 67 | "[-v] [-H type] [-i if] -s hostname hw_addr [temp]\n" \ | 67 | "\n[-v] [-H type] [-i if] -s hostname hw_addr [netmask nm] pub" \ |
| 68 | "[-v] [-H type] [-i if] -s hostname hw_addr [netmask nm] pub\n" \ | 68 | "\n[-v] [-H type] [-i if] -Ds hostname ifa [netmask nm] pub" |
| 69 | "[-v] [-H type] [-i if] -Ds hostname ifa [netmask nm] pub\n" | ||
| 70 | #define arp_full_usage "\n\n" \ | 69 | #define arp_full_usage "\n\n" \ |
| 71 | "Manipulate ARP cache\n" \ | 70 | "Manipulate ARP cache\n" \ |
| 72 | "\nOptions:" \ | 71 | "\nOptions:" \ |
diff --git a/networking/arp.c b/networking/arp.c index e2c5bbb7f..278f2dc9a 100644 --- a/networking/arp.c +++ b/networking/arp.c | |||
| @@ -27,24 +27,40 @@ | |||
| 27 | #define DFLT_AF "inet" | 27 | #define DFLT_AF "inet" |
| 28 | #define DFLT_HW "ether" | 28 | #define DFLT_HW "ether" |
| 29 | 29 | ||
| 30 | #define ARP_OPT_A (0x1) | 30 | enum { |
| 31 | #define ARP_OPT_p (0x2) | 31 | ARP_OPT_A = (1 << 0), |
| 32 | #define ARP_OPT_H (0x4) | 32 | ARP_OPT_p = (1 << 1), |
| 33 | #define ARP_OPT_t (0x8) | 33 | ARP_OPT_H = (1 << 2), |
| 34 | #define ARP_OPT_i (0x10) | 34 | ARP_OPT_t = (1 << 3), |
| 35 | #define ARP_OPT_a (0x20) | 35 | ARP_OPT_i = (1 << 4), |
| 36 | #define ARP_OPT_d (0x40) | 36 | ARP_OPT_a = (1 << 5), |
| 37 | #define ARP_OPT_n (0x80) /* do not resolve addresses */ | 37 | ARP_OPT_d = (1 << 6), |
| 38 | #define ARP_OPT_D (0x100) /* HW-address is devicename */ | 38 | ARP_OPT_n = (1 << 7), /* do not resolve addresses */ |
| 39 | #define ARP_OPT_s (0x200) | 39 | ARP_OPT_D = (1 << 8), /* HW-address is devicename */ |
| 40 | #define ARP_OPT_v (0x400 * DEBUG) /* debugging output flag */ | 40 | ARP_OPT_s = (1 << 9), |
| 41 | 41 | ARP_OPT_v = (1 << 10) * DEBUG, /* debugging output flag */ | |
| 42 | 42 | }; | |
| 43 | static const struct aftype *ap; /* current address family */ | 43 | |
| 44 | static const struct hwtype *hw; /* current hardware type */ | 44 | enum { |
| 45 | static int sockfd; /* active socket descriptor */ | 45 | sockfd = 3, /* active socket descriptor */ |
| 46 | static smallint hw_set; /* flag if hw-type was set (-H) */ | 46 | }; |
| 47 | static const char *device = ""; /* current device */ | 47 | |
| 48 | struct globals { | ||
| 49 | const struct aftype *ap; /* current address family */ | ||
| 50 | const struct hwtype *hw; /* current hardware type */ | ||
| 51 | const char *device; /* current device */ | ||
| 52 | smallint hw_set; /* flag if hw-type was set (-H) */ | ||
| 53 | |||
| 54 | }; | ||
| 55 | #define G (*(struct globals*)&bb_common_bufsiz1) | ||
| 56 | #define ap (G.ap ) | ||
| 57 | #define hw (G.hw ) | ||
| 58 | #define device (G.device ) | ||
| 59 | #define hw_set (G.hw_set ) | ||
| 60 | #define INIT_G() do { \ | ||
| 61 | device = ""; \ | ||
| 62 | } while (0) | ||
| 63 | |||
| 48 | 64 | ||
| 49 | static const char options[] ALIGN1 = | 65 | static const char options[] ALIGN1 = |
| 50 | "pub\0" | 66 | "pub\0" |
| @@ -445,27 +461,30 @@ int arp_main(int argc UNUSED_PARAM, char **argv) | |||
| 445 | { | 461 | { |
| 446 | const char *hw_type = "ether"; | 462 | const char *hw_type = "ether"; |
| 447 | const char *protocol; | 463 | const char *protocol; |
| 464 | unsigned opts; | ||
| 465 | |||
| 466 | INIT_G(); | ||
| 448 | 467 | ||
| 449 | /* Initialize variables... */ | 468 | xmove_fd(xsocket(AF_INET, SOCK_DGRAM, 0), sockfd); |
| 450 | ap = get_aftype(DFLT_AF); | 469 | ap = get_aftype(DFLT_AF); |
| 451 | if (!ap) | 470 | if (!ap) |
| 452 | bb_error_msg_and_die("%s: %s not supported", DFLT_AF, "address family"); | 471 | bb_error_msg_and_die("%s: %s not supported", DFLT_AF, "address family"); |
| 453 | 472 | ||
| 454 | getopt32(argv, "A:p:H:t:i:adnDsv", &protocol, &protocol, | 473 | opts = getopt32(argv, "A:p:H:t:i:adnDsv", &protocol, &protocol, |
| 455 | &hw_type, &hw_type, &device); | 474 | &hw_type, &hw_type, &device); |
| 456 | argv += optind; | 475 | argv += optind; |
| 457 | if (option_mask32 & ARP_OPT_A || option_mask32 & ARP_OPT_p) { | 476 | if (opts & (ARP_OPT_A | ARP_OPT_p)) { |
| 458 | ap = get_aftype(protocol); | 477 | ap = get_aftype(protocol); |
| 459 | if (ap == NULL) | 478 | if (ap == NULL) |
| 460 | bb_error_msg_and_die("%s: unknown %s", protocol, "address family"); | 479 | bb_error_msg_and_die("%s: unknown %s", protocol, "address family"); |
| 461 | } | 480 | } |
| 462 | if (option_mask32 & ARP_OPT_A || option_mask32 & ARP_OPT_p) { | 481 | if (opts & (ARP_OPT_A | ARP_OPT_p)) { |
| 463 | hw = get_hwtype(hw_type); | 482 | hw = get_hwtype(hw_type); |
| 464 | if (hw == NULL) | 483 | if (hw == NULL) |
| 465 | bb_error_msg_and_die("%s: unknown %s", hw_type, "hardware type"); | 484 | bb_error_msg_and_die("%s: unknown %s", hw_type, "hardware type"); |
| 466 | hw_set = 1; | 485 | hw_set = 1; |
| 467 | } | 486 | } |
| 468 | //if (option_mask32 & ARP_OPT_i)... -i | 487 | //if (opts & ARP_OPT_i)... -i |
| 469 | 488 | ||
| 470 | if (ap->af != AF_INET) { | 489 | if (ap->af != AF_INET) { |
| 471 | bb_error_msg_and_die("%s: kernel only supports 'inet'", ap->name); | 490 | bb_error_msg_and_die("%s: kernel only supports 'inet'", ap->name); |
| @@ -482,16 +501,15 @@ int arp_main(int argc UNUSED_PARAM, char **argv) | |||
| 482 | bb_error_msg_and_die("%s: %s without ARP support", | 501 | bb_error_msg_and_die("%s: %s without ARP support", |
| 483 | hw->name, "hardware type"); | 502 | hw->name, "hardware type"); |
| 484 | } | 503 | } |
| 485 | sockfd = xsocket(AF_INET, SOCK_DGRAM, 0); | ||
| 486 | 504 | ||
| 487 | /* Now see what we have to do here... */ | 505 | /* Now see what we have to do here... */ |
| 488 | if (option_mask32 & (ARP_OPT_d|ARP_OPT_s)) { | 506 | if (opts & (ARP_OPT_d | ARP_OPT_s)) { |
| 489 | if (argv[0] == NULL) | 507 | if (argv[0] == NULL) |
| 490 | bb_error_msg_and_die("need host name"); | 508 | bb_error_msg_and_die("need host name"); |
| 491 | if (option_mask32 & ARP_OPT_s) | 509 | if (opts & ARP_OPT_s) |
| 492 | return arp_set(argv); | 510 | return arp_set(argv); |
| 493 | return arp_del(argv); | 511 | return arp_del(argv); |
| 494 | } | 512 | } |
| 495 | //if (option_mask32 & ARP_OPT_a) - default | 513 | //if (opts & ARP_OPT_a) - default |
| 496 | return arp_show(argv[0]); | 514 | return arp_show(argv[0]); |
| 497 | } | 515 | } |
