bridge: mrp: Add support for role MRA
A node that has the MRA role, it can behave as MRM or MRC. Initially it starts as MRM and sends MRP_Test frames on both ring ports. If it detects that there are MRP_Test send by another MRM, then it checks if these frames have a lower priority than itself. In this case it would send MRP_Nack frames to notify the other node that it needs to stop sending MRP_Test frames. If it receives a MRP_Nack frame then it stops sending MRP_Test frames and starts to behave as a MRC but it would continue to monitor the MRP_Test frames send by MRM. If at a point the MRM stops to send MRP_Test frames it would get the MRM role and start to send MRP_Test frames. Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
4b3a61b030
commit
c6676e7d62
@@ -196,6 +196,7 @@ br_mrp_start_test_policy[IFLA_BRIDGE_MRP_START_TEST_MAX + 1] = {
|
||||
[IFLA_BRIDGE_MRP_START_TEST_INTERVAL] = { .type = NLA_U32 },
|
||||
[IFLA_BRIDGE_MRP_START_TEST_MAX_MISS] = { .type = NLA_U32 },
|
||||
[IFLA_BRIDGE_MRP_START_TEST_PERIOD] = { .type = NLA_U32 },
|
||||
[IFLA_BRIDGE_MRP_START_TEST_MONITOR] = { .type = NLA_U32 },
|
||||
};
|
||||
|
||||
static int br_mrp_start_test_parse(struct net_bridge *br, struct nlattr *attr,
|
||||
@@ -225,6 +226,11 @@ static int br_mrp_start_test_parse(struct net_bridge *br, struct nlattr *attr,
|
||||
test.interval = nla_get_u32(tb[IFLA_BRIDGE_MRP_START_TEST_INTERVAL]);
|
||||
test.max_miss = nla_get_u32(tb[IFLA_BRIDGE_MRP_START_TEST_MAX_MISS]);
|
||||
test.period = nla_get_u32(tb[IFLA_BRIDGE_MRP_START_TEST_PERIOD]);
|
||||
test.monitor = false;
|
||||
|
||||
if (tb[IFLA_BRIDGE_MRP_START_TEST_MONITOR])
|
||||
test.monitor =
|
||||
nla_get_u32(tb[IFLA_BRIDGE_MRP_START_TEST_MONITOR]);
|
||||
|
||||
return br_mrp_start_test(br, &test);
|
||||
}
|
||||
|
Reference in New Issue
Block a user