Mercurial > hg > toybox
annotate toys/pending/arp.c @ 1539:3e85af1f7e22 draft
First batch of sed tests.
Only good for TEST_HOST=1 at the moment because the test infrastructure itself
depends on sed, so if an unfinished sed is in the $PATH it goes boing. But
hey, corner cases!
I have... more.
author | Rob Landley <rob@landley.net> |
---|---|
date | Wed, 29 Oct 2014 18:44:33 -0500 |
parents | 00c20f410c46 |
children | 41efba077b75 |
rev | line source |
---|---|
1280
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
1 /* arp.c - manipulate the system ARP cache |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
2 * |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
3 * Copyright 2014 Sandeep Sharma <sandeep.jack2756@gmail.com> |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
4 * Copyright 2014 Kyungwan Han <asura321@gamil.com> |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
5 * No Standard |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
6 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
7 USE_ARP(NEWTOY(arp, "vi:nDsdap:A:H:[+Ap][!sd]", TOYFLAG_USR|TOYFLAG_BIN)) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
8 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
9 config ARP |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
10 bool "arp" |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
11 default n |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
12 help |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
13 Usage: arp |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
14 [-vn] [-H HWTYPE] [-i IF] -a [HOSTNAME] |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
15 [-v] [-i IF] -d HOSTNAME [pub] |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
16 [-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [temp] |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
17 [-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [netmask MASK] pub |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
18 [-v] [-H HWTYPE] [-i IF] -Ds HOSTNAME IFACE [netmask MASK] pub |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
19 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
20 Manipulate ARP cache |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
21 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
22 -a Display (all) hosts |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
23 -s Set new ARP entry |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
24 -d Delete a specified entry |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
25 -v Verbose |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
26 -n Don't resolve names |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
27 -i IF Network interface |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
28 -D Read <hwaddr> from given device |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
29 -A,-p AF Protocol family |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
30 -H HWTYPE Hardware address type |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
31 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
32 */ |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
33 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
34 #define FOR_arp |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
35 #include "toys.h" |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
36 #include <net/if_arp.h> |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
37 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
38 GLOBALS( |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
39 char *hw_type; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
40 char *af_type_A; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
41 char *af_type_p; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
42 char *interface; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
43 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
44 int sockfd; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
45 char *device; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
46 ) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
47 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
48 struct arpreq req; //Global request structure |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
49 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
50 struct type { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
51 char *name; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
52 int val; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
53 }; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
54 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
55 struct type hwtype[] = { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
56 {"ether", ARPHRD_ETHER }, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
57 {"loop" ,ARPHRD_LOOPBACK}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
58 {"ppp" ,ARPHRD_PPP}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
59 {"infiniband" ,ARPHRD_INFINIBAND}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
60 {NULL, -1}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
61 }; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
62 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
63 struct type aftype[] = { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
64 {"inet", AF_INET }, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
65 {"inet6" ,AF_INET6}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
66 {"unspec" ,AF_UNSPEC}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
67 {NULL, -1}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
68 }; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
69 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
70 struct type flag_type[] = { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
71 {"PERM", ATF_PERM }, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
72 {"PUB" ,ATF_PUBL}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
73 {"DONTPUB" ,ATF_DONTPUB}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
74 {"TRAIL" ,ATF_USETRAILERS}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
75 {NULL, -1}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
76 }; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
77 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
78 static int get_index(struct type arr[], char *name) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
79 { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
80 int i; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
81 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
82 for (i = 0; arr[i].name; i++) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
83 if (!strcmp(arr[i].name, name)) break; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
84 return arr[i].val; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
85 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
86 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
87 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
88 void get_hw_add(char *hw_addr, char *ptr) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
89 { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
90 char *p = ptr, *hw = hw_addr; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
91 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
92 while (*hw_addr && (p-ptr) < 6) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
93 int val, len = 0; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
94 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
95 if (*hw_addr == ':') hw_addr++; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
96 sscanf(hw_addr, "%2x%n", &val, &len); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
97 if (!len || len > 2) break; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
98 hw_addr += len; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
99 *p++ = val; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
100 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
101 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
102 if ((p-ptr) != 6 || *hw_addr) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
103 error_exit("bad hw addr '%s'", hw); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
104 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
105 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
106 static void resolve_host(char *host, struct sockaddr *sa) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
107 { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
108 struct addrinfo hints, *res = NULL; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
109 int ret; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
110 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
111 memset(&hints, 0, sizeof hints); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
112 hints.ai_family = AF_INET; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
113 hints.ai_socktype = SOCK_STREAM; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
114 if ((ret = getaddrinfo(host, NULL, &hints, &res))) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
115 perror_exit("%s", gai_strerror(ret)); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
116 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
117 memcpy(sa, res->ai_addr, res->ai_addrlen); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
118 freeaddrinfo(res); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
119 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
120 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
121 static void check_flags(int *i, char** argv) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
122 { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
123 struct sockaddr sa; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
124 int flag = *i, j; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
125 struct flags { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
126 char *name; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
127 int or, flag; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
128 } f[] = { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
129 {"pub", 1 ,ATF_PUBL}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
130 {"priv", 0 ,~ATF_PUBL}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
131 {"trail", 1, ATF_USETRAILERS}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
132 {"temp", 0, ~ATF_PERM}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
133 {"dontpub",1, ATF_DONTPUB}, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
134 }; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
135 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
136 for (;*argv; argv++) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
137 for (j = 0; j < ARRAY_LEN(f); j++) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
138 if (!strcmp(*argv, f[j].name)) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
139 (f[j].or) ?(flag |= f[j].flag):(flag &= f[j].flag); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
140 break; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
141 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
142 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
143 if (j > 4 && !strcmp(*argv, "netmask")) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
144 if (!*++argv) error_exit("NULL netmask"); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
145 if (strcmp(*argv, "255.255.255.255")) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
146 resolve_host(toys.optargs[0], &sa); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
147 memcpy(&req.arp_netmask, &sa, sizeof(sa)); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
148 flag |= ATF_NETMASK; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
149 } else argv++; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
150 } else if (j > 4 && !strcmp(*argv, "dev")) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
151 if (!*++argv) error_exit("NULL dev"); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
152 TT.device = *argv; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
153 } else if (j > 4) error_exit("invalid arg"); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
154 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
155 *i = flag; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
156 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
157 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
158 static int set_entry(void) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
159 { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
160 int flags = 0; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
161 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
162 if (!toys.optargs[1]) error_exit("bad syntax"); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
163 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
164 if (!(toys.optflags & FLAG_D)) get_hw_add(toys.optargs[1], (char*)&req.arp_ha.sa_data); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
165 else { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
166 struct ifreq ifre; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
167 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
168 xstrncpy(ifre.ifr_name, toys.optargs[1], IFNAMSIZ); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
169 xioctl(TT.sockfd, SIOCGIFHWADDR, &ifre); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
170 if ((toys.optflags & FLAG_H) && (ifre.ifr_hwaddr.sa_family != ARPHRD_ETHER)) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
171 error_exit("protocol type mismatch"); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
172 memcpy(&req.arp_ha, &(ifre.ifr_hwaddr), sizeof(req.arp_ha)); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
173 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
174 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
175 flags = ATF_PERM | ATF_COM; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
176 if (toys.optargs[2]) check_flags(&flags, (toys.optargs+2)); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
177 req.arp_flags = flags; |
1433
00c20f410c46
Patches to commands for issues reported from static analysis tool.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1280
diff
changeset
|
178 strncpy(req.arp_dev, TT.device, sizeof(req.arp_dev)); |
1280
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
179 xioctl(TT.sockfd, SIOCSARP, &req); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
180 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
181 if (toys.optflags & FLAG_v) xprintf("Entry set for %s\n", toys.optargs[0]); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
182 return 0; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
183 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
184 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
185 static int ip_to_host(struct sockaddr *sa, int flag) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
186 { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
187 int status = 0; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
188 char hbuf[NI_MAXHOST] = {0,}, sbuf[NI_MAXSERV] = {0,}; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
189 socklen_t len = sizeof(struct sockaddr_in6); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
190 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
191 *toybuf = 0; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
192 if (!(status = getnameinfo(sa, len, hbuf, sizeof(hbuf), sbuf, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
193 sizeof(sbuf), flag))) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
194 strcpy(toybuf, hbuf); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
195 return 0; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
196 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
197 return 1; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
198 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
199 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
200 static int delete_entry(void) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
201 { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
202 int flags; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
203 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
204 flags = ATF_PERM; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
205 if (toys.optargs[1]) check_flags(&flags, (toys.optargs+1)); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
206 req.arp_flags = flags; |
1433
00c20f410c46
Patches to commands for issues reported from static analysis tool.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1280
diff
changeset
|
207 strncpy(req.arp_dev, TT.device, sizeof(req.arp_dev)); |
1280
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
208 xioctl(TT.sockfd, SIOCDARP, &req); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
209 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
210 if (toys.optflags & FLAG_v) xprintf("Delete entry for %s\n", toys.optargs[0]); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
211 return 0; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
212 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
213 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
214 void arp_main(void) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
215 { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
216 struct sockaddr sa; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
217 char ip[128], hw_addr[128], mask[12], dev[128], *host_ip = NULL, *buf; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
218 int h_type, type, flag, i, fd, entries = 0, disp = 0; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
219 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
220 TT.device = ""; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
221 memset(&sa, 0, sizeof(sa)); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
222 memset(&req, 0, sizeof(req)); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
223 TT.sockfd = xsocket(AF_INET, SOCK_STREAM, 0); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
224 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
225 if ((toys.optflags & FLAG_A) || (toys.optflags & FLAG_p)) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
226 if ((type = get_index(aftype, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
227 (TT.af_type_A)?TT.af_type_A:TT.af_type_p)) != AF_INET) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
228 error_exit((type != -1)?"only inet supported by kernel":"unknown family"); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
229 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
230 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
231 req.arp_ha.sa_family = ARPHRD_ETHER; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
232 if (toys.optflags & FLAG_H) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
233 if ((type = get_index(hwtype, TT.hw_type)) != ARPHRD_ETHER) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
234 error_exit((type != -1)?"h/w type not supported":"unknown h/w type"); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
235 req.arp_ha.sa_family = type; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
236 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
237 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
238 if (((toys.optflags & FLAG_s) || toys.optflags & FLAG_d)) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
239 if (!toys.optargs[0]) error_exit("host name req"); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
240 resolve_host(toys.optargs[0], &sa); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
241 memcpy(&req.arp_pa, &sa, sizeof(struct sockaddr)); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
242 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
243 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
244 if ((toys.optflags & FLAG_s) && !set_entry()) return; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
245 if ((toys.optflags & FLAG_d) && !delete_entry()) return; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
246 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
247 //show arp chache |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
248 fd = xopen("/proc/net/arp", O_RDONLY); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
249 buf = get_line(fd); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
250 free(buf); //skip first line |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
251 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
252 if (toys.optargs[0]) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
253 resolve_host(toys.optargs[0], &sa); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
254 ip_to_host(&sa, NI_NUMERICHOST); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
255 host_ip = xstrdup(toybuf); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
256 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
257 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
258 while ((buf = get_line(fd))) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
259 char *host_name = "?"; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
260 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
261 if ((sscanf(buf, "%s 0x%x 0x%x %s %s %s\n", ip, |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
262 &h_type, &flag, hw_addr, mask, dev )) != 6) break; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
263 entries++; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
264 if (((toys.optflags & FLAG_H) && (get_index(hwtype, TT.hw_type) != h_type)) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
265 || ((toys.optflags & FLAG_i) && strcmp(TT.interface, dev)) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
266 || (toys.optargs[0] && strcmp(host_ip, ip))) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
267 free(buf); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
268 continue; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
269 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
270 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
271 resolve_host(buf, &sa); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
272 if (!(toys.optflags & FLAG_n)) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
273 if (!ip_to_host(&sa, NI_NAMEREQD)) host_name = toybuf; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
274 } else ip_to_host(&sa, NI_NUMERICHOST); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
275 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
276 disp++; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
277 printf("%s (%s) at" , host_name, ip); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
278 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
279 for (i = 0; hwtype[i].name; i++) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
280 if (hwtype[i].val & h_type) break; |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
281 if (!hwtype[i].name) error_exit("unknown h/w type"); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
282 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
283 if (!(flag & ATF_COM)) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
284 if ((flag & ATF_PUBL)) printf(" *"); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
285 else printf(" <incomplete>"); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
286 } else printf(" %s [%s]", hw_addr, hwtype[i].name); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
287 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
288 if (flag & ATF_NETMASK) printf("netmask %s ", mask); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
289 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
290 for (i = 0; flag_type[i].name; i++) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
291 if (flag_type[i].val & flag) printf(" %s", flag_type[i].name); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
292 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
293 printf(" on %s\n", dev); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
294 free(buf); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
295 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
296 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
297 if (toys.optflags & FLAG_v) |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
298 xprintf("Entries: %d\tSkipped: %d\tFound: %d\n", |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
299 entries, entries - disp, disp); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
300 if (!disp) xprintf("No Match found in %d entries\n", entries); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
301 |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
302 if (CFG_TOYBOX_FREE) { |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
303 free(host_ip); |
1433
00c20f410c46
Patches to commands for issues reported from static analysis tool.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1280
diff
changeset
|
304 free(buf); |
1280
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
305 xclose(fd); |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
306 } |
4947ec3aa896
Add arp from Sandeep Sharma and Kyungwan Han.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
307 } |