Commit a40d0827 authored by John Fastabend's avatar John Fastabend Committed by Stephen Hemminger

iproute2: bridge: fix 'bridge link' setlink/getlink parsing

Use IFLA_AF_SPEC nested attributes to lookup bridge mode and when
doing strcmp() check for equality.

These appear to be typos from the original commit,

commit 64108901
Author: Vlad Yasevich <vyasevic@redhat.com>
Date:   Fri Mar 15 10:01:28 2013 -0700

    bridge: Add support for setting bridge port attributes

Also set flags to BRIDGE_FLAGS_SELF instead of using OR operation.
This allows setting the bridge mode when not being used with a
master device.

To allow setting both master and self devices simultaneously we
will need to add a {self|master} field similar to fdb commands.
For now the command sets are mutually exclusive as noted in the
original commit.

With this patch 'bridge link set' works now,

# ./bridge/bridge link set dev veth1 cost 3
# ./bridge/bridge link show
10: veth1 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 3 cost 3

CC: Vlad Yasevich <vyasevic@redhat.com>
Signed-off-by: default avatarJohn Fastabend <john.r.fastabend@intel.com>
parent 45a3b3fc
...@@ -198,8 +198,8 @@ int print_linkinfo(const struct sockaddr_nl *who, ...@@ -198,8 +198,8 @@ int print_linkinfo(const struct sockaddr_nl *who,
parse_rtattr_nested(aftb, IFLA_BRIDGE_MAX, tb[IFLA_AF_SPEC]); parse_rtattr_nested(aftb, IFLA_BRIDGE_MAX, tb[IFLA_AF_SPEC]);
if (tb[IFLA_BRIDGE_MODE]) if (aftb[IFLA_BRIDGE_MODE])
print_hwmode(fp, rta_getattr_u16(tb[IFLA_BRIDGE_MODE])); print_hwmode(fp, rta_getattr_u16(aftb[IFLA_BRIDGE_MODE]));
} }
fprintf(fp, "\n"); fprintf(fp, "\n");
...@@ -281,18 +281,18 @@ static int brlink_modify(int argc, char **argv) ...@@ -281,18 +281,18 @@ static int brlink_modify(int argc, char **argv)
NEXT_ARG(); NEXT_ARG();
if (!on_off("root_block", &root_block, *argv)) if (!on_off("root_block", &root_block, *argv))
exit(-1); exit(-1);
} else if (strcmp(*argv, "cost")) { } else if (strcmp(*argv, "cost") == 0) {
NEXT_ARG(); NEXT_ARG();
cost = atoi(*argv); cost = atoi(*argv);
} else if (strcmp(*argv, "priority")) { } else if (strcmp(*argv, "priority") == 0) {
NEXT_ARG(); NEXT_ARG();
priority = atoi(*argv); priority = atoi(*argv);
} else if (strcmp(*argv, "state")) { } else if (strcmp(*argv, "state") == 0) {
NEXT_ARG(); NEXT_ARG();
state = atoi(*argv); state = atoi(*argv);
} else if (strcmp(*argv, "hwmode")) { } else if (strcmp(*argv, "hwmode") == 0) {
NEXT_ARG(); NEXT_ARG();
flags |= BRIDGE_FLAGS_SELF; flags = BRIDGE_FLAGS_SELF;
if (strcmp(*argv, "vepa") == 0) if (strcmp(*argv, "vepa") == 0)
mode = BRIDGE_MODE_VEPA; mode = BRIDGE_MODE_VEPA;
else if (strcmp(*argv, "veb") == 0) else if (strcmp(*argv, "veb") == 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment