Line data Source code
1 1 : /* 2 : * Copyright (c) 2018 Intel Corporation. 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : /** 8 : * @file 9 : * @brief Ethernet Management interface public header 10 : */ 11 : 12 : #ifndef ZEPHYR_INCLUDE_NET_ETHERNET_MGMT_H_ 13 : #define ZEPHYR_INCLUDE_NET_ETHERNET_MGMT_H_ 14 : 15 : #include <zephyr/net/ethernet.h> 16 : #include <zephyr/net/net_mgmt.h> 17 : 18 : #ifdef __cplusplus 19 : extern "C" { 20 : #endif 21 : 22 : /** 23 : * @brief Ethernet library 24 : * @defgroup ethernet_mgmt Ethernet Library 25 : * @since 1.12 26 : * @version 0.8.0 27 : * @ingroup networking 28 : * @{ 29 : */ 30 : 31 : /** @cond INTERNAL_HIDDEN */ 32 : 33 : #define _NET_ETHERNET_LAYER NET_MGMT_LAYER_L2 34 : #define _NET_ETHERNET_CODE 0x208 35 : #define _NET_ETHERNET_BASE (NET_MGMT_IFACE_BIT | \ 36 : NET_MGMT_LAYER(_NET_ETHERNET_LAYER) | \ 37 : NET_MGMT_LAYER_CODE(_NET_ETHERNET_CODE)) 38 : #define _NET_ETHERNET_EVENT (_NET_ETHERNET_BASE | NET_MGMT_EVENT_BIT) 39 : 40 : enum net_request_ethernet_cmd { 41 : NET_REQUEST_ETHERNET_CMD_SET_AUTO_NEGOTIATION = 1, 42 : NET_REQUEST_ETHERNET_CMD_SET_LINK, 43 : NET_REQUEST_ETHERNET_CMD_SET_DUPLEX, 44 : NET_REQUEST_ETHERNET_CMD_SET_MAC_ADDRESS, 45 : NET_REQUEST_ETHERNET_CMD_SET_QAV_PARAM, 46 : NET_REQUEST_ETHERNET_CMD_SET_QBV_PARAM, 47 : NET_REQUEST_ETHERNET_CMD_SET_QBU_PARAM, 48 : NET_REQUEST_ETHERNET_CMD_SET_TXTIME_PARAM, 49 : NET_REQUEST_ETHERNET_CMD_SET_PROMISC_MODE, 50 : NET_REQUEST_ETHERNET_CMD_GET_PRIORITY_QUEUES_NUM, 51 : NET_REQUEST_ETHERNET_CMD_GET_QAV_PARAM, 52 : NET_REQUEST_ETHERNET_CMD_GET_PORTS_NUM, 53 : NET_REQUEST_ETHERNET_CMD_GET_QBV_PARAM, 54 : NET_REQUEST_ETHERNET_CMD_GET_QBU_PARAM, 55 : NET_REQUEST_ETHERNET_CMD_GET_TXTIME_PARAM, 56 : NET_REQUEST_ETHERNET_CMD_SET_T1S_PARAM, 57 : NET_REQUEST_ETHERNET_CMD_SET_TXINJECTION_MODE, 58 : NET_REQUEST_ETHERNET_CMD_GET_TXINJECTION_MODE, 59 : NET_REQUEST_ETHERNET_CMD_SET_MAC_FILTER, 60 : }; 61 : 62 : #define NET_REQUEST_ETHERNET_SET_AUTO_NEGOTIATION \ 63 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_AUTO_NEGOTIATION) 64 : 65 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_AUTO_NEGOTIATION); 66 : 67 : #define NET_REQUEST_ETHERNET_SET_LINK \ 68 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_LINK) 69 : 70 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_LINK); 71 : 72 : #define NET_REQUEST_ETHERNET_SET_DUPLEX \ 73 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_DUPLEX) 74 : 75 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_DUPLEX); 76 : 77 : #define NET_REQUEST_ETHERNET_SET_MAC_ADDRESS \ 78 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_MAC_ADDRESS) 79 : 80 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_MAC_ADDRESS); 81 : 82 : #define NET_REQUEST_ETHERNET_SET_QAV_PARAM \ 83 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_QAV_PARAM) 84 : 85 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_QAV_PARAM); 86 : 87 : #define NET_REQUEST_ETHERNET_GET_PORTS_NUM \ 88 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_PORTS_NUM) 89 : 90 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_PORTS_NUM); 91 : 92 : #define NET_REQUEST_ETHERNET_SET_QBV_PARAM \ 93 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_QBV_PARAM) 94 : 95 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_QBV_PARAM); 96 : 97 : #define NET_REQUEST_ETHERNET_SET_QBU_PARAM \ 98 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_QBU_PARAM) 99 : 100 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_QBU_PARAM); 101 : 102 : #define NET_REQUEST_ETHERNET_SET_TXTIME_PARAM \ 103 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_TXTIME_PARAM) 104 : 105 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_TXTIME_PARAM); 106 : 107 : #define NET_REQUEST_ETHERNET_SET_PROMISC_MODE \ 108 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_PROMISC_MODE) 109 : 110 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_PROMISC_MODE); 111 : 112 : #define NET_REQUEST_ETHERNET_GET_PRIORITY_QUEUES_NUM \ 113 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_PRIORITY_QUEUES_NUM) 114 : 115 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_PRIORITY_QUEUES_NUM); 116 : 117 : #define NET_REQUEST_ETHERNET_GET_QAV_PARAM \ 118 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_QAV_PARAM) 119 : 120 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_QAV_PARAM); 121 : 122 : #define NET_REQUEST_ETHERNET_GET_QBV_PARAM \ 123 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_QBV_PARAM) 124 : 125 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_QBV_PARAM); 126 : 127 : #define NET_REQUEST_ETHERNET_GET_QBU_PARAM \ 128 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_QBU_PARAM) 129 : 130 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_QBU_PARAM); 131 : 132 : #define NET_REQUEST_ETHERNET_GET_TXTIME_PARAM \ 133 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_TXTIME_PARAM) 134 : 135 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_TXTIME_PARAM); 136 : 137 : #define NET_REQUEST_ETHERNET_SET_T1S_PARAM \ 138 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_T1S_PARAM) 139 : 140 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_T1S_PARAM); 141 : 142 : #define NET_REQUEST_ETHERNET_SET_TXINJECTION_MODE \ 143 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_TXINJECTION_MODE) 144 : 145 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_TXINJECTION_MODE); 146 : 147 : #define NET_REQUEST_ETHERNET_GET_TXINJECTION_MODE \ 148 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_TXINJECTION_MODE) 149 : 150 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_TXINJECTION_MODE); 151 : 152 : #define NET_REQUEST_ETHERNET_SET_MAC_FILTER \ 153 : (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_MAC_FILTER) 154 : 155 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_MAC_FILTER); 156 : 157 : struct net_eth_addr; 158 : struct ethernet_qav_param; 159 : struct ethernet_qbv_param; 160 : struct ethernet_qbu_param; 161 : struct ethernet_txtime_param; 162 : 163 : struct ethernet_req_params { 164 : union { 165 : bool auto_negotiation; 166 : bool full_duplex; 167 : bool promisc_mode; 168 : bool txinjection_mode; 169 : 170 : struct { 171 : bool link_10bt; 172 : bool link_100bt; 173 : bool link_1000bt; 174 : } l; 175 : 176 : struct net_eth_addr mac_address; 177 : 178 : struct ethernet_qav_param qav_param; 179 : struct ethernet_qbv_param qbv_param; 180 : struct ethernet_qbu_param qbu_param; 181 : struct ethernet_txtime_param txtime_param; 182 : struct ethernet_t1s_param t1s_param; 183 : 184 : struct ethernet_filter filter; 185 : 186 : int priority_queues_num; 187 : int ports_num; 188 : }; 189 : }; 190 : 191 : enum net_event_ethernet_cmd { 192 : NET_EVENT_ETHERNET_CMD_CARRIER_ON = 1, 193 : NET_EVENT_ETHERNET_CMD_CARRIER_OFF, 194 : NET_EVENT_ETHERNET_CMD_VLAN_TAG_ENABLED, 195 : NET_EVENT_ETHERNET_CMD_VLAN_TAG_DISABLED, 196 : }; 197 : 198 : #define NET_EVENT_ETHERNET_CARRIER_ON \ 199 : (_NET_ETHERNET_EVENT | NET_EVENT_ETHERNET_CMD_CARRIER_ON) 200 : 201 : #define NET_EVENT_ETHERNET_CARRIER_OFF \ 202 : (_NET_ETHERNET_EVENT | NET_EVENT_ETHERNET_CMD_CARRIER_OFF) 203 : 204 : #define NET_EVENT_ETHERNET_VLAN_TAG_ENABLED \ 205 : (_NET_ETHERNET_EVENT | NET_EVENT_ETHERNET_CMD_VLAN_TAG_ENABLED) 206 : 207 : #define NET_EVENT_ETHERNET_VLAN_TAG_DISABLED \ 208 : (_NET_ETHERNET_EVENT | NET_EVENT_ETHERNET_CMD_VLAN_TAG_DISABLED) 209 : 210 : struct net_if; 211 : 212 : /** @endcond */ 213 : 214 : /** 215 : * @brief Raise CARRIER_ON event when Ethernet is connected. 216 : * 217 : * @param iface Ethernet network interface. 218 : */ 219 : #if defined(CONFIG_NET_L2_ETHERNET_MGMT) 220 1 : void ethernet_mgmt_raise_carrier_on_event(struct net_if *iface); 221 : #else 222 : static inline void ethernet_mgmt_raise_carrier_on_event(struct net_if *iface) 223 : { 224 : ARG_UNUSED(iface); 225 : } 226 : #endif 227 : 228 : /** 229 : * @brief Raise CARRIER_OFF event when Ethernet is disconnected. 230 : * 231 : * @param iface Ethernet network interface. 232 : */ 233 : #if defined(CONFIG_NET_L2_ETHERNET_MGMT) 234 1 : void ethernet_mgmt_raise_carrier_off_event(struct net_if *iface); 235 : #else 236 : static inline void ethernet_mgmt_raise_carrier_off_event(struct net_if *iface) 237 : { 238 : ARG_UNUSED(iface); 239 : } 240 : #endif 241 : 242 : /** 243 : * @brief Raise VLAN_ENABLED event when VLAN is enabled. 244 : * 245 : * @param iface Ethernet network interface. 246 : * @param tag VLAN tag which is enabled. 247 : */ 248 : #if defined(CONFIG_NET_L2_ETHERNET_MGMT) 249 1 : void ethernet_mgmt_raise_vlan_enabled_event(struct net_if *iface, uint16_t tag); 250 : #else 251 : static inline void ethernet_mgmt_raise_vlan_enabled_event(struct net_if *iface, 252 : uint16_t tag) 253 : { 254 : ARG_UNUSED(iface); 255 : ARG_UNUSED(tag); 256 : } 257 : #endif 258 : 259 : /** 260 : * @brief Raise VLAN_DISABLED event when VLAN is disabled. 261 : * 262 : * @param iface Ethernet network interface. 263 : * @param tag VLAN tag which is disabled. 264 : */ 265 : #if defined(CONFIG_NET_L2_ETHERNET_MGMT) 266 1 : void ethernet_mgmt_raise_vlan_disabled_event(struct net_if *iface, 267 : uint16_t tag); 268 : #else 269 : static inline void ethernet_mgmt_raise_vlan_disabled_event(struct net_if *iface, 270 : uint16_t tag) 271 : { 272 : ARG_UNUSED(iface); 273 : ARG_UNUSED(tag); 274 : } 275 : #endif 276 : 277 : /** 278 : * @} 279 : */ 280 : 281 : #ifdef __cplusplus 282 : } 283 : #endif 284 : 285 : #endif /* ZEPHYR_INCLUDE_NET_ETHERNET_MGMT_H_ */