netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH iproute2 00/21] bridge: complete netlink support
@ 2016-02-08 11:55 Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 01/21] iplink: bridge: export bridge_id and designated_root Nikolay Aleksandrov
                   ` (20 more replies)
  0 siblings, 21 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

Hi,
After I added support for all attributes in the kernel, it's time to make
use of them in iproute2. I've tested changing/viewing all of the
attributes. I'll send a separate set to add support for the ports
attributes.
For the future, adding a switch to change to "seconds.milliseconds" format
for the timers would be helpful (I've stuck to the currently used clock_t
export to be consistent).

Cheers,
 Nik

Nikolay Aleksandrov (21):
  iplink: bridge: export bridge_id and designated_root
  iplink: bridge: export root_(port|path_cost), topology_change and
    change_detected
  iplink: bridge: export read-only timers
  iplink: bridge: add support for IFLA_BR_GROUP_FWD_MASK
  iplink: bridge: add support for IFLA_BR_GROUP_ADDR
  iplink: bridge: add support for IFLA_BR_VLAN_DEFAULT_PVID
  iplink: bridge: add support for IFLA_BR_MCAST_ROUTER
  iplink: bridge: add support for IFLA_BR_MCAST_SNOOPING
  iplink: bridge: add support for IFLA_BR_MCAST_QUERY_USE_IFADDR
  iplink: bridge: add support for IFLA_BR_MCAST_QUERIER
  iplink: bridge: add support for IFLA_BR_MCAST_HASH_ELASTICITY
  iplink: bridge: add support for IFLA_BR_MCAST_HASH_MAX
  iplink: bridge: add support for IFLA_BR_MCAST_LAST_MEMBER_CNT
  iplink: bridge: add support for IFLA_BR_MCAST_STARTUP_QUERY_CNT
  iplink: bridge: add support for IFLA_BR_MCAST_LAST_MEMBER_INTVL
  iplink: bridge: add support for IFLA_BR_MCAST_MEMBERSHIP_INTVL
  iplink: bridge: add support for IFLA_BR_MCAST_QUERIER_INTVL
  iplink: bridge: add support for IFLA_BR_MCAST_QUERY_INTVL
  iplink: bridge: add support for IFLA_BR_MCAST_QUERY_RESPONSE_INTVL
  iplink: bridge: add support for IFLA_BR_MCAST_STARTUP_QUERY_INTVL
  iplink: bridge: add support for netfilter call attributes

 include/utils.h    |   1 -
 ip/iplink_bridge.c | 356 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 356 insertions(+), 1 deletion(-)

-- 
2.4.3

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH iproute2 01/21] iplink: bridge: export bridge_id and designated_root
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 22:21   ` Stephen Hemminger
  2016-02-08 11:55 ` [PATCH iproute2 02/21] iplink: bridge: export root_(port|path_cost), topology_change and change_detected Nikolay Aleksandrov
                   ` (19 subsequent siblings)
  20 siblings, 1 reply; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

Netlink returns the bridge_id and designated_root, we just need to
make them visible.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index 00804093dcb5..6978e58e6b74 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -39,6 +39,15 @@ static void explain(void)
 	print_explain(stderr);
 }
 
+static void br_dump_bridge_id(const struct ifla_bridge_id *id, char *buf,
+			      size_t len)
+{
+	const unsigned char *x = (const unsigned char *)id;
+
+	snprintf(buf, len, "%.2x%.2x.%.2x%.2x%.2x%.2x%.2x%.2x", x[0], x[1],
+		 x[2], x[3], x[4], x[5], x[6], x[7]);
+}
+
 static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 			    struct nlmsghdr *n)
 {
@@ -155,6 +164,22 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 			ll_proto_n2a(rta_getattr_u16(tb[IFLA_BR_VLAN_PROTOCOL]),
 				     b1, sizeof(b1)));
 	}
+
+	if (tb[IFLA_BR_BRIDGE_ID]) {
+		char bridge_id[32];
+
+		br_dump_bridge_id(RTA_DATA(tb[IFLA_BR_BRIDGE_ID]), bridge_id,
+				  sizeof(bridge_id));
+		fprintf(f, "bridge_id %s ", bridge_id);
+	}
+
+	if (tb[IFLA_BR_ROOT_ID]) {
+		char root_id[32];
+
+		br_dump_bridge_id(RTA_DATA(tb[IFLA_BR_BRIDGE_ID]), root_id,
+				  sizeof(root_id));
+		fprintf(f, "designated_root %s ", root_id);
+	}
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 02/21] iplink: bridge: export root_(port|path_cost), topology_change and change_detected
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 01/21] iplink: bridge: export bridge_id and designated_root Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 03/21] iplink: bridge: export read-only timers Nikolay Aleksandrov
                   ` (18 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

Netlink already export these values, we just need to make them visible.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index 6978e58e6b74..d9a725b0be0f 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -180,6 +180,22 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 				  sizeof(root_id));
 		fprintf(f, "designated_root %s ", root_id);
 	}
+
+	if (tb[IFLA_BR_ROOT_PORT])
+		fprintf(f, "root_port %u ",
+			rta_getattr_u16(tb[IFLA_BR_ROOT_PORT]));
+
+	if (tb[IFLA_BR_ROOT_PATH_COST])
+		fprintf(f, "root_path_cost %u ",
+			rta_getattr_u32(tb[IFLA_BR_ROOT_PATH_COST]));
+
+	if (tb[IFLA_BR_TOPOLOGY_CHANGE])
+		fprintf(f, "topology_change %u ",
+			rta_getattr_u8(tb[IFLA_BR_TOPOLOGY_CHANGE]));
+
+	if (tb[IFLA_BR_TOPOLOGY_CHANGE_DETECTED])
+		fprintf(f, "topology_change_detected %u ",
+			rta_getattr_u8(tb[IFLA_BR_TOPOLOGY_CHANGE_DETECTED]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 03/21] iplink: bridge: export read-only timers
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 01/21] iplink: bridge: export bridge_id and designated_root Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 02/21] iplink: bridge: export root_(port|path_cost), topology_change and change_detected Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 22:23   ` Stephen Hemminger
  2016-02-08 11:55 ` [PATCH iproute2 04/21] iplink: bridge: add support for IFLA_BR_GROUP_FWD_MASK Nikolay Aleksandrov
                   ` (17 subsequent siblings)
  20 siblings, 1 reply; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

Netlink already provides hello_timer, tcn_timer, topology_change_timer
and gc_timer, so let's make them visible.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 include/utils.h    |  1 -
 ip/iplink_bridge.c | 16 ++++++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/include/utils.h b/include/utils.h
index 7310f4e0e5db..f109521a904e 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -175,7 +175,6 @@ static inline __u32 nl_mgrp(__u32 group)
 	return group ? (1 << (group - 1)) : 0;
 }
 
