/* 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, <[email protected]> * * 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 … #endif /* __UAPI_DEF_IF_IFNAMSIZ */ #define IFALIASZ … #define ALTIFNAMSIZ … #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 { … }; #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 … #define IFF_BROADCAST … #define IFF_DEBUG … #define IFF_LOOPBACK … #define IFF_POINTOPOINT … #define IFF_NOTRAILERS … #define IFF_RUNNING … #define IFF_NOARP … #define IFF_PROMISC … #define IFF_ALLMULTI … #define IFF_MASTER … #define IFF_SLAVE … #define IFF_MULTICAST … #define IFF_PORTSEL … #define IFF_AUTOMEDIA … #define IFF_DYNAMIC … #endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS */ #if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO #define IFF_LOWER_UP … #define IFF_DORMANT … #define IFF_ECHO … #endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */ #define IFF_VOLATILE … #define IF_GET_IFACE … #define IF_GET_PROTO … /* For definitions see hdlc.h */ #define IF_IFACE_V35 … #define IF_IFACE_V24 … #define IF_IFACE_X21 … #define IF_IFACE_T1 … #define IF_IFACE_E1 … #define IF_IFACE_SYNC_SERIAL … #define IF_IFACE_X21D … /* For definitions see hdlc.h */ #define IF_PROTO_HDLC … #define IF_PROTO_PPP … #define IF_PROTO_CISCO … #define IF_PROTO_FR … #define IF_PROTO_FR_ADD_PVC … #define IF_PROTO_FR_DEL_PVC … #define IF_PROTO_X25 … #define IF_PROTO_HDLC_ETH … #define IF_PROTO_FR_ADD_ETH_PVC … #define IF_PROTO_FR_DEL_ETH_PVC … #define IF_PROTO_FR_PVC … #define IF_PROTO_FR_ETH_PVC … #define IF_PROTO_RAW … /* RFC 2863 operational status */ enum { … }; /* link modes */ enum { … }; /* * 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 { … }; #endif /* __UAPI_DEF_IF_IFMAP */ struct if_settings { … }; /* * 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 { … }; #endif /* __UAPI_DEF_IF_IFREQ */ #define ifr_name … #define ifr_hwaddr … #define ifr_addr … #define ifr_dstaddr … #define ifr_broadaddr … #define ifr_netmask … #define ifr_flags … #define ifr_metric … #define ifr_mtu … #define ifr_map … #define ifr_slave … #define ifr_data … #define ifr_ifindex … #define ifr_bandwidth … #define ifr_qlen … #define ifr_newname … #define ifr_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 { … }; #endif /* __UAPI_DEF_IF_IFCONF */ #define ifc_buf … #define ifc_req … #endif /* _LINUX_IF_H */