1 /** @file 2 * @brief VLAN specific definitions. 3 * 4 * Virtual LAN specific definitions. 5 */ 6 7 /* 8 * Copyright (c) 2018 Intel Corporation 9 * 10 * SPDX-License-Identifier: Apache-2.0 11 */ 12 13 #ifndef ZEPHYR_INCLUDE_NET_ETHERNET_VLAN_H_ 14 #define ZEPHYR_INCLUDE_NET_ETHERNET_VLAN_H_ 15 16 /** 17 * @brief VLAN definitions and helpers 18 * @defgroup vlan_api Virtual LAN definitions and helpers 19 * @since 1.12 20 * @version 0.8.0 21 * @ingroup networking 22 * @{ 23 */ 24 25 #include <zephyr/types.h> 26 27 #ifdef __cplusplus 28 extern "C" { 29 #endif 30 31 /** Unspecified VLAN tag value */ 32 #define NET_VLAN_TAG_UNSPEC 0x0fff 33 34 /** VLAN ID for forwarding to the native interface (priority tagging) */ 35 #define NET_VLAN_TAG_PRIORITY 0x0000 36 37 /** 38 * @brief Get VLAN identifier from TCI. 39 * 40 * @param tci VLAN tag control information. 41 * 42 * @return VLAN identifier. 43 */ net_eth_vlan_get_vid(uint16_t tci)44static inline uint16_t net_eth_vlan_get_vid(uint16_t tci) 45 { 46 return tci & 0x0fff; 47 } 48 49 /** 50 * @brief Get Drop Eligible Indicator from TCI. 51 * 52 * @param tci VLAN tag control information. 53 * 54 * @return Drop eligible indicator. 55 */ net_eth_vlan_get_dei(uint16_t tci)56static inline uint8_t net_eth_vlan_get_dei(uint16_t tci) 57 { 58 return (tci >> 12) & 0x01; 59 } 60 61 /** 62 * @brief Get Priority Code Point from TCI. 63 * 64 * @param tci VLAN tag control information. 65 * 66 * @return Priority code point. 67 */ net_eth_vlan_get_pcp(uint16_t tci)68static inline uint8_t net_eth_vlan_get_pcp(uint16_t tci) 69 { 70 return (tci >> 13) & 0x07; 71 } 72 73 /** 74 * @brief Set VLAN identifier to TCI. 75 * 76 * @param tci VLAN tag control information. 77 * @param vid VLAN identifier. 78 * 79 * @return New TCI value. 80 */ net_eth_vlan_set_vid(uint16_t tci,uint16_t vid)81static inline uint16_t net_eth_vlan_set_vid(uint16_t tci, uint16_t vid) 82 { 83 return (tci & 0xf000) | (vid & 0x0fff); 84 } 85 86 /** 87 * @brief Set Drop Eligible Indicator to TCI. 88 * 89 * @param tci VLAN tag control information. 90 * @param dei Drop eligible indicator. 91 * 92 * @return New TCI value. 93 */ net_eth_vlan_set_dei(uint16_t tci,bool dei)94static inline uint16_t net_eth_vlan_set_dei(uint16_t tci, bool dei) 95 { 96 return (tci & 0xefff) | ((!!dei) << 12); 97 } 98 99 /** 100 * @brief Set Priority Code Point to TCI. 101 * 102 * @param tci VLAN tag control information. 103 * @param pcp Priority code point. 104 * 105 * @return New TCI value. 106 */ net_eth_vlan_set_pcp(uint16_t tci,uint8_t pcp)107static inline uint16_t net_eth_vlan_set_pcp(uint16_t tci, uint8_t pcp) 108 { 109 return (tci & 0x1fff) | ((pcp & 0x07) << 13); 110 } 111 112 #ifdef __cplusplus 113 } 114 #endif 115 116 /** 117 * @} 118 */ 119 120 121 #endif /* ZEPHYR_INCLUDE_NET_ETHERNET_VLAN_H_ */ 122