-
 int print_timestamp(FILE *fp);
 void print_nlmsg_timestamp(FILE *fp, const struct nlmsghdr *n);
 
diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index d9a725b0be0f..8504be5625fa 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -196,6 +196,22 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_TOPOLOGY_CHANGE_DETECTED])
 		fprintf(f, "topology_change_detected %u ",
 			rta_getattr_u8(tb[IFLA_BR_TOPOLOGY_CHANGE_DETECTED]));
+
+	if (tb[IFLA_BR_HELLO_TIMER])
+		fprintf(f, "hello_timer %llu ",
+			rta_getattr_u64(tb[IFLA_BR_HELLO_TIMER]));
+
+	if (tb[IFLA_BR_TCN_TIMER])
+		fprintf(f, "tcn_timer %llu ",
+			rta_getattr_u64(tb[IFLA_BR_TCN_TIMER]));
+
+	if (tb[IFLA_BR_TOPOLOGY_CHANGE_TIMER])
+		fprintf(f, "topology_change_timer %llu ",
+			rta_getattr_u64(tb[IFLA_BR_TOPOLOGY_CHANGE_TIMER]));
+
+	if (tb[IFLA_BR_GC_TIMER])
+		fprintf(f, "gc_timer %llu ",
+			rta_getattr_u64(tb[IFLA_BR_GC_TIMER]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 04/21] iplink: bridge: add support for IFLA_BR_GROUP_FWD_MASK
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (2 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 03/21] iplink: bridge: export read-only timers Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 05/21] iplink: bridge: add support for IFLA_BR_GROUP_ADDR Nikolay Aleksandrov
                   ` (16 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_GROUP_FWD_MASK attribute
in iproute2 so it can change the group forwarding mask.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index 8504be5625fa..fb448f9f863d 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -27,6 +27,7 @@ static void print_explain(FILE *f)
 		"                  [ ageing_time AGEING_TIME ]\n"
 		"                  [ stp_state STP_STATE ]\n"
 		"                  [ priority PRIORITY ]\n"
+		"                  [ group_fwd_mask MASK ]\n"
 		"                  [ vlan_filtering VLAN_FILTERING ]\n"
 		"                  [ vlan_protocol VLAN_PROTOCOL ]\n"
 		"\n"
@@ -110,6 +111,14 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 				return -1;
 			}
 			addattr16(n, 1024, IFLA_BR_VLAN_PROTOCOL, vlan_proto);
+		} else if (matches(*argv, "group_fwd_mask") == 0) {
+			__u16 fwd_mask;
+
+			NEXT_ARG();
+			if (get_u16(&fwd_mask, *argv, 0))
+				invarg("invalid group_fwd_mask", *argv);
+
+			addattr16(n, 1024, IFLA_BR_GROUP_FWD_MASK, fwd_mask);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -212,6 +221,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_GC_TIMER])
 		fprintf(f, "gc_timer %llu ",
 			rta_getattr_u64(tb[IFLA_BR_GC_TIMER]));
+
+	if (tb[IFLA_BR_GROUP_FWD_MASK])
+		fprintf(f, "group_fwd_mask %#x ",
+			rta_getattr_u16(tb[IFLA_BR_GROUP_FWD_MASK]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 05/21] iplink: bridge: add support for IFLA_BR_GROUP_ADDR
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (3 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 04/21] iplink: bridge: add support for IFLA_BR_GROUP_FWD_MASK Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 06/21] iplink: bridge: add support for IFLA_BR_VLAN_DEFAULT_PVID Nikolay Aleksandrov
                   ` (15 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_GROUP_ADDR attribute
in iproute2 so it can change the group address.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index fb448f9f863d..3d343f7649fe 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -28,6 +28,7 @@ static void print_explain(FILE *f)
 		"                  [ stp_state STP_STATE ]\n"
 		"                  [ priority PRIORITY ]\n"
 		"                  [ group_fwd_mask MASK ]\n"
+		"                  [ group_address ADDRESS ]\n"
 		"                  [ vlan_filtering VLAN_FILTERING ]\n"
 		"                  [ vlan_protocol VLAN_PROTOCOL ]\n"
 		"\n"
@@ -119,6 +120,15 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 				invarg("invalid group_fwd_mask", *argv);
 
 			addattr16(n, 1024, IFLA_BR_GROUP_FWD_MASK, fwd_mask);
+		} else if (matches(*argv, "group_address") == 0) {
+			char llabuf[32];
+			int len;
+
+			NEXT_ARG();
+			len = ll_addr_a2n(llabuf, sizeof(llabuf), *argv);
+			if (len < 0)
+				return -1;
+			addattr_l(n, 1024, IFLA_BR_GROUP_ADDR, llabuf, len);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -225,6 +235,15 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_GROUP_FWD_MASK])
 		fprintf(f, "group_fwd_mask %#x ",
 			rta_getattr_u16(tb[IFLA_BR_GROUP_FWD_MASK]));
