]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/network/netdev/bond.h
network: drop allocation for Bond::ad_actor_system
[thirdparty/systemd.git] / src / network / netdev / bond.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
fc2f9534
LP
2#pragma once
3
f2000933
YW
4#include <linux/if_bonding.h>
5
fc2f9534 6#include "in-addr-util.h"
634f0f98 7#include "list.h"
f2000933 8#include "netdev.h"
3be1d7e0 9
dd906398
DH
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
3be1d7e0 16typedef enum BondMode {
f2000933
YW
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,
3be1d7e0 24 _NETDEV_BOND_MODE_MAX,
f2000933 25 _NETDEV_BOND_MODE_INVALID = -1
3be1d7e0
TG
26} BondMode;
27
227cdf2c 28typedef enum BondXmitHashPolicy {
f2000933
YW
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,
227cdf2c
SS
34 _NETDEV_BOND_XMIT_HASH_POLICY_MAX,
35 _NETDEV_BOND_XMIT_HASH_POLICY_INVALID = -1
36} BondXmitHashPolicy;
37
fb1021a2
SS
38typedef 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
81bd37a8
SS
45typedef 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
53typedef 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
61typedef 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
70typedef 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
77typedef 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
85typedef struct ArpIpTarget {
86 union in_addr_union ip;
87
88 LIST_FIELDS(struct ArpIpTarget, arp_ip_target);
89} ArpIpTarget;
90
634f0f98 91typedef struct Bond {
aa9f1140
TG
92 NetDev meta;
93
94 BondMode mode;
227cdf2c 95 BondXmitHashPolicy xmit_hash_policy;
fb1021a2 96 BondLacpRate lacp_rate;
81bd37a8
SS
97 BondAdSelect ad_select;
98 BondFailOverMac fail_over_mac;
99 BondArpValidate arp_validate;
100 BondArpAllTargets arp_all_targets;
101 BondPrimaryReselect primary_reselect;
102
fde60a42
SS
103 int tlb_dynamic_lb;
104
81bd37a8
SS
105 bool all_slaves_active;
106
107 unsigned resend_igmp;
108 unsigned packets_per_slave;
109 unsigned num_grat_arp;
110 unsigned min_links;
d9c52fa0 111
99f68ef0
TJ
112 uint16_t ad_actor_sys_prio;
113 uint16_t ad_user_port_key;
1e2a490e 114 struct ether_addr ad_actor_system;
99f68ef0 115
d9c52fa0
SS
116 usec_t miimon;
117 usec_t updelay;
118 usec_t downdelay;
81bd37a8
SS
119 usec_t arp_interval;
120 usec_t lp_interval;
121
122 int n_arp_ip_targets;
123 ArpIpTarget *arp_ip_targets;
634f0f98 124} Bond;
aa9f1140 125
634f0f98 126DEFINE_NETDEV_CAST(BOND, Bond);
aa9f1140
TG
127extern const NetDevVTable bond_vtable;
128
3be1d7e0
TG
129const char *bond_mode_to_string(BondMode d) _const_;
130BondMode bond_mode_from_string(const char *d) _pure_;
131
227cdf2c
SS
132const char *bond_xmit_hash_policy_to_string(BondXmitHashPolicy d) _const_;
133BondXmitHashPolicy bond_xmit_hash_policy_from_string(const char *d) _pure_;
134
fb1021a2
SS
135const char *bond_lacp_rate_to_string(BondLacpRate d) _const_;
136BondLacpRate bond_lacp_rate_from_string(const char *d) _pure_;
137
81bd37a8
SS
138const char *bond_fail_over_mac_to_string(BondFailOverMac d) _const_;
139BondFailOverMac bond_fail_over_mac_from_string(const char *d) _pure_;
140
141const char *bond_ad_select_to_string(BondAdSelect d) _const_;
142BondAdSelect bond_ad_select_from_string(const char *d) _pure_;
143
144const char *bond_arp_validate_to_string(BondArpValidate d) _const_;
145BondArpValidate bond_arp_validate_from_string(const char *d) _pure_;
146
147const char *bond_arp_all_targets_to_string(BondArpAllTargets d) _const_;
148BondArpAllTargets bond_arp_all_targets_from_string(const char *d) _pure_;
149
150const char *bond_primary_reselect_to_string(BondPrimaryReselect d) _const_;
151BondPrimaryReselect bond_primary_reselect_from_string(const char *d) _pure_;
152
538f15cf
YW
153CONFIG_PARSER_PROTOTYPE(config_parse_bond_mode);
154CONFIG_PARSER_PROTOTYPE(config_parse_bond_xmit_hash_policy);
155CONFIG_PARSER_PROTOTYPE(config_parse_bond_lacp_rate);
156CONFIG_PARSER_PROTOTYPE(config_parse_bond_ad_select);
157CONFIG_PARSER_PROTOTYPE(config_parse_bond_fail_over_mac);
158CONFIG_PARSER_PROTOTYPE(config_parse_bond_arp_validate);
159CONFIG_PARSER_PROTOTYPE(config_parse_bond_arp_all_targets);
160CONFIG_PARSER_PROTOTYPE(config_parse_bond_primary_reselect);
161CONFIG_PARSER_PROTOTYPE(config_parse_arp_ip_target_address);
162CONFIG_PARSER_PROTOTYPE(config_parse_ad_actor_sys_prio);
163CONFIG_PARSER_PROTOTYPE(config_parse_ad_user_port_key);
164CONFIG_PARSER_PROTOTYPE(config_parse_ad_actor_system);