Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: kdoc struct net_device flags and priv_flags

We have documentation for these flags but they're scattered
all over the place. #defines don't allow documentation to be
written easily so to help to start bringing some documentation
together use the enums kdoc practice but keep the defines to
allow userspace to be able to #ifdef them.

I've verified the same values are assigned before and after
with a simple userspace test program [0] and checksumming the
output.

[0] http://drvbp1.linux-foundation.org/~mcgrof/kdoc/netdev_flags/

mcgrof@gnat ~/tmp $ ./check-flags | sha1sum
0ec5b6b1840aa3bb9ce464e61c564820871c92c3 -

Cc: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: Ben Hutchings <ben@decadent.org.uk>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: David Miller <davem@davemloft.net>
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Luis R. Rodriguez and committed by
David S. Miller
589f5816 118ce7ab

+161 -52
+161 -52
include/uapi/linux/if.h
··· 27 27 #define IFALIASZ 256 28 28 #include <linux/hdlc/ioctl.h> 29 29 30 - /* Standard interface flags (netdevice->flags). */ 31 - #define IFF_UP 0x1 /* interface is up */ 32 - #define IFF_BROADCAST 0x2 /* broadcast address valid */ 33 - #define IFF_DEBUG 0x4 /* turn on debugging */ 34 - #define IFF_LOOPBACK 0x8 /* is a loopback net */ 35 - #define IFF_POINTOPOINT 0x10 /* interface is has p-p link */ 36 - #define IFF_NOTRAILERS 0x20 /* avoid use of trailers */ 37 - #define IFF_RUNNING 0x40 /* interface RFC2863 OPER_UP */ 38 - #define IFF_NOARP 0x80 /* no ARP protocol */ 39 - #define IFF_PROMISC 0x100 /* receive all packets */ 40 - #define IFF_ALLMULTI 0x200 /* receive all multicast packets*/ 30 + /** 31 + * enum net_device_flags - &struct net_device flags 32 + * 33 + * These are the &struct net_device flags, they can be set by drivers, the 34 + * kernel and some can be triggered by userspace. Userspace can query and 35 + * set these flags using userspace utilities but there is also a sysfs 36 + * entry available for all dev flags which can be queried and set. These flags 37 + * are shared for all types of net_devices. The sysfs entries are available 38 + * via /sys/class/net/<dev>/flags. Flags which can be toggled through sysfs 39 + * are annotated below, note that only a few flags can be toggled and some 40 + * other flags are always always preserved from the original net_device flags 41 + * even if you try to set them via sysfs. Flags which are always preserved 42 + * are kept under the flag grouping @IFF_VOLATILE. Flags which are volatile 43 + * are annotated below as such. 44 + * 45 + * You should have a pretty good reason to be extending these flags. 46 + * 47 + * @IFF_UP: interface is up. Can be toggled through sysfs. 48 + * @IFF_BROADCAST: broadcast address valid. Volatile. 49 + * @IFF_DEBUG: turn on debugging. Can be toggled through sysfs. 50 + * @IFF_LOOPBACK: is a loopback net. Volatile. 51 + * @IFF_POINTOPOINT: interface is has p-p link. Volatile. 52 + * @IFF_NOTRAILERS: avoid use of trailers. Can be toggled through sysfs. 53 + * Volatile. 54 + * @IFF_RUNNING: interface RFC2863 OPER_UP. Volatile. 55 + * @IFF_NOARP: no ARP protocol. Can be toggled through sysfs. Volatile. 56 + * @IFF_PROMISC: receive all packets. Can be toggled through sysfs. 57 + * @IFF_ALLMULTI: receive all multicast packets. Can be toggled through 58 + * sysfs. 59 + * @IFF_MASTER: master of a load balancer. Volatile. 60 + * @IFF_SLAVE: slave of a load balancer. Volatile. 61 + * @IFF_MULTICAST: Supports multicast. Can be toggled through sysfs. 62 + * @IFF_PORTSEL: can set media type. Can be toggled through sysfs. 63 + * @IFF_AUTOMEDIA: auto media select active. Can be toggled through sysfs. 64 + * @IFF_DYNAMIC: dialup device with changing addresses. Can be toggled 65 + * through sysfs. 66 + * @IFF_LOWER_UP: driver signals L1 up. Volatile. 67 + * @IFF_DORMANT: driver signals dormant. Volatile. 68 + * @IFF_ECHO: echo sent packets. Volatile. 69 + */ 70 + enum net_device_flags { 71 + IFF_UP = 1<<0, /* sysfs */ 72 + IFF_BROADCAST = 1<<1, /* volatile */ 73 + IFF_DEBUG = 1<<2, /* sysfs */ 74 + IFF_LOOPBACK = 1<<3, /* volatile */ 75 + IFF_POINTOPOINT = 1<<4, /* volatile */ 76 + IFF_NOTRAILERS = 1<<5, /* sysfs */ 77 + IFF_RUNNING = 1<<6, /* volatile */ 78 + IFF_NOARP = 1<<7, /* sysfs */ 79 + IFF_PROMISC = 1<<8, /* sysfs */ 80 + IFF_ALLMULTI = 1<<9, /* sysfs */ 81 + IFF_MASTER = 1<<10, /* volatile */ 82 + IFF_SLAVE = 1<<11, /* volatile */ 83 + IFF_MULTICAST = 1<<12, /* sysfs */ 84 + IFF_PORTSEL = 1<<13, /* sysfs */ 85 + IFF_AUTOMEDIA = 1<<14, /* sysfs */ 86 + IFF_DYNAMIC = 1<<15, /* sysfs */ 87 + IFF_LOWER_UP = 1<<16, /* volatile */ 88 + IFF_DORMANT = 1<<17, /* volatile */ 89 + IFF_ECHO = 1<<18, /* volatile */ 90 + }; 41 91 42 - #define IFF_MASTER 0x400 /* master of a load balancer */ 43 - #define IFF_SLAVE 0x800 /* slave of a load balancer */ 44 - 45 - #define IFF_MULTICAST 0x1000 /* Supports multicast */ 46 - 47 - #define IFF_PORTSEL 0x2000 /* can set media type */ 48 - #define IFF_AUTOMEDIA 0x4000 /* auto media select active */ 49 - #define IFF_DYNAMIC 0x8000 /* dialup device with changing addresses*/ 50 - 51 - #define IFF_LOWER_UP 0x10000 /* driver signals L1 up */ 52 - #define IFF_DORMANT 0x20000 /* driver signals dormant */ 53 - 54 - #define IFF_ECHO 0x40000 /* echo sent packets */ 92 + #define IFF_UP IFF_UP 93 + #define IFF_BROADCAST IFF_BROADCAST 94 + #define IFF_DEBUG IFF_DEBUG 95 + #define IFF_LOOPBACK IFF_LOOPBACK 96 + #define IFF_POINTOPOINT IFF_POINTOPOINT 97 + #define IFF_NOTRAILERS IFF_NOTRAILERS 98 + #define IFF_RUNNING IFF_RUNNING 99 + #define IFF_NOARP IFF_NOARP 100 + #define IFF_PROMISC IFF_PROMISC 101 + #define IFF_ALLMULTI IFF_ALLMULTI 102 + #define IFF_MASTER IFF_MASTER 103 + #define IFF_SLAVE IFF_SLAVE 104 + #define IFF_MULTICAST IFF_MULTICAST 105 + #define IFF_PORTSEL IFF_PORTSEL 106 + #define IFF_AUTOMEDIA IFF_AUTOMEDIA 107 + #define IFF_DYNAMIC IFF_DYNAMIC 108 + #define IFF_LOWER_UP IFF_LOWER_UP 109 + #define IFF_DORMANT IFF_DORMANT 110 + #define IFF_ECHO IFF_ECHO 55 111 56 112 #define IFF_VOLATILE (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\ 57 113 IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT) 58 114 59 - /* Private (from user) interface flags (netdevice->priv_flags). */ 60 - #define IFF_802_1Q_VLAN 0x1 /* 802.1Q VLAN device. */ 61 - #define IFF_EBRIDGE 0x2 /* Ethernet bridging device. */ 62 - #define IFF_SLAVE_INACTIVE 0x4 /* bonding slave not the curr. active */ 63 - #define IFF_MASTER_8023AD 0x8 /* bonding master, 802.3ad. */ 64 - #define IFF_MASTER_ALB 0x10 /* bonding master, balance-alb. */ 65 - #define IFF_BONDING 0x20 /* bonding master or slave */ 66 - #define IFF_SLAVE_NEEDARP 0x40 /* need ARPs for validation */ 67 - #define IFF_ISATAP 0x80 /* ISATAP interface (RFC4214) */ 68 - #define IFF_MASTER_ARPMON 0x100 /* bonding master, ARP mon in use */ 69 - #define IFF_WAN_HDLC 0x200 /* WAN HDLC device */ 70 - #define IFF_XMIT_DST_RELEASE 0x400 /* dev_hard_start_xmit() is allowed to 71 - * release skb->dst 72 - */ 73 - #define IFF_DONT_BRIDGE 0x800 /* disallow bridging this ether dev */ 74 - #define IFF_DISABLE_NETPOLL 0x1000 /* disable netpoll at run-time */ 75 - #define IFF_MACVLAN_PORT 0x2000 /* device used as macvlan port */ 76 - #define IFF_BRIDGE_PORT 0x4000 /* device used as bridge port */ 77 - #define IFF_OVS_DATAPATH 0x8000 /* device used as Open vSwitch 78 - * datapath port */ 79 - #define IFF_TX_SKB_SHARING 0x10000 /* The interface supports sharing 80 - * skbs on transmit */ 81 - #define IFF_UNICAST_FLT 0x20000 /* Supports unicast filtering */ 82 - #define IFF_TEAM_PORT 0x40000 /* device used as team port */ 83 - #define IFF_SUPP_NOFCS 0x80000 /* device supports sending custom FCS */ 84 - #define IFF_LIVE_ADDR_CHANGE 0x100000 /* device supports hardware address 85 - * change when it's running */ 86 - #define IFF_MACVLAN 0x200000 /* Macvlan device */ 115 + /** 116 + * enum net_device_priv_flags - &struct net_device priv_flags 117 + * 118 + * These are the &struct net_device, they are only set internally 119 + * by drivers and used in the kernel. These flags are invisible to 120 + * userspace, this means that the order of these flags can change 121 + * during any kernel release. 122 + * 123 + * You should have a pretty good reason to be extending these flags. 124 + * 125 + * @IFF_802_1Q_VLAN: 802.1Q VLAN device 126 + * @IFF_EBRIDGE: Ethernet bridging device 127 + * @IFF_SLAVE_INACTIVE: bonding slave not the curr. active 128 + * @IFF_MASTER_8023AD: bonding master, 802.3ad 129 + * @IFF_MASTER_ALB: bonding master, balance-alb 130 + * @IFF_BONDING: bonding master or slave 131 + * @IFF_SLAVE_NEEDARP: need ARPs for validation 132 + * @IFF_ISATAP: ISATAP interface (RFC4214) 133 + * @IFF_MASTER_ARPMON: bonding master, ARP mon in use 134 + * @IFF_WAN_HDLC: WAN HDLC device 135 + * @IFF_XMIT_DST_RELEASE: dev_hard_start_xmit() is allowed to 136 + * release skb->dst 137 + * @IFF_DONT_BRIDGE: disallow bridging this ether dev 138 + * @IFF_DISABLE_NETPOLL: disable netpoll at run-time 139 + * @IFF_MACVLAN_PORT: device used as macvlan port 140 + * @IFF_BRIDGE_PORT: device used as bridge port 141 + * @IFF_OVS_DATAPATH: device used as Open vSwitch datapath port 142 + * @IFF_TX_SKB_SHARING: The interface supports sharing skbs on transmit 143 + * @IFF_UNICAST_FLT: Supports unicast filtering 144 + * @IFF_TEAM_PORT: device used as team port 145 + * @IFF_SUPP_NOFCS: device supports sending custom FCS 146 + * @IFF_LIVE_ADDR_CHANGE: device supports hardware address 147 + * change when it's running 148 + * @IFF_MACVLAN: Macvlan device 149 + */ 150 + enum netdev_priv_flags { 151 + IFF_802_1Q_VLAN = 1<<0, 152 + IFF_EBRIDGE = 1<<1, 153 + IFF_SLAVE_INACTIVE = 1<<2, 154 + IFF_MASTER_8023AD = 1<<3, 155 + IFF_MASTER_ALB = 1<<4, 156 + IFF_BONDING = 1<<5, 157 + IFF_SLAVE_NEEDARP = 1<<6, 158 + IFF_ISATAP = 1<<7, 159 + IFF_MASTER_ARPMON = 1<<8, 160 + IFF_WAN_HDLC = 1<<9, 161 + IFF_XMIT_DST_RELEASE = 1<<10, 162 + IFF_DONT_BRIDGE = 1<<11, 163 + IFF_DISABLE_NETPOLL = 1<<12, 164 + IFF_MACVLAN_PORT = 1<<13, 165 + IFF_BRIDGE_PORT = 1<<14, 166 + IFF_OVS_DATAPATH = 1<<15, 167 + IFF_TX_SKB_SHARING = 1<<16, 168 + IFF_UNICAST_FLT = 1<<17, 169 + IFF_TEAM_PORT = 1<<18, 170 + IFF_SUPP_NOFCS = 1<<19, 171 + IFF_LIVE_ADDR_CHANGE = 1<<20, 172 + IFF_MACVLAN = 1<<21, 173 + }; 87 174 175 + #define IFF_802_1Q_VLAN IFF_802_1Q_VLAN 176 + #define IFF_EBRIDGE IFF_EBRIDGE 177 + #define IFF_SLAVE_INACTIVE IFF_SLAVE_INACTIVE 178 + #define IFF_MASTER_8023AD IFF_MASTER_8023AD 179 + #define IFF_MASTER_ALB IFF_MASTER_ALB 180 + #define IFF_BONDING IFF_BONDING 181 + #define IFF_SLAVE_NEEDARP IFF_SLAVE_NEEDARP 182 + #define IFF_ISATAP IFF_ISATAP 183 + #define IFF_MASTER_ARPMON IFF_MASTER_ARPMON 184 + #define IFF_WAN_HDLC IFF_WAN_HDLC 185 + #define IFF_XMIT_DST_RELEASE IFF_XMIT_DST_RELEASE 186 + #define IFF_DONT_BRIDGE IFF_DONT_BRIDGE 187 + #define IFF_DISABLE_NETPOLL IFF_DISABLE_NETPOLL 188 + #define IFF_MACVLAN_PORT IFF_MACVLAN_PORT 189 + #define IFF_BRIDGE_PORT IFF_BRIDGE_PORT 190 + #define IFF_OVS_DATAPATH IFF_OVS_DATAPATH 191 + #define IFF_TX_SKB_SHARING IFF_TX_SKB_SHARING 192 + #define IFF_UNICAST_FLT IFF_UNICAST_FLT 193 + #define IFF_TEAM_PORT IFF_TEAM_PORT 194 + #define IFF_SUPP_NOFCS IFF_SUPP_NOFCS 195 + #define IFF_LIVE_ADDR_CHANGE IFF_LIVE_ADDR_CHANGE 196 + #define IFF_MACVLAN IFF_MACVLAN 88 197 89 198 #define IF_GET_IFACE 0x0001 /* for querying only */ 90 199 #define IF_GET_PROTO 0x0002