mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-18 04:19:24 +07:00
589f5816f3
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>
346 lines
12 KiB
C
346 lines
12 KiB
C
/*
|
|
* INET An implementation of the TCP/IP protocol suite for the LINUX
|
|
* operating system. INET is implemented using the BSD Socket
|
|
* interface as the means of communication with the user level.
|
|
*
|
|
* Global definitions for the INET interface module.
|
|
*
|
|
* Version: @(#)if.h 1.0.2 04/18/93
|
|
*
|
|
* Authors: Original taken from Berkeley UNIX 4.3, (c) UCB 1982-1988
|
|
* Ross Biro
|
|
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the License, or (at your option) any later version.
|
|
*/
|
|
#ifndef _LINUX_IF_H
|
|
#define _LINUX_IF_H
|
|
|
|
#include <linux/types.h> /* for "__kernel_caddr_t" et al */
|
|
#include <linux/socket.h> /* for "struct sockaddr" et al */
|
|
#include <linux/compiler.h> /* for "__user" et al */
|
|
|
|
#define IFNAMSIZ 16
|
|
#define IFALIASZ 256
|
|
#include <linux/hdlc/ioctl.h>
|
|
|
|
/**
|
|
* enum net_device_flags - &struct net_device flags
|
|
*
|
|
* These are the &struct net_device flags, they can be set by drivers, the
|
|
* kernel and some can be triggered by userspace. Userspace can query and
|
|
* set these flags using userspace utilities but there is also a sysfs
|
|
* entry available for all dev flags which can be queried and set. These flags
|
|
* are shared for all types of net_devices. The sysfs entries are available
|
|
* via /sys/class/net/<dev>/flags. Flags which can be toggled through sysfs
|
|
* are annotated below, note that only a few flags can be toggled and some
|
|
* other flags are always always preserved from the original net_device flags
|
|
* even if you try to set them via sysfs. Flags which are always preserved
|
|
* are kept under the flag grouping @IFF_VOLATILE. Flags which are volatile
|
|
* are annotated below as such.
|
|
*
|
|
* You should have a pretty good reason to be extending these flags.
|
|
*
|
|
* @IFF_UP: interface is up. Can be toggled through sysfs.
|
|
* @IFF_BROADCAST: broadcast address valid. Volatile.
|
|
* @IFF_DEBUG: turn on debugging. Can be toggled through sysfs.
|
|
* @IFF_LOOPBACK: is a loopback net. Volatile.
|
|
* @IFF_POINTOPOINT: interface is has p-p link. Volatile.
|
|
* @IFF_NOTRAILERS: avoid use of trailers. Can be toggled through sysfs.
|
|
* Volatile.
|
|
* @IFF_RUNNING: interface RFC2863 OPER_UP. Volatile.
|
|
* @IFF_NOARP: no ARP protocol. Can be toggled through sysfs. Volatile.
|
|
* @IFF_PROMISC: receive all packets. Can be toggled through sysfs.
|
|
* @IFF_ALLMULTI: receive all multicast packets. Can be toggled through
|
|
* sysfs.
|
|
* @IFF_MASTER: master of a load balancer. Volatile.
|
|
* @IFF_SLAVE: slave of a load balancer. Volatile.
|
|
* @IFF_MULTICAST: Supports multicast. Can be toggled through sysfs.
|
|
* @IFF_PORTSEL: can set media type. Can be toggled through sysfs.
|
|
* @IFF_AUTOMEDIA: auto media select active. Can be toggled through sysfs.
|
|
* @IFF_DYNAMIC: dialup device with changing addresses. Can be toggled
|
|
* through sysfs.
|
|
* @IFF_LOWER_UP: driver signals L1 up. Volatile.
|
|
* @IFF_DORMANT: driver signals dormant. Volatile.
|
|
* @IFF_ECHO: echo sent packets. Volatile.
|
|
*/
|
|
enum net_device_flags {
|
|
IFF_UP = 1<<0, /* sysfs */
|
|
IFF_BROADCAST = 1<<1, /* volatile */
|
|
IFF_DEBUG = 1<<2, /* sysfs */
|
|
IFF_LOOPBACK = 1<<3, /* volatile */
|
|
IFF_POINTOPOINT = 1<<4, /* volatile */
|
|
IFF_NOTRAILERS = 1<<5, /* sysfs */
|
|
IFF_RUNNING = 1<<6, /* volatile */
|
|
IFF_NOARP = 1<<7, /* sysfs */
|
|
IFF_PROMISC = 1<<8, /* sysfs */
|
|
IFF_ALLMULTI = 1<<9, /* sysfs */
|
|
IFF_MASTER = 1<<10, /* volatile */
|
|
IFF_SLAVE = 1<<11, /* volatile */
|
|
IFF_MULTICAST = 1<<12, /* sysfs */
|
|
IFF_PORTSEL = 1<<13, /* sysfs */
|
|
IFF_AUTOMEDIA = 1<<14, /* sysfs */
|
|
IFF_DYNAMIC = 1<<15, /* sysfs */
|
|
IFF_LOWER_UP = 1<<16, /* volatile */
|
|
IFF_DORMANT = 1<<17, /* volatile */
|
|
IFF_ECHO = 1<<18, /* volatile */
|
|
};
|
|
|
|
#define IFF_UP IFF_UP
|
|
#define IFF_BROADCAST IFF_BROADCAST
|
|
#define IFF_DEBUG IFF_DEBUG
|
|
#define IFF_LOOPBACK IFF_LOOPBACK
|
|
#define IFF_POINTOPOINT IFF_POINTOPOINT
|
|
#define IFF_NOTRAILERS IFF_NOTRAILERS
|
|
#define IFF_RUNNING IFF_RUNNING
|
|
#define IFF_NOARP IFF_NOARP
|
|
#define IFF_PROMISC IFF_PROMISC
|
|
#define IFF_ALLMULTI IFF_ALLMULTI
|
|
#define IFF_MASTER IFF_MASTER
|
|
#define IFF_SLAVE IFF_SLAVE
|
|
#define IFF_MULTICAST IFF_MULTICAST
|
|
#define IFF_PORTSEL IFF_PORTSEL
|
|
#define IFF_AUTOMEDIA IFF_AUTOMEDIA
|
|
#define IFF_DYNAMIC IFF_DYNAMIC
|
|
#define IFF_LOWER_UP IFF_LOWER_UP
|
|
#define IFF_DORMANT IFF_DORMANT
|
|
#define IFF_ECHO IFF_ECHO
|
|
|
|
#define IFF_VOLATILE (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\
|
|
IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT)
|
|
|
|
/**
|
|
* enum net_device_priv_flags - &struct net_device priv_flags
|
|
*
|
|
* These are the &struct net_device, they are only set internally
|
|
* by drivers and used in the kernel. These flags are invisible to
|
|
* userspace, this means that the order of these flags can change
|
|
* during any kernel release.
|
|
*
|
|
* You should have a pretty good reason to be extending these flags.
|
|
*
|
|
* @IFF_802_1Q_VLAN: 802.1Q VLAN device
|
|
* @IFF_EBRIDGE: Ethernet bridging device
|
|
* @IFF_SLAVE_INACTIVE: bonding slave not the curr. active
|
|
* @IFF_MASTER_8023AD: bonding master, 802.3ad
|
|
* @IFF_MASTER_ALB: bonding master, balance-alb
|
|
* @IFF_BONDING: bonding master or slave
|
|
* @IFF_SLAVE_NEEDARP: need ARPs for validation
|
|
* @IFF_ISATAP: ISATAP interface (RFC4214)
|
|
* @IFF_MASTER_ARPMON: bonding master, ARP mon in use
|
|
* @IFF_WAN_HDLC: WAN HDLC device
|
|
* @IFF_XMIT_DST_RELEASE: dev_hard_start_xmit() is allowed to
|
|
* release skb->dst
|
|
* @IFF_DONT_BRIDGE: disallow bridging this ether dev
|
|
* @IFF_DISABLE_NETPOLL: disable netpoll at run-time
|
|
* @IFF_MACVLAN_PORT: device used as macvlan port
|
|
* @IFF_BRIDGE_PORT: device used as bridge port
|
|
* @IFF_OVS_DATAPATH: device used as Open vSwitch datapath port
|
|
* @IFF_TX_SKB_SHARING: The interface supports sharing skbs on transmit
|
|
* @IFF_UNICAST_FLT: Supports unicast filtering
|
|
* @IFF_TEAM_PORT: device used as team port
|
|
* @IFF_SUPP_NOFCS: device supports sending custom FCS
|
|
* @IFF_LIVE_ADDR_CHANGE: device supports hardware address
|
|
* change when it's running
|
|
* @IFF_MACVLAN: Macvlan device
|
|
*/
|
|
enum netdev_priv_flags {
|
|
IFF_802_1Q_VLAN = 1<<0,
|
|
IFF_EBRIDGE = 1<<1,
|
|
IFF_SLAVE_INACTIVE = 1<<2,
|
|
IFF_MASTER_8023AD = 1<<3,
|
|
IFF_MASTER_ALB = 1<<4,
|
|
IFF_BONDING = 1<<5,
|
|
IFF_SLAVE_NEEDARP = 1<<6,
|
|
IFF_ISATAP = 1<<7,
|
|
IFF_MASTER_ARPMON = 1<<8,
|
|
IFF_WAN_HDLC = 1<<9,
|
|
IFF_XMIT_DST_RELEASE = 1<<10,
|
|
IFF_DONT_BRIDGE = 1<<11,
|
|
IFF_DISABLE_NETPOLL = 1<<12,
|
|
IFF_MACVLAN_PORT = 1<<13,
|
|
IFF_BRIDGE_PORT = 1<<14,
|
|
IFF_OVS_DATAPATH = 1<<15,
|
|
IFF_TX_SKB_SHARING = 1<<16,
|
|
IFF_UNICAST_FLT = 1<<17,
|
|
IFF_TEAM_PORT = 1<<18,
|
|
IFF_SUPP_NOFCS = 1<<19,
|
|
IFF_LIVE_ADDR_CHANGE = 1<<20,
|
|
IFF_MACVLAN = 1<<21,
|
|
};
|
|
|
|
#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
|
|
#define IFF_EBRIDGE IFF_EBRIDGE
|
|
#define IFF_SLAVE_INACTIVE IFF_SLAVE_INACTIVE
|
|
#define IFF_MASTER_8023AD IFF_MASTER_8023AD
|
|
#define IFF_MASTER_ALB IFF_MASTER_ALB
|
|
#define IFF_BONDING IFF_BONDING
|
|
#define IFF_SLAVE_NEEDARP IFF_SLAVE_NEEDARP
|
|
#define IFF_ISATAP IFF_ISATAP
|
|
#define IFF_MASTER_ARPMON IFF_MASTER_ARPMON
|
|
#define IFF_WAN_HDLC IFF_WAN_HDLC
|
|
#define IFF_XMIT_DST_RELEASE IFF_XMIT_DST_RELEASE
|
|
#define IFF_DONT_BRIDGE IFF_DONT_BRIDGE
|
|
#define IFF_DISABLE_NETPOLL IFF_DISABLE_NETPOLL
|
|
#define IFF_MACVLAN_PORT IFF_MACVLAN_PORT
|
|
#define IFF_BRIDGE_PORT IFF_BRIDGE_PORT
|
|
#define IFF_OVS_DATAPATH IFF_OVS_DATAPATH
|
|
#define IFF_TX_SKB_SHARING IFF_TX_SKB_SHARING
|
|
#define IFF_UNICAST_FLT IFF_UNICAST_FLT
|
|
#define IFF_TEAM_PORT IFF_TEAM_PORT
|
|
#define IFF_SUPP_NOFCS IFF_SUPP_NOFCS
|
|
#define IFF_LIVE_ADDR_CHANGE IFF_LIVE_ADDR_CHANGE
|
|
#define IFF_MACVLAN IFF_MACVLAN
|
|
|
|
#define IF_GET_IFACE 0x0001 /* for querying only */
|
|
#define IF_GET_PROTO 0x0002
|
|
|
|
/* For definitions see hdlc.h */
|
|
#define IF_IFACE_V35 0x1000 /* V.35 serial interface */
|
|
#define IF_IFACE_V24 0x1001 /* V.24 serial interface */
|
|
#define IF_IFACE_X21 0x1002 /* X.21 serial interface */
|
|
#define IF_IFACE_T1 0x1003 /* T1 telco serial interface */
|
|
#define IF_IFACE_E1 0x1004 /* E1 telco serial interface */
|
|
#define IF_IFACE_SYNC_SERIAL 0x1005 /* can't be set by software */
|
|
#define IF_IFACE_X21D 0x1006 /* X.21 Dual Clocking (FarSite) */
|
|
|
|
/* For definitions see hdlc.h */
|
|
#define IF_PROTO_HDLC 0x2000 /* raw HDLC protocol */
|
|
#define IF_PROTO_PPP 0x2001 /* PPP protocol */
|
|
#define IF_PROTO_CISCO 0x2002 /* Cisco HDLC protocol */
|
|
#define IF_PROTO_FR 0x2003 /* Frame Relay protocol */
|
|
#define IF_PROTO_FR_ADD_PVC 0x2004 /* Create FR PVC */
|
|
#define IF_PROTO_FR_DEL_PVC 0x2005 /* Delete FR PVC */
|
|
#define IF_PROTO_X25 0x2006 /* X.25 */
|
|
#define IF_PROTO_HDLC_ETH 0x2007 /* raw HDLC, Ethernet emulation */
|
|
#define IF_PROTO_FR_ADD_ETH_PVC 0x2008 /* Create FR Ethernet-bridged PVC */
|
|
#define IF_PROTO_FR_DEL_ETH_PVC 0x2009 /* Delete FR Ethernet-bridged PVC */
|
|
#define IF_PROTO_FR_PVC 0x200A /* for reading PVC status */
|
|
#define IF_PROTO_FR_ETH_PVC 0x200B
|
|
#define IF_PROTO_RAW 0x200C /* RAW Socket */
|
|
|
|
/* RFC 2863 operational status */
|
|
enum {
|
|
IF_OPER_UNKNOWN,
|
|
IF_OPER_NOTPRESENT,
|
|
IF_OPER_DOWN,
|
|
IF_OPER_LOWERLAYERDOWN,
|
|
IF_OPER_TESTING,
|
|
IF_OPER_DORMANT,
|
|
IF_OPER_UP,
|
|
};
|
|
|
|
/* link modes */
|
|
enum {
|
|
IF_LINK_MODE_DEFAULT,
|
|
IF_LINK_MODE_DORMANT, /* limit upward transition to dormant */
|
|
};
|
|
|
|
/*
|
|
* Device mapping structure. I'd just gone off and designed a
|
|
* beautiful scheme using only loadable modules with arguments
|
|
* for driver options and along come the PCMCIA people 8)
|
|
*
|
|
* Ah well. The get() side of this is good for WDSETUP, and it'll
|
|
* be handy for debugging things. The set side is fine for now and
|
|
* being very small might be worth keeping for clean configuration.
|
|
*/
|
|
|
|
struct ifmap {
|
|
unsigned long mem_start;
|
|
unsigned long mem_end;
|
|
unsigned short base_addr;
|
|
unsigned char irq;
|
|
unsigned char dma;
|
|
unsigned char port;
|
|
/* 3 bytes spare */
|
|
};
|
|
|
|
struct if_settings {
|
|
unsigned int type; /* Type of physical device or protocol */
|
|
unsigned int size; /* Size of the data allocated by the caller */
|
|
union {
|
|
/* {atm/eth/dsl}_settings anyone ? */
|
|
raw_hdlc_proto __user *raw_hdlc;
|
|
cisco_proto __user *cisco;
|
|
fr_proto __user *fr;
|
|
fr_proto_pvc __user *fr_pvc;
|
|
fr_proto_pvc_info __user *fr_pvc_info;
|
|
|
|
/* interface settings */
|
|
sync_serial_settings __user *sync;
|
|
te1_settings __user *te1;
|
|
} ifs_ifsu;
|
|
};
|
|
|
|
/*
|
|
* Interface request structure used for socket
|
|
* ioctl's. All interface ioctl's must have parameter
|
|
* definitions which begin with ifr_name. The
|
|
* remainder may be interface specific.
|
|
*/
|
|
|
|
struct ifreq {
|
|
#define IFHWADDRLEN 6
|
|
union
|
|
{
|
|
char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */
|
|
} ifr_ifrn;
|
|
|
|
union {
|
|
struct sockaddr ifru_addr;
|
|
struct sockaddr ifru_dstaddr;
|
|
struct sockaddr ifru_broadaddr;
|
|
struct sockaddr ifru_netmask;
|
|
struct sockaddr ifru_hwaddr;
|
|
short ifru_flags;
|
|
int ifru_ivalue;
|
|
int ifru_mtu;
|
|
struct ifmap ifru_map;
|
|
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
|
|
char ifru_newname[IFNAMSIZ];
|
|
void __user * ifru_data;
|
|
struct if_settings ifru_settings;
|
|
} ifr_ifru;
|
|
};
|
|
|
|
#define ifr_name ifr_ifrn.ifrn_name /* interface name */
|
|
#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
|
|
#define ifr_addr ifr_ifru.ifru_addr /* address */
|
|
#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */
|
|
#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
|
|
#define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */
|
|
#define ifr_flags ifr_ifru.ifru_flags /* flags */
|
|
#define ifr_metric ifr_ifru.ifru_ivalue /* metric */
|
|
#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */
|
|
#define ifr_map ifr_ifru.ifru_map /* device map */
|
|
#define ifr_slave ifr_ifru.ifru_slave /* slave device */
|
|
#define ifr_data ifr_ifru.ifru_data /* for use by interface */
|
|
#define ifr_ifindex ifr_ifru.ifru_ivalue /* interface index */
|
|
#define ifr_bandwidth ifr_ifru.ifru_ivalue /* link bandwidth */
|
|
#define ifr_qlen ifr_ifru.ifru_ivalue /* Queue length */
|
|
#define ifr_newname ifr_ifru.ifru_newname /* New name */
|
|
#define ifr_settings ifr_ifru.ifru_settings /* Device/proto settings*/
|
|
|
|
/*
|
|
* Structure used in SIOCGIFCONF request.
|
|
* Used to retrieve interface configuration
|
|
* for machine (useful for programs which
|
|
* must know all networks accessible).
|
|
*/
|
|
|
|
struct ifconf {
|
|
int ifc_len; /* size of buffer */
|
|
union {
|
|
char __user *ifcu_buf;
|
|
struct ifreq __user *ifcu_req;
|
|
} ifc_ifcu;
|
|
};
|
|
#define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
|
|
#define ifc_req ifc_ifcu.ifcu_req /* array of structures */
|
|
|
|
#endif /* _LINUX_IF_H */
|