ip: add support for multicast rules
Subsystems (2)
PATCH 1/1 ip: add support for multicast rules
commit 44a5293c1c47b8c32d9bb0756660ea5d4802acf2
Author: Patrick McHardy <[email protected]> Date: Tue Apr 13 17:03:47 2010 +0200
ip: add support for multicast rules
Signed-off-by Patrick McHardy <[email protected]>
include/linux/rtnetlink.h +7 -0
@@ -7,6 +7,13 @@#include <linux/if_addr.h> #include <linux/neighbour.h> +/* rtnetlink families. Values up to 127 are reserved for real address +* families, values above 128 may be used arbitrarily. +*/ +#define RTNL_FAMILY_IPMR 128 +#define RTNL_FAMILY_IP6MR 129 +#define RTNL_FAMILY_MAX 129 +/**** * Routing/neighbour discovery messages. ****/
ip/ip.c +2 -1
@@ -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 } };
ip/ip_common.h +1 -0
@@ -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)
ip/iprule.c +17 -0
@@ -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); +}
Stephen Hemminger
AppliedApplied