naccyde / rpms / iproute

Forked from rpms/iproute 8 months ago
Clone

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

049c96
From a5087426d103b65fcfd85dc0f71c5bedc3a23148 Mon Sep 17 00:00:00 2001
049c96
From: Phil Sutter <psutter@redhat.com>
049c96
Date: Thu, 18 Feb 2016 14:04:01 +0100
049c96
Subject: [PATCH] Allow specifying bridge port STP state by name rather than
049c96
 number.
049c96
049c96
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1288042
049c96
Upstream Status: iproute2.git commit 6b8c871dc1045
049c96
Conflicts: Whitespace change due to already applied commit
049c96
           a89d5329d414c ("docs: make spacing consistent")
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
049c96
index 38dfaea..48be938 100644
049c96
--- a/bridge/link.c
049c96
+++ b/bridge/link.c
049c96
@@ -289,7 +289,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
049c96
index 68a86e5..2c9f90c 100644
049c96
--- a/man/man8/bridge.8
049c96
+++ b/man/man8/bridge.8
049c96
@@ -204,7 +204,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