xref: /linux/include/uapi/linux/cfm_bridge.h (revision cdd38c5f1ce4398ec58fec95904b75824daab7b5)
186a14b79SHenrik Bjoernlund /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
286a14b79SHenrik Bjoernlund 
386a14b79SHenrik Bjoernlund #ifndef _UAPI_LINUX_CFM_BRIDGE_H_
486a14b79SHenrik Bjoernlund #define _UAPI_LINUX_CFM_BRIDGE_H_
586a14b79SHenrik Bjoernlund 
686a14b79SHenrik Bjoernlund #include <linux/types.h>
786a14b79SHenrik Bjoernlund #include <linux/if_ether.h>
886a14b79SHenrik Bjoernlund 
9a806ad8eSHenrik Bjoernlund #define ETHER_HEADER_LENGTH		(6+6+4+2)
1086a14b79SHenrik Bjoernlund #define CFM_MAID_LENGTH			48
11a806ad8eSHenrik Bjoernlund #define CFM_CCM_PDU_LENGTH		75
12a806ad8eSHenrik Bjoernlund #define CFM_PORT_STATUS_TLV_LENGTH	4
13a806ad8eSHenrik Bjoernlund #define CFM_IF_STATUS_TLV_LENGTH	4
14a806ad8eSHenrik Bjoernlund #define CFM_IF_STATUS_TLV_TYPE		4
15a806ad8eSHenrik Bjoernlund #define CFM_PORT_STATUS_TLV_TYPE	2
16a806ad8eSHenrik Bjoernlund #define CFM_ENDE_TLV_TYPE		0
17a806ad8eSHenrik Bjoernlund #define CFM_CCM_MAX_FRAME_LENGTH	(ETHER_HEADER_LENGTH+\
18a806ad8eSHenrik Bjoernlund 					 CFM_CCM_PDU_LENGTH+\
19a806ad8eSHenrik Bjoernlund 					 CFM_PORT_STATUS_TLV_LENGTH+\
20a806ad8eSHenrik Bjoernlund 					 CFM_IF_STATUS_TLV_LENGTH)
21a806ad8eSHenrik Bjoernlund #define CFM_FRAME_PRIO			7
22a806ad8eSHenrik Bjoernlund #define CFM_CCM_TLV_OFFSET		70
23*dc32cbb3SHenrik Bjoernlund #define CFM_CCM_PDU_MAID_OFFSET		10
24*dc32cbb3SHenrik Bjoernlund #define CFM_CCM_PDU_MEPID_OFFSET	8
25*dc32cbb3SHenrik Bjoernlund #define CFM_CCM_PDU_SEQNR_OFFSET	4
26*dc32cbb3SHenrik Bjoernlund #define CFM_CCM_PDU_TLV_OFFSET		74
27a806ad8eSHenrik Bjoernlund #define CFM_CCM_ITU_RESERVED_SIZE	16
28a806ad8eSHenrik Bjoernlund 
29a806ad8eSHenrik Bjoernlund struct br_cfm_common_hdr {
30a806ad8eSHenrik Bjoernlund 	__u8 mdlevel_version;
31a806ad8eSHenrik Bjoernlund 	__u8 opcode;
32a806ad8eSHenrik Bjoernlund 	__u8 flags;
33a806ad8eSHenrik Bjoernlund 	__u8 tlv_offset;
34a806ad8eSHenrik Bjoernlund };
35a806ad8eSHenrik Bjoernlund 
36a806ad8eSHenrik Bjoernlund enum br_cfm_opcodes {
37a806ad8eSHenrik Bjoernlund 	BR_CFM_OPCODE_CCM = 0x1,
38a806ad8eSHenrik Bjoernlund };
3986a14b79SHenrik Bjoernlund 
4086a14b79SHenrik Bjoernlund /* MEP domain */
4186a14b79SHenrik Bjoernlund enum br_cfm_domain {
4286a14b79SHenrik Bjoernlund 	BR_CFM_PORT,
4386a14b79SHenrik Bjoernlund 	BR_CFM_VLAN,
4486a14b79SHenrik Bjoernlund };
4586a14b79SHenrik Bjoernlund 
4686a14b79SHenrik Bjoernlund /* MEP direction */
4786a14b79SHenrik Bjoernlund enum br_cfm_mep_direction {
4886a14b79SHenrik Bjoernlund 	BR_CFM_MEP_DIRECTION_DOWN,
4986a14b79SHenrik Bjoernlund 	BR_CFM_MEP_DIRECTION_UP,
5086a14b79SHenrik Bjoernlund };
5186a14b79SHenrik Bjoernlund 
52a806ad8eSHenrik Bjoernlund /* CCM interval supported. */
53a806ad8eSHenrik Bjoernlund enum br_cfm_ccm_interval {
54a806ad8eSHenrik Bjoernlund 	BR_CFM_CCM_INTERVAL_NONE,
55a806ad8eSHenrik Bjoernlund 	BR_CFM_CCM_INTERVAL_3_3_MS,
56a806ad8eSHenrik Bjoernlund 	BR_CFM_CCM_INTERVAL_10_MS,
57a806ad8eSHenrik Bjoernlund 	BR_CFM_CCM_INTERVAL_100_MS,
58a806ad8eSHenrik Bjoernlund 	BR_CFM_CCM_INTERVAL_1_SEC,
59a806ad8eSHenrik Bjoernlund 	BR_CFM_CCM_INTERVAL_10_SEC,
60a806ad8eSHenrik Bjoernlund 	BR_CFM_CCM_INTERVAL_1_MIN,
61a806ad8eSHenrik Bjoernlund 	BR_CFM_CCM_INTERVAL_10_MIN,
62a806ad8eSHenrik Bjoernlund };
63a806ad8eSHenrik Bjoernlund 
6486a14b79SHenrik Bjoernlund #endif
65