From 5ba9744aac6d42da1e56357aca951b52f86cfacb Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 2 Sep 2021 20:26:33 +0200 Subject: device: add support for configuring bonding devices Supported options: - ports: member devices - policy: bonding policy supported values: - balance-rr - active-backup - balance-xor - broadcast - 802.3ad - balance-tlb - balance-alb - xmit_hash_policy: slave selection tx hash policy supported values: - layer2 - layer2+3 - layer3+4 - encap2+3 - encap3+4 - all_ports_active: allow receiving on inactive ports - min_links: minimum number of active links - ad_actor_system: LACPDU exchange MAC address - ad_actor_sys_prio: LACPDU priority value - ad_select: 802.3ad aggregation logic supported values: - stable - bandwidth - count - lacp_rate: 802.3ad LACPDU packet rate supported values: - slow (every 30 seconds) - fast (every second) - packets_per_port: number of packets before switching ports (balance-rr mode). - lp_interval: number of seconds between sent learning packets - dynamic_lb: distribute traffic according to port load - resend_igmp: number if IGMP membership updates after failover event - num_peer_notif: number of tx unsolicited ARP/NA after failover event - primary: name of the primary port - primary_reselect: primary port reselection policy supported values: - always - better - failure - failover_mac: MAC address selection policy supported values: - none - active - follow - monitor_mode: select ARP or MII link monitor: supported values: - arp - mii - monitor_interval: link monitor update interval (msec) - arp_target: ARP monitor target IP address (list) - arp_all_targets: all targets must be reachable to consider the link valid - arp_validate: ARP validation policy supported values: - none - active - backup - all - filter - filter_active - filter_backup - use_carrier: use carrier status instead of MII ioctl result - updelay: delay before enabling port after MII link up event (msec) - downdelay: delay before disabling port after MII link down event (msec) Signed-off-by: Felix Fietkau --- system.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'system.h') diff --git a/system.h b/system.h index b6eda7e..be90f65 100644 --- a/system.h +++ b/system.h @@ -184,6 +184,44 @@ struct vlandev_config { struct vlist_simple_tree egress_qos_mapping_list; /* list of struct vlan_qos_mapping */ }; +enum bonding_mode { + BONDING_MODE_BALANCE_RR, + BONDING_MODE_ACTIVE_BACKUP, + BONDING_MODE_BALANCE_XOR, + BONDING_MODE_BROADCAST, + BONDING_MODE_8023AD, + BONDING_MODE_BALANCE_TLB, + BONDING_MODE_BALANCE_ALB, + __BONDING_MODE_MAX, +}; + +struct bonding_config { + enum bonding_mode policy; + const char *xmit_hash_policy; + bool all_ports_active; + int min_links; + const char *ad_actor_system; + int ad_actor_sys_prio; + const char *ad_select; + const char *lacp_rate; + int packets_per_port; + int lp_interval; + bool dynamic_lb; + int resend_igmp; + int num_peer_notif; + const char *primary; + const char *primary_reselect; + const char *failover_mac; + bool monitor_arp; + int monitor_interval; + struct blob_attr *arp_target; + bool arp_all_targets; + const char *arp_validate; + bool use_carrier; + int updelay; + int downdelay; +}; + static inline int system_get_addr_family(unsigned int flags) { if ((flags & DEVADDR_FAMILY) == DEVADDR_INET6) @@ -200,6 +238,8 @@ static inline int system_get_addr_len(unsigned int flags) return sizeof(struct in6_addr); } +extern const char * const bonding_policy_str[__BONDING_MODE_MAX]; + int system_init(void); int system_bridge_addbr(struct device *bridge, struct bridge_config *cfg); @@ -210,6 +250,9 @@ int system_bridge_vlan(const char *iface, uint16_t vid, bool add, unsigned int v int system_bridge_vlan_check(struct device *dev, char *ifname); void system_bridge_set_stp_state(struct device *dev, bool val); +int system_bonding_set_device(struct device *dev, struct bonding_config *cfg); +int system_bonding_set_port(struct device *dev, struct device *port, bool add, bool primary); + int system_macvlan_add(struct device *macvlan, struct device *dev, struct macvlan_config *cfg); int system_macvlan_del(struct device *macvlan); -- cgit v1.2.1