]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/network/netdev/bond.h
network: drop allocation for Bond::ad_actor_system
[thirdparty/systemd.git] / src / network / netdev / bond.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 #pragma once
3
4 #include <linux/if_bonding.h>
5
6 #include "in-addr-util.h"
7 #include "list.h"
8 #include "netdev.h"
9
10 /*
11 * Maximum number of targets supported by the kernel for a single
12 * bond netdev.
13 */
14 #define NETDEV_BOND_ARP_TARGETS_MAX 16
15
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
26 } BondMode;
27
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
36 } BondXmitHashPolicy;
37
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,
43 } BondLacpRate;
44
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,
51 } BondAdSelect;
52
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,
59 } BondFailOverMac;
60
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,
68 } BondArpValidate;
69
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,
75 } BondArpAllTargets;
76
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;
84
85 typedef struct ArpIpTarget {
86 union in_addr_union ip;
87
88 LIST_FIELDS(struct ArpIpTarget, arp_ip_target);
89 } ArpIpTarget;
90
91 typedef struct Bond {
92 NetDev meta;
93
94 BondMode mode;
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;
102
103 int tlb_dynamic_lb;
104
105 bool all_slaves_active;
106
107 unsigned resend_igmp;
108 unsigned packets_per_slave;
109 unsigned num_grat_arp;
110 unsigned min_links;
111
112 uint16_t ad_actor_sys_prio;
113 uint16_t ad_user_port_key;
114 struct ether_addr ad_actor_system;
115
116 usec_t miimon;
117 usec_t updelay;
118 usec_t downdelay;
119 usec_t arp_interval;
120 usec_t lp_interval;
121
122 int n_arp_ip_targets;
123 ArpIpTarget *arp_ip_targets;
124 } Bond;
125
126 DEFINE_NETDEV_CAST(BOND, Bond);
127 extern const NetDevVTable bond_vtable;
128
129 const char *bond_mode_to_string(BondMode d) _const_;
130 BondMode bond_mode_from_string(const char *d) _pure_;
131
132 const char *bond_xmit_hash_policy_to_string(BondXmitHashPolicy d) _const_;
133 BondXmitHashPolicy bond_xmit_hash_policy_from_string(const char *d) _pure_;
134
135 const char *bond_lacp_rate_to_string(BondLacpRate d) _const_;
136 BondLacpRate bond_lacp_rate_from_string(const char *d) _pure_;
137
138 const char *bond_fail_over_mac_to_string(BondFailOverMac d) _const_;
139 BondFailOverMac bond_fail_over_mac_from_string(const char *d) _pure_;
140
141 const char *bond_ad_select_to_string(BondAdSelect d) _const_;
142 BondAdSelect bond_ad_select_from_string(const char *d) _pure_;
143
144 const char *bond_arp_validate_to_string(BondArpValidate d) _const_;
145 BondArpValidate bond_arp_validate_from_string(const char *d) _pure_;
146
147 const char *bond_arp_all_targets_to_string(BondArpAllTargets d) _const_;
148 BondArpAllTargets bond_arp_all_targets_from_string(const char *d) _pure_;
149
150 const char *bond_primary_reselect_to_string(BondPrimaryReselect d) _const_;
151 BondPrimaryReselect bond_primary_reselect_from_string(const char *d) _pure_;
152
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);