From fbf0b8af41eb2662c40d0fb932ae85c01ea0743e Mon Sep 17 00:00:00 2001 From: Glenn L McGrath Date: Sat, 26 Apr 2003 02:22:19 +0000 Subject: [PATCH] iPatch from waldi, fixes usage of ip route flush (from)? (match|exact) --- networking/libiproute/iproute.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/networking/libiproute/iproute.c b/networking/libiproute/iproute.c index 3dcafdb6f..70ddf9f41 100644 --- a/networking/libiproute/iproute.c +++ b/networking/libiproute/iproute.c @@ -72,6 +72,8 @@ static int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) int len = n->nlmsg_len; struct rtattr * tb[RTA_MAX+1]; char abuf[256]; + inet_prefix dst; + inet_prefix src; int host_len = -1; SPRINT_BUF(b1); @@ -144,6 +146,18 @@ static int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) memset(tb, 0, sizeof(tb)); parse_rtattr(tb, RTA_MAX, RTM_RTA(r), len); + if (filter.rdst.family && inet_addr_match(&dst, &filter.rdst, filter.rdst.bitlen)) + return 0; + if (filter.mdst.family && filter.mdst.bitlen >= 0 && + inet_addr_match(&dst, &filter.mdst, r->rtm_dst_len)) + return 0; + + if (filter.rsrc.family && inet_addr_match(&src, &filter.rsrc, filter.rsrc.bitlen)) + return 0; + if (filter.msrc.family && filter.msrc.bitlen >= 0 && + inet_addr_match(&src, &filter.msrc, r->rtm_src_len)) + return 0; + if (filter.flushb && r->rtm_family == AF_INET6 && r->rtm_dst_len == 0 &&