]>
Commit | Line | Data |
---|---|---|
53e1b683 | 1 | /* SPDX-License-Identifier: LGPL-2.1+ */ |
fc2f9534 LP |
2 | #pragma once |
3 | ||
fc2f9534 | 4 | #include "in-addr-util.h" |
634f0f98 | 5 | #include "list.h" |
3be1d7e0 | 6 | |
441e9ae4 | 7 | #include "netdev/netdev.h" |
3be1d7e0 | 8 | |
dd906398 DH |
9 | /* |
10 | * Maximum number of targets supported by the kernel for a single | |
11 | * bond netdev. | |
12 | */ | |
13 | #define NETDEV_BOND_ARP_TARGETS_MAX 16 | |
14 | ||
3be1d7e0 TG |
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 | |
25 | } BondMode; | |
26 | ||
227cdf2c SS |
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 | |
35 | } BondXmitHashPolicy; | |
36 | ||
fb1021a2 SS |
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, | |
42 | } BondLacpRate; | |
43 | ||
81bd37a8 SS |
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, | |
50 | } BondAdSelect; | |
51 | ||
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, | |
58 | } BondFailOverMac; | |
59 | ||
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, | |
67 | } BondArpValidate; | |
68 | ||
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, | |
74 | } BondArpAllTargets; | |
75 | ||
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; | |
83 | ||
84 | typedef struct ArpIpTarget { | |
85 | union in_addr_union ip; | |
86 | ||
87 | LIST_FIELDS(struct ArpIpTarget, arp_ip_target); | |
88 | } ArpIpTarget; | |
89 | ||
634f0f98 | 90 | typedef struct Bond { |
aa9f1140 TG |
91 | NetDev meta; |
92 | ||
93 | BondMode mode; | |
227cdf2c | 94 | BondXmitHashPolicy xmit_hash_policy; |
fb1021a2 | 95 | BondLacpRate lacp_rate; |
81bd37a8 SS |
96 | BondAdSelect ad_select; |
97 | BondFailOverMac fail_over_mac; | |
98 | BondArpValidate arp_validate; | |
99 | BondArpAllTargets arp_all_targets; | |
100 | BondPrimaryReselect primary_reselect; | |
101 | ||
fde60a42 SS |
102 | int tlb_dynamic_lb; |
103 | ||
81bd37a8 SS |
104 | bool all_slaves_active; |
105 | ||
106 | unsigned resend_igmp; | |
107 | unsigned packets_per_slave; | |
108 | unsigned num_grat_arp; | |
109 | unsigned min_links; | |
d9c52fa0 | 110 | |
99f68ef0 TJ |
111 | uint16_t ad_actor_sys_prio; |
112 | uint16_t ad_user_port_key; | |
113 | struct ether_addr *ad_actor_system; | |
114 | ||
d9c52fa0 SS |
115 | usec_t miimon; |
116 | usec_t updelay; | |
117 | usec_t downdelay; | |
81bd37a8 SS |
118 | usec_t arp_interval; |
119 | usec_t lp_interval; | |
120 | ||
121 | int n_arp_ip_targets; | |
122 | ArpIpTarget *arp_ip_targets; | |
634f0f98 | 123 | } Bond; |
aa9f1140 | 124 | |
634f0f98 | 125 | DEFINE_NETDEV_CAST(BOND, Bond); |
aa9f1140 TG |
126 | extern const NetDevVTable bond_vtable; |
127 | ||
3be1d7e0 TG |
128 | const char *bond_mode_to_string(BondMode d) _const_; |
129 | BondMode bond_mode_from_string(const char *d) _pure_; | |
130 | ||
227cdf2c SS |
131 | const char *bond_xmit_hash_policy_to_string(BondXmitHashPolicy d) _const_; |
132 | BondXmitHashPolicy bond_xmit_hash_policy_from_string(const char *d) _pure_; | |
133 | ||
fb1021a2 SS |
134 | const char *bond_lacp_rate_to_string(BondLacpRate d) _const_; |
135 | BondLacpRate bond_lacp_rate_from_string(const char *d) _pure_; | |
136 | ||
81bd37a8 SS |
137 | const char *bond_fail_over_mac_to_string(BondFailOverMac d) _const_; |
138 | BondFailOverMac bond_fail_over_mac_from_string(const char *d) _pure_; | |
139 | ||
140 | const char *bond_ad_select_to_string(BondAdSelect d) _const_; | |
141 | BondAdSelect bond_ad_select_from_string(const char *d) _pure_; | |
142 | ||
143 | const char *bond_arp_validate_to_string(BondArpValidate d) _const_; | |
144 | BondArpValidate bond_arp_validate_from_string(const char *d) _pure_; | |
145 | ||
146 | const char *bond_arp_all_targets_to_string(BondArpAllTargets d) _const_; | |
147 | BondArpAllTargets bond_arp_all_targets_from_string(const char *d) _pure_; | |
148 | ||
149 | const char *bond_primary_reselect_to_string(BondPrimaryReselect d) _const_; | |
150 | BondPrimaryReselect bond_primary_reselect_from_string(const char *d) _pure_; | |
151 | ||
538f15cf YW |
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); |