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 NET_MGMT_LAYER_CODE_ETHERNET
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_MAC_ADDRESS = 1,
42 : NET_REQUEST_ETHERNET_CMD_SET_QAV_PARAM,
43 : NET_REQUEST_ETHERNET_CMD_SET_QBV_PARAM,
44 : NET_REQUEST_ETHERNET_CMD_SET_QBU_PARAM,
45 : NET_REQUEST_ETHERNET_CMD_SET_TXTIME_PARAM,
46 : NET_REQUEST_ETHERNET_CMD_SET_PROMISC_MODE,
47 : NET_REQUEST_ETHERNET_CMD_GET_PRIORITY_QUEUES_NUM,
48 : NET_REQUEST_ETHERNET_CMD_GET_QAV_PARAM,
49 : NET_REQUEST_ETHERNET_CMD_GET_PORTS_NUM,
50 : NET_REQUEST_ETHERNET_CMD_GET_QBV_PARAM,
51 : NET_REQUEST_ETHERNET_CMD_GET_QBU_PARAM,
52 : NET_REQUEST_ETHERNET_CMD_GET_TXTIME_PARAM,
53 : NET_REQUEST_ETHERNET_CMD_SET_T1S_PARAM,
54 : NET_REQUEST_ETHERNET_CMD_SET_TXINJECTION_MODE,
55 : NET_REQUEST_ETHERNET_CMD_GET_TXINJECTION_MODE,
56 : NET_REQUEST_ETHERNET_CMD_SET_MAC_FILTER,
57 : };
58 :
59 : #define NET_REQUEST_ETHERNET_SET_MAC_ADDRESS \
60 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_MAC_ADDRESS)
61 :
62 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_MAC_ADDRESS);
63 :
64 : #define NET_REQUEST_ETHERNET_SET_QAV_PARAM \
65 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_QAV_PARAM)
66 :
67 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_QAV_PARAM);
68 :
69 : #define NET_REQUEST_ETHERNET_GET_PORTS_NUM \
70 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_PORTS_NUM)
71 :
72 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_PORTS_NUM);
73 :
74 : #define NET_REQUEST_ETHERNET_SET_QBV_PARAM \
75 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_QBV_PARAM)
76 :
77 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_QBV_PARAM);
78 :
79 : #define NET_REQUEST_ETHERNET_SET_QBU_PARAM \
80 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_QBU_PARAM)
81 :
82 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_QBU_PARAM);
83 :
84 : #define NET_REQUEST_ETHERNET_SET_TXTIME_PARAM \
85 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_TXTIME_PARAM)
86 :
87 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_TXTIME_PARAM);
88 :
89 : #define NET_REQUEST_ETHERNET_SET_PROMISC_MODE \
90 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_PROMISC_MODE)
91 :
92 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_PROMISC_MODE);
93 :
94 : #define NET_REQUEST_ETHERNET_GET_PRIORITY_QUEUES_NUM \
95 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_PRIORITY_QUEUES_NUM)
96 :
97 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_PRIORITY_QUEUES_NUM);
98 :
99 : #define NET_REQUEST_ETHERNET_GET_QAV_PARAM \
100 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_QAV_PARAM)
101 :
102 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_QAV_PARAM);
103 :
104 : #define NET_REQUEST_ETHERNET_GET_QBV_PARAM \
105 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_QBV_PARAM)
106 :
107 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_QBV_PARAM);
108 :
109 : #define NET_REQUEST_ETHERNET_GET_QBU_PARAM \
110 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_QBU_PARAM)
111 :
112 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_QBU_PARAM);
113 :
114 : #define NET_REQUEST_ETHERNET_GET_TXTIME_PARAM \
115 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_TXTIME_PARAM)
116 :
117 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_TXTIME_PARAM);
118 :
119 : #define NET_REQUEST_ETHERNET_SET_T1S_PARAM \
120 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_T1S_PARAM)
121 :
122 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_T1S_PARAM);
123 :
124 : #define NET_REQUEST_ETHERNET_SET_TXINJECTION_MODE \
125 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_TXINJECTION_MODE)
126 :
127 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_TXINJECTION_MODE);
128 :
129 : #define NET_REQUEST_ETHERNET_GET_TXINJECTION_MODE \
130 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_TXINJECTION_MODE)
131 :
132 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_TXINJECTION_MODE);
133 :
134 : #define NET_REQUEST_ETHERNET_SET_MAC_FILTER \
135 : (NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_MAC_FILTER)
136 :
137 : NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_MAC_FILTER);
138 :
139 : struct net_eth_addr;
140 : struct ethernet_qav_param;
141 : struct ethernet_qbv_param;
142 : struct ethernet_qbu_param;
143 : struct ethernet_txtime_param;
144 :
145 : struct ethernet_req_params {
146 : union {
147 : bool promisc_mode;
148 : bool txinjection_mode;
149 :
150 : struct net_eth_addr mac_address;
151 :
152 : struct ethernet_qav_param qav_param;
153 : struct ethernet_qbv_param qbv_param;
154 : struct ethernet_qbu_param qbu_param;
155 : struct ethernet_txtime_param txtime_param;
156 : struct ethernet_t1s_param t1s_param;
157 :
158 : struct ethernet_filter filter;
159 :
160 : int priority_queues_num;
161 : int ports_num;
162 : };
163 : };
164 :
165 : enum {
166 : NET_EVENT_ETHERNET_CMD_CARRIER_ON_VAL,
167 : NET_EVENT_ETHERNET_CMD_CARRIER_OFF_VAL,
168 : NET_EVENT_ETHERNET_CMD_VLAN_TAG_ENABLED_VAL,
169 : NET_EVENT_ETHERNET_CMD_VLAN_TAG_DISABLED_VAL,
170 :
171 : NET_EVENT_ETHERNET_CMD_MAX
172 : };
173 :
174 : BUILD_ASSERT(NET_EVENT_ETHERNET_CMD_MAX <= NET_MGMT_MAX_COMMANDS,
175 : "Number of events in net_event_ethernet_cmd exceeds the limit");
176 :
177 : enum net_event_ethernet_cmd {
178 : NET_MGMT_CMD(NET_EVENT_ETHERNET_CMD_CARRIER_ON),
179 : NET_MGMT_CMD(NET_EVENT_ETHERNET_CMD_CARRIER_OFF),
180 : NET_MGMT_CMD(NET_EVENT_ETHERNET_CMD_VLAN_TAG_ENABLED),
181 : NET_MGMT_CMD(NET_EVENT_ETHERNET_CMD_VLAN_TAG_DISABLED),
182 : };
183 :
184 : #define NET_EVENT_ETHERNET_CARRIER_ON \
185 : (NET_ETHERNET_EVENT | NET_EVENT_ETHERNET_CMD_CARRIER_ON)
186 :
187 : #define NET_EVENT_ETHERNET_CARRIER_OFF \
188 : (NET_ETHERNET_EVENT | NET_EVENT_ETHERNET_CMD_CARRIER_OFF)
189 :
190 : #define NET_EVENT_ETHERNET_VLAN_TAG_ENABLED \
191 : (NET_ETHERNET_EVENT | NET_EVENT_ETHERNET_CMD_VLAN_TAG_ENABLED)
192 :
193 : #define NET_EVENT_ETHERNET_VLAN_TAG_DISABLED \
194 : (NET_ETHERNET_EVENT | NET_EVENT_ETHERNET_CMD_VLAN_TAG_DISABLED)
195 :
196 : struct net_if;
197 :
198 : /** @endcond */
199 :
200 : /**
201 : * @brief Raise CARRIER_ON event when Ethernet is connected.
202 : *
203 : * @param iface Ethernet network interface.
204 : */
205 : #if defined(CONFIG_NET_L2_ETHERNET_MGMT)
206 1 : void ethernet_mgmt_raise_carrier_on_event(struct net_if *iface);
207 : #else
208 : static inline void ethernet_mgmt_raise_carrier_on_event(struct net_if *iface)
209 : {
210 : ARG_UNUSED(iface);
211 : }
212 : #endif
213 :
214 : /**
215 : * @brief Raise CARRIER_OFF event when Ethernet is disconnected.
216 : *
217 : * @param iface Ethernet network interface.
218 : */
219 : #if defined(CONFIG_NET_L2_ETHERNET_MGMT)
220 1 : void ethernet_mgmt_raise_carrier_off_event(struct net_if *iface);
221 : #else
222 : static inline void ethernet_mgmt_raise_carrier_off_event(struct net_if *iface)
223 : {
224 : ARG_UNUSED(iface);
225 : }
226 : #endif
227 :
228 : /**
229 : * @brief Raise VLAN_ENABLED event when VLAN is enabled.
230 : *
231 : * @param iface Ethernet network interface.
232 : * @param tag VLAN tag which is enabled.
233 : */
234 : #if defined(CONFIG_NET_L2_ETHERNET_MGMT)
235 1 : void ethernet_mgmt_raise_vlan_enabled_event(struct net_if *iface, uint16_t tag);
236 : #else
237 : static inline void ethernet_mgmt_raise_vlan_enabled_event(struct net_if *iface,
238 : uint16_t tag)
239 : {
240 : ARG_UNUSED(iface);
241 : ARG_UNUSED(tag);
242 : }
243 : #endif
244 :
245 : /**
246 : * @brief Raise VLAN_DISABLED event when VLAN is disabled.
247 : *
248 : * @param iface Ethernet network interface.
249 : * @param tag VLAN tag which is disabled.
250 : */
251 : #if defined(CONFIG_NET_L2_ETHERNET_MGMT)
252 1 : void ethernet_mgmt_raise_vlan_disabled_event(struct net_if *iface,
253 : uint16_t tag);
254 : #else
255 : static inline void ethernet_mgmt_raise_vlan_disabled_event(struct net_if *iface,
256 : uint16_t tag)
257 : {
258 : ARG_UNUSED(iface);
259 : ARG_UNUSED(tag);
260 : }
261 : #endif
262 :
263 : /**
264 : * @}
265 : */
266 :
267 : #ifdef __cplusplus
268 : }
269 : #endif
270 :
271 : #endif /* ZEPHYR_INCLUDE_NET_ETHERNET_MGMT_H_ */
|