DPDK 25.03.0-rc1
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
11extern "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
41typedef void (*rte_eth_bond_8023ad_ext_slowrx_fn)(uint16_t member_id,
42 struct rte_mbuf *lacp_pkt);
43
44enum rte_bond_8023ad_selection {
45 UNSELECTED,
46 STANDBY,
47 SELECTED
48};
49
50enum rte_bond_8023ad_agg_selection {
51 AGG_BANDWIDTH,
52 AGG_COUNT,
53 AGG_STABLE
54};
55
58 uint8_t subtype;
59 uint8_t reserved_119[119];
60} __rte_packed_end;
61
63struct __rte_aligned(2) __rte_packed_begin slow_protocol_frame {
64 struct rte_ether_hdr eth_hdr;
66} __rte_packed_end;
67
68struct __rte_aligned(2) __rte_packed_begin 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_end;
80
81struct __rte_aligned(2) __rte_packed_begin 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_end;
88
90struct __rte_aligned(2) __rte_packed_begin 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_end;
106
108struct __rte_aligned(2) __rte_packed_begin lacpdu_header {
109 struct rte_ether_hdr eth_hdr;
110 struct lacpdu lacpdu;
111} __rte_packed_end;
112
113struct __rte_aligned(2) __rte_packed_begin 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_end;
128
129struct __rte_aligned(2) __rte_packed_begin marker_header {
130 struct rte_ether_hdr eth_hdr;
131 struct marker marker;
132} __rte_packed_end;
133
134struct 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
147struct 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
168int
169rte_eth_bond_8023ad_conf_get(uint16_t port_id,
170 struct rte_eth_bond_8023ad_conf *conf);
171
183int
184rte_eth_bond_8023ad_setup(uint16_t port_id,
185 struct rte_eth_bond_8023ad_conf *conf);
186
199int
200rte_eth_bond_8023ad_member_info(uint16_t port_id, uint16_t member_id,
201 struct rte_eth_bond_8023ad_member_info *conf);
202
213int
214rte_eth_bond_8023ad_ext_collect(uint16_t port_id, uint16_t member_id,
215 int enabled);
216
227int
228rte_eth_bond_8023ad_ext_collect_get(uint16_t port_id, uint16_t member_id);
229
240int
241rte_eth_bond_8023ad_ext_distrib(uint16_t port_id, uint16_t member_id,
242 int enabled);
243
254int
255rte_eth_bond_8023ad_ext_distrib_get(uint16_t port_id, uint16_t member_id);
256
268int
269rte_eth_bond_8023ad_ext_slowtx(uint16_t port_id, uint16_t member_id,
270 struct rte_mbuf *lacp_pkt);
271
294int
295rte_eth_bond_8023ad_dedicated_queues_enable(uint16_t port_id);
296
311int
312rte_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 */
321int
322rte_eth_bond_8023ad_agg_selection_get(uint16_t port_id);
323
330int
331rte_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_aligned(a)
Definition: rte_common.h:87
#define __rte_packed_begin
Definition: rte_common.h:124