+
+	if (tb[IFLA_BR_GROUP_ADDR]) {
+		SPRINT_BUF(mac);
+
+		fprintf(f, "group_address %s ",
+			ll_addr_n2a(RTA_DATA(tb[IFLA_BR_GROUP_ADDR]),
+				    RTA_PAYLOAD(tb[IFLA_BR_GROUP_ADDR]),
+				    1 /*ARPHDR_ETHER*/, mac, sizeof(mac)));
+	}
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 06/21] iplink: bridge: add support for IFLA_BR_VLAN_DEFAULT_PVID
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (4 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 05/21] iplink: bridge: add support for IFLA_BR_GROUP_ADDR Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 07/21] iplink: bridge: add support for IFLA_BR_MCAST_ROUTER Nikolay Aleksandrov
                   ` (14 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_VLAN_DEFAULT_PVID
attribute in iproute2 so it can change the default pvid.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index 3d343f7649fe..e8bc66b498b3 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -31,6 +31,7 @@ static void print_explain(FILE *f)
 		"                  [ group_address ADDRESS ]\n"
 		"                  [ vlan_filtering VLAN_FILTERING ]\n"
 		"                  [ vlan_protocol VLAN_PROTOCOL ]\n"
+		"                  [ vlan_default_pvid VLAN_DEFAULT_PVID ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -129,6 +130,15 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 			if (len < 0)
 				return -1;
 			addattr_l(n, 1024, IFLA_BR_GROUP_ADDR, llabuf, len);
+		} else if (matches(*argv, "vlan_default_pvid") == 0) {
+			__u16 default_pvid;
+
+			NEXT_ARG();
+			if (get_u16(&default_pvid, *argv, 0))
+				invarg("invalid vlan_default_pvid", *argv);
+
+			addattr16(n, 1024, IFLA_BR_VLAN_DEFAULT_PVID,
+				  default_pvid);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -232,6 +242,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 		fprintf(f, "gc_timer %llu ",
 			rta_getattr_u64(tb[IFLA_BR_GC_TIMER]));
 
+	if (tb[IFLA_BR_VLAN_DEFAULT_PVID])
+		fprintf(f, "vlan_default_pvid %u ",
+			rta_getattr_u16(tb[IFLA_BR_VLAN_DEFAULT_PVID]));
+
 	if (tb[IFLA_BR_GROUP_FWD_MASK])
 		fprintf(f, "group_fwd_mask %#x ",
 			rta_getattr_u16(tb[IFLA_BR_GROUP_FWD_MASK]));
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 07/21] iplink: bridge: add support for IFLA_BR_MCAST_ROUTER
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (5 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 06/21] iplink: bridge: add support for IFLA_BR_VLAN_DEFAULT_PVID Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 08/21] iplink: bridge: add support for IFLA_BR_MCAST_SNOOPING Nikolay Aleksandrov
                   ` (13 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_ROUTER attribute
in iproute2 so it can change the multicast router value.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index e8bc66b498b3..11577a8994a3 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -32,6 +32,7 @@ static void print_explain(FILE *f)
 		"                  [ vlan_filtering VLAN_FILTERING ]\n"
 		"                  [ vlan_protocol VLAN_PROTOCOL ]\n"
 		"                  [ vlan_default_pvid VLAN_DEFAULT_PVID ]\n"
+		"                  [ mcast_router MULTICAST_ROUTER ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -139,6 +140,14 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 
 			addattr16(n, 1024, IFLA_BR_VLAN_DEFAULT_PVID,
 				  default_pvid);
+		} else if (matches(*argv, "mcast_router") == 0) {
+			__u8 mcast_router;
+
+			NEXT_ARG();
+			if (get_u8(&mcast_router, *argv, 0))
+				invarg("invalid mcast_router", *argv);
+
+			addattr8(n, 1024, IFLA_BR_MCAST_ROUTER, mcast_router);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -258,6 +267,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 				    RTA_PAYLOAD(tb[IFLA_BR_GROUP_ADDR]),
 				    1 /*ARPHDR_ETHER*/, mac, sizeof(mac)));
 	}
+
+	if (tb[IFLA_BR_MCAST_ROUTER])
+		fprintf(f, "mcast_router %u ",
+			rta_getattr_u8(tb[IFLA_BR_MCAST_ROUTER]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 08/21] iplink: bridge: add support for IFLA_BR_MCAST_SNOOPING
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (6 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 07/21] iplink: bridge: add support for IFLA_BR_MCAST_ROUTER Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 09/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERY_USE_IFADDR Nikolay Aleksandrov
                   ` (12 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_SNOOPING attribute
in iproute2 so it can change the multicast snooping value.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index 11577a8994a3..208d155df440 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -32,6 +32,7 @@ static void print_explain(FILE *f)
 		"                  [ vlan_filtering VLAN_FILTERING ]\n"
 		"                  [ vlan_protocol VLAN_PROTOCOL ]\n"
 		"                  [ vlan_default_pvid VLAN_DEFAULT_PVID ]\n"
+		"                  [ mcast_snooping MULTICAST_SNOOPING ]\n"
 		"                  [ mcast_router MULTICAST_ROUTER ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
@@ -148,6 +149,14 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 				invarg("invalid mcast_router", *argv);
 
 			addattr8(n, 1024, IFLA_BR_MCAST_ROUTER, mcast_router);
+		} else if (matches(*argv, "mcast_snooping") == 0) {
+			__u8 mcast_snoop;
+
+			NEXT_ARG();
+			if (get_u8(&mcast_snoop, *argv, 0))
+				invarg("invalid mcast_snooping", *argv);
+
+			addattr8(n, 1024, IFLA_BR_MCAST_SNOOPING, mcast_snoop);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -268,6 +277,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 				    1 /*ARPHDR_ETHER*/, mac, sizeof(mac)));
 	}
 
+	if (tb[IFLA_BR_MCAST_SNOOPING])
+		fprintf(f, "mcast_snooping %u ",
+			rta_getattr_u8(tb[IFLA_BR_MCAST_SNOOPING]));
+
 	if (tb[IFLA_BR_MCAST_ROUTER])
 		fprintf(f, "mcast_router %u ",
 			rta_getattr_u8(tb[IFLA_BR_MCAST_ROUTER]));
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 09/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERY_USE_IFADDR
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (7 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 08/21] iplink: bridge: add support for IFLA_BR_MCAST_SNOOPING Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 10/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERIER Nikolay Aleksandrov
                   ` (11 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_QUERY_USE_IFADDR
attribute in iproute2 so it can toggle the multicast_query_use_ifaddr val.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index 208d155df440..30f7b8014e2a 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -34,6 +34,7 @@ static void print_explain(FILE *f)
 		"                  [ vlan_default_pvid VLAN_DEFAULT_PVID ]\n"
 		"                  [ mcast_snooping MULTICAST_SNOOPING ]\n"
 		"                  [ mcast_router MULTICAST_ROUTER ]\n"
+		"                  [ mcast_query_use_ifaddr MCAST_QUERY_USE_IFADDR ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -157,6 +158,16 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 				invarg("invalid mcast_snooping", *argv);
 
 			addattr8(n, 1024, IFLA_BR_MCAST_SNOOPING, mcast_snoop);
+		} else if (matches(*argv, "mcast_query_use_ifaddr") == 0) {
+			__u8 mcast_qui;
+
+			NEXT_ARG();
+			if (get_u8(&mcast_qui, *argv, 0))
+				invarg("invalid mcast_query_use_ifaddr",
+				       *argv);
+
+			addattr8(n, 1024, IFLA_BR_MCAST_QUERY_USE_IFADDR,
+				 mcast_qui);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -284,6 +295,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_MCAST_ROUTER])
 		fprintf(f, "mcast_router %u ",
 			rta_getattr_u8(tb[IFLA_BR_MCAST_ROUTER]));
