[IPROUTE]: Preparation for 32 bit table IDs The route table filter uses an integer for the table number and the value -1 to represent cloned routes. For 32 bit table IDs it needs to become an unsigned, so this won't work anymore. Introduce a new filter flag "cloned" and use instead of filter.tb = -1.
Signed-off-by: Patrick McHardy <[EMAIL PROTECTED]> --- commit 00d896184c5f8737269ac05264446c58133ec414 tree 3eb3760b7b5b8b5811cadeaaec1b949533fb5ffd parent 14d210c56edd67973439acd67d916de84a6e0384 author Patrick McHardy <[EMAIL PROTECTED]> Thu, 10 Aug 2006 23:19:31 +0200 committer Patrick McHardy <[EMAIL PROTECTED]> Thu, 10 Aug 2006 23:19:31 +0200 ip/iproute.c | 42 +++++++++++++++++++++--------------------- 1 files changed, 21 insertions(+), 21 deletions(-) diff --git a/ip/iproute.c b/ip/iproute.c index 1645f0b..cb674d7 100644 --- a/ip/iproute.c +++ b/ip/iproute.c @@ -89,6 +89,7 @@ static void usage(void) static struct { int tb; + int cloned; int flushed; char *flushb; int flushp; @@ -168,22 +169,21 @@ int print_route(const struct sockaddr_nl ip6_multiple_tables = 1; if (r->rtm_family == AF_INET6 && !ip6_multiple_tables) { + if (filter.cloned) { + if (!(r->rtm_flags&RTM_F_CLONED)) + return 0; + } if (filter.tb) { - if (filter.tb < 0) { - if (!(r->rtm_flags&RTM_F_CLONED)) - return 0; - } else { - if (r->rtm_flags&RTM_F_CLONED) + if (r->rtm_flags&RTM_F_CLONED) + return 0; + if (filter.tb == RT_TABLE_LOCAL) { + if (r->rtm_type != RTN_LOCAL) return 0; - if (filter.tb == RT_TABLE_LOCAL) { - if (r->rtm_type != RTN_LOCAL) - return 0; - } else if (filter.tb == RT_TABLE_MAIN) { - if (r->rtm_type == RTN_LOCAL) - return 0; - } else { + } else if (filter.tb == RT_TABLE_MAIN) { + if (r->rtm_type == RTN_LOCAL) return 0; - } + } else { + return 0; } } } else { @@ -1045,19 +1045,19 @@ static int iproute_list_or_flush(int arg NEXT_ARG(); if (rtnl_rttable_a2n(&tid, *argv)) { if (strcmp(*argv, "all") == 0) { - tid = 0; + filter.tb = 0; } else if (strcmp(*argv, "cache") == 0) { - tid = -1; + filter.cloned = 1; } else if (strcmp(*argv, "help") == 0) { usage(); } else { invarg("table id value is invalid\n", *argv); } - } - filter.tb = tid; + } else + filter.tb = tid; } else if (matches(*argv, "cached") == 0 || matches(*argv, "cloned") == 0) { - filter.tb = -1; + filter.cloned = 1; } else if (strcmp(*argv, "tos") == 0 || matches(*argv, "dsfield") == 0) { __u32 tos; @@ -1189,7 +1189,7 @@ static int iproute_list_or_flush(int arg char flushb[4096-512]; time_t start = time(0); - if (filter.tb == -1) { + if (filter.cloned) { if (do_ipv6 != AF_INET6) { iproute_flush_cache(); if (show_stats) @@ -1215,7 +1215,7 @@ static int iproute_list_or_flush(int arg } if (filter.flushed == 0) { if (round == 0) { - if (filter.tb != -1 || do_ipv6 == AF_INET6) + if (!filter.cloned || do_ipv6 == AF_INET6) fprintf(stderr, "Nothing to flush.\n"); } else if (show_stats) printf("*** Flush is complete after %d round%s ***\n", round, round>1?"s":""); @@ -1239,7 +1239,7 @@ static int iproute_list_or_flush(int arg } } - if (filter.tb != -1) { + if (!filter.cloned) { if (rtnl_wilddump_request(&rth, do_ipv6, RTM_GETROUTE) < 0) { perror("Cannot send dump request"); exit(1); - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html