diff options
-rw-r--r-- | ip/iproute.c | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/ip/iproute.c b/ip/iproute.c index 2b3dcc5d..1669e013 100644 --- a/ip/iproute.c +++ b/ip/iproute.c @@ -1602,6 +1602,30 @@ static int save_route_prep(void) return 0; } +static int iproute_dump_filter(struct nlmsghdr *nlh, int reqlen) +{ + struct rtmsg *rtm = NLMSG_DATA(nlh); + int err; + + rtm->rtm_protocol = filter.protocol; + if (filter.cloned) + rtm->rtm_flags |= RTM_F_CLONED; + + if (filter.tb) { + err = addattr32(nlh, reqlen, RTA_TABLE, filter.tb); + if (err) + return err; + } + + if (filter.oif) { + err = addattr32(nlh, reqlen, RTA_OIF, filter.oif); + if (err) + return err; + } + + return 0; +} + static int iproute_flush(int family, rtnl_filter_t filter_fn) { time_t start = time(0); @@ -1624,7 +1648,7 @@ static int iproute_flush(int family, rtnl_filter_t filter_fn) filter.flushe = sizeof(flushb); for (;;) { - if (rtnl_routedump_req(&rth, family, NULL) < 0) { + if (rtnl_routedump_req(&rth, family, iproute_dump_filter) < 0) { perror("Cannot send dump request"); return -2; } @@ -1664,30 +1688,6 @@ static int iproute_flush(int family, rtnl_filter_t filter_fn) } } -static int iproute_dump_filter(struct nlmsghdr *nlh, int reqlen) -{ - struct rtmsg *rtm = NLMSG_DATA(nlh); - int err; - - rtm->rtm_protocol = filter.protocol; - if (filter.cloned) - rtm->rtm_flags |= RTM_F_CLONED; - - if (filter.tb) { - err = addattr32(nlh, reqlen, RTA_TABLE, filter.tb); - if (err) - return err; - } - - if (filter.oif) { - err = addattr32(nlh, reqlen, RTA_OIF, filter.oif); - if (err) - return err; - } - - return 0; -} - static int iproute_list_flush_or_save(int argc, char **argv, int action) { int dump_family = preferred_family; |