+
+	if (tb[IFLA_BR_MCAST_QUERY_USE_IFADDR])
+		fprintf(f, "mcast_query_use_ifaddr %u ",
+			rta_getattr_u8(tb[IFLA_BR_MCAST_QUERY_USE_IFADDR]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 10/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERIER
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (8 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 09/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERY_USE_IFADDR Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 11/21] iplink: bridge: add support for IFLA_BR_MCAST_HASH_ELASTICITY Nikolay Aleksandrov
                   ` (10 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_QUERIER attribute
in iproute2 so it can toggle the mcast querier value.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index 30f7b8014e2a..0d5c70312f1d 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -35,6 +35,7 @@ static void print_explain(FILE *f)
 		"                  [ mcast_snooping MULTICAST_SNOOPING ]\n"
 		"                  [ mcast_router MULTICAST_ROUTER ]\n"
 		"                  [ mcast_query_use_ifaddr MCAST_QUERY_USE_IFADDR ]\n"
+		"                  [ mcast_querier MULTICAST_QUERIER ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -168,6 +169,14 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 
 			addattr8(n, 1024, IFLA_BR_MCAST_QUERY_USE_IFADDR,
 				 mcast_qui);
+		} else if (matches(*argv, "mcast_querier") == 0) {
+			__u8 mcast_querier;
+
+			NEXT_ARG();
+			if (get_u8(&mcast_querier, *argv, 0))
+				invarg("invalid mcast_querier", *argv);
+
+			addattr8(n, 1024, IFLA_BR_MCAST_QUERIER, mcast_querier);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -299,6 +308,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_MCAST_QUERY_USE_IFADDR])
 		fprintf(f, "mcast_query_use_ifaddr %u ",
 			rta_getattr_u8(tb[IFLA_BR_MCAST_QUERY_USE_IFADDR]));
+
+	if (tb[IFLA_BR_MCAST_QUERIER])
+		fprintf(f, "mcast_querier %u ",
+			rta_getattr_u8(tb[IFLA_BR_MCAST_QUERIER]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 11/21] iplink: bridge: add support for IFLA_BR_MCAST_HASH_ELASTICITY
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (9 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 10/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERIER Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 12/21] iplink: bridge: add support for IFLA_BR_MCAST_HASH_MAX Nikolay Aleksandrov
                   ` (9 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_HASH_ELASTICTITY
attribute in iproute2 so it can change the hash elasticity value.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index 0d5c70312f1d..14aae3e9b0d2 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -36,6 +36,7 @@ static void print_explain(FILE *f)
 		"                  [ mcast_router MULTICAST_ROUTER ]\n"
 		"                  [ mcast_query_use_ifaddr MCAST_QUERY_USE_IFADDR ]\n"
 		"                  [ mcast_querier MULTICAST_QUERIER ]\n"
+		"                  [ mcast_hash_elasticity HASH_ELASTICITY ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -177,6 +178,16 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 				invarg("invalid mcast_querier", *argv);
 
 			addattr8(n, 1024, IFLA_BR_MCAST_QUERIER, mcast_querier);
+		} else if (matches(*argv, "mcast_hash_elasticity") == 0) {
+			__u32 mcast_hash_el;
+
+			NEXT_ARG();
+			if (get_u32(&mcast_hash_el, *argv, 0))
+				invarg("invalid mcast_hash_elasticity",
+				       *argv);
+
+			addattr32(n, 1024, IFLA_BR_MCAST_HASH_ELASTICITY,
+				  mcast_hash_el);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -312,6 +323,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_MCAST_QUERIER])
 		fprintf(f, "mcast_querier %u ",
 			rta_getattr_u8(tb[IFLA_BR_MCAST_QUERIER]));
+
+	if (tb[IFLA_BR_MCAST_HASH_ELASTICITY])
+		fprintf(f, "mcast_hash_elasticity %u ",
+			rta_getattr_u32(tb[IFLA_BR_MCAST_HASH_ELASTICITY]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 12/21] iplink: bridge: add support for IFLA_BR_MCAST_HASH_MAX
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (10 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 11/21] iplink: bridge: add support for IFLA_BR_MCAST_HASH_ELASTICITY Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 13/21] iplink: bridge: add support for IFLA_BR_MCAST_LAST_MEMBER_CNT Nikolay Aleksandrov
                   ` (8 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_HASH_MAX attribute
in iproute2 so it can change the maximum hashed entries.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index 14aae3e9b0d2..d15bd45dcdf6 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -37,6 +37,7 @@ static void print_explain(FILE *f)
 		"                  [ mcast_query_use_ifaddr MCAST_QUERY_USE_IFADDR ]\n"
 		"                  [ mcast_querier MULTICAST_QUERIER ]\n"
 		"                  [ mcast_hash_elasticity HASH_ELASTICITY ]\n"
+		"                  [ mcast_hash_max HASH_MAX ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -188,6 +189,15 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 
 			addattr32(n, 1024, IFLA_BR_MCAST_HASH_ELASTICITY,
 				  mcast_hash_el);
+		} else if (matches(*argv, "mcast_hash_max") == 0) {
+			__u32 mcast_hash_max;
+
+			NEXT_ARG();
+			if (get_u32(&mcast_hash_max, *argv, 0))
+				invarg("invalid mcast_hash_max", *argv);
+
+			addattr32(n, 1024, IFLA_BR_MCAST_HASH_MAX,
+				  mcast_hash_max);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -327,6 +337,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_MCAST_HASH_ELASTICITY])
 		fprintf(f, "mcast_hash_elasticity %u ",
 			rta_getattr_u32(tb[IFLA_BR_MCAST_HASH_ELASTICITY]));
+
+	if (tb[IFLA_BR_MCAST_HASH_MAX])
+		fprintf(f, "mcast_hash_max %u ",
+			rta_getattr_u32(tb[IFLA_BR_MCAST_HASH_MAX]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 13/21] iplink: bridge: add support for IFLA_BR_MCAST_LAST_MEMBER_CNT
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (11 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 12/21] iplink: bridge: add support for IFLA_BR_MCAST_HASH_MAX Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 14/21] iplink: bridge: add support for IFLA_BR_MCAST_STARTUP_QUERY_CNT Nikolay Aleksandrov
                   ` (7 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_LAST_MEMBER_CNT
attribute in iproute2 so it can change the last member count value.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index d15bd45dcdf6..d98b126698e2 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -38,6 +38,7 @@ static void print_explain(FILE *f)
 		"                  [ mcast_querier MULTICAST_QUERIER ]\n"
 		"                  [ mcast_hash_elasticity HASH_ELASTICITY ]\n"
 		"                  [ mcast_hash_max HASH_MAX ]\n"
+		"                  [ mcast_last_member_count LAST_MEMBER_COUNT ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -198,6 +199,16 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 
 			addattr32(n, 1024, IFLA_BR_MCAST_HASH_MAX,
 				  mcast_hash_max);
+		} else if (matches(*argv, "mcast_last_member_count") == 0) {
+			__u32 mcast_lmc;
+
+			NEXT_ARG();
+			if (get_u32(&mcast_lmc, *argv, 0))
+				invarg("invalid mcast_last_member_count",
+				       *argv);
+
+			addattr32(n, 1024, IFLA_BR_MCAST_LAST_MEMBER_CNT,
+				  mcast_lmc);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -341,6 +352,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_MCAST_HASH_MAX])
 		fprintf(f, "mcast_hash_max %u ",
 			rta_getattr_u32(tb[IFLA_BR_MCAST_HASH_MAX]));
