1 /* SPDX-License-Identifier: LGPL-2.1+ */
4 #include "in-addr-util.h"
7 #include "netdev/netdev.h"
10 * Maximum number of targets supported by the kernel for a single
13 #define NETDEV_BOND_ARP_TARGETS_MAX 16
15 typedef enum BondMode
{
16 NETDEV_BOND_MODE_BALANCE_RR
,
17 NETDEV_BOND_MODE_ACTIVE_BACKUP
,
18 NETDEV_BOND_MODE_BALANCE_XOR
,
19 NETDEV_BOND_MODE_BROADCAST
,
20 NETDEV_BOND_MODE_802_3AD
,
21 NETDEV_BOND_MODE_BALANCE_TLB
,
22 NETDEV_BOND_MODE_BALANCE_ALB
,
23 _NETDEV_BOND_MODE_MAX
,
24 _NETDEV_BOND_MODE_INVALID
= -1
27 typedef enum BondXmitHashPolicy
{
28 NETDEV_BOND_XMIT_HASH_POLICY_LAYER2
,
29 NETDEV_BOND_XMIT_HASH_POLICY_LAYER34
,
30 NETDEV_BOND_XMIT_HASH_POLICY_LAYER23
,
31 NETDEV_BOND_XMIT_HASH_POLICY_ENCAP23
,
32 NETDEV_BOND_XMIT_HASH_POLICY_ENCAP34
,
33 _NETDEV_BOND_XMIT_HASH_POLICY_MAX
,
34 _NETDEV_BOND_XMIT_HASH_POLICY_INVALID
= -1
37 typedef enum BondLacpRate
{
38 NETDEV_BOND_LACP_RATE_SLOW
,
39 NETDEV_BOND_LACP_RATE_FAST
,
40 _NETDEV_BOND_LACP_RATE_MAX
,
41 _NETDEV_BOND_LACP_RATE_INVALID
= -1,
44 typedef enum BondAdSelect
{
45 NETDEV_BOND_AD_SELECT_STABLE
,
46 NETDEV_BOND_AD_SELECT_BANDWIDTH
,
47 NETDEV_BOND_AD_SELECT_COUNT
,
48 _NETDEV_BOND_AD_SELECT_MAX
,
49 _NETDEV_BOND_AD_SELECT_INVALID
= -1,
52 typedef enum BondFailOverMac
{
53 NETDEV_BOND_FAIL_OVER_MAC_NONE
,
54 NETDEV_BOND_FAIL_OVER_MAC_ACTIVE
,
55 NETDEV_BOND_FAIL_OVER_MAC_FOLLOW
,
56 _NETDEV_BOND_FAIL_OVER_MAC_MAX
,
57 _NETDEV_BOND_FAIL_OVER_MAC_INVALID
= -1,
60 typedef enum BondArpValidate
{
61 NETDEV_BOND_ARP_VALIDATE_NONE
,
62 NETDEV_BOND_ARP_VALIDATE_ACTIVE
,
63 NETDEV_BOND_ARP_VALIDATE_BACKUP
,
64 NETDEV_BOND_ARP_VALIDATE_ALL
,
65 _NETDEV_BOND_ARP_VALIDATE_MAX
,
66 _NETDEV_BOND_ARP_VALIDATE_INVALID
= -1,
69 typedef enum BondArpAllTargets
{
70 NETDEV_BOND_ARP_ALL_TARGETS_ANY
,
71 NETDEV_BOND_ARP_ALL_TARGETS_ALL
,
72 _NETDEV_BOND_ARP_ALL_TARGETS_MAX
,
73 _NETDEV_BOND_ARP_ALL_TARGETS_INVALID
= -1,
76 typedef enum BondPrimaryReselect
{
77 NETDEV_BOND_PRIMARY_RESELECT_ALWAYS
,
78 NETDEV_BOND_PRIMARY_RESELECT_BETTER
,
79 NETDEV_BOND_PRIMARY_RESELECT_FAILURE
,
80 _NETDEV_BOND_PRIMARY_RESELECT_MAX
,
81 _NETDEV_BOND_PRIMARY_RESELECT_INVALID
= -1,
82 } BondPrimaryReselect
;
84 typedef struct ArpIpTarget
{
85 union in_addr_union ip
;
87 LIST_FIELDS(struct ArpIpTarget
, arp_ip_target
);
94 BondXmitHashPolicy xmit_hash_policy
;
95 BondLacpRate lacp_rate
;
96 BondAdSelect ad_select
;
97 BondFailOverMac fail_over_mac
;
98 BondArpValidate arp_validate
;
99 BondArpAllTargets arp_all_targets
;
100 BondPrimaryReselect primary_reselect
;
104 bool all_slaves_active
;
106 unsigned resend_igmp
;
107 unsigned packets_per_slave
;
108 unsigned num_grat_arp
;
111 uint16_t ad_actor_sys_prio
;
112 uint16_t ad_user_port_key
;
113 struct ether_addr
*ad_actor_system
;
121 int n_arp_ip_targets
;
122 ArpIpTarget
*arp_ip_targets
;
125 DEFINE_NETDEV_CAST(BOND
, Bond
);
126 extern const NetDevVTable bond_vtable
;
128 const char *bond_mode_to_string(BondMode d
) _const_
;
129 BondMode
bond_mode_from_string(const char *d
) _pure_
;
131 const char *bond_xmit_hash_policy_to_string(BondXmitHashPolicy d
) _const_
;
132 BondXmitHashPolicy
bond_xmit_hash_policy_from_string(const char *d
) _pure_
;
134 const char *bond_lacp_rate_to_string(BondLacpRate d
) _const_
;
135 BondLacpRate
bond_lacp_rate_from_string(const char *d
) _pure_
;
137 const char *bond_fail_over_mac_to_string(BondFailOverMac d
) _const_
;
138 BondFailOverMac
bond_fail_over_mac_from_string(const char *d
) _pure_
;
140 const char *bond_ad_select_to_string(BondAdSelect d
) _const_
;
141 BondAdSelect
bond_ad_select_from_string(const char *d
) _pure_
;
143 const char *bond_arp_validate_to_string(BondArpValidate d
) _const_
;
144 BondArpValidate
bond_arp_validate_from_string(const char *d
) _pure_
;
146 const char *bond_arp_all_targets_to_string(BondArpAllTargets d
) _const_
;
147 BondArpAllTargets
bond_arp_all_targets_from_string(const char *d
) _pure_
;
149 const char *bond_primary_reselect_to_string(BondPrimaryReselect d
) _const_
;
150 BondPrimaryReselect
bond_primary_reselect_from_string(const char *d
) _pure_
;
152 CONFIG_PARSER_PROTOTYPE(config_parse_bond_mode
);
153 CONFIG_PARSER_PROTOTYPE(config_parse_bond_xmit_hash_policy
);
154 CONFIG_PARSER_PROTOTYPE(config_parse_bond_lacp_rate
);
155 CONFIG_PARSER_PROTOTYPE(config_parse_bond_ad_select
);
156 CONFIG_PARSER_PROTOTYPE(config_parse_bond_fail_over_mac
);
157 CONFIG_PARSER_PROTOTYPE(config_parse_bond_arp_validate
);
158 CONFIG_PARSER_PROTOTYPE(config_parse_bond_arp_all_targets
);
159 CONFIG_PARSER_PROTOTYPE(config_parse_bond_primary_reselect
);
160 CONFIG_PARSER_PROTOTYPE(config_parse_arp_ip_target_address
);
161 CONFIG_PARSER_PROTOTYPE(config_parse_ad_actor_sys_prio
);
162 CONFIG_PARSER_PROTOTYPE(config_parse_ad_user_port_key
);
163 CONFIG_PARSER_PROTOTYPE(config_parse_ad_actor_system
);