]> git.proxmox.com Git - mirror_iproute2.git/blobdiff - ip/iproute.c
iproute: Set flags and attributes on dump to get IPv6 cached routes to be flushed
[mirror_iproute2.git] / ip / iproute.c
index 2b3dcc5dbd53fc2318853f40f35c87c81561e5ff..1669e0138259e7afd4c2b142aadc0c572f018f3f 100644 (file)
@@ -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;