naccyde / rpms / iproute

Forked from rpms/iproute 9 months ago
Clone

Blame SOURCES/0039-Allow-specifying-bridge-port-STP-state-by-name-rathe.patch

4aca6e
From 9abd0130706603ffc408ecb8a09c7586eca14826 Mon Sep 17 00:00:00 2001
049c96
From: Phil Sutter <psutter@redhat.com>
4aca6e
Date: Tue, 28 Feb 2017 16:09:46 +0100
049c96
Subject: [PATCH] Allow specifying bridge port STP state by name rather than
049c96
 number.
049c96
4aca6e
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1417289
049c96
Upstream Status: iproute2.git commit 6b8c871dc1045
4aca6e
Conflicts: Changes in removed code due to previously backported double
4aca6e
	   whitespace cleanup - removed double whitespaces from added
4aca6e
	   text manually.
049c96
049c96
commit 6b8c871dc104576c9f55d87937d6dd445d77f34f
049c96
Author: Alex Pilon <alp@alexpilon.ca>
049c96
Date:   Thu Feb 19 14:27:46 2015 -0500
049c96
049c96
    Allow specifying bridge port STP state by name rather than number.
049c96
049c96
    The existing behaviour forces one to memorize the integer constants for
049c96
    STP port states.
049c96
049c96
        # bridge link set dev dummy0 state 3
049c96
049c96
    This patch makes it possible to use the lowercased port state name.
049c96
049c96
        # bridge link set dev dummy0 state forwarding
049c96
049c96
    Invalid non-integer inputs now cause exit with status -1.
049c96
049c96
    Signed-off-by: Alex Pilon <alp@alexpilon.ca>
049c96
---
049c96
 bridge/link.c     | 14 +++++++++++++-
049c96
 man/man8/bridge.8 |  4 +++-
049c96
 2 files changed, 16 insertions(+), 2 deletions(-)
049c96
049c96
diff --git a/bridge/link.c b/bridge/link.c
4aca6e
index 8b18931..06a2c0f 100644
049c96
--- a/bridge/link.c
049c96
+++ b/bridge/link.c
4aca6e
@@ -316,7 +316,19 @@ static int brlink_modify(int argc, char **argv)
049c96
 			priority = atoi(*argv);
049c96
 		} else if (strcmp(*argv, "state") == 0) {
049c96
 			NEXT_ARG();
049c96
-			state = atoi(*argv);
049c96
+			char *endptr;
049c96
+			size_t nstates = sizeof(port_states) / sizeof(*port_states);
049c96
+			state = strtol(*argv, &endptr, 10);
049c96
+			if (!(**argv != '\0' && *endptr == '\0')) {
049c96
+				for (state = 0; state < nstates; state++)
049c96
+					if (strcmp(port_states[state], *argv) == 0)
049c96
+						break;
049c96
+				if (state == nstates) {
049c96
+					fprintf(stderr,
049c96
+						"Error: invalid STP port state\n");
049c96
+					exit(-1);
049c96
+				}
049c96
+			}
049c96
 		} else if (strcmp(*argv, "hwmode") == 0) {
049c96
 			NEXT_ARG();
049c96
 			flags = BRIDGE_FLAGS_SELF;
049c96
diff --git a/man/man8/bridge.8 b/man/man8/bridge.8
4aca6e
index 42fe922..c742c83 100644
049c96
--- a/man/man8/bridge.8
049c96
+++ b/man/man8/bridge.8
4aca6e
@@ -207,7 +207,9 @@ droot port selectio algorithms.
049c96
 .TP
049c96
 .BI state " STATE "
049c96
 the operation state of the port. This is primarily used by user space STP/RSTP
049c96
-implementation. The following is a list of valid values:
049c96
+implementation. One may enter a lowercased port state name, or one of the
049c96
+numbers below. Negative inputs are ignored, and unrecognized names return an
049c96
+error.
049c96
 
049c96
 .B 0
049c96
 - port is DISABLED. Make this port completely inactive.
049c96
-- 
049c96
1.8.3.1
049c96