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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }