forked from mirrors/linux
		
	Many user space API headers have licensing information, which is either
incomplete, badly formatted or just a shorthand for referring to the
license under which the file is supposed to be.  This makes it hard for
compliance tools to determine the correct license.
Update these files with an SPDX license identifier.  The identifier was
chosen based on the license information in the file.
GPL/LGPL licensed headers get the matching GPL/LGPL SPDX license
identifier with the added 'WITH Linux-syscall-note' exception, which is
the officially assigned exception identifier for the kernel syscall
exception:
   NOTE! This copyright does *not* cover user programs that use kernel
   services by normal system calls - this is merely considered normal use
   of the kernel, and does *not* fall under the heading of "derived work".
This exception makes it possible to include GPL headers into non GPL
code, without confusing license compliance tools.
Headers which have either explicit dual licensing or are just licensed
under a non GPL license are updated with the corresponding SPDX
identifier and the GPLv2 with syscall exception identifier.  The format
is:
        ((GPL-2.0 WITH Linux-syscall-note) OR SPDX-ID-OF-OTHER-LICENSE)
SPDX license identifiers are a legally binding shorthand, which can be
used instead of the full boiler plate text.  The update does not remove
existing license information as this has to be done on a case by case
basis and the copyright holders might have to be consulted. This will
happen in a separate step.
This patch is based on work done by Thomas Gleixner and Kate Stewart and
Philippe Ombredanne.  See the previous patch in this series for the
methodology of how this patch was researched.
Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org>
Reviewed-by: Philippe Ombredanne <pombredanne@nexb.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
		
	
			
		
			
				
	
	
		
			295 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			295 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
 | 
						|
/*
 | 
						|
 * 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/libc-compat.h>          /* for compatibility with glibc */
 | 
						|
#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           */
 | 
						|
 | 
						|
#ifndef __KERNEL__
 | 
						|
#include <sys/socket.h>			/* for struct sockaddr.		*/
 | 
						|
#endif
 | 
						|
 | 
						|
#if __UAPI_DEF_IF_IFNAMSIZ
 | 
						|
#define	IFNAMSIZ	16
 | 
						|
#endif /* __UAPI_DEF_IF_IFNAMSIZ */
 | 
						|
#define	IFALIASZ	256
 | 
						|
#include <linux/hdlc/ioctl.h>
 | 
						|
 | 
						|
/* For glibc compatibility. An empty enum does not compile. */
 | 
						|
#if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO != 0 || \
 | 
						|
    __UAPI_DEF_IF_NET_DEVICE_FLAGS != 0
 | 
						|
/**
 | 
						|
 * 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 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 {
 | 
						|
/* for compatibility with glibc net/if.h */
 | 
						|
#if __UAPI_DEF_IF_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 */
 | 
						|
#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS */
 | 
						|
#if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
 | 
						|
	IFF_LOWER_UP			= 1<<16, /* volatile */
 | 
						|
	IFF_DORMANT			= 1<<17, /* volatile */
 | 
						|
	IFF_ECHO			= 1<<18, /* volatile */
 | 
						|
#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
 | 
						|
};
 | 
						|
#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO != 0 || __UAPI_DEF_IF_NET_DEVICE_FLAGS != 0 */
 | 
						|
 | 
						|
/* for compatibility with glibc net/if.h */
 | 
						|
#if __UAPI_DEF_IF_NET_DEVICE_FLAGS
 | 
						|
#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
 | 
						|
#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS */
 | 
						|
 | 
						|
#if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
 | 
						|
#define IFF_LOWER_UP			IFF_LOWER_UP
 | 
						|
#define IFF_DORMANT			IFF_DORMANT
 | 
						|
#define IFF_ECHO			IFF_ECHO
 | 
						|
#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
 | 
						|
 | 
						|
#define IFF_VOLATILE	(IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\
 | 
						|
		IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT)
 | 
						|
 | 
						|
#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.
 | 
						|
 */
 | 
						|
 | 
						|
/* for compatibility with glibc net/if.h */
 | 
						|
#if __UAPI_DEF_IF_IFMAP
 | 
						|
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 */
 | 
						|
};
 | 
						|
#endif /* __UAPI_DEF_IF_IFMAP */
 | 
						|
 | 
						|
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.
 | 
						|
 */
 | 
						|
 | 
						|
/* for compatibility with glibc net/if.h */
 | 
						|
#if __UAPI_DEF_IF_IFREQ
 | 
						|
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;
 | 
						|
};
 | 
						|
#endif /* __UAPI_DEF_IF_IFREQ */
 | 
						|
 | 
						|
#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).
 | 
						|
 */
 | 
						|
 | 
						|
/* for compatibility with glibc net/if.h */
 | 
						|
#if __UAPI_DEF_IF_IFCONF
 | 
						|
struct ifconf  {
 | 
						|
	int	ifc_len;			/* size of buffer	*/
 | 
						|
	union {
 | 
						|
		char __user *ifcu_buf;
 | 
						|
		struct ifreq __user *ifcu_req;
 | 
						|
	} ifc_ifcu;
 | 
						|
};
 | 
						|
#endif /* __UAPI_DEF_IF_IFCONF */
 | 
						|
 | 
						|
#define	ifc_buf	ifc_ifcu.ifcu_buf		/* buffer address	*/
 | 
						|
#define	ifc_req	ifc_ifcu.ifcu_req		/* array of structures	*/
 | 
						|
 | 
						|
#endif /* _LINUX_IF_H */
 |