]> rtime.felk.cvut.cz Git - lisovros/iproute2_canprio.git/commitdiff
ip: add support for multicast rules
authorPatrick McHardy <kaber@trash.net>
Wed, 9 Jun 2010 15:41:10 +0000 (17:41 +0200)
committerStephen Hemminger <stephen.hemminger@vyatta.com>
Wed, 9 Jun 2010 15:49:24 +0000 (08:49 -0700)
commit 44a5293c1c47b8c32d9bb0756660ea5d4802acf2
Author: Patrick McHardy <kaber@trash.net>
Date:   Tue Apr 13 17:03:47 2010 +0200

    ip: add support for multicast rules

Signed-off-by: Patrick McHardy <kaber@trash.net>
ip/ip.c
ip/ip_common.h
ip/iprule.c

diff --git a/ip/ip.c b/ip/ip.c
index e0cf17534dd6f27b89cf8bc553895b152a58c05d..9f295334da211c1716082efe861313867d9c2cfb 100644 (file)
--- a/ip/ip.c
+++ b/ip/ip.c
@@ -42,7 +42,7 @@ static void usage(void)
 "Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }\n"
 "       ip [ -force ] -batch filename\n"
 "where  OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable |\n"
-"                   tunnel | tuntap | maddr | mroute | monitor | xfrm }\n"
+"                   tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm }\n"
 "       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |\n"
 "                    -f[amily] { inet | inet6 | ipx | dnet | link } |\n"
 "                    -o[neline] | -t[imestamp] | -b[atch] [filename] |\n"
@@ -76,6 +76,7 @@ static const struct cmd {
        { "monitor",    do_ipmonitor },
        { "xfrm",       do_xfrm },
        { "mroute",     do_multiroute },
+       { "mrule",      do_multirule },
        { "help",       do_help },
        { 0 }
 };
index c85766731ea7ca087f6365a8ade9f181efa07e4a..a1141869a3d7f9be4e6dfbe90d25d09b59ef8998 100644 (file)
@@ -37,6 +37,7 @@ extern int do_iplink(int argc, char **argv);
 extern int do_ipmonitor(int argc, char **argv);
 extern int do_multiaddr(int argc, char **argv);
 extern int do_multiroute(int argc, char **argv);
+extern int do_multirule(int argc, char **argv);
 extern int do_xfrm(int argc, char **argv);
 
 static inline int rtm_get_table(struct rtmsg *r, struct rtattr **tb)
index 7140375fc4fdf54ae2f1a4f20bb264e23d79acbe..9c8c6ef6ec31098342a51d2dfcbdf835ea443d05 100644 (file)
@@ -436,3 +436,20 @@ int do_iprule(int argc, char **argv)
        exit(-1);
 }
 
+int do_multirule(int argc, char **argv)
+{
+       switch (preferred_family) {
+       case AF_UNSPEC:
+       case AF_INET:
+               preferred_family = RTNL_FAMILY_IPMR;
+               break;
+       case AF_INET6:
+               preferred_family = RTNL_FAMILY_IP6MR;
+               break;
+       default:
+               fprintf(stderr, "Multicast rules are only supported for IPv4/IPv6\n");
+               exit(-1);
+       }
+
+       return do_iprule(argc, argv);
+}