From b77caeba0e8809c8e3d22d0cbea42e41f5522fdf Mon Sep 17 00:00:00 2001 From: shemminger Date: Wed, 12 Oct 2005 22:32:34 +0000 Subject: [PATCH] Fix ip rule flush --- ChangeLog | 4 ++++ ip/iprule.c | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 0353f1e0..5de10e8f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2005-10-12 Jamal Hadi Salim + + * Fix ip rule flush, need to reopen rtnl + 2005-10-07 Stephen Hemminger * Reenable ip mroute diff --git a/ip/iprule.c b/ip/iprule.c index cfe252a2..ccf699ff 100644 --- a/ip/iprule.c +++ b/ip/iprule.c @@ -300,6 +300,7 @@ static int iprule_modify(int cmd, int argc, char **argv) static int flush_rule(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) { + struct rtnl_handle rth2; struct rtmsg *r = NLMSG_DATA(n); int len = n->nlmsg_len; struct rtattr * tb[RTA_MAX+1]; @@ -314,8 +315,13 @@ static int flush_rule(const struct sockaddr_nl *who, struct nlmsghdr *n, void *a n->nlmsg_type = RTM_DELRULE; n->nlmsg_flags = NLM_F_REQUEST; - if (rtnl_talk(&rth, n, 0, 0, NULL, NULL, NULL) < 0) + if (rtnl_open(&rth2, 0) < 0) + return -1; + + if (rtnl_talk(&rth2, n, 0, 0, NULL, NULL, NULL) < 0) return -2; + + rtnl_close(&rth2); } return 0;