xref: /linux/include/uapi/linux/mrp_bridge.h (revision 4714d13791f831d253852c8b5d657270becb8b2a)
1*4714d137SHoratiu Vultur /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2*4714d137SHoratiu Vultur 
3*4714d137SHoratiu Vultur #ifndef _UAPI_LINUX_MRP_BRIDGE_H_
4*4714d137SHoratiu Vultur #define _UAPI_LINUX_MRP_BRIDGE_H_
5*4714d137SHoratiu Vultur 
6*4714d137SHoratiu Vultur #include <linux/types.h>
7*4714d137SHoratiu Vultur #include <linux/if_ether.h>
8*4714d137SHoratiu Vultur 
9*4714d137SHoratiu Vultur #define MRP_MAX_FRAME_LENGTH		200
10*4714d137SHoratiu Vultur #define MRP_DEFAULT_PRIO		0x8000
11*4714d137SHoratiu Vultur #define MRP_DOMAIN_UUID_LENGTH		16
12*4714d137SHoratiu Vultur #define MRP_VERSION			1
13*4714d137SHoratiu Vultur #define MRP_FRAME_PRIO			7
14*4714d137SHoratiu Vultur 
15*4714d137SHoratiu Vultur enum br_mrp_ring_role_type {
16*4714d137SHoratiu Vultur 	BR_MRP_RING_ROLE_DISABLED,
17*4714d137SHoratiu Vultur 	BR_MRP_RING_ROLE_MRC,
18*4714d137SHoratiu Vultur 	BR_MRP_RING_ROLE_MRM,
19*4714d137SHoratiu Vultur };
20*4714d137SHoratiu Vultur 
21*4714d137SHoratiu Vultur enum br_mrp_ring_state_type {
22*4714d137SHoratiu Vultur 	BR_MRP_RING_STATE_OPEN,
23*4714d137SHoratiu Vultur 	BR_MRP_RING_STATE_CLOSED,
24*4714d137SHoratiu Vultur };
25*4714d137SHoratiu Vultur 
26*4714d137SHoratiu Vultur enum br_mrp_port_state_type {
27*4714d137SHoratiu Vultur 	BR_MRP_PORT_STATE_DISABLED,
28*4714d137SHoratiu Vultur 	BR_MRP_PORT_STATE_BLOCKED,
29*4714d137SHoratiu Vultur 	BR_MRP_PORT_STATE_FORWARDING,
30*4714d137SHoratiu Vultur 	BR_MRP_PORT_STATE_NOT_CONNECTED,
31*4714d137SHoratiu Vultur };
32*4714d137SHoratiu Vultur 
33*4714d137SHoratiu Vultur enum br_mrp_port_role_type {
34*4714d137SHoratiu Vultur 	BR_MRP_PORT_ROLE_PRIMARY,
35*4714d137SHoratiu Vultur 	BR_MRP_PORT_ROLE_SECONDARY,
36*4714d137SHoratiu Vultur 	BR_MRP_PORT_ROLE_NONE,
37*4714d137SHoratiu Vultur };
38*4714d137SHoratiu Vultur 
39*4714d137SHoratiu Vultur enum br_mrp_tlv_header_type {
40*4714d137SHoratiu Vultur 	BR_MRP_TLV_HEADER_END = 0x0,
41*4714d137SHoratiu Vultur 	BR_MRP_TLV_HEADER_COMMON = 0x1,
42*4714d137SHoratiu Vultur 	BR_MRP_TLV_HEADER_RING_TEST = 0x2,
43*4714d137SHoratiu Vultur 	BR_MRP_TLV_HEADER_RING_TOPO = 0x3,
44*4714d137SHoratiu Vultur 	BR_MRP_TLV_HEADER_RING_LINK_DOWN = 0x4,
45*4714d137SHoratiu Vultur 	BR_MRP_TLV_HEADER_RING_LINK_UP = 0x5,
46*4714d137SHoratiu Vultur };
47*4714d137SHoratiu Vultur 
48*4714d137SHoratiu Vultur struct br_mrp_tlv_hdr {
49*4714d137SHoratiu Vultur 	__u8 type;
50*4714d137SHoratiu Vultur 	__u8 length;
51*4714d137SHoratiu Vultur };
52*4714d137SHoratiu Vultur 
53*4714d137SHoratiu Vultur struct br_mrp_end_hdr {
54*4714d137SHoratiu Vultur 	struct br_mrp_tlv_hdr hdr;
55*4714d137SHoratiu Vultur };
56*4714d137SHoratiu Vultur 
57*4714d137SHoratiu Vultur struct br_mrp_common_hdr {
58*4714d137SHoratiu Vultur 	__u16 seq_id;
59*4714d137SHoratiu Vultur 	__u8 domain[MRP_DOMAIN_UUID_LENGTH];
60*4714d137SHoratiu Vultur };
61*4714d137SHoratiu Vultur 
62*4714d137SHoratiu Vultur struct br_mrp_ring_test_hdr {
63*4714d137SHoratiu Vultur 	__u16 prio;
64*4714d137SHoratiu Vultur 	__u8 sa[ETH_ALEN];
65*4714d137SHoratiu Vultur 	__u16 port_role;
66*4714d137SHoratiu Vultur 	__u16 state;
67*4714d137SHoratiu Vultur 	__u16 transitions;
68*4714d137SHoratiu Vultur 	__u32 timestamp;
69*4714d137SHoratiu Vultur };
70*4714d137SHoratiu Vultur 
71*4714d137SHoratiu Vultur struct br_mrp_ring_topo_hdr {
72*4714d137SHoratiu Vultur 	__u16 prio;
73*4714d137SHoratiu Vultur 	__u8 sa[ETH_ALEN];
74*4714d137SHoratiu Vultur 	__u16 interval;
75*4714d137SHoratiu Vultur };
76*4714d137SHoratiu Vultur 
77*4714d137SHoratiu Vultur struct br_mrp_ring_link_hdr {
78*4714d137SHoratiu Vultur 	__u8 sa[ETH_ALEN];
79*4714d137SHoratiu Vultur 	__u16 port_role;
80*4714d137SHoratiu Vultur 	__u16 interval;
81*4714d137SHoratiu Vultur 	__u16 blocked;
82*4714d137SHoratiu Vultur };
83*4714d137SHoratiu Vultur 
84*4714d137SHoratiu Vultur #endif
85