1 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ 2 3 #ifndef _UAPI_LINUX_MRP_BRIDGE_H_ 4 #define _UAPI_LINUX_MRP_BRIDGE_H_ 5 6 #include <linux/types.h> 7 #include <linux/if_ether.h> 8 9 #define MRP_MAX_FRAME_LENGTH 200 10 #define MRP_DEFAULT_PRIO 0x8000 11 #define MRP_DOMAIN_UUID_LENGTH 16 12 #define MRP_VERSION 1 13 #define MRP_FRAME_PRIO 7 14 #define MRP_OUI_LENGTH 3 15 #define MRP_MANUFACTURE_DATA_LENGTH 2 16 17 enum br_mrp_ring_role_type { 18 BR_MRP_RING_ROLE_DISABLED, 19 BR_MRP_RING_ROLE_MRC, 20 BR_MRP_RING_ROLE_MRM, 21 BR_MRP_RING_ROLE_MRA, 22 }; 23 24 enum br_mrp_ring_state_type { 25 BR_MRP_RING_STATE_OPEN, 26 BR_MRP_RING_STATE_CLOSED, 27 }; 28 29 enum br_mrp_port_state_type { 30 BR_MRP_PORT_STATE_DISABLED, 31 BR_MRP_PORT_STATE_BLOCKED, 32 BR_MRP_PORT_STATE_FORWARDING, 33 BR_MRP_PORT_STATE_NOT_CONNECTED, 34 }; 35 36 enum br_mrp_port_role_type { 37 BR_MRP_PORT_ROLE_PRIMARY, 38 BR_MRP_PORT_ROLE_SECONDARY, 39 BR_MRP_PORT_ROLE_NONE, 40 }; 41 42 enum br_mrp_tlv_header_type { 43 BR_MRP_TLV_HEADER_END = 0x0, 44 BR_MRP_TLV_HEADER_COMMON = 0x1, 45 BR_MRP_TLV_HEADER_RING_TEST = 0x2, 46 BR_MRP_TLV_HEADER_RING_TOPO = 0x3, 47 BR_MRP_TLV_HEADER_RING_LINK_DOWN = 0x4, 48 BR_MRP_TLV_HEADER_RING_LINK_UP = 0x5, 49 BR_MRP_TLV_HEADER_OPTION = 0x7f, 50 }; 51 52 enum br_mrp_sub_tlv_header_type { 53 BR_MRP_SUB_TLV_HEADER_TEST_MGR_NACK = 0x1, 54 BR_MRP_SUB_TLV_HEADER_TEST_PROPAGATE = 0x2, 55 BR_MRP_SUB_TLV_HEADER_TEST_AUTO_MGR = 0x3, 56 }; 57 58 struct br_mrp_tlv_hdr { 59 __u8 type; 60 __u8 length; 61 }; 62 63 struct br_mrp_sub_tlv_hdr { 64 __u8 type; 65 __u8 length; 66 }; 67 68 struct br_mrp_end_hdr { 69 struct br_mrp_tlv_hdr hdr; 70 }; 71 72 struct br_mrp_common_hdr { 73 __be16 seq_id; 74 __u8 domain[MRP_DOMAIN_UUID_LENGTH]; 75 }; 76 77 struct br_mrp_ring_test_hdr { 78 __be16 prio; 79 __u8 sa[ETH_ALEN]; 80 __be16 port_role; 81 __be16 state; 82 __be16 transitions; 83 __be32 timestamp; 84 }; 85 86 struct br_mrp_ring_topo_hdr { 87 __be16 prio; 88 __u8 sa[ETH_ALEN]; 89 __be16 interval; 90 }; 91 92 struct br_mrp_ring_link_hdr { 93 __u8 sa[ETH_ALEN]; 94 __be16 port_role; 95 __be16 interval; 96 __be16 blocked; 97 }; 98 99 struct br_mrp_sub_opt_hdr { 100 __u8 type; 101 __u8 manufacture_data[MRP_MANUFACTURE_DATA_LENGTH]; 102 }; 103 104 struct br_mrp_test_mgr_nack_hdr { 105 __be16 prio; 106 __u8 sa[ETH_ALEN]; 107 __be16 other_prio; 108 __u8 other_sa[ETH_ALEN]; 109 }; 110 111 struct br_mrp_test_prop_hdr { 112 __be16 prio; 113 __u8 sa[ETH_ALEN]; 114 __be16 other_prio; 115 __u8 other_sa[ETH_ALEN]; 116 }; 117 118 struct br_mrp_oui_hdr { 119 __u8 oui[MRP_OUI_LENGTH]; 120 }; 121 122 #endif 123