From patchwork Wed Jun 9 15:41:10 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick McHardy X-Patchwork-Id: 55106 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id C02BDB7D1B for ; Thu, 10 Jun 2010 01:41:15 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757418Ab0FIPlJ (ORCPT ); Wed, 9 Jun 2010 11:41:09 -0400 Received: from stinky.trash.net ([213.144.137.162]:36716 "EHLO stinky.trash.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757374Ab0FIPlH (ORCPT ); Wed, 9 Jun 2010 11:41:07 -0400 Received: from [192.168.0.160] (unknown [109.192.188.61]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by stinky.trash.net (Postfix) with ESMTPSA id 7B1D2B2C4F; Wed, 9 Jun 2010 17:41:06 +0200 (MEST) Message-ID: <4C0FB616.3000303@trash.net> Date: Wed, 09 Jun 2010 17:41:10 +0200 From: Patrick McHardy User-Agent: Mozilla-Thunderbird 2.0.0.22 (X11/20091109) MIME-Version: 1.0 To: Stephen Hemminger CC: Linux Netdev List Subject: [PATCH iproute2] ip: add support for multicast rules Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org commit 44a5293c1c47b8c32d9bb0756660ea5d4802acf2 Author: Patrick McHardy Date: Tue Apr 13 17:03:47 2010 +0200 ip: add support for multicast rules Signed-off-by: Patrick McHardy diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index e94981d..0d8ef9e 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h @@ -7,6 +7,13 @@ #include #include +/* 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. ****/ diff --git a/ip/ip.c b/ip/ip.c index e0cf175..9f29533 100644 --- 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 } }; diff --git a/ip/ip_common.h b/ip/ip_common.h index c857667..a114186 100644 --- a/ip/ip_common.h +++ b/ip/ip_common.h @@ -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) diff --git a/ip/iprule.c b/ip/iprule.c index 7140375..9c8c6ef 100644 --- a/ip/iprule.c +++ b/ip/iprule.c @@ -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); +}