mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-07-14 00:55:17 -04:00
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:
parent
4b3a61b030
commit
c6676e7d62
7 changed files with 157 additions and 19 deletions
|
@ -11,11 +11,14 @@
|
|||
#define MRP_DOMAIN_UUID_LENGTH 16
|
||||
#define MRP_VERSION 1
|
||||
#define MRP_FRAME_PRIO 7
|
||||
#define MRP_OUI_LENGTH 3
|
||||
#define MRP_MANUFACTURE_DATA_LENGTH 2
|
||||
|
||||
enum br_mrp_ring_role_type {
|
||||
BR_MRP_RING_ROLE_DISABLED,
|
||||
BR_MRP_RING_ROLE_MRC,
|
||||
BR_MRP_RING_ROLE_MRM,
|
||||
BR_MRP_RING_ROLE_MRA,
|
||||
};
|
||||
|
||||
enum br_mrp_ring_state_type {
|
||||
|
@ -43,6 +46,13 @@ enum br_mrp_tlv_header_type {
|
|||
BR_MRP_TLV_HEADER_RING_TOPO = 0x3,
|
||||
BR_MRP_TLV_HEADER_RING_LINK_DOWN = 0x4,
|
||||
BR_MRP_TLV_HEADER_RING_LINK_UP = 0x5,
|
||||
BR_MRP_TLV_HEADER_OPTION = 0x7f,
|
||||
};
|
||||
|
||||
enum br_mrp_sub_tlv_header_type {
|
||||
BR_MRP_SUB_TLV_HEADER_TEST_MGR_NACK = 0x1,
|
||||
BR_MRP_SUB_TLV_HEADER_TEST_PROPAGATE = 0x2,
|
||||
BR_MRP_SUB_TLV_HEADER_TEST_AUTO_MGR = 0x3,
|
||||
};
|
||||
|
||||
struct br_mrp_tlv_hdr {
|
||||
|
@ -50,6 +60,11 @@ struct br_mrp_tlv_hdr {
|
|||
__u8 length;
|
||||
};
|
||||
|
||||
struct br_mrp_sub_tlv_hdr {
|
||||
__u8 type;
|
||||
__u8 length;
|
||||
};
|
||||
|
||||
struct br_mrp_end_hdr {
|
||||
struct br_mrp_tlv_hdr hdr;
|
||||
};
|
||||
|
@ -81,4 +96,27 @@ struct br_mrp_ring_link_hdr {
|
|||
__be16 blocked;
|
||||
};
|
||||
|
||||
struct br_mrp_sub_opt_hdr {
|
||||
__u8 type;
|
||||
__u8 manufacture_data[MRP_MANUFACTURE_DATA_LENGTH];
|
||||
};
|
||||
|
||||
struct br_mrp_test_mgr_nack_hdr {
|
||||
__be16 prio;
|
||||
__u8 sa[ETH_ALEN];
|
||||
__be16 other_prio;
|
||||
__u8 other_sa[ETH_ALEN];
|
||||
};
|
||||
|
||||
struct br_mrp_test_prop_hdr {
|
||||
__be16 prio;
|
||||
__u8 sa[ETH_ALEN];
|
||||
__be16 other_prio;
|
||||
__u8 other_sa[ETH_ALEN];
|
||||
};
|
||||
|
||||
struct br_mrp_oui_hdr {
|
||||
__u8 oui[MRP_OUI_LENGTH];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue