iPatch from waldi, fixes usage of ip route flush (from)? (match|exact)
authorGlenn L McGrath <bug1@ihug.co.nz>
Sat, 26 Apr 2003 02:22:19 +0000 (02:22 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Sat, 26 Apr 2003 02:22:19 +0000 (02:22 -0000)
networking/libiproute/iproute.c

index 3dcafdb6fa9a3314baf4909ff6b2138aa6f01e77..70ddf9f4199543beee68a3be6c42e367e9cf2b55 100644 (file)
@@ -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 &&