xref: /linux/include/uapi/linux/if_bonding.h (revision 8be98d2f2a0a262f8bf8a0bc1fdf522b3c7aab17)
1e2be04c7SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-1.0+ WITH Linux-syscall-note */
2607ca46eSDavid Howells /*
3607ca46eSDavid Howells  * Bond several ethernet interfaces into a Cisco, running 'Etherchannel'.
4607ca46eSDavid Howells  *
5607ca46eSDavid Howells  *
6607ca46eSDavid Howells  * Portions are (c) Copyright 1995 Simon "Guru Aleph-Null" Janes
7607ca46eSDavid Howells  * NCM: Network and Communications Management, Inc.
8607ca46eSDavid Howells  *
9607ca46eSDavid Howells  * BUT, I'm the one who modified it for ethernet, so:
10607ca46eSDavid Howells  * (c) Copyright 1999, Thomas Davis, tadavis@lbl.gov
11607ca46eSDavid Howells  *
12607ca46eSDavid Howells  *	This software may be used and distributed according to the terms
13607ca46eSDavid Howells  *	of the GNU Public License, incorporated herein by reference.
14607ca46eSDavid Howells  *
15607ca46eSDavid Howells  * 2003/03/18 - Amir Noam <amir.noam at intel dot com>
16607ca46eSDavid Howells  *	- Added support for getting slave's speed and duplex via ethtool.
17607ca46eSDavid Howells  *	  Needed for 802.3ad and other future modes.
18607ca46eSDavid Howells  *
19607ca46eSDavid Howells  * 2003/03/18 - Tsippy Mendelson <tsippy.mendelson at intel dot com> and
20607ca46eSDavid Howells  *		Shmulik Hen <shmulik.hen at intel dot com>
21607ca46eSDavid Howells  *	- Enable support of modes that need to use the unique mac address of
22607ca46eSDavid Howells  *	  each slave.
23607ca46eSDavid Howells  *
24607ca46eSDavid Howells  * 2003/03/18 - Tsippy Mendelson <tsippy.mendelson at intel dot com> and
25607ca46eSDavid Howells  *		Amir Noam <amir.noam at intel dot com>
26607ca46eSDavid Howells  *	- Moved driver's private data types to bonding.h
27607ca46eSDavid Howells  *
28607ca46eSDavid Howells  * 2003/03/18 - Amir Noam <amir.noam at intel dot com>,
29607ca46eSDavid Howells  *		Tsippy Mendelson <tsippy.mendelson at intel dot com> and
30607ca46eSDavid Howells  *		Shmulik Hen <shmulik.hen at intel dot com>
31607ca46eSDavid Howells  *	- Added support for IEEE 802.3ad Dynamic link aggregation mode.
32607ca46eSDavid Howells  *
33607ca46eSDavid Howells  * 2003/05/01 - Amir Noam <amir.noam at intel dot com>
34607ca46eSDavid Howells  *	- Added ABI version control to restore compatibility between
35607ca46eSDavid Howells  *	  new/old ifenslave and new/old bonding.
36607ca46eSDavid Howells  *
37607ca46eSDavid Howells  * 2003/12/01 - Shmulik Hen <shmulik.hen at intel dot com>
38607ca46eSDavid Howells  *	- Code cleanup and style changes
39607ca46eSDavid Howells  *
40607ca46eSDavid Howells  * 2005/05/05 - Jason Gabler <jygabler at lbl dot gov>
41607ca46eSDavid Howells  *      - added definitions for various XOR hashing policies
42607ca46eSDavid Howells  */
43607ca46eSDavid Howells 
44607ca46eSDavid Howells #ifndef _LINUX_IF_BONDING_H
45607ca46eSDavid Howells #define _LINUX_IF_BONDING_H
46607ca46eSDavid Howells 
47607ca46eSDavid Howells #include <linux/if.h>
48607ca46eSDavid Howells #include <linux/types.h>
49607ca46eSDavid Howells #include <linux/if_ether.h>
50607ca46eSDavid Howells 
51607ca46eSDavid Howells /* userland - kernel ABI version (2003/05/08) */
52607ca46eSDavid Howells #define BOND_ABI_VERSION 2
53607ca46eSDavid Howells 
54607ca46eSDavid Howells /*
55607ca46eSDavid Howells  * We can remove these ioctl definitions in 2.5.  People should use the
56607ca46eSDavid Howells  * SIOC*** versions of them instead
57607ca46eSDavid Howells  */
58607ca46eSDavid Howells #define BOND_ENSLAVE_OLD		(SIOCDEVPRIVATE)
59607ca46eSDavid Howells #define BOND_RELEASE_OLD		(SIOCDEVPRIVATE + 1)
60607ca46eSDavid Howells #define BOND_SETHWADDR_OLD		(SIOCDEVPRIVATE + 2)
61607ca46eSDavid Howells #define BOND_SLAVE_INFO_QUERY_OLD	(SIOCDEVPRIVATE + 11)
62607ca46eSDavid Howells #define BOND_INFO_QUERY_OLD		(SIOCDEVPRIVATE + 12)
63607ca46eSDavid Howells #define BOND_CHANGE_ACTIVE_OLD		(SIOCDEVPRIVATE + 13)
64607ca46eSDavid Howells 
65607ca46eSDavid Howells #define BOND_CHECK_MII_STATUS	(SIOCGMIIPHY)
66607ca46eSDavid Howells 
67607ca46eSDavid Howells #define BOND_MODE_ROUNDROBIN	0
68607ca46eSDavid Howells #define BOND_MODE_ACTIVEBACKUP	1
69607ca46eSDavid Howells #define BOND_MODE_XOR		2
70607ca46eSDavid Howells #define BOND_MODE_BROADCAST	3
71607ca46eSDavid Howells #define BOND_MODE_8023AD        4
72607ca46eSDavid Howells #define BOND_MODE_TLB           5
73607ca46eSDavid Howells #define BOND_MODE_ALB		6 /* TLB + RLB (receive load balancing) */
74607ca46eSDavid Howells 
75607ca46eSDavid Howells /* each slave's link has 4 states */
76607ca46eSDavid Howells #define BOND_LINK_UP    0           /* link is up and running */
77607ca46eSDavid Howells #define BOND_LINK_FAIL  1           /* link has just gone down */
78607ca46eSDavid Howells #define BOND_LINK_DOWN  2           /* link has been down for too long time */
79607ca46eSDavid Howells #define BOND_LINK_BACK  3           /* link is going back */
80607ca46eSDavid Howells 
81607ca46eSDavid Howells /* each slave has several states */
82607ca46eSDavid Howells #define BOND_STATE_ACTIVE       0   /* link is active */
83607ca46eSDavid Howells #define BOND_STATE_BACKUP       1   /* link is backup */
84607ca46eSDavid Howells 
85607ca46eSDavid Howells #define BOND_DEFAULT_MAX_BONDS  1   /* Default maximum number of devices to support */
86607ca46eSDavid Howells 
87607ca46eSDavid Howells #define BOND_DEFAULT_TX_QUEUES 16   /* Default number of tx queues per device */
88607ca46eSDavid Howells 
89607ca46eSDavid Howells #define BOND_DEFAULT_RESEND_IGMP	1 /* Default number of IGMP membership reports */
90607ca46eSDavid Howells 
91607ca46eSDavid Howells /* hashing types */
92607ca46eSDavid Howells #define BOND_XMIT_POLICY_LAYER2		0 /* layer 2 (MAC only), default */
93607ca46eSDavid Howells #define BOND_XMIT_POLICY_LAYER34	1 /* layer 3+4 (IP ^ (TCP || UDP)) */
94607ca46eSDavid Howells #define BOND_XMIT_POLICY_LAYER23	2 /* layer 2+3 (IP ^ MAC) */
9532819dc1SNikolay Aleksandrov #define BOND_XMIT_POLICY_ENCAP23	3 /* encapsulated layer 2+3 */
9632819dc1SNikolay Aleksandrov #define BOND_XMIT_POLICY_ENCAP34	4 /* encapsulated layer 3+4 */
97*7b8fc010SJarod Wilson #define BOND_XMIT_POLICY_VLAN_SRCMAC	5 /* vlan + source MAC */
98607ca46eSDavid Howells 
99826f66b3SAndy Roulin /* 802.3ad port state definitions (43.4.2.2 in the 802.3ad standard) */
100c1e46990SAndy Roulin #define LACP_STATE_LACP_ACTIVITY   0x1
101c1e46990SAndy Roulin #define LACP_STATE_LACP_TIMEOUT    0x2
102c1e46990SAndy Roulin #define LACP_STATE_AGGREGATION     0x4
103c1e46990SAndy Roulin #define LACP_STATE_SYNCHRONIZATION 0x8
104c1e46990SAndy Roulin #define LACP_STATE_COLLECTING      0x10
105c1e46990SAndy Roulin #define LACP_STATE_DISTRIBUTING    0x20
106c1e46990SAndy Roulin #define LACP_STATE_DEFAULTED       0x40
107c1e46990SAndy Roulin #define LACP_STATE_EXPIRED         0x80
108826f66b3SAndy Roulin 
109607ca46eSDavid Howells typedef struct ifbond {
110607ca46eSDavid Howells 	__s32 bond_mode;
111607ca46eSDavid Howells 	__s32 num_slaves;
112607ca46eSDavid Howells 	__s32 miimon;
113607ca46eSDavid Howells } ifbond;
114607ca46eSDavid Howells 
115607ca46eSDavid Howells typedef struct ifslave {
116607ca46eSDavid Howells 	__s32 slave_id; /* Used as an IN param to the BOND_SLAVE_INFO_QUERY ioctl */
117607ca46eSDavid Howells 	char slave_name[IFNAMSIZ];
118607ca46eSDavid Howells 	__s8 link;
119607ca46eSDavid Howells 	__s8 state;
120607ca46eSDavid Howells 	__u32  link_failure_count;
121607ca46eSDavid Howells } ifslave;
122607ca46eSDavid Howells 
123607ca46eSDavid Howells struct ad_info {
124607ca46eSDavid Howells 	__u16 aggregator_id;
125607ca46eSDavid Howells 	__u16 ports;
126607ca46eSDavid Howells 	__u16 actor_key;
127607ca46eSDavid Howells 	__u16 partner_key;
128607ca46eSDavid Howells 	__u8 partner_system[ETH_ALEN];
129607ca46eSDavid Howells };
130607ca46eSDavid Howells 
131a258aeacSNikolay Aleksandrov /* Embedded inside LINK_XSTATS_TYPE_BOND */
132a258aeacSNikolay Aleksandrov enum {
133a258aeacSNikolay Aleksandrov 	BOND_XSTATS_UNSPEC,
134a258aeacSNikolay Aleksandrov 	BOND_XSTATS_3AD,
135a258aeacSNikolay Aleksandrov 	__BOND_XSTATS_MAX
136a258aeacSNikolay Aleksandrov };
137a258aeacSNikolay Aleksandrov #define BOND_XSTATS_MAX (__BOND_XSTATS_MAX - 1)
138a258aeacSNikolay Aleksandrov 
139a258aeacSNikolay Aleksandrov /* Embedded inside BOND_XSTATS_3AD */
140a258aeacSNikolay Aleksandrov enum {
141a258aeacSNikolay Aleksandrov 	BOND_3AD_STAT_LACPDU_RX,
142a258aeacSNikolay Aleksandrov 	BOND_3AD_STAT_LACPDU_TX,
143a258aeacSNikolay Aleksandrov 	BOND_3AD_STAT_LACPDU_UNKNOWN_RX,
144a258aeacSNikolay Aleksandrov 	BOND_3AD_STAT_LACPDU_ILLEGAL_RX,
145a258aeacSNikolay Aleksandrov 	BOND_3AD_STAT_MARKER_RX,
146a258aeacSNikolay Aleksandrov 	BOND_3AD_STAT_MARKER_TX,
147a258aeacSNikolay Aleksandrov 	BOND_3AD_STAT_MARKER_RESP_RX,
148a258aeacSNikolay Aleksandrov 	BOND_3AD_STAT_MARKER_RESP_TX,
149a258aeacSNikolay Aleksandrov 	BOND_3AD_STAT_MARKER_UNKNOWN_RX,
150a258aeacSNikolay Aleksandrov 	BOND_3AD_STAT_PAD,
151a258aeacSNikolay Aleksandrov 	__BOND_3AD_STAT_MAX
152a258aeacSNikolay Aleksandrov };
153a258aeacSNikolay Aleksandrov #define BOND_3AD_STAT_MAX (__BOND_3AD_STAT_MAX - 1)
154a258aeacSNikolay Aleksandrov 
155607ca46eSDavid Howells #endif /* _LINUX_IF_BONDING_H */
156