1 /* SPDX-License-Identifier: LGPL-2.1+ */
4 #include <linux/if_bonding.h>
6 #include "in-addr-util.h"
11 * Maximum number of targets supported by the kernel for a single
14 #define NETDEV_BOND_ARP_TARGETS_MAX 16
16 typedef enum BondMode
{
17 NETDEV_BOND_MODE_BALANCE_RR
= BOND_MODE_ROUNDROBIN
,
18 NETDEV_BOND_MODE_ACTIVE_BACKUP
= BOND_MODE_ACTIVEBACKUP
,
19 NETDEV_BOND_MODE_BALANCE_XOR
= BOND_MODE_XOR
,
20 NETDEV_BOND_MODE_BROADCAST
= BOND_MODE_BROADCAST
,
21 NETDEV_BOND_MODE_802_3AD
= BOND_MODE_8023AD
,
22 NETDEV_BOND_MODE_BALANCE_TLB
= BOND_MODE_TLB
,
23 NETDEV_BOND_MODE_BALANCE_ALB
= BOND_MODE_ALB
,
24 _NETDEV_BOND_MODE_MAX
,
25 _NETDEV_BOND_MODE_INVALID
= -1
28 typedef enum BondXmitHashPolicy
{
29 NETDEV_BOND_XMIT_HASH_POLICY_LAYER2
= BOND_XMIT_POLICY_LAYER2
,
30 NETDEV_BOND_XMIT_HASH_POLICY_LAYER34
= BOND_XMIT_POLICY_LAYER34
,
31 NETDEV_BOND_XMIT_HASH_POLICY_LAYER23
= BOND_XMIT_POLICY_LAYER23
,
32 NETDEV_BOND_XMIT_HASH_POLICY_ENCAP23
= BOND_XMIT_POLICY_ENCAP23
,
33 NETDEV_BOND_XMIT_HASH_POLICY_ENCAP34
= BOND_XMIT_POLICY_ENCAP34
,
34 _NETDEV_BOND_XMIT_HASH_POLICY_MAX
,
35 _NETDEV_BOND_XMIT_HASH_POLICY_INVALID
= -1
38 typedef enum BondLacpRate
{
39 NETDEV_BOND_LACP_RATE_SLOW
,
40 NETDEV_BOND_LACP_RATE_FAST
,
41 _NETDEV_BOND_LACP_RATE_MAX
,
42 _NETDEV_BOND_LACP_RATE_INVALID
= -1,
45 typedef enum BondAdSelect
{
46 NETDEV_BOND_AD_SELECT_STABLE
,
47 NETDEV_BOND_AD_SELECT_BANDWIDTH
,
48 NETDEV_BOND_AD_SELECT_COUNT
,
49 _NETDEV_BOND_AD_SELECT_MAX
,
50 _NETDEV_BOND_AD_SELECT_INVALID
= -1,
53 typedef enum BondFailOverMac
{
54 NETDEV_BOND_FAIL_OVER_MAC_NONE
,
55 NETDEV_BOND_FAIL_OVER_MAC_ACTIVE
,
56 NETDEV_BOND_FAIL_OVER_MAC_FOLLOW
,
57 _NETDEV_BOND_FAIL_OVER_MAC_MAX
,
58 _NETDEV_BOND_FAIL_OVER_MAC_INVALID
= -1,
61 typedef enum BondArpValidate
{
62 NETDEV_BOND_ARP_VALIDATE_NONE
,
63 NETDEV_BOND_ARP_VALIDATE_ACTIVE
,
64 NETDEV_BOND_ARP_VALIDATE_BACKUP
,
65 NETDEV_BOND_ARP_VALIDATE_ALL
,
66 _NETDEV_BOND_ARP_VALIDATE_MAX
,
67 _NETDEV_BOND_ARP_VALIDATE_INVALID
= -1,
70 typedef enum BondArpAllTargets
{
71 NETDEV_BOND_ARP_ALL_TARGETS_ANY
,
72 NETDEV_BOND_ARP_ALL_TARGETS_ALL
,
73 _NETDEV_BOND_ARP_ALL_TARGETS_MAX
,
74 _NETDEV_BOND_ARP_ALL_TARGETS_INVALID
= -1,
77 typedef enum BondPrimaryReselect
{
78 NETDEV_BOND_PRIMARY_RESELECT_ALWAYS
,
79 NETDEV_BOND_PRIMARY_RESELECT_BETTER
,
80 NETDEV_BOND_PRIMARY_RESELECT_FAILURE
,
81 _NETDEV_BOND_PRIMARY_RESELECT_MAX
,
82 _NETDEV_BOND_PRIMARY_RESELECT_INVALID
= -1,
83 } BondPrimaryReselect
;
85 typedef struct ArpIpTarget
{
86 union in_addr_union ip
;
88 LIST_FIELDS(struct ArpIpTarget
, arp_ip_target
);
95 BondXmitHashPolicy xmit_hash_policy
;
96 BondLacpRate lacp_rate
;
97 BondAdSelect ad_select
;
98 BondFailOverMac fail_over_mac
;
99 BondArpValidate arp_validate
;
100 BondArpAllTargets arp_all_targets
;
101 BondPrimaryReselect primary_reselect
;
105 bool all_slaves_active
;
107 unsigned resend_igmp
;
108 unsigned packets_per_slave
;
109 unsigned num_grat_arp
;
112 uint16_t ad_actor_sys_prio
;
113 uint16_t ad_user_port_key
;
114 struct ether_addr ad_actor_system
;
122 int n_arp_ip_targets
;
123 ArpIpTarget
*arp_ip_targets
;
126 DEFINE_NETDEV_CAST(BOND
, Bond
);
127 extern const NetDevVTable bond_vtable
;
129 const char *bond_mode_to_string(BondMode d
) _const_
;
130 BondMode
bond_mode_from_string(const char *d
) _pure_
;
132 const char *bond_xmit_hash_policy_to_string(BondXmitHashPolicy d
) _const_
;
133 BondXmitHashPolicy
bond_xmit_hash_policy_from_string(const char *d
) _pure_
;
135 const char *bond_lacp_rate_to_string(BondLacpRate d
) _const_
;
136 BondLacpRate
bond_lacp_rate_from_string(const char *d
) _pure_
;
138 const char *bond_fail_over_mac_to_string(BondFailOverMac d
) _const_
;
139 BondFailOverMac
bond_fail_over_mac_from_string(const char *d
) _pure_
;
141 const char *bond_ad_select_to_string(BondAdSelect d
) _const_
;
142 BondAdSelect
bond_ad_select_from_string(const char *d
) _pure_
;
144 const char *bond_arp_validate_to_string(BondArpValidate d
) _const_
;
145 BondArpValidate
bond_arp_validate_from_string(const char *d
) _pure_
;
147 const char *bond_arp_all_targets_to_string(BondArpAllTargets d
) _const_
;
148 BondArpAllTargets
bond_arp_all_targets_from_string(const char *d
) _pure_
;
150 const char *bond_primary_reselect_to_string(BondPrimaryReselect d
) _const_
;
151 BondPrimaryReselect
bond_primary_reselect_from_string(const char *d
) _pure_
;
153 CONFIG_PARSER_PROTOTYPE(config_parse_bond_mode
);
154 CONFIG_PARSER_PROTOTYPE(config_parse_bond_xmit_hash_policy
);
155 CONFIG_PARSER_PROTOTYPE(config_parse_bond_lacp_rate
);
156 CONFIG_PARSER_PROTOTYPE(config_parse_bond_ad_select
);
157 CONFIG_PARSER_PROTOTYPE(config_parse_bond_fail_over_mac
);
158 CONFIG_PARSER_PROTOTYPE(config_parse_bond_arp_validate
);
159 CONFIG_PARSER_PROTOTYPE(config_parse_bond_arp_all_targets
);
160 CONFIG_PARSER_PROTOTYPE(config_parse_bond_primary_reselect
);
161 CONFIG_PARSER_PROTOTYPE(config_parse_arp_ip_target_address
);
162 CONFIG_PARSER_PROTOTYPE(config_parse_ad_actor_sys_prio
);
163 CONFIG_PARSER_PROTOTYPE(config_parse_ad_user_port_key
);
164 CONFIG_PARSER_PROTOTYPE(config_parse_ad_actor_system
);