From 3a0612c14add62285523c81f28cae6e4110e3555 Mon Sep 17 00:00:00 2001 From: Oliver Hartkopp Date: Tue, 23 Feb 2010 19:13:17 +0000 Subject: [PATCH] Added funtionality to flush all GW jobs in one netlink message. --- cangw.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/cangw.c b/cangw.c index b7fde0d..e4312dc 100644 --- a/cangw.c +++ b/cangw.c @@ -134,7 +134,7 @@ void print_usage(char *prg) fprintf(stderr, "\nUsage: %s [options]\n\n", prg); fprintf(stderr, "Commands: -A (add a new rule)\n"); fprintf(stderr, " -D (delete a rule)\n"); - fprintf(stderr, " -F (flush - delete all rules) [not yet implemented]\n"); + fprintf(stderr, " -F (flush - delete all rules)\n"); fprintf(stderr, " -L (list all rules)\n"); fprintf(stderr, "Mandatory: -s (source netdevice)\n"); fprintf(stderr, " -d (destination netdevice)\n"); @@ -365,6 +365,14 @@ int main(int argc, char **argv) req.nh.nlmsg_type = RTM_DELROUTE; break; + case FLUSH: + req.nh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK; + req.nh.nlmsg_type = RTM_DELROUTE; + /* if_index set to 0 => remove all entries */ + req.rtcan.src_ifindex = 0; + req.rtcan.dst_ifindex = 0; + break; + case LIST: req.nh.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP; req.nh.nlmsg_type = RTM_GETROUTE; @@ -411,7 +419,13 @@ int main(int argc, char **argv) /* clean netlink receive buffer */ bzero(rxbuf, sizeof(rxbuf)); - if (cmd == ADD || cmd == DEL) { + if (cmd != LIST) { + + /* + * cmd == ADD || cmd == DEL || cmd == FLUSH + * + * Parse the requested netlink acknowledge return values. + */ err = recv(s, &rxbuf, sizeof(rxbuf), 0); if (err < 0) { @@ -430,7 +444,7 @@ int main(int argc, char **argv) } else { - /* cmd == LIST (for now) */ + /* cmd == LIST */ while (1) { len = recv(s, &rxbuf, sizeof(rxbuf), 0); -- 2.39.2