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