Thread (4 messages) flat view 4 messages, 2 authors, 2021-08-24

Re: [PATCH] ip: Support filter links/neighs with no master

From: David Ahern <hidden>
Date: 2021-08-24 04:20:06

On 8/19/21 4:45 AM, Lahav Schlesinger wrote:
quoted hunk ↗ jump to hunk
Commit d3432bf10f17 ("net: Support filtering interfaces on no master")
in the kernel added support for filtering interfaces/neighbours that
have no master interface.

This patch completes it and adds this support to iproute2:
1. ip link show nomaster
2. ip address show nomaster
3. ip neighbour {show | flush} nomaster

Signed-off-by: Lahav Schlesinger <redacted>
---
 ip/ipaddress.c           | 4 +++-
 ip/iplink.c              | 2 +-
 ip/ipneigh.c             | 4 +++-
 man/man8/ip-address.8.in | 7 ++++++-
 man/man8/ip-link.8.in    | 7 ++++++-
 man/man8/ip-neighbour.8  | 7 ++++++-
 6 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/ip/ipaddress.c b/ip/ipaddress.c
index 85534aaf..a5b683f5 100644
--- a/ip/ipaddress.c
+++ b/ip/ipaddress.c
@@ -61,7 +61,7 @@ static void usage(void)
 		"                            [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]\n"
 		"       ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]\n"
move [ nomaster ] to here on a new line to keep the existing line
length, and
 		"                         [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]\n"
-		"                         [ label LABEL ] [up] [ vrf NAME ] ]\n"
+		"                         [ label LABEL ] [up] [ vrf NAME ] [ nomaster ] ]\n"
make this 'novrf' for consistency with existing syntax.

Similarly for the other 2 commands.
quoted hunk ↗ jump to hunk
 		"       ip address {showdump|restore}\n"
 		"IFADDR := PREFIX | ADDR peer PREFIX\n"
 		"          [ broadcast ADDR ] [ anycast ADDR ]\n"
@@ -2123,6 +2123,8 @@ static int ipaddr_list_flush_or_save(int argc, char **argv, int action)
 			if (!name_is_vrf(*argv))
 				invarg("Not a valid VRF name\n", *argv);
 			filter.master = ifindex;
+		} else if (strcmp(*argv, "nomaster") == 0) {
and of course make this a compound check for novrf.
quoted hunk ↗ jump to hunk
+			filter.master = -1;
 		} else if (strcmp(*argv, "type") == 0) {
 			int soff;
 
diff --git a/ip/iplink.c b/ip/iplink.c
index 18b2ea25..f017f1f3 100644
--- a/ip/iplink.c
+++ b/ip/iplink.c
@@ -119,7 +119,7 @@ void iplink_usage(void)
 		"		[ protodown_reason PREASON { on | off } ]\n"
 		"		[ gso_max_size BYTES ] | [ gso_max_segs PACKETS ]\n"
 		"\n"
-		"	ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE]\n"
+		"	ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE] [nomaster]\n"
this line is already too long so add the new options on a new line.
quoted hunk ↗ jump to hunk
 		"\n"
 		"	ip link xstats type TYPE [ ARGS ]\n"
 		"\n"
diff --git a/ip/ipneigh.c b/ip/ipneigh.c
index 95bde520..b4a2f6df 100644
--- a/ip/ipneigh.c
+++ b/ip/ipneigh.c
@@ -54,7 +54,7 @@ static void usage(void)
 		"		[ dev DEV ] [ router ] [ extern_learn ] [ protocol PROTO ]\n"
 		"\n"
 		"	ip neigh { show | flush } [ proxy ] [ to PREFIX ] [ dev DEV ] [ nud STATE ]\n"
-		"				  [ vrf NAME ]\n"
+		"				  [ vrf NAME ] [ nomaster ]\n"
 		"	ip neigh get { ADDR | proxy ADDR } dev DEV\n"
 		"\n"
 		"STATE := { delay | failed | incomplete | noarp | none |\n"
@@ -536,6 +536,8 @@ static int do_show_or_flush(int argc, char **argv, int flush)
 			if (!name_is_vrf(*argv))
 				invarg("Not a valid VRF name\n", *argv);
 			filter.master = ifindex;
+		} else if (strcmp(*argv, "nomaster") == 0) {
+			filter.master = -1;
 		} else if (strcmp(*argv, "unused") == 0) {
 			filter.unused_only = 1;
 		} else if (strcmp(*argv, "nud") == 0) {
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help