+
+	if (tb[IFLA_BR_MCAST_LAST_MEMBER_CNT])
+		fprintf(f, "mcast_last_member_count %u ",
+			rta_getattr_u32(tb[IFLA_BR_MCAST_LAST_MEMBER_CNT]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 14/21] iplink: bridge: add support for IFLA_BR_MCAST_STARTUP_QUERY_CNT
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (12 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 13/21] iplink: bridge: add support for IFLA_BR_MCAST_LAST_MEMBER_CNT Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 15/21] iplink: bridge: add support for IFLA_BR_MCAST_LAST_MEMBER_INTVL Nikolay Aleksandrov
                   ` (6 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_STARTUP_QUERY_CNT
attribute in iproute2 so it can change the startup query count.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index d98b126698e2..d10a9255eb56 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -39,6 +39,7 @@ static void print_explain(FILE *f)
 		"                  [ mcast_hash_elasticity HASH_ELASTICITY ]\n"
 		"                  [ mcast_hash_max HASH_MAX ]\n"
 		"                  [ mcast_last_member_count LAST_MEMBER_COUNT ]\n"
+		"                  [ mcast_startup_query_count STARTUP_QUERY_COUNT ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -209,6 +210,16 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 
 			addattr32(n, 1024, IFLA_BR_MCAST_LAST_MEMBER_CNT,
 				  mcast_lmc);
+		} else if (matches(*argv, "mcast_startup_query_count") == 0) {
+			__u32 mcast_sqc;
+
+			NEXT_ARG();
+			if (get_u32(&mcast_sqc, *argv, 0))
+				invarg("invalid mcast_startup_query_count",
+				       *argv);
+
+			addattr32(n, 1024, IFLA_BR_MCAST_STARTUP_QUERY_CNT,
+				  mcast_sqc);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -356,6 +367,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_MCAST_LAST_MEMBER_CNT])
 		fprintf(f, "mcast_last_member_count %u ",
 			rta_getattr_u32(tb[IFLA_BR_MCAST_LAST_MEMBER_CNT]));
+
+	if (tb[IFLA_BR_MCAST_STARTUP_QUERY_CNT])
+		fprintf(f, "mcast_startup_query_count %u ",
+			rta_getattr_u32(tb[IFLA_BR_MCAST_STARTUP_QUERY_CNT]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 15/21] iplink: bridge: add support for IFLA_BR_MCAST_LAST_MEMBER_INTVL
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (13 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 14/21] iplink: bridge: add support for IFLA_BR_MCAST_STARTUP_QUERY_CNT Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 16/21] iplink: bridge: add support for IFLA_BR_MCAST_MEMBERSHIP_INTVL Nikolay Aleksandrov
                   ` (5 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_LAST_MEMBER_INTVL
attribute in iproute2 so it can change the last member interval.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index d10a9255eb56..f2f52e078dbd 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -40,6 +40,7 @@ static void print_explain(FILE *f)
 		"                  [ mcast_hash_max HASH_MAX ]\n"
 		"                  [ mcast_last_member_count LAST_MEMBER_COUNT ]\n"
 		"                  [ mcast_startup_query_count STARTUP_QUERY_COUNT ]\n"
+		"                  [ mcast_last_member_interval LAST_MEMBER_INTERVAL ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -220,6 +221,16 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 
 			addattr32(n, 1024, IFLA_BR_MCAST_STARTUP_QUERY_CNT,
 				  mcast_sqc);
+		} else if (matches(*argv, "mcast_last_member_interval") == 0) {
+			__u64 mcast_last_member_intvl;
+
+			NEXT_ARG();
+			if (get_u64(&mcast_last_member_intvl, *argv, 0))
+				invarg("invalid mcast_last_member_interval",
+				       *argv);
+
+			addattr64(n, 1024, IFLA_BR_MCAST_LAST_MEMBER_INTVL,
+				  mcast_last_member_intvl);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -371,6 +382,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_MCAST_STARTUP_QUERY_CNT])
 		fprintf(f, "mcast_startup_query_count %u ",
 			rta_getattr_u32(tb[IFLA_BR_MCAST_STARTUP_QUERY_CNT]));
+
+	if (tb[IFLA_BR_MCAST_LAST_MEMBER_INTVL])
+		fprintf(f, "mcast_last_member_interval %llu ",
+			rta_getattr_u64(tb[IFLA_BR_MCAST_LAST_MEMBER_INTVL]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 16/21] iplink: bridge: add support for IFLA_BR_MCAST_MEMBERSHIP_INTVL
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (14 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 15/21] iplink: bridge: add support for IFLA_BR_MCAST_LAST_MEMBER_INTVL Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 17/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERIER_INTVL Nikolay Aleksandrov
                   ` (4 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_MEMBERSHIP_INTVL
attribute in iproute2 so it can change the membership interval.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index f2f52e078dbd..9a6c9418ff0f 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -41,6 +41,7 @@ static void print_explain(FILE *f)
 		"                  [ mcast_last_member_count LAST_MEMBER_COUNT ]\n"
 		"                  [ mcast_startup_query_count STARTUP_QUERY_COUNT ]\n"
 		"                  [ mcast_last_member_interval LAST_MEMBER_INTERVAL ]\n"
+		"                  [ mcast_membership_interval MEMBERSHIP_INTERVAL ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -231,6 +232,17 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 
 			addattr64(n, 1024, IFLA_BR_MCAST_LAST_MEMBER_INTVL,
 				  mcast_last_member_intvl);
+		} else if (matches(*argv, "mcast_membership_interval") == 0) {
+			__u64 mcast_membership_intvl;
+
+			NEXT_ARG();
+			if (get_u64(&mcast_membership_intvl, *argv, 0)) {
+				invarg("invalid mcast_membership_interval",
+				       *argv);
+				return -1;
+			}
+			addattr64(n, 1024, IFLA_BR_MCAST_MEMBERSHIP_INTVL,
+				  mcast_membership_intvl);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -386,6 +398,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_MCAST_LAST_MEMBER_INTVL])
 		fprintf(f, "mcast_last_member_interval %llu ",
 			rta_getattr_u64(tb[IFLA_BR_MCAST_LAST_MEMBER_INTVL]));
+
+	if (tb[IFLA_BR_MCAST_MEMBERSHIP_INTVL])
+		fprintf(f, "mcast_membership_interval %llu ",
+			rta_getattr_u64(tb[IFLA_BR_MCAST_MEMBERSHIP_INTVL]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 17/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERIER_INTVL
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (15 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 16/21] iplink: bridge: add support for IFLA_BR_MCAST_MEMBERSHIP_INTVL Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 18/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERY_INTVL Nikolay Aleksandrov
                   ` (3 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_QUERIER_INTVL
attribute in iproute2 so it can change the querier interval.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index 9a6c9418ff0f..f896f54aa6f8 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -42,6 +42,7 @@ static void print_explain(FILE *f)
 		"                  [ mcast_startup_query_count STARTUP_QUERY_COUNT ]\n"
 		"                  [ mcast_last_member_interval LAST_MEMBER_INTERVAL ]\n"
 		"                  [ mcast_membership_interval MEMBERSHIP_INTERVAL ]\n"
+		"                  [ mcast_querier_interval QUERIER_INTERVAL ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -243,6 +244,17 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 			}
 			addattr64(n, 1024, IFLA_BR_MCAST_MEMBERSHIP_INTVL,
 				  mcast_membership_intvl);
+		} else if (matches(*argv, "mcast_querier_interval") == 0) {
+			__u64 mcast_querier_intvl;
+
+			NEXT_ARG();
+			if (get_u64(&mcast_querier_intvl, *argv, 0)) {
+				invarg("invalid mcast_querier_interval",
+				       *argv);
+				return -1;
+			}
+			addattr64(n, 1024, IFLA_BR_MCAST_QUERIER_INTVL,
+				  mcast_querier_intvl);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -402,6 +414,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_MCAST_MEMBERSHIP_INTVL])
 		fprintf(f, "mcast_membership_interval %llu ",
 			rta_getattr_u64(tb[IFLA_BR_MCAST_MEMBERSHIP_INTVL]));
