cregit-Linux how code gets into the kernel

Release 4.12 include/uapi/linux/if.h

/*
 * 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 */

Overall Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)28637.58%1644.44%
Luis R. Rodriguez15720.63%12.78%
François Romieu10513.80%25.56%
Mikko Rapeli699.07%12.78%
Stefan Rompf374.86%12.78%
Krzysztof Hałasa324.20%12.78%
Alan Cox283.68%12.78%
Kevin Curtis101.31%12.78%
Al Viro101.31%38.33%
Dmitry V. Levin91.18%12.78%
Arjan van de Ven50.66%25.56%
Stephen Hemminger40.53%12.78%
Oliver Hartkopp40.53%12.78%
Jonas Gorski20.26%12.78%
Zhang Shengju10.13%12.78%
Michael Hayes10.13%12.78%
Jesper Juhl10.13%12.78%
Total761100.00%36100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.