DPDK  24.11.2
rte_eth_bond_8023ad.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2014 Intel Corporation
3  */
4 
5 #ifndef RTE_ETH_BOND_8023AD_H_
6 #define RTE_ETH_BOND_8023AD_H_
7 
8 #include <rte_ether.h>
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
17 #define STATE_LACP_ACTIVE 0x01
18 #define STATE_LACP_SHORT_TIMEOUT 0x02
19 #define STATE_AGGREGATION 0x04
20 #define STATE_SYNCHRONIZATION 0x08
21 #define STATE_COLLECTING 0x10
22 #define STATE_DISTRIBUTING 0x20
24 #define STATE_DEFAULTED 0x40
25 #define STATE_EXPIRED 0x80
26 
27 #define TLV_TYPE_ACTOR_INFORMATION 0x01
28 #define TLV_TYPE_PARTNER_INFORMATION 0x02
29 #define TLV_TYPE_COLLECTOR_INFORMATION 0x03
30 #define TLV_TYPE_TERMINATOR_INFORMATION 0x00
31 
32 #define SLOW_SUBTYPE_LACP 0x01
33 #define SLOW_SUBTYPE_MARKER 0x02
34 
35 #define MARKER_TLV_TYPE_INFO 0x01
36 #define MARKER_TLV_TYPE_RESP 0x02
37 
38 #define SLOW_TX_QUEUE_HW_DEFAULT_SIZE 512
39 #define SLOW_RX_QUEUE_HW_DEFAULT_SIZE 512
40 
41 typedef void (*rte_eth_bond_8023ad_ext_slowrx_fn)(uint16_t member_id,
42  struct rte_mbuf *lacp_pkt);
43 
44 enum rte_bond_8023ad_selection {
45  UNSELECTED,
46  STANDBY,
47  SELECTED
48 };
49 
50 enum rte_bond_8023ad_agg_selection {
51  AGG_BANDWIDTH,
52  AGG_COUNT,
53  AGG_STABLE
54 };
55 
57 struct slow_protocol {
58  uint8_t subtype;
59  uint8_t reserved_119[119];
60 } __rte_packed;
61 
63 struct __rte_aligned(2) slow_protocol_frame {
64  struct rte_ether_hdr eth_hdr;
66 } __rte_packed;
67 
68 struct __rte_aligned(2) port_params {
69  uint16_t system_priority;
71  struct rte_ether_addr system;
73  uint16_t key;
75  uint16_t port_priority;
77  uint16_t port_number;
79 } __rte_packed;
80 
81 struct __rte_aligned(2) lacpdu_actor_partner_params {
82  uint8_t tlv_type_info;
83  uint8_t info_length;
84  struct port_params port_params;
85  uint8_t state;
86  uint8_t reserved_3[3];
87 } __rte_packed;
88 
90 struct __rte_aligned(2) lacpdu {
91  uint8_t subtype;
92  uint8_t version_number;
93 
94  struct lacpdu_actor_partner_params actor;
95  struct lacpdu_actor_partner_params partner;
96 
97  uint8_t tlv_type_collector_info;
98  uint8_t collector_info_length;
99  uint16_t collector_max_delay;
100  uint8_t reserved_12[12];
101 
102  uint8_t tlv_type_terminator;
103  uint8_t terminator_length;
104  uint8_t reserved_50[50];
105 } __rte_packed;
106 
108 struct __rte_aligned(2) lacpdu_header {
109  struct rte_ether_hdr eth_hdr;
110  struct lacpdu lacpdu;
111 } __rte_packed;
112 
113 struct __rte_aligned(2) marker {
114  uint8_t subtype;
115  uint8_t version_number;
116 
117  uint8_t tlv_type_marker;
118  uint8_t info_length;
119  uint16_t requester_port;
120  struct rte_ether_addr requester_system;
121  uint32_t requester_transaction_id;
122  uint8_t reserved_2[2];
123 
124  uint8_t tlv_type_terminator;
125  uint8_t terminator_length;
126  uint8_t reserved_90[90];
127 } __rte_packed;
128 
129 struct __rte_aligned(2) marker_header {
130  struct rte_ether_hdr eth_hdr;
131  struct marker marker;
132 } __rte_packed;
133 
134 struct rte_eth_bond_8023ad_conf {
135  uint32_t fast_periodic_ms;
136  uint32_t slow_periodic_ms;
137  uint32_t short_timeout_ms;
138  uint32_t long_timeout_ms;
139  uint32_t aggregate_wait_timeout_ms;
140  uint32_t tx_period_ms;
141  uint32_t rx_marker_period_ms;
142  uint32_t update_timeout_ms;
143  rte_eth_bond_8023ad_ext_slowrx_fn slowrx_cb;
144  enum rte_bond_8023ad_agg_selection agg_selection;
145 };
146 
147 struct rte_eth_bond_8023ad_member_info {
148  enum rte_bond_8023ad_selection selected;
149  uint8_t actor_state;
150  struct port_params actor;
151  uint8_t partner_state;
152  struct port_params partner;
153  uint16_t agg_port_id;
154 };
155 
168 int
169 rte_eth_bond_8023ad_conf_get(uint16_t port_id,
170  struct rte_eth_bond_8023ad_conf *conf);
171 
183 int
184 rte_eth_bond_8023ad_setup(uint16_t port_id,
185  struct rte_eth_bond_8023ad_conf *conf);
186 
199 int
200 rte_eth_bond_8023ad_member_info(uint16_t port_id, uint16_t member_id,
201  struct rte_eth_bond_8023ad_member_info *conf);
202 
213 int
214 rte_eth_bond_8023ad_ext_collect(uint16_t port_id, uint16_t member_id,
215  int enabled);
216 
227 int
228 rte_eth_bond_8023ad_ext_collect_get(uint16_t port_id, uint16_t member_id);
229 
240 int
241 rte_eth_bond_8023ad_ext_distrib(uint16_t port_id, uint16_t member_id,
242  int enabled);
243 
254 int
255 rte_eth_bond_8023ad_ext_distrib_get(uint16_t port_id, uint16_t member_id);
256 
268 int
269 rte_eth_bond_8023ad_ext_slowtx(uint16_t port_id, uint16_t member_id,
270  struct rte_mbuf *lacp_pkt);
271 
294 int
295 rte_eth_bond_8023ad_dedicated_queues_enable(uint16_t port_id);
296 
311 int
312 rte_eth_bond_8023ad_dedicated_queues_disable(uint16_t port_id);
313 
314 /*
315  * Get aggregator mode for 8023ad
316  * @param port_id Bonding device id
317  *
318  * @return
319  * aggregator mode on success, negative value otherwise
320  */
321 int
322 rte_eth_bond_8023ad_agg_selection_get(uint16_t port_id);
323 
330 int
331 rte_eth_bond_8023ad_agg_selection_set(uint16_t port_id,
332  enum rte_bond_8023ad_agg_selection agg_selection);
333 
334 #ifdef __cplusplus
335 }
336 #endif
337 
338 #endif /* RTE_ETH_BOND_8023AD_H_ */
#define __rte_packed
Definition: rte_common.h:108
#define __rte_aligned(a)
Definition: rte_common.h:89