+
+	if (tb[IFLA_BR_MCAST_QUERIER_INTVL])
+		fprintf(f, "mcast_querier_interval %llu ",
+			rta_getattr_u64(tb[IFLA_BR_MCAST_QUERIER_INTVL]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 18/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERY_INTVL
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (16 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 17/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERIER_INTVL Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 19/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERY_RESPONSE_INTVL Nikolay Aleksandrov
                   ` (2 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_QUERY_INTVL attribute
in iproute2 so it can change the query interval.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index f896f54aa6f8..c5e1fcc6b9a9 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -43,6 +43,7 @@ static void print_explain(FILE *f)
 		"                  [ mcast_last_member_interval LAST_MEMBER_INTERVAL ]\n"
 		"                  [ mcast_membership_interval MEMBERSHIP_INTERVAL ]\n"
 		"                  [ mcast_querier_interval QUERIER_INTERVAL ]\n"
+		"                  [ mcast_query_interval QUERY_INTERVAL ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -255,6 +256,17 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 			}
 			addattr64(n, 1024, IFLA_BR_MCAST_QUERIER_INTVL,
 				  mcast_querier_intvl);
+		} else if (matches(*argv, "mcast_query_interval") == 0) {
+			__u64 mcast_query_intvl;
+
+			NEXT_ARG();
+			if (get_u64(&mcast_query_intvl, *argv, 0)) {
+				invarg("invalid mcast_query_interval",
+				       *argv);
+				return -1;
+			}
+			addattr64(n, 1024, IFLA_BR_MCAST_QUERY_INTVL,
+				  mcast_query_intvl);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -418,6 +430,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_MCAST_QUERIER_INTVL])
 		fprintf(f, "mcast_querier_interval %llu ",
 			rta_getattr_u64(tb[IFLA_BR_MCAST_QUERIER_INTVL]));
+
+	if (tb[IFLA_BR_MCAST_QUERY_INTVL])
+		fprintf(f, "mcast_query_interval %llu ",
+			rta_getattr_u64(tb[IFLA_BR_MCAST_QUERY_INTVL]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 19/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERY_RESPONSE_INTVL
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (17 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 18/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERY_INTVL Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 20/21] iplink: bridge: add support for IFLA_BR_MCAST_STARTUP_QUERY_INTVL Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 21/21] iplink: bridge: add support for netfilter call attributes Nikolay Aleksandrov
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_QUERY_RESPONSE_INTVL
attribute in iproute2 so it can change the query response interval.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index c5e1fcc6b9a9..063b87142882 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -44,6 +44,7 @@ static void print_explain(FILE *f)
 		"                  [ mcast_membership_interval MEMBERSHIP_INTERVAL ]\n"
 		"                  [ mcast_querier_interval QUERIER_INTERVAL ]\n"
 		"                  [ mcast_query_interval QUERY_INTERVAL ]\n"
+		"                  [ mcast_query_response_interval QUERY_RESPONSE_INTERVAL ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -267,6 +268,17 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 			}
 			addattr64(n, 1024, IFLA_BR_MCAST_QUERY_INTVL,
 				  mcast_query_intvl);
+		} else if (!matches(*argv, "mcast_query_response_interval")) {
+			__u64 mcast_query_resp_intvl;
+
+			NEXT_ARG();
+			if (get_u64(&mcast_query_resp_intvl, *argv, 0)) {
+				invarg("invalid mcast_query_response_interval",
+				       *argv);
+				return -1;
+			}
+			addattr64(n, 1024, IFLA_BR_MCAST_QUERY_RESPONSE_INTVL,
+				  mcast_query_resp_intvl);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -434,6 +446,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_MCAST_QUERY_INTVL])
 		fprintf(f, "mcast_query_interval %llu ",
 			rta_getattr_u64(tb[IFLA_BR_MCAST_QUERY_INTVL]));
+
+	if (tb[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL])
+		fprintf(f, "mcast_query_response_interval %llu ",
+			rta_getattr_u64(tb[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 20/21] iplink: bridge: add support for IFLA_BR_MCAST_STARTUP_QUERY_INTVL
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (18 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 19/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERY_RESPONSE_INTVL Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  2016-02-08 11:55 ` [PATCH iproute2 21/21] iplink: bridge: add support for netfilter call attributes Nikolay Aleksandrov
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_MCAST_STARTUP_QUERY_INTVL
attribute in iproute2 so it can change the startup query interval.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index 063b87142882..b531cb131e7c 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -45,6 +45,7 @@ static void print_explain(FILE *f)
 		"                  [ mcast_querier_interval QUERIER_INTERVAL ]\n"
 		"                  [ mcast_query_interval QUERY_INTERVAL ]\n"
 		"                  [ mcast_query_response_interval QUERY_RESPONSE_INTERVAL ]\n"
+		"                  [ mcast_startup_query_interval STARTUP_QUERY_INTERVAL ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -279,6 +280,17 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 			}
 			addattr64(n, 1024, IFLA_BR_MCAST_QUERY_RESPONSE_INTVL,
 				  mcast_query_resp_intvl);
+		} else if (!matches(*argv, "mcast_startup_query_interval")) {
+			__u64 mcast_startup_query_intvl;
+
+			NEXT_ARG();
+			if (get_u64(&mcast_startup_query_intvl, *argv, 0)) {
+				invarg("invalid mcast_startup_query_interval",
+				       *argv);
+				return -1;
+			}
+			addattr64(n, 1024, IFLA_BR_MCAST_STARTUP_QUERY_INTVL,
+				  mcast_startup_query_intvl);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -450,6 +462,10 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL])
 		fprintf(f, "mcast_query_response_interval %llu ",
 			rta_getattr_u64(tb[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL]));
+
+	if (tb[IFLA_BR_MCAST_STARTUP_QUERY_INTVL])
+		fprintf(f, "mcast_startup_query_interval %llu ",
+			rta_getattr_u64(tb[IFLA_BR_MCAST_STARTUP_QUERY_INTVL]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH iproute2 21/21] iplink: bridge: add support for netfilter call attributes
  2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
                   ` (19 preceding siblings ...)
  2016-02-08 11:55 ` [PATCH iproute2 20/21] iplink: bridge: add support for IFLA_BR_MCAST_STARTUP_QUERY_INTVL Nikolay Aleksandrov
@ 2016-02-08 11:55 ` Nikolay Aleksandrov
  20 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 11:55 UTC (permalink / raw)
  To: netdev; +Cc: roopa, stephen, Nikolay Aleksandrov

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

This patch implements support for the IFLA_BR_NF_CALL_(IP|IP6|ARP)TABLES
attributes in iproute2 so it can change their values.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 ip/iplink_bridge.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c
index b531cb131e7c..05e27fca021b 100644
--- a/ip/iplink_bridge.c
+++ b/ip/iplink_bridge.c
@@ -46,6 +46,9 @@ static void print_explain(FILE *f)
 		"                  [ mcast_query_interval QUERY_INTERVAL ]\n"
 		"                  [ mcast_query_response_interval QUERY_RESPONSE_INTERVAL ]\n"
 		"                  [ mcast_startup_query_interval STARTUP_QUERY_INTERVAL ]\n"
+		"                  [ nf_call_iptables NF_CALL_IPTABLES ]\n"
+		"                  [ nf_call_ip6tables NF_CALL_IP6TABLES ]\n"
+		"                  [ nf_call_arptables NF_CALL_ARPTABLES ]\n"
 		"\n"
 		"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
 	);
@@ -291,6 +294,36 @@ static int bridge_parse_opt(struct link_util *lu, int argc, char **argv,
 			}
 			addattr64(n, 1024, IFLA_BR_MCAST_STARTUP_QUERY_INTVL,
 				  mcast_startup_query_intvl);
+		} else if (matches(*argv, "nf_call_iptables") == 0) {
+			__u8 nf_call_ipt;
+
+			NEXT_ARG();
+			if (get_u8(&nf_call_ipt, *argv, 0)) {
+				invarg("invalid nf_call_iptables", *argv);
+				return -1;
+			}
+			addattr8(n, 1024, IFLA_BR_NF_CALL_IPTABLES,
+				 nf_call_ipt);
+		} else if (matches(*argv, "nf_call_ip6tables") == 0) {
+			__u8 nf_call_ip6t;
+
+			NEXT_ARG();
+			if (get_u8(&nf_call_ip6t, *argv, 0)) {
+				invarg("invalid nf_call_ip6tables", *argv);
+				return -1;
+			}
+			addattr8(n, 1024, IFLA_BR_NF_CALL_IP6TABLES,
+				 nf_call_ip6t);
+		} else if (matches(*argv, "nf_call_arptables") == 0) {
+			__u8 nf_call_arpt;
+
+			NEXT_ARG();
+			if (get_u8(&nf_call_arpt, *argv, 0)) {
+				invarg("invalid nf_call_arptables", *argv);
+				return -1;
+			}
+			addattr8(n, 1024, IFLA_BR_NF_CALL_ARPTABLES,
+				 nf_call_arpt);
 		} else if (matches(*argv, "help") == 0) {
 			explain();
 			return -1;
@@ -466,6 +499,18 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_BR_MCAST_STARTUP_QUERY_INTVL])
 		fprintf(f, "mcast_startup_query_interval %llu ",
 			rta_getattr_u64(tb[IFLA_BR_MCAST_STARTUP_QUERY_INTVL]));
+
+	if (tb[IFLA_BR_NF_CALL_IPTABLES])
+		fprintf(f, "nf_call_iptables %u ",
+			rta_getattr_u8(tb[IFLA_BR_NF_CALL_IPTABLES]));
+
+	if (tb[IFLA_BR_NF_CALL_IP6TABLES])
+		fprintf(f, "nf_call_ip6tables %u ",
+			rta_getattr_u8(tb[IFLA_BR_NF_CALL_IP6TABLES]));
+
+	if (tb[IFLA_BR_NF_CALL_ARPTABLES])
+		fprintf(f, "nf_call_arptables %u ",
+			rta_getattr_u8(tb[IFLA_BR_NF_CALL_ARPTABLES]));
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH iproute2 01/21] iplink: bridge: export bridge_id and designated_root
  2016-02-08 11:55 ` [PATCH iproute2 01/21] iplink: bridge: export bridge_id and designated_root Nikolay Aleksandrov
@ 2016-02-08 22:21   ` Stephen Hemminger
  2016-02-08 22:25     ` Nikolay Aleksandrov
  0 siblings, 1 reply; 27+ messages in thread
From: Stephen Hemminger @ 2016-02-08 22:21 UTC (permalink / raw)
  To: Nikolay Aleksandrov; +Cc: netdev, roopa, Nikolay Aleksandrov

On Mon,  8 Feb 2016 12:55:07 +0100
Nikolay Aleksandrov <razor@blackwall.org> wrote:

>  
> +static void br_dump_bridge_id(const struct ifla_bridge_id *id, char *buf,
> +			      size_t len)
> +{
> +	const unsigned char *x = (const unsigned char *)id;
> +
> +	snprintf(buf, len, "%.2x%.2x.%.2x%.2x%.2x%.2x%.2x%.2x", x[0], x[1],
> +		 x[2], x[3], x[4], x[5], x[6], x[7]);
> +}

Please don't reinvent ether_ntoa_r

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH iproute2 03/21] iplink: bridge: export read-only timers
  2016-02-08 11:55 ` [PATCH iproute2 03/21] iplink: bridge: export read-only timers Nikolay Aleksandrov
@ 2016-02-08 22:23   ` Stephen Hemminger
  2016-02-08 22:26     ` Nikolay Aleksandrov
  0 siblings, 1 reply; 27+ messages in thread
From: Stephen Hemminger @ 2016-02-08 22:23 UTC (permalink / raw)
  To: Nikolay Aleksandrov; +Cc: netdev, roopa, Nikolay Aleksandrov

On Mon,  8 Feb 2016 12:55:09 +0100
Nikolay Aleksandrov <razor@blackwall.org> wrote:

> +
> +	if (tb[IFLA_BR_HELLO_TIMER])
> +		fprintf(f, "hello_timer %llu ",
> +			rta_getattr_u64(tb[IFLA_BR_HELLO_TIMER]));
> +
> +	if (tb[IFLA_BR_TCN_TIMER])
> +		fprintf(f, "tcn_timer %llu ",
> +			rta_getattr_u64(tb[IFLA_BR_TCN_TIMER]));
> +
> +	if (tb[IFLA_BR_TOPOLOGY_CHANGE_TIMER])
> +		fprintf(f, "topology_change_timer %llu ",
> +			rta_getattr_u64(tb[IFLA_BR_TOPOLOGY_CHANGE_TIMER]));
> +
> +	if (tb[IFLA_BR_GC_TIMER])
> +		fprintf(f, "gc_timer %llu ",
> +

These should be rescaled as seconds.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH iproute2 01/21] iplink: bridge: export bridge_id and designated_root
  2016-02-08 22:21   ` Stephen Hemminger
@ 2016-02-08 22:25     ` Nikolay Aleksandrov
  2016-02-08 22:29       ` Nikolay Aleksandrov
  0 siblings, 1 reply; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 22:25 UTC (permalink / raw)
  To: Stephen Hemminger, Nikolay Aleksandrov; +Cc: netdev, roopa

On 02/08/2016 11:21 PM, Stephen Hemminger wrote:
> On Mon,  8 Feb 2016 12:55:07 +0100
> Nikolay Aleksandrov <razor@blackwall.org> wrote:
> 
>>  
>> +static void br_dump_bridge_id(const struct ifla_bridge_id *id, char *buf,
>> +			      size_t len)
>> +{
>> +	const unsigned char *x = (const unsigned char *)id;
>> +
>> +	snprintf(buf, len, "%.2x%.2x.%.2x%.2x%.2x%.2x%.2x%.2x", x[0], x[1],
>> +		 x[2], x[3], x[4], x[5], x[6], x[7]);
>> +}
> 
> Please don't reinvent ether_ntoa_r
> 
This was taken from bridge-utils, it actually includes 2 more bytes, it's
not only an ethernet address.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH iproute2 03/21] iplink: bridge: export read-only timers
  2016-02-08 22:23   ` Stephen Hemminger
@ 2016-02-08 22:26     ` Nikolay Aleksandrov
  0 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 22:26 UTC (permalink / raw)
  To: Stephen Hemminger, Nikolay Aleksandrov; +Cc: netdev, roopa

