diff options
| author | bug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2002-11-28 11:17:19 +0000 |
|---|---|---|
| committer | bug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2002-11-28 11:17:19 +0000 |
| commit | b93e459224de0e63b0dcfb691aecbefac4bf665a (patch) | |
| tree | f07b98042dd8602c7f3ee119fc5ebecbc1052dcb | |
| parent | e61d132f56acbca26c60ec90a6ef0a56c8173972 (diff) | |
| download | busybox-w32-b93e459224de0e63b0dcfb691aecbefac4bf665a.tar.gz busybox-w32-b93e459224de0e63b0dcfb691aecbefac4bf665a.tar.bz2 busybox-w32-b93e459224de0e63b0dcfb691aecbefac4bf665a.zip | |
Style, error_msg
git-svn-id: svn://busybox.net/trunk/busybox@6054 69ca8d6d-28ef-0310-b511-8ec308f3f277
| -rw-r--r-- | networking/libiproute/iproute.c | 163 |
1 files changed, 103 insertions, 60 deletions
diff --git a/networking/libiproute/iproute.c b/networking/libiproute/iproute.c index fcfb409f2..e251b941e 100644 --- a/networking/libiproute/iproute.c +++ b/networking/libiproute/iproute.c | |||
| @@ -90,48 +90,59 @@ int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) | |||
| 90 | if (r->rtm_family == AF_INET6) { | 90 | if (r->rtm_family == AF_INET6) { |
| 91 | if (filter.tb) { | 91 | if (filter.tb) { |
| 92 | if (filter.tb < 0) { | 92 | if (filter.tb < 0) { |
| 93 | if (!(r->rtm_flags&RTM_F_CLONED)) | 93 | if (!(r->rtm_flags&RTM_F_CLONED)) { |
| 94 | return 0; | 94 | return 0; |
| 95 | } | ||
| 95 | } else { | 96 | } else { |
| 96 | if (r->rtm_flags&RTM_F_CLONED) | 97 | if (r->rtm_flags&RTM_F_CLONED) { |
| 97 | return 0; | 98 | return 0; |
| 99 | } | ||
| 98 | if (filter.tb == RT_TABLE_LOCAL) { | 100 | if (filter.tb == RT_TABLE_LOCAL) { |
| 99 | if (r->rtm_type != RTN_LOCAL) | 101 | if (r->rtm_type != RTN_LOCAL) { |
| 100 | return 0; | 102 | return 0; |
| 103 | } | ||
| 101 | } else if (filter.tb == RT_TABLE_MAIN) { | 104 | } else if (filter.tb == RT_TABLE_MAIN) { |
| 102 | if (r->rtm_type == RTN_LOCAL) | 105 | if (r->rtm_type == RTN_LOCAL) { |
| 103 | return 0; | 106 | return 0; |
| 107 | } | ||
| 104 | } else { | 108 | } else { |
| 105 | return 0; | 109 | return 0; |
| 106 | } | 110 | } |
| 107 | } | 111 | } |
| 108 | } | 112 | } |
| 109 | } else { | 113 | } else { |
| 110 | if (filter.tb > 0 && filter.tb != r->rtm_table) | 114 | if (filter.tb > 0 && filter.tb != r->rtm_table) { |
| 111 | return 0; | 115 | return 0; |
| 116 | } | ||
| 112 | } | 117 | } |
| 113 | if (filter.rdst.family && | 118 | if (filter.rdst.family && |
| 114 | (r->rtm_family != filter.rdst.family || filter.rdst.bitlen > r->rtm_dst_len)) | 119 | (r->rtm_family != filter.rdst.family || filter.rdst.bitlen > r->rtm_dst_len)) { |
| 115 | return 0; | 120 | return 0; |
| 121 | } | ||
| 116 | if (filter.mdst.family && | 122 | if (filter.mdst.family && |
| 117 | (r->rtm_family != filter.mdst.family || | 123 | (r->rtm_family != filter.mdst.family || |
| 118 | (filter.mdst.bitlen >= 0 && filter.mdst.bitlen < r->rtm_dst_len))) | 124 | (filter.mdst.bitlen >= 0 && filter.mdst.bitlen < r->rtm_dst_len))) { |
| 119 | return 0; | 125 | return 0; |
| 126 | } | ||
| 120 | if (filter.rsrc.family && | 127 | if (filter.rsrc.family && |
| 121 | (r->rtm_family != filter.rsrc.family || filter.rsrc.bitlen > r->rtm_src_len)) | 128 | (r->rtm_family != filter.rsrc.family || filter.rsrc.bitlen > r->rtm_src_len)) { |
| 122 | return 0; | 129 | return 0; |
| 130 | } | ||
| 123 | if (filter.msrc.family && | 131 | if (filter.msrc.family && |
| 124 | (r->rtm_family != filter.msrc.family || | 132 | (r->rtm_family != filter.msrc.family || |
| 125 | (filter.msrc.bitlen >= 0 && filter.msrc.bitlen < r->rtm_src_len))) | 133 | (filter.msrc.bitlen >= 0 && filter.msrc.bitlen < r->rtm_src_len))) { |
| 126 | return 0; | 134 | return 0; |
| 135 | } | ||
| 127 | 136 | ||
| 128 | memset(tb, 0, sizeof(tb)); | 137 | memset(tb, 0, sizeof(tb)); |
| 129 | parse_rtattr(tb, RTA_MAX, RTM_RTA(r), len); | 138 | parse_rtattr(tb, RTA_MAX, RTM_RTA(r), len); |
| 130 | 139 | ||
| 131 | if (n->nlmsg_type == RTM_DELROUTE) | 140 | if (n->nlmsg_type == RTM_DELROUTE) { |
| 132 | fprintf(fp, "Deleted "); | 141 | fprintf(fp, "Deleted "); |
| 133 | if (r->rtm_type != RTN_UNICAST && !filter.type) | 142 | } |
| 143 | if (r->rtm_type != RTN_UNICAST && !filter.type) { | ||
| 134 | fprintf(fp, "%s ", rtnl_rtntype_n2a(r->rtm_type, b1, sizeof(b1))); | 144 | fprintf(fp, "%s ", rtnl_rtntype_n2a(r->rtm_type, b1, sizeof(b1))); |
| 145 | } | ||
| 135 | 146 | ||
| 136 | if (tb[RTA_DST]) { | 147 | if (tb[RTA_DST]) { |
| 137 | if (r->rtm_dst_len != host_len) { | 148 | if (r->rtm_dst_len != host_len) { |
| @@ -178,8 +189,9 @@ int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) | |||
| 178 | RTA_DATA(tb[RTA_GATEWAY]), | 189 | RTA_DATA(tb[RTA_GATEWAY]), |
| 179 | abuf, sizeof(abuf))); | 190 | abuf, sizeof(abuf))); |
| 180 | } | 191 | } |
| 181 | if (tb[RTA_OIF] && filter.oifmask != -1) | 192 | if (tb[RTA_OIF] && filter.oifmask != -1) { |
| 182 | fprintf(fp, "dev %s ", ll_index_to_name(*(int*)RTA_DATA(tb[RTA_OIF]))); | 193 | fprintf(fp, "dev %s ", ll_index_to_name(*(int*)RTA_DATA(tb[RTA_OIF]))); |
| 194 | } | ||
| 183 | 195 | ||
| 184 | if (tb[RTA_PREFSRC] && filter.rprefsrc.bitlen != host_len) { | 196 | if (tb[RTA_PREFSRC] && filter.rprefsrc.bitlen != host_len) { |
| 185 | /* Do not use format_host(). It is our local addr | 197 | /* Do not use format_host(). It is our local addr |
| @@ -191,22 +203,28 @@ int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) | |||
| 191 | RTA_DATA(tb[RTA_PREFSRC]), | 203 | RTA_DATA(tb[RTA_PREFSRC]), |
| 192 | abuf, sizeof(abuf))); | 204 | abuf, sizeof(abuf))); |
| 193 | } | 205 | } |
| 194 | if (tb[RTA_PRIORITY]) | 206 | if (tb[RTA_PRIORITY]) { |
| 195 | fprintf(fp, " metric %d ", *(__u32*)RTA_DATA(tb[RTA_PRIORITY])); | 207 | fprintf(fp, " metric %d ", *(__u32*)RTA_DATA(tb[RTA_PRIORITY])); |
| 208 | } | ||
| 196 | if (r->rtm_family == AF_INET6) { | 209 | if (r->rtm_family == AF_INET6) { |
| 197 | struct rta_cacheinfo *ci = NULL; | 210 | struct rta_cacheinfo *ci = NULL; |
| 198 | if (tb[RTA_CACHEINFO]) | 211 | if (tb[RTA_CACHEINFO]) { |
| 199 | ci = RTA_DATA(tb[RTA_CACHEINFO]); | 212 | ci = RTA_DATA(tb[RTA_CACHEINFO]); |
| 213 | } | ||
| 200 | if ((r->rtm_flags & RTM_F_CLONED) || (ci && ci->rta_expires)) { | 214 | if ((r->rtm_flags & RTM_F_CLONED) || (ci && ci->rta_expires)) { |
| 201 | static int hz; | 215 | static int hz; |
| 202 | if (!hz) | 216 | if (!hz) { |
| 203 | hz = get_hz(); | 217 | hz = get_hz(); |
| 204 | if (r->rtm_flags & RTM_F_CLONED) | 218 | } |
| 219 | if (r->rtm_flags & RTM_F_CLONED) { | ||
| 205 | fprintf(fp, "%s cache ", _SL_); | 220 | fprintf(fp, "%s cache ", _SL_); |
| 206 | if (ci->rta_expires) | 221 | } |
| 222 | if (ci->rta_expires) { | ||
| 207 | fprintf(fp, " expires %dsec", ci->rta_expires/hz); | 223 | fprintf(fp, " expires %dsec", ci->rta_expires/hz); |
| 208 | if (ci->rta_error != 0) | 224 | } |
| 225 | if (ci->rta_error != 0) { | ||
| 209 | fprintf(fp, " error %d", ci->rta_error); | 226 | fprintf(fp, " error %d", ci->rta_error); |
| 227 | } | ||
| 210 | } else if (ci) { | 228 | } else if (ci) { |
| 211 | if (ci->rta_error != 0) | 229 | if (ci->rta_error != 0) |
| 212 | fprintf(fp, " error %d", ci->rta_error); | 230 | fprintf(fp, " error %d", ci->rta_error); |
| @@ -260,16 +278,18 @@ int iproute_modify(int cmd, unsigned flags, int argc, char **argv) | |||
| 260 | inet_prefix addr; | 278 | inet_prefix addr; |
| 261 | NEXT_ARG(); | 279 | NEXT_ARG(); |
| 262 | get_addr(&addr, *argv, req.r.rtm_family); | 280 | get_addr(&addr, *argv, req.r.rtm_family); |
| 263 | if (req.r.rtm_family == AF_UNSPEC) | 281 | if (req.r.rtm_family == AF_UNSPEC) { |
| 264 | req.r.rtm_family = addr.family; | 282 | req.r.rtm_family = addr.family; |
| 283 | } | ||
| 265 | addattr_l(&req.n, sizeof(req), RTA_PREFSRC, &addr.data, addr.bytelen); | 284 | addattr_l(&req.n, sizeof(req), RTA_PREFSRC, &addr.data, addr.bytelen); |
| 266 | } else if (strcmp(*argv, "via") == 0) { | 285 | } else if (strcmp(*argv, "via") == 0) { |
| 267 | inet_prefix addr; | 286 | inet_prefix addr; |
| 268 | gw_ok = 1; | 287 | gw_ok = 1; |
| 269 | NEXT_ARG(); | 288 | NEXT_ARG(); |
| 270 | get_addr(&addr, *argv, req.r.rtm_family); | 289 | get_addr(&addr, *argv, req.r.rtm_family); |
| 271 | if (req.r.rtm_family == AF_UNSPEC) | 290 | if (req.r.rtm_family == AF_UNSPEC) { |
| 272 | req.r.rtm_family = addr.family; | 291 | req.r.rtm_family = addr.family; |
| 292 | } | ||
| 273 | addattr_l(&req.n, sizeof(req), RTA_GATEWAY, &addr.data, addr.bytelen); | 293 | addattr_l(&req.n, sizeof(req), RTA_GATEWAY, &addr.data, addr.bytelen); |
| 274 | } else if (strcmp(*argv, "mtu") == 0) { | 294 | } else if (strcmp(*argv, "mtu") == 0) { |
| 275 | unsigned mtu; | 295 | unsigned mtu; |
| @@ -278,8 +298,9 @@ int iproute_modify(int cmd, unsigned flags, int argc, char **argv) | |||
| 278 | mxlock |= (1<<RTAX_MTU); | 298 | mxlock |= (1<<RTAX_MTU); |
| 279 | NEXT_ARG(); | 299 | NEXT_ARG(); |
| 280 | } | 300 | } |
| 281 | if (get_unsigned(&mtu, *argv, 0)) | 301 | if (get_unsigned(&mtu, *argv, 0)) { |
| 282 | invarg("\"mtu\" value is invalid\n", *argv); | 302 | invarg("\"mtu\" value is invalid\n", *argv); |
| 303 | } | ||
| 283 | rta_addattr32(mxrta, sizeof(mxbuf), RTAX_MTU, mtu); | 304 | rta_addattr32(mxrta, sizeof(mxbuf), RTAX_MTU, mtu); |
| 284 | } else if (matches(*argv, "protocol") == 0) { | 305 | } else if (matches(*argv, "protocol") == 0) { |
| 285 | int prot; | 306 | int prot; |
| @@ -306,21 +327,25 @@ int iproute_modify(int cmd, unsigned flags, int argc, char **argv) | |||
| 306 | type_ok = 1; | 327 | type_ok = 1; |
| 307 | } | 328 | } |
| 308 | 329 | ||
| 309 | if (dst_ok) | 330 | if (dst_ok) { |
| 310 | duparg2("to", *argv); | 331 | duparg2("to", *argv); |
| 332 | } | ||
| 311 | get_prefix(&dst, *argv, req.r.rtm_family); | 333 | get_prefix(&dst, *argv, req.r.rtm_family); |
| 312 | if (req.r.rtm_family == AF_UNSPEC) | 334 | if (req.r.rtm_family == AF_UNSPEC) { |
| 313 | req.r.rtm_family = dst.family; | 335 | req.r.rtm_family = dst.family; |
| 336 | } | ||
| 314 | req.r.rtm_dst_len = dst.bitlen; | 337 | req.r.rtm_dst_len = dst.bitlen; |
| 315 | dst_ok = 1; | 338 | dst_ok = 1; |
| 316 | if (dst.bytelen) | 339 | if (dst.bytelen) { |
| 317 | addattr_l(&req.n, sizeof(req), RTA_DST, &dst.data, dst.bytelen); | 340 | addattr_l(&req.n, sizeof(req), RTA_DST, &dst.data, dst.bytelen); |
| 341 | } | ||
| 318 | } | 342 | } |
| 319 | argc--; argv++; | 343 | argc--; argv++; |
| 320 | } | 344 | } |
| 321 | 345 | ||
| 322 | if (rtnl_open(&rth, 0) < 0) | 346 | if (rtnl_open(&rth, 0) < 0) { |
| 323 | exit(1); | 347 | exit(1); |
| 348 | } | ||
| 324 | 349 | ||
| 325 | if (d) { | 350 | if (d) { |
| 326 | int idx; | 351 | int idx; |
| @@ -337,16 +362,19 @@ int iproute_modify(int cmd, unsigned flags, int argc, char **argv) | |||
| 337 | } | 362 | } |
| 338 | 363 | ||
| 339 | if (mxrta->rta_len > RTA_LENGTH(0)) { | 364 | if (mxrta->rta_len > RTA_LENGTH(0)) { |
| 340 | if (mxlock) | 365 | if (mxlock) { |
| 341 | rta_addattr32(mxrta, sizeof(mxbuf), RTAX_LOCK, mxlock); | 366 | rta_addattr32(mxrta, sizeof(mxbuf), RTAX_LOCK, mxlock); |
| 367 | } | ||
| 342 | addattr_l(&req.n, sizeof(req), RTA_METRICS, RTA_DATA(mxrta), RTA_PAYLOAD(mxrta)); | 368 | addattr_l(&req.n, sizeof(req), RTA_METRICS, RTA_DATA(mxrta), RTA_PAYLOAD(mxrta)); |
| 343 | } | 369 | } |
| 344 | 370 | ||
| 345 | if (req.r.rtm_family == AF_UNSPEC) | 371 | if (req.r.rtm_family == AF_UNSPEC) { |
| 346 | req.r.rtm_family = AF_INET; | 372 | req.r.rtm_family = AF_INET; |
| 373 | } | ||
| 347 | 374 | ||
| 348 | if (rtnl_talk(&rth, &req.n, 0, 0, NULL, NULL, NULL) < 0) | 375 | if (rtnl_talk(&rth, &req.n, 0, 0, NULL, NULL, NULL) < 0) { |
| 349 | exit(2); | 376 | exit(2); |
| 377 | } | ||
| 350 | 378 | ||
| 351 | return 0; | 379 | return 0; |
| 352 | } | 380 | } |
| @@ -390,8 +418,9 @@ static int iproute_list(int argc, char **argv) | |||
| 390 | NEXT_ARG(); | 418 | NEXT_ARG(); |
| 391 | filter.protocolmask = -1; | 419 | filter.protocolmask = -1; |
| 392 | if (rtnl_rtprot_a2n(&prot, *argv)) { | 420 | if (rtnl_rtprot_a2n(&prot, *argv)) { |
| 393 | if (strcmp(*argv, "all") != 0) | 421 | if (strcmp(*argv, "all") != 0) { |
| 394 | invarg("invalid \"protocol\"\n", *argv); | 422 | invarg("invalid \"protocol\"\n", *argv); |
| 423 | } | ||
| 395 | prot = 0; | 424 | prot = 0; |
| 396 | filter.protocolmask = 0; | 425 | filter.protocolmask = 0; |
| 397 | } | 426 | } |
| @@ -439,11 +468,13 @@ static int iproute_list(int argc, char **argv) | |||
| 439 | argc--; argv++; | 468 | argc--; argv++; |
| 440 | } | 469 | } |
| 441 | 470 | ||
| 442 | if (do_ipv6 == AF_UNSPEC && filter.tb) | 471 | if (do_ipv6 == AF_UNSPEC && filter.tb) { |
| 443 | do_ipv6 = AF_INET; | 472 | do_ipv6 = AF_INET; |
| 473 | } | ||
| 444 | 474 | ||
| 445 | if (rtnl_open(&rth, 0) < 0) | 475 | if (rtnl_open(&rth, 0) < 0) { |
| 446 | exit(1); | 476 | exit(1); |
| 477 | } | ||
| 447 | 478 | ||
| 448 | ll_init_map(&rth); | 479 | ll_init_map(&rth); |
| 449 | 480 | ||
| @@ -552,8 +583,7 @@ int iproute_get(int argc, char **argv) | |||
| 552 | } | 583 | } |
| 553 | 584 | ||
| 554 | if (req.r.rtm_dst_len == 0) { | 585 | if (req.r.rtm_dst_len == 0) { |
| 555 | fprintf(stderr, "need at least destination address\n"); | 586 | error_msg_and_die("need at least destination address"); |
| 556 | exit(1); | ||
| 557 | } | 587 | } |
| 558 | 588 | ||
| 559 | if (rtnl_open(&rth, 0) < 0) | 589 | if (rtnl_open(&rth, 0) < 0) |
| @@ -566,25 +596,27 @@ int iproute_get(int argc, char **argv) | |||
| 566 | 596 | ||
| 567 | if (idev) { | 597 | if (idev) { |
| 568 | if ((idx = ll_name_to_index(idev)) == 0) { | 598 | if ((idx = ll_name_to_index(idev)) == 0) { |
| 569 | fprintf(stderr, "Cannot find device \"%s\"\n", idev); | 599 | error_msg("Cannot find device \"%s\"", idev); |
| 570 | return -1; | 600 | return -1; |
| 571 | } | 601 | } |
| 572 | addattr32(&req.n, sizeof(req), RTA_IIF, idx); | 602 | addattr32(&req.n, sizeof(req), RTA_IIF, idx); |
| 573 | } | 603 | } |
| 574 | if (odev) { | 604 | if (odev) { |
| 575 | if ((idx = ll_name_to_index(odev)) == 0) { | 605 | if ((idx = ll_name_to_index(odev)) == 0) { |
| 576 | fprintf(stderr, "Cannot find device \"%s\"\n", odev); | 606 | error_msg("Cannot find device \"%s\"", odev); |
| 577 | return -1; | 607 | return -1; |
| 578 | } | 608 | } |
| 579 | addattr32(&req.n, sizeof(req), RTA_OIF, idx); | 609 | addattr32(&req.n, sizeof(req), RTA_OIF, idx); |
| 580 | } | 610 | } |
| 581 | } | 611 | } |
| 582 | 612 | ||
| 583 | if (req.r.rtm_family == AF_UNSPEC) | 613 | if (req.r.rtm_family == AF_UNSPEC) { |
| 584 | req.r.rtm_family = AF_INET; | 614 | req.r.rtm_family = AF_INET; |
| 615 | } | ||
| 585 | 616 | ||
| 586 | if (rtnl_talk(&rth, &req.n, 0, 0, &req.n, NULL, NULL) < 0) | 617 | if (rtnl_talk(&rth, &req.n, 0, 0, &req.n, NULL, NULL) < 0) { |
| 587 | exit(2); | 618 | exit(2); |
| 619 | } | ||
| 588 | 620 | ||
| 589 | if (connected && !from_ok) { | 621 | if (connected && !from_ok) { |
| 590 | struct rtmsg *r = NLMSG_DATA(&req.n); | 622 | struct rtmsg *r = NLMSG_DATA(&req.n); |
| @@ -592,17 +624,16 @@ int iproute_get(int argc, char **argv) | |||
| 592 | struct rtattr * tb[RTA_MAX+1]; | 624 | struct rtattr * tb[RTA_MAX+1]; |
| 593 | 625 | ||
| 594 | if (print_route(NULL, &req.n, (void*)stdout) < 0) { | 626 | if (print_route(NULL, &req.n, (void*)stdout) < 0) { |
| 595 | fprintf(stderr, "An error :-)\n"); | 627 | error_msg_and_die("An error :-)"); |
| 596 | exit(1); | ||
| 597 | } | 628 | } |
| 598 | 629 | ||
| 599 | if (req.n.nlmsg_type != RTM_NEWROUTE) { | 630 | if (req.n.nlmsg_type != RTM_NEWROUTE) { |
| 600 | fprintf(stderr, "Not a route?\n"); | 631 | error_msg("Not a route?"); |
| 601 | return -1; | 632 | return -1; |
| 602 | } | 633 | } |
| 603 | len -= NLMSG_LENGTH(sizeof(*r)); | 634 | len -= NLMSG_LENGTH(sizeof(*r)); |
| 604 | if (len < 0) { | 635 | if (len < 0) { |
| 605 | fprintf(stderr, "Wrong len %d\n", len); | 636 | error_msg("Wrong len %d", len); |
| 606 | return -1; | 637 | return -1; |
| 607 | } | 638 | } |
| 608 | 639 | ||
| @@ -613,25 +644,28 @@ int iproute_get(int argc, char **argv) | |||
| 613 | tb[RTA_PREFSRC]->rta_type = RTA_SRC; | 644 | tb[RTA_PREFSRC]->rta_type = RTA_SRC; |
| 614 | r->rtm_src_len = 8*RTA_PAYLOAD(tb[RTA_PREFSRC]); | 645 | r->rtm_src_len = 8*RTA_PAYLOAD(tb[RTA_PREFSRC]); |
| 615 | } else if (!tb[RTA_SRC]) { | 646 | } else if (!tb[RTA_SRC]) { |
| 616 | fprintf(stderr, "Failed to connect the route\n"); | 647 | error_msg("Failed to connect the route"); |
| 617 | return -1; | 648 | return -1; |
| 618 | } | 649 | } |
| 619 | if (!odev && tb[RTA_OIF]) | 650 | if (!odev && tb[RTA_OIF]) { |
| 620 | tb[RTA_OIF]->rta_type = 0; | 651 | tb[RTA_OIF]->rta_type = 0; |
| 621 | if (tb[RTA_GATEWAY]) | 652 | } |
| 653 | if (tb[RTA_GATEWAY]) { | ||
| 622 | tb[RTA_GATEWAY]->rta_type = 0; | 654 | tb[RTA_GATEWAY]->rta_type = 0; |
| 623 | if (!idev && tb[RTA_IIF]) | 655 | } |
| 656 | if (!idev && tb[RTA_IIF]) { | ||
| 624 | tb[RTA_IIF]->rta_type = 0; | 657 | tb[RTA_IIF]->rta_type = 0; |
| 658 | } | ||
| 625 | req.n.nlmsg_flags = NLM_F_REQUEST; | 659 | req.n.nlmsg_flags = NLM_F_REQUEST; |
| 626 | req.n.nlmsg_type = RTM_GETROUTE; | 660 | req.n.nlmsg_type = RTM_GETROUTE; |
| 627 | 661 | ||
| 628 | if (rtnl_talk(&rth, &req.n, 0, 0, &req.n, NULL, NULL) < 0) | 662 | if (rtnl_talk(&rth, &req.n, 0, 0, &req.n, NULL, NULL) < 0) { |
| 629 | exit(2); | 663 | exit(2); |
| 664 | } | ||
| 630 | } | 665 | } |
| 631 | 666 | ||
| 632 | if (print_route(NULL, &req.n, (void*)stdout) < 0) { | 667 | if (print_route(NULL, &req.n, (void*)stdout) < 0) { |
| 633 | fprintf(stderr, "An error :-)\n"); | 668 | error_msg_and_die("An error :-)"); |
| 634 | exit(1); | ||
| 635 | } | 669 | } |
| 636 | 670 | ||
| 637 | exit(0); | 671 | exit(0); |
| @@ -646,36 +680,45 @@ void iproute_reset_filter() | |||
| 646 | 680 | ||
| 647 | int do_iproute(int argc, char **argv) | 681 | int do_iproute(int argc, char **argv) |
| 648 | { | 682 | { |
| 649 | if (argc < 1) | 683 | if (argc < 1) { |
| 650 | return iproute_list(0, NULL); | 684 | return iproute_list(0, NULL); |
| 685 | } | ||
| 651 | 686 | ||
| 652 | if (matches(*argv, "add") == 0) | 687 | if (matches(*argv, "add") == 0) { |
| 653 | return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_EXCL, | 688 | return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_EXCL, |
| 654 | argc-1, argv+1); | 689 | argc-1, argv+1); |
| 655 | if (matches(*argv, "change") == 0 || strcmp(*argv, "chg") == 0) | 690 | } |
| 691 | if (matches(*argv, "change") == 0 || strcmp(*argv, "chg") == 0) { | ||
| 656 | return iproute_modify(RTM_NEWROUTE, NLM_F_REPLACE, | 692 | return iproute_modify(RTM_NEWROUTE, NLM_F_REPLACE, |
| 657 | argc-1, argv+1); | 693 | argc-1, argv+1); |
| 658 | if (matches(*argv, "replace") == 0) | 694 | } |
| 695 | if (matches(*argv, "replace") == 0) { | ||
| 659 | return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_REPLACE, | 696 | return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_REPLACE, |
| 660 | argc-1, argv+1); | 697 | argc-1, argv+1); |
| 661 | if (matches(*argv, "prepend") == 0) | 698 | } |
| 699 | if (matches(*argv, "prepend") == 0) { | ||
| 662 | return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE, | 700 | return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE, |
| 663 | argc-1, argv+1); | 701 | argc-1, argv+1); |
| 664 | if (matches(*argv, "append") == 0) | 702 | } |
| 703 | if (matches(*argv, "append") == 0) { | ||
| 665 | return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_APPEND, | 704 | return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_APPEND, |
| 666 | argc-1, argv+1); | 705 | argc-1, argv+1); |
| 667 | if (matches(*argv, "test") == 0) | 706 | } |
| 707 | if (matches(*argv, "test") == 0) { | ||
| 668 | return iproute_modify(RTM_NEWROUTE, NLM_F_EXCL, | 708 | return iproute_modify(RTM_NEWROUTE, NLM_F_EXCL, |
| 669 | argc-1, argv+1); | 709 | argc-1, argv+1); |
| 670 | if (matches(*argv, "delete") == 0) | 710 | } |
| 711 | if (matches(*argv, "delete") == 0) { | ||
| 671 | return iproute_modify(RTM_DELROUTE, 0, | 712 | return iproute_modify(RTM_DELROUTE, 0, |
| 672 | argc-1, argv+1); | 713 | argc-1, argv+1); |
| 714 | } | ||
| 673 | if (matches(*argv, "list") == 0 || matches(*argv, "show") == 0 | 715 | if (matches(*argv, "list") == 0 || matches(*argv, "show") == 0 |
| 674 | || matches(*argv, "lst") == 0) | 716 | || matches(*argv, "lst") == 0) { |
| 675 | return iproute_list(argc-1, argv+1); | 717 | return iproute_list(argc-1, argv+1); |
| 676 | if (matches(*argv, "get") == 0) | 718 | } |
| 719 | if (matches(*argv, "get") == 0) { | ||
| 677 | return iproute_get(argc-1, argv+1); | 720 | return iproute_get(argc-1, argv+1); |
| 678 | fprintf(stderr, "Command \"%s\" is unknown, try \"ip route help\".\n", *argv); | 721 | } |
| 679 | exit(-1); | 722 | error_msg_and_die("Command \"%s\" is unknown, try \"ip route help\".", *argv); |
| 680 | } | 723 | } |
| 681 | 724 | ||
