aboutsummaryrefslogtreecommitdiff
path: root/networking/libiproute/ipaddress.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-06-05 05:00:24 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-06-05 05:00:24 +0000
commitbedfabd500b5dd684ac0b0780147a81bbb37f084 (patch)
treeb7fdfb53a93ef06cf586512ab9f0ae4853b18a11 /networking/libiproute/ipaddress.c
parentb6fe10091d1fb1fd661a464c4b5ab6a457614b44 (diff)
downloadbusybox-w32-bedfabd500b5dd684ac0b0780147a81bbb37f084.tar.gz
busybox-w32-bedfabd500b5dd684ac0b0780147a81bbb37f084.tar.bz2
busybox-w32-bedfabd500b5dd684ac0b0780147a81bbb37f084.zip
libiproute: use stdout directly instead of passing it as a parameter
function old new delta iprule_list 86 82 -4 print_rule 860 791 -69 ipaddr_list_or_flush 2484 2384 -100 print_addrinfo 1498 1292 -206 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-379) Total: -379 bytes
Diffstat (limited to 'networking/libiproute/ipaddress.c')
-rw-r--r--networking/libiproute/ipaddress.c105
1 files changed, 51 insertions, 54 deletions
diff --git a/networking/libiproute/ipaddress.c b/networking/libiproute/ipaddress.c
index b3cbe3840..4bc87e7b8 100644
--- a/networking/libiproute/ipaddress.c
+++ b/networking/libiproute/ipaddress.c
@@ -39,13 +39,13 @@ typedef struct filter_t {
39#define filter (*(filter_t*)&bb_common_bufsiz1) 39#define filter (*(filter_t*)&bb_common_bufsiz1)
40 40
41 41
42static void print_link_flags(FILE *fp, unsigned flags, unsigned mdown) 42static void print_link_flags(unsigned flags, unsigned mdown)
43{ 43{
44 fprintf(fp, "<"); 44 printf("<");
45 flags &= ~IFF_RUNNING; 45 flags &= ~IFF_RUNNING;
46#define _PF(f) if (flags & IFF_##f) { \ 46#define _PF(f) if (flags & IFF_##f) { \
47 flags &= ~IFF_##f; \ 47 flags &= ~IFF_##f; \
48 fprintf(fp, #f "%s", flags ? "," : ""); } 48 printf(#f "%s", flags ? "," : ""); }
49 _PF(LOOPBACK); 49 _PF(LOOPBACK);
50 _PF(BROADCAST); 50 _PF(BROADCAST);
51 _PF(POINTOPOINT); 51 _PF(POINTOPOINT);
@@ -65,10 +65,10 @@ static void print_link_flags(FILE *fp, unsigned flags, unsigned mdown)
65 _PF(UP); 65 _PF(UP);
66#undef _PF 66#undef _PF
67 if (flags) 67 if (flags)
68 fprintf(fp, "%x", flags); 68 printf("%x", flags);
69 if (mdown) 69 if (mdown)
70 fprintf(fp, ",M-DOWN"); 70 printf(",M-DOWN");
71 fprintf(fp, "> "); 71 printf("> ");
72} 72}
73 73
74static void print_queuelen(char *name) 74static void print_queuelen(char *name)
@@ -92,10 +92,8 @@ static void print_queuelen(char *name)
92 printf("qlen %d", ifr.ifr_qlen); 92 printf("qlen %d", ifr.ifr_qlen);
93} 93}
94 94
95static int print_linkinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who, 95static int print_linkinfo(const struct nlmsghdr *n)
96 const struct nlmsghdr *n, void ATTRIBUTE_UNUSED *arg)
97{ 96{
98 FILE *fp = (FILE*)arg;
99 struct ifinfomsg *ifi = NLMSG_DATA(n); 97 struct ifinfomsg *ifi = NLMSG_DATA(n);
100 struct rtattr * tb[IFLA_MAX+1]; 98 struct rtattr * tb[IFLA_MAX+1];
101 int len = n->nlmsg_len; 99 int len = n->nlmsg_len;
@@ -127,34 +125,34 @@ static int print_linkinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who,
127 } 125 }
128 126
129 if (n->nlmsg_type == RTM_DELLINK) 127 if (n->nlmsg_type == RTM_DELLINK)
130 fprintf(fp, "Deleted "); 128 printf("Deleted ");
131 129
132 fprintf(fp, "%d: %s", ifi->ifi_index, 130 printf("%d: %s", ifi->ifi_index,
133 tb[IFLA_IFNAME] ? (char*)RTA_DATA(tb[IFLA_IFNAME]) : "<nil>"); 131 tb[IFLA_IFNAME] ? (char*)RTA_DATA(tb[IFLA_IFNAME]) : "<nil>");
134 132
135 if (tb[IFLA_LINK]) { 133 if (tb[IFLA_LINK]) {
136 SPRINT_BUF(b1); 134 SPRINT_BUF(b1);
137 int iflink = *(int*)RTA_DATA(tb[IFLA_LINK]); 135 int iflink = *(int*)RTA_DATA(tb[IFLA_LINK]);
138 if (iflink == 0) 136 if (iflink == 0)
139 fprintf(fp, "@NONE: "); 137 printf("@NONE: ");
140 else { 138 else {
141 fprintf(fp, "@%s: ", ll_idx_n2a(iflink, b1)); 139 printf("@%s: ", ll_idx_n2a(iflink, b1));
142 m_flag = ll_index_to_flags(iflink); 140 m_flag = ll_index_to_flags(iflink);
143 m_flag = !(m_flag & IFF_UP); 141 m_flag = !(m_flag & IFF_UP);
144 } 142 }
145 } else { 143 } else {
146 fprintf(fp, ": "); 144 printf(": ");
147 } 145 }
148 print_link_flags(fp, ifi->ifi_flags, m_flag); 146 print_link_flags(ifi->ifi_flags, m_flag);
149 147
150 if (tb[IFLA_MTU]) 148 if (tb[IFLA_MTU])
151 fprintf(fp, "mtu %u ", *(int*)RTA_DATA(tb[IFLA_MTU])); 149 printf("mtu %u ", *(int*)RTA_DATA(tb[IFLA_MTU]));
152 if (tb[IFLA_QDISC]) 150 if (tb[IFLA_QDISC])
153 fprintf(fp, "qdisc %s ", (char*)RTA_DATA(tb[IFLA_QDISC])); 151 printf("qdisc %s ", (char*)RTA_DATA(tb[IFLA_QDISC]));
154#ifdef IFLA_MASTER 152#ifdef IFLA_MASTER
155 if (tb[IFLA_MASTER]) { 153 if (tb[IFLA_MASTER]) {
156 SPRINT_BUF(b1); 154 SPRINT_BUF(b1);
157 fprintf(fp, "master %s ", ll_idx_n2a(*(int*)RTA_DATA(tb[IFLA_MASTER]), b1)); 155 printf("master %s ", ll_idx_n2a(*(int*)RTA_DATA(tb[IFLA_MASTER]), b1));
158 } 156 }
159#endif 157#endif
160 if (filter.showqueue) 158 if (filter.showqueue)
@@ -162,27 +160,27 @@ static int print_linkinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who,
162 160
163 if (!filter.family || filter.family == AF_PACKET) { 161 if (!filter.family || filter.family == AF_PACKET) {
164 SPRINT_BUF(b1); 162 SPRINT_BUF(b1);
165 fprintf(fp, "%c link/%s ", _SL_, ll_type_n2a(ifi->ifi_type, b1, sizeof(b1))); 163 printf("%c link/%s ", _SL_, ll_type_n2a(ifi->ifi_type, b1, sizeof(b1)));
166 164
167 if (tb[IFLA_ADDRESS]) { 165 if (tb[IFLA_ADDRESS]) {
168 fputs(ll_addr_n2a(RTA_DATA(tb[IFLA_ADDRESS]), 166 fputs(ll_addr_n2a(RTA_DATA(tb[IFLA_ADDRESS]),
169 RTA_PAYLOAD(tb[IFLA_ADDRESS]), 167 RTA_PAYLOAD(tb[IFLA_ADDRESS]),
170 ifi->ifi_type, 168 ifi->ifi_type,
171 b1, sizeof(b1)), fp); 169 b1, sizeof(b1)), stdout);
172 } 170 }
173 if (tb[IFLA_BROADCAST]) { 171 if (tb[IFLA_BROADCAST]) {
174 if (ifi->ifi_flags & IFF_POINTOPOINT) 172 if (ifi->ifi_flags & IFF_POINTOPOINT)
175 fprintf(fp, " peer "); 173 printf(" peer ");
176 else 174 else
177 fprintf(fp, " brd "); 175 printf(" brd ");
178 fputs(ll_addr_n2a(RTA_DATA(tb[IFLA_BROADCAST]), 176 fputs(ll_addr_n2a(RTA_DATA(tb[IFLA_BROADCAST]),
179 RTA_PAYLOAD(tb[IFLA_BROADCAST]), 177 RTA_PAYLOAD(tb[IFLA_BROADCAST]),
180 ifi->ifi_type, 178 ifi->ifi_type,
181 b1, sizeof(b1)), fp); 179 b1, sizeof(b1)), stdout);
182 } 180 }
183 } 181 }
184 fputc('\n', fp); 182 bb_putchar('\n');
185 fflush(fp); 183 /*fflush(stdout);*/
186 return 0; 184 return 0;
187} 185}
188 186
@@ -196,10 +194,9 @@ static int flush_update(void)
196 return 0; 194 return 0;
197} 195}
198 196
199static int print_addrinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who, 197static int print_addrinfo(struct sockaddr_nl *who ATTRIBUTE_UNUSED,
200 struct nlmsghdr *n, void ATTRIBUTE_UNUSED *arg) 198 struct nlmsghdr *n, void *arg ATTRIBUTE_UNUSED)
201{ 199{
202 FILE *fp = (FILE*)arg;
203 struct ifaddrmsg *ifa = NLMSG_DATA(n); 200 struct ifaddrmsg *ifa = NLMSG_DATA(n);
204 int len = n->nlmsg_len; 201 int len = n->nlmsg_len;
205 struct rtattr * rta_tb[IFA_MAX+1]; 202 struct rtattr * rta_tb[IFA_MAX+1];
@@ -268,28 +265,28 @@ static int print_addrinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who,
268 } 265 }
269 266
270 if (n->nlmsg_type == RTM_DELADDR) 267 if (n->nlmsg_type == RTM_DELADDR)
271 fprintf(fp, "Deleted "); 268 printf("Deleted ");
272 269
273 if (filter.oneline) 270 if (filter.oneline)
274 fprintf(fp, "%u: %s", ifa->ifa_index, ll_index_to_name(ifa->ifa_index)); 271 printf("%u: %s", ifa->ifa_index, ll_index_to_name(ifa->ifa_index));
275 if (ifa->ifa_family == AF_INET) 272 if (ifa->ifa_family == AF_INET)
276 fprintf(fp, " inet "); 273 printf(" inet ");
277 else if (ifa->ifa_family == AF_INET6) 274 else if (ifa->ifa_family == AF_INET6)
278 fprintf(fp, " inet6 "); 275 printf(" inet6 ");
279 else 276 else
280 fprintf(fp, " family %d ", ifa->ifa_family); 277 printf(" family %d ", ifa->ifa_family);
281 278
282 if (rta_tb[IFA_LOCAL]) { 279 if (rta_tb[IFA_LOCAL]) {
283 fputs(rt_addr_n2a(ifa->ifa_family, 280 fputs(rt_addr_n2a(ifa->ifa_family,
284 RTA_PAYLOAD(rta_tb[IFA_LOCAL]), 281 RTA_PAYLOAD(rta_tb[IFA_LOCAL]),
285 RTA_DATA(rta_tb[IFA_LOCAL]), 282 RTA_DATA(rta_tb[IFA_LOCAL]),
286 abuf, sizeof(abuf)), fp); 283 abuf, sizeof(abuf)), stdout);
287 284
288 if (rta_tb[IFA_ADDRESS] == NULL || 285 if (rta_tb[IFA_ADDRESS] == NULL ||
289 memcmp(RTA_DATA(rta_tb[IFA_ADDRESS]), RTA_DATA(rta_tb[IFA_LOCAL]), 4) == 0) { 286 memcmp(RTA_DATA(rta_tb[IFA_ADDRESS]), RTA_DATA(rta_tb[IFA_LOCAL]), 4) == 0) {
290 fprintf(fp, "/%d ", ifa->ifa_prefixlen); 287 printf("/%d ", ifa->ifa_prefixlen);
291 } else { 288 } else {
292 fprintf(fp, " peer %s/%d ", 289 printf(" peer %s/%d ",
293 rt_addr_n2a(ifa->ifa_family, 290 rt_addr_n2a(ifa->ifa_family,
294 RTA_PAYLOAD(rta_tb[IFA_ADDRESS]), 291 RTA_PAYLOAD(rta_tb[IFA_ADDRESS]),
295 RTA_DATA(rta_tb[IFA_ADDRESS]), 292 RTA_DATA(rta_tb[IFA_ADDRESS]),
@@ -299,44 +296,44 @@ static int print_addrinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who,
299 } 296 }
300 297
301 if (rta_tb[IFA_BROADCAST]) { 298 if (rta_tb[IFA_BROADCAST]) {
302 fprintf(fp, "brd %s ", 299 printf("brd %s ",
303 rt_addr_n2a(ifa->ifa_family, 300 rt_addr_n2a(ifa->ifa_family,
304 RTA_PAYLOAD(rta_tb[IFA_BROADCAST]), 301 RTA_PAYLOAD(rta_tb[IFA_BROADCAST]),
305 RTA_DATA(rta_tb[IFA_BROADCAST]), 302 RTA_DATA(rta_tb[IFA_BROADCAST]),
306 abuf, sizeof(abuf))); 303 abuf, sizeof(abuf)));
307 } 304 }
308 if (rta_tb[IFA_ANYCAST]) { 305 if (rta_tb[IFA_ANYCAST]) {
309 fprintf(fp, "any %s ", 306 printf("any %s ",
310 rt_addr_n2a(ifa->ifa_family, 307 rt_addr_n2a(ifa->ifa_family,
311 RTA_PAYLOAD(rta_tb[IFA_ANYCAST]), 308 RTA_PAYLOAD(rta_tb[IFA_ANYCAST]),
312 RTA_DATA(rta_tb[IFA_ANYCAST]), 309 RTA_DATA(rta_tb[IFA_ANYCAST]),
313 abuf, sizeof(abuf))); 310 abuf, sizeof(abuf)));
314 } 311 }
315 fprintf(fp, "scope %s ", rtnl_rtscope_n2a(ifa->ifa_scope, b1, sizeof(b1))); 312 printf("scope %s ", rtnl_rtscope_n2a(ifa->ifa_scope, b1, sizeof(b1)));
316 if (ifa->ifa_flags & IFA_F_SECONDARY) { 313 if (ifa->ifa_flags & IFA_F_SECONDARY) {
317 ifa->ifa_flags &= ~IFA_F_SECONDARY; 314 ifa->ifa_flags &= ~IFA_F_SECONDARY;
318 fprintf(fp, "secondary "); 315 printf("secondary ");
319 } 316 }
320 if (ifa->ifa_flags & IFA_F_TENTATIVE) { 317 if (ifa->ifa_flags & IFA_F_TENTATIVE) {
321 ifa->ifa_flags &= ~IFA_F_TENTATIVE; 318 ifa->ifa_flags &= ~IFA_F_TENTATIVE;
322 fprintf(fp, "tentative "); 319 printf("tentative ");
323 } 320 }
324 if (ifa->ifa_flags & IFA_F_DEPRECATED) { 321 if (ifa->ifa_flags & IFA_F_DEPRECATED) {
325 ifa->ifa_flags &= ~IFA_F_DEPRECATED; 322 ifa->ifa_flags &= ~IFA_F_DEPRECATED;
326 fprintf(fp, "deprecated "); 323 printf("deprecated ");
327 } 324 }
328 if (!(ifa->ifa_flags & IFA_F_PERMANENT)) { 325 if (!(ifa->ifa_flags & IFA_F_PERMANENT)) {
329 fprintf(fp, "dynamic "); 326 printf("dynamic ");
330 } else 327 } else
331 ifa->ifa_flags &= ~IFA_F_PERMANENT; 328 ifa->ifa_flags &= ~IFA_F_PERMANENT;
332 if (ifa->ifa_flags) 329 if (ifa->ifa_flags)
333 fprintf(fp, "flags %02x ", ifa->ifa_flags); 330 printf("flags %02x ", ifa->ifa_flags);
334 if (rta_tb[IFA_LABEL]) 331 if (rta_tb[IFA_LABEL])
335 fputs((char*)RTA_DATA(rta_tb[IFA_LABEL]), fp); 332 fputs((char*)RTA_DATA(rta_tb[IFA_LABEL]), stdout);
336 if (rta_tb[IFA_CACHEINFO]) { 333 if (rta_tb[IFA_CACHEINFO]) {
337 struct ifa_cacheinfo *ci = RTA_DATA(rta_tb[IFA_CACHEINFO]); 334 struct ifa_cacheinfo *ci = RTA_DATA(rta_tb[IFA_CACHEINFO]);
338 char buf[128]; 335 char buf[128];
339 fputc(_SL_, fp); 336 bb_putchar(_SL_);
340 if (ci->ifa_valid == 0xFFFFFFFFU) 337 if (ci->ifa_valid == 0xFFFFFFFFU)
341 sprintf(buf, "valid_lft forever"); 338 sprintf(buf, "valid_lft forever");
342 else 339 else
@@ -345,10 +342,10 @@ static int print_addrinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who,
345 sprintf(buf+strlen(buf), " preferred_lft forever"); 342 sprintf(buf+strlen(buf), " preferred_lft forever");
346 else 343 else
347 sprintf(buf+strlen(buf), " preferred_lft %dsec", ci->ifa_prefered); 344 sprintf(buf+strlen(buf), " preferred_lft %dsec", ci->ifa_prefered);
348 fprintf(fp, " %s", buf); 345 printf(" %s", buf);
349 } 346 }
350 fputc('\n', fp); 347 bb_putchar('\n');
351 fflush(fp); 348 /*fflush(stdout);*/
352 return 0; 349 return 0;
353} 350}
354 351
@@ -359,7 +356,7 @@ struct nlmsg_list
359 struct nlmsghdr h; 356 struct nlmsghdr h;
360}; 357};
361 358
362static int print_selected_addrinfo(int ifindex, struct nlmsg_list *ainfo, FILE *fp) 359static int print_selected_addrinfo(int ifindex, struct nlmsg_list *ainfo)
363{ 360{
364 for (; ainfo; ainfo = ainfo->next) { 361 for (; ainfo; ainfo = ainfo->next) {
365 struct nlmsghdr *n = &ainfo->h; 362 struct nlmsghdr *n = &ainfo->h;
@@ -375,7 +372,7 @@ static int print_selected_addrinfo(int ifindex, struct nlmsg_list *ainfo, FILE *
375 (filter.family && filter.family != ifa->ifa_family)) 372 (filter.family && filter.family != ifa->ifa_family))
376 continue; 373 continue;
377 374
378 print_addrinfo(NULL, n, fp); 375 print_addrinfo(NULL, n, NULL);
379 } 376 }
380 return 0; 377 return 0;
381} 378}
@@ -498,7 +495,7 @@ int ipaddr_list_or_flush(char **argv, int flush)
498 for (;;) { 495 for (;;) {
499 xrtnl_wilddump_request(&rth, filter.family, RTM_GETADDR); 496 xrtnl_wilddump_request(&rth, filter.family, RTM_GETADDR);
500 filter.flushed = 0; 497 filter.flushed = 0;
501 xrtnl_dump_filter(&rth, print_addrinfo, stdout); 498 xrtnl_dump_filter(&rth, print_addrinfo, NULL);
502 if (filter.flushed == 0) { 499 if (filter.flushed == 0) {
503 return 0; 500 return 0;
504 } 501 }
@@ -574,10 +571,10 @@ int ipaddr_list_or_flush(char **argv, int flush)
574 } 571 }
575 572
576 for (l = linfo; l; l = l->next) { 573 for (l = linfo; l; l = l->next) {
577 if (no_link || print_linkinfo(NULL, &l->h, stdout) == 0) { 574 if (no_link || print_linkinfo(&l->h) == 0) {
578 struct ifinfomsg *ifi = NLMSG_DATA(&l->h); 575 struct ifinfomsg *ifi = NLMSG_DATA(&l->h);
579 if (filter.family != AF_PACKET) 576 if (filter.family != AF_PACKET)
580 print_selected_addrinfo(ifi->ifi_index, ainfo, stdout); 577 print_selected_addrinfo(ifi->ifi_index, ainfo);
581 } 578 }
582 } 579 }
583 580