On 02/08/2016 11:23 PM, Stephen Hemminger wrote:
> On Mon,  8 Feb 2016 12:55:09 +0100
> Nikolay Aleksandrov <razor@blackwall.org> wrote:
> 
>> +
>> +	if (tb[IFLA_BR_HELLO_TIMER])
>> +		fprintf(f, "hello_timer %llu ",
>> +			rta_getattr_u64(tb[IFLA_BR_HELLO_TIMER]));
>> +
>> +	if (tb[IFLA_BR_TCN_TIMER])
>> +		fprintf(f, "tcn_timer %llu ",
>> +			rta_getattr_u64(tb[IFLA_BR_TCN_TIMER]));
>> +
>> +	if (tb[IFLA_BR_TOPOLOGY_CHANGE_TIMER])
>> +		fprintf(f, "topology_change_timer %llu ",
>> +			rta_getattr_u64(tb[IFLA_BR_TOPOLOGY_CHANGE_TIMER]));
>> +
>> +	if (tb[IFLA_BR_GC_TIMER])
>> +		fprintf(f, "gc_timer %llu ",
>> +
> 
> These should be rescaled as seconds.
> 

Wanted to be consistent with the other exported time values, but okay
I'll convert these to seconds.

Thanks,
 Nik

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH iproute2 01/21] iplink: bridge: export bridge_id and designated_root
  2016-02-08 22:25     ` Nikolay Aleksandrov
@ 2016-02-08 22:29       ` Nikolay Aleksandrov
  0 siblings, 0 replies; 27+ messages in thread
