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
This commit is contained in:
parent
fd5a3d2812
commit
4d47692fb8
@ -61,12 +61,11 @@
|
||||
"\n -v Verbose" \
|
||||
|
||||
#define arp_trivial_usage \
|
||||
"\n" \
|
||||
"[-vn] [-H type] [-i if] -a [hostname]\n" \
|
||||
"[-v] [-i if] -d hostname [pub]\n" \
|
||||
"[-v] [-H type] [-i if] -s hostname hw_addr [temp]\n" \
|
||||
"[-v] [-H type] [-i if] -s hostname hw_addr [netmask nm] pub\n" \
|
||||
"[-v] [-H type] [-i if] -Ds hostname ifa [netmask nm] pub\n"
|
||||
"\n[-vn] [-H type] [-i if] -a [hostname]" \
|
||||
"\n[-v] [-i if] -d hostname [pub]" \
|
||||
"\n[-v] [-H type] [-i if] -s hostname hw_addr [temp]" \
|
||||
"\n[-v] [-H type] [-i if] -s hostname hw_addr [netmask nm] pub" \
|
||||
"\n[-v] [-H type] [-i if] -Ds hostname ifa [netmask nm] pub"
|
||||
#define arp_full_usage "\n\n" \
|
||||
"Manipulate ARP cache\n" \
|
||||
"\nOptions:" \
|
||||
|
@ -27,24 +27,40 @@
|
||||
#define DFLT_AF "inet"
|
||||
#define DFLT_HW "ether"
|
||||
|
||||
#define ARP_OPT_A (0x1)
|
||||
#define ARP_OPT_p (0x2)
|
||||
#define ARP_OPT_H (0x4)
|
||||
#define ARP_OPT_t (0x8)
|
||||
#define ARP_OPT_i (0x10)
|
||||
#define ARP_OPT_a (0x20)
|
||||
#define ARP_OPT_d (0x40)
|
||||
#define ARP_OPT_n (0x80) /* do not resolve addresses */
|
||||
#define ARP_OPT_D (0x100) /* HW-address is devicename */
|
||||
#define ARP_OPT_s (0x200)
|
||||
#define ARP_OPT_v (0x400 * DEBUG) /* debugging output flag */
|
||||
enum {
|
||||
ARP_OPT_A = (1 << 0),
|
||||
ARP_OPT_p = (1 << 1),
|
||||
ARP_OPT_H = (1 << 2),
|
||||
ARP_OPT_t = (1 << 3),
|
||||
ARP_OPT_i = (1 << 4),
|
||||
ARP_OPT_a = (1 << 5),
|
||||
ARP_OPT_d = (1 << 6),
|
||||
ARP_OPT_n = (1 << 7), /* do not resolve addresses */
|
||||
ARP_OPT_D = (1 << 8), /* HW-address is devicename */
|
||||
ARP_OPT_s = (1 << 9),
|
||||
ARP_OPT_v = (1 << 10) * DEBUG, /* debugging output flag */
|
||||
};
|
||||
|
||||
enum {
|
||||
sockfd = 3, /* active socket descriptor */
|
||||
};
|
||||
|
||||
struct globals {
|
||||
const struct aftype *ap; /* current address family */
|
||||
const struct hwtype *hw; /* current hardware type */
|
||||
const char *device; /* current device */
|
||||
smallint hw_set; /* flag if hw-type was set (-H) */
|
||||
|
||||
};
|
||||
#define G (*(struct globals*)&bb_common_bufsiz1)
|
||||
#define ap (G.ap )
|
||||
#define hw (G.hw )
|
||||
#define device (G.device )
|
||||
#define hw_set (G.hw_set )
|
||||
#define INIT_G() do { \
|
||||
device = ""; \
|
||||
} while (0)
|
||||
|
||||
static const struct aftype *ap; /* current address family */
|
||||
static const struct hwtype *hw; /* current hardware type */
|
||||
static int sockfd; /* active socket descriptor */
|
||||
static smallint hw_set; /* flag if hw-type was set (-H) */
|
||||
static const char *device = ""; /* current device */
|
||||
|
||||
static const char options[] ALIGN1 =
|
||||
"pub\0"
|
||||
@ -445,27 +461,30 @@ int arp_main(int argc UNUSED_PARAM, char **argv)
|
||||
{
|
||||
const char *hw_type = "ether";
|
||||
const char *protocol;
|
||||
unsigned opts;
|
||||
|
||||
/* Initialize variables... */
|
||||
INIT_G();
|
||||
|
||||
xmove_fd(xsocket(AF_INET, SOCK_DGRAM, 0), sockfd);
|
||||
ap = get_aftype(DFLT_AF);
|
||||
if (!ap)
|
||||
bb_error_msg_and_die("%s: %s not supported", DFLT_AF, "address family");
|
||||
|
||||
getopt32(argv, "A:p:H:t:i:adnDsv", &protocol, &protocol,
|
||||
opts = getopt32(argv, "A:p:H:t:i:adnDsv", &protocol, &protocol,
|
||||
&hw_type, &hw_type, &device);
|
||||
argv += optind;
|
||||
if (option_mask32 & ARP_OPT_A || option_mask32 & ARP_OPT_p) {
|
||||
if (opts & (ARP_OPT_A | ARP_OPT_p)) {
|
||||
ap = get_aftype(protocol);
|
||||
if (ap == NULL)
|
||||
bb_error_msg_and_die("%s: unknown %s", protocol, "address family");
|
||||
}
|
||||
if (option_mask32 & ARP_OPT_A || option_mask32 & ARP_OPT_p) {
|
||||
if (opts & (ARP_OPT_A | ARP_OPT_p)) {
|
||||
hw = get_hwtype(hw_type);
|
||||
if (hw == NULL)
|
||||
bb_error_msg_and_die("%s: unknown %s", hw_type, "hardware type");
|
||||
hw_set = 1;
|
||||
}
|
||||
//if (option_mask32 & ARP_OPT_i)... -i
|
||||
//if (opts & ARP_OPT_i)... -i
|
||||
|
||||
if (ap->af != AF_INET) {
|
||||
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)
|
||||
bb_error_msg_and_die("%s: %s without ARP support",
|
||||
hw->name, "hardware type");
|
||||
}
|
||||
sockfd = xsocket(AF_INET, SOCK_DGRAM, 0);
|
||||
|
||||
/* Now see what we have to do here... */
|
||||
if (option_mask32 & (ARP_OPT_d|ARP_OPT_s)) {
|
||||
if (opts & (ARP_OPT_d | ARP_OPT_s)) {
|
||||
if (argv[0] == NULL)
|
||||
bb_error_msg_and_die("need host name");
|
||||
if (option_mask32 & ARP_OPT_s)
|
||||
if (opts & ARP_OPT_s)
|
||||
return arp_set(argv);
|
||||
return arp_del(argv);
|
||||
}
|
||||
//if (option_mask32 & ARP_OPT_a) - default
|
||||
//if (opts & ARP_OPT_a) - default
|
||||
return arp_show(argv[0]);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user