From: Nikolay Aleksandrov @ 2016-02-08 22:29 UTC (permalink / raw)
  To: Stephen Hemminger, Nikolay Aleksandrov; +Cc: netdev, roopa

On 02/08/2016 11:25 PM, Nikolay Aleksandrov wrote:
> On 02/08/2016 11:21 PM, Stephen Hemminger wrote:
>> On Mon,  8 Feb 2016 12:55:07 +0100
>> Nikolay Aleksandrov <razor@blackwall.org> wrote:
>>
>>>  
>>> +static void br_dump_bridge_id(const struct ifla_bridge_id *id, char *buf,
>>> +			      size_t len)
>>> +{
>>> +	const unsigned char *x = (const unsigned char *)id;
>>> +
>>> +	snprintf(buf, len, "%.2x%.2x.%.2x%.2x%.2x%.2x%.2x%.2x", x[0], x[1],
>>> +		 x[2], x[3], x[4], x[5], x[6], x[7]);
>>> +}
>>
>> Please don't reinvent ether_ntoa_r
>>
> This was taken from bridge-utils, it actually includes 2 more bytes, it's
> not only an ethernet address.
> 

Also the output is very different, i.e. bridge_id 8000.000000000000
there're no colons.

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2016-02-08 22:29 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-08 11:55 [PATCH iproute2 00/21] bridge: complete netlink support Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 01/21] iplink: bridge: export bridge_id and designated_root Nikolay Aleksandrov
2016-02-08 22:21   ` Stephen Hemminger
2016-02-08 22:25     ` Nikolay Aleksandrov
2016-02-08 22:29       ` Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 02/21] iplink: bridge: export root_(port|path_cost), topology_change and change_detected Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 03/21] iplink: bridge: export read-only timers Nikolay Aleksandrov
2016-02-08 22:23   ` Stephen Hemminger
2016-02-08 22:26     ` Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 04/21] iplink: bridge: add support for IFLA_BR_GROUP_FWD_MASK Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 05/21] iplink: bridge: add support for IFLA_BR_GROUP_ADDR Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 06/21] iplink: bridge: add support for IFLA_BR_VLAN_DEFAULT_PVID Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 07/21] iplink: bridge: add support for IFLA_BR_MCAST_ROUTER Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 08/21] iplink: bridge: add support for IFLA_BR_MCAST_SNOOPING Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 09/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERY_USE_IFADDR Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 10/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERIER Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 11/21] iplink: bridge: add support for IFLA_BR_MCAST_HASH_ELASTICITY Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 12/21] iplink: bridge: add support for IFLA_BR_MCAST_HASH_MAX Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 13/21] iplink: bridge: add support for IFLA_BR_MCAST_LAST_MEMBER_CNT Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 14/21] iplink: bridge: add support for IFLA_BR_MCAST_STARTUP_QUERY_CNT Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 15/21] iplink: bridge: add support for IFLA_BR_MCAST_LAST_MEMBER_INTVL Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 16/21] iplink: bridge: add support for IFLA_BR_MCAST_MEMBERSHIP_INTVL Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 17/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERIER_INTVL Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 18/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERY_INTVL Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 19/21] iplink: bridge: add support for IFLA_BR_MCAST_QUERY_RESPONSE_INTVL Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 20/21] iplink: bridge: add support for IFLA_BR_MCAST_STARTUP_QUERY_INTVL Nikolay Aleksandrov
2016-02-08 11:55 ` [PATCH iproute2 21/21] iplink: bridge: add support for netfilter call attributes Nikolay Aleksandrov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).