/*
|
/*
|
* INET An implementation of the TCP/IP protocol suite for the LINUX
|
* INET An implementation of the TCP/IP protocol suite for the LINUX
|
* operating system. INET is implemented using the BSD Socket
|
* operating system. INET is implemented using the BSD Socket
|
* interface as the means of communication with the user level.
|
* interface as the means of communication with the user level.
|
*
|
*
|
* Global definitions for the INET interface module.
|
* Global definitions for the INET interface module.
|
*
|
*
|
* Version: @(#)if.h 1.0.2 04/18/93
|
* Version: @(#)if.h 1.0.2 04/18/93
|
*
|
*
|
* Authors: Original taken from Berkeley UNIX 4.3, (c) UCB 1982-1988
|
* Authors: Original taken from Berkeley UNIX 4.3, (c) UCB 1982-1988
|
* Ross Biro, <bir7@leland.Stanford.Edu>
|
* Ross Biro, <bir7@leland.Stanford.Edu>
|
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
|
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
|
*
|
*
|
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
* as published by the Free Software Foundation; either version
|
* as published by the Free Software Foundation; either version
|
* 2 of the License, or (at your option) any later version.
|
* 2 of the License, or (at your option) any later version.
|
*/
|
*/
|
#ifndef _LINUX_IF_H
|
#ifndef _LINUX_IF_H
|
#define _LINUX_IF_H
|
#define _LINUX_IF_H
|
|
|
#include <linux/types.h> /* for "caddr_t" et al */
|
#include <linux/types.h> /* for "caddr_t" et al */
|
#include <linux/socket.h> /* for "struct sockaddr" et al */
|
#include <linux/socket.h> /* for "struct sockaddr" et al */
|
|
|
/* Standard interface flags. */
|
/* Standard interface flags. */
|
#define IFF_UP 0x1 /* interface is up */
|
#define IFF_UP 0x1 /* interface is up */
|
#define IFF_BROADCAST 0x2 /* broadcast address valid */
|
#define IFF_BROADCAST 0x2 /* broadcast address valid */
|
#define IFF_DEBUG 0x4 /* turn on debugging */
|
#define IFF_DEBUG 0x4 /* turn on debugging */
|
#define IFF_LOOPBACK 0x8 /* is a loopback net */
|
#define IFF_LOOPBACK 0x8 /* is a loopback net */
|
#define IFF_POINTOPOINT 0x10 /* interface is has p-p link */
|
#define IFF_POINTOPOINT 0x10 /* interface is has p-p link */
|
#define IFF_NOTRAILERS 0x20 /* avoid use of trailers */
|
#define IFF_NOTRAILERS 0x20 /* avoid use of trailers */
|
#define IFF_RUNNING 0x40 /* resources allocated */
|
#define IFF_RUNNING 0x40 /* resources allocated */
|
#define IFF_NOARP 0x80 /* no ARP protocol */
|
#define IFF_NOARP 0x80 /* no ARP protocol */
|
#define IFF_PROMISC 0x100 /* receive all packets */
|
#define IFF_PROMISC 0x100 /* receive all packets */
|
/* Not supported */
|
/* Not supported */
|
#define IFF_ALLMULTI 0x200 /* receive all multicast packets*/
|
#define IFF_ALLMULTI 0x200 /* receive all multicast packets*/
|
|
|
#define IFF_MASTER 0x400 /* master of a load balancer */
|
#define IFF_MASTER 0x400 /* master of a load balancer */
|
#define IFF_SLAVE 0x800 /* slave of a load balancer */
|
#define IFF_SLAVE 0x800 /* slave of a load balancer */
|
|
|
#define IFF_MULTICAST 0x1000 /* Supports multicast */
|
#define IFF_MULTICAST 0x1000 /* Supports multicast */
|
#define IFF_SOFTHEADERS 0x2000 /* Device cannot construct headers
|
#define IFF_SOFTHEADERS 0x2000 /* Device cannot construct headers
|
* until broadcast time. Therefore
|
* until broadcast time. Therefore
|
* SOCK_PACKET must call header
|
* SOCK_PACKET must call header
|
* construction. Private flag.
|
* construction. Private flag.
|
* Never visible outside of kernel.
|
* Never visible outside of kernel.
|
*/
|
*/
|
|
|
/*
|
/*
|
* The ifaddr structure contains information about one address
|
* The ifaddr structure contains information about one address
|
* of an interface. They are maintained by the different address
|
* of an interface. They are maintained by the different address
|
* families, are allocated and attached when an address is set,
|
* families, are allocated and attached when an address is set,
|
* and are linked together so all addresses for an interface can
|
* and are linked together so all addresses for an interface can
|
* be located.
|
* be located.
|
*/
|
*/
|
|
|
struct ifaddr
|
struct ifaddr
|
{
|
{
|
struct sockaddr ifa_addr; /* address of interface */
|
struct sockaddr ifa_addr; /* address of interface */
|
union {
|
union {
|
struct sockaddr ifu_broadaddr;
|
struct sockaddr ifu_broadaddr;
|
struct sockaddr ifu_dstaddr;
|
struct sockaddr ifu_dstaddr;
|
} ifa_ifu;
|
} ifa_ifu;
|
struct iface *ifa_ifp; /* back-pointer to interface */
|
struct iface *ifa_ifp; /* back-pointer to interface */
|
struct ifaddr *ifa_next; /* next address for interface */
|
struct ifaddr *ifa_next; /* next address for interface */
|
};
|
};
|
|
|
#define ifa_broadaddr ifa_ifu.ifu_broadaddr /* broadcast address */
|
#define ifa_broadaddr ifa_ifu.ifu_broadaddr /* broadcast address */
|
#define ifa_dstaddr ifa_ifu.ifu_dstaddr /* other end of link */
|
#define ifa_dstaddr ifa_ifu.ifu_dstaddr /* other end of link */
|
|
|
/*
|
/*
|
* Device mapping structure. I'd just gone off and designed a
|
* Device mapping structure. I'd just gone off and designed a
|
* beautiful scheme using only loadable modules with arguments
|
* beautiful scheme using only loadable modules with arguments
|
* for driver options and along come the PCMCIA people 8)
|
* for driver options and along come the PCMCIA people 8)
|
*
|
*
|
* Ah well. The get() side of this is good for WDSETUP, and it'll
|
* 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
|
* be handy for debugging things. The set side is fine for now and
|
* being very small might be worth keeping for clean configuration.
|
* being very small might be worth keeping for clean configuration.
|
*/
|
*/
|
|
|
struct ifmap
|
struct ifmap
|
{
|
{
|
unsigned long mem_start;
|
unsigned long mem_start;
|
unsigned long mem_end;
|
unsigned long mem_end;
|
unsigned short base_addr;
|
unsigned short base_addr;
|
unsigned char irq;
|
unsigned char irq;
|
unsigned char dma;
|
unsigned char dma;
|
unsigned char port;
|
unsigned char port;
|
/* 3 bytes spare */
|
/* 3 bytes spare */
|
};
|
};
|
|
|
/*
|
/*
|
* Interface request structure used for socket
|
* Interface request structure used for socket
|
* ioctl's. All interface ioctl's must have parameter
|
* ioctl's. All interface ioctl's must have parameter
|
* definitions which begin with ifr_name. The
|
* definitions which begin with ifr_name. The
|
* remainder may be interface specific.
|
* remainder may be interface specific.
|
*/
|
*/
|
|
|
struct ifreq
|
struct ifreq
|
{
|
{
|
#define IFHWADDRLEN 6
|
#define IFHWADDRLEN 6
|
#define IFNAMSIZ 16
|
#define IFNAMSIZ 16
|
union
|
union
|
{
|
{
|
char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */
|
char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */
|
} ifr_ifrn;
|
} ifr_ifrn;
|
|
|
union {
|
union {
|
struct sockaddr ifru_addr;
|
struct sockaddr ifru_addr;
|
struct sockaddr ifru_dstaddr;
|
struct sockaddr ifru_dstaddr;
|
struct sockaddr ifru_broadaddr;
|
struct sockaddr ifru_broadaddr;
|
struct sockaddr ifru_netmask;
|
struct sockaddr ifru_netmask;
|
struct sockaddr ifru_hwaddr;
|
struct sockaddr ifru_hwaddr;
|
short ifru_flags;
|
short ifru_flags;
|
int ifru_metric;
|
int ifru_metric;
|
int ifru_mtu;
|
int ifru_mtu;
|
struct ifmap ifru_map;
|
struct ifmap ifru_map;
|
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
|
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
|
caddr_t ifru_data;
|
caddr_t ifru_data;
|
} ifr_ifru;
|
} ifr_ifru;
|
};
|
};
|
|
|
#define ifr_name ifr_ifrn.ifrn_name /* interface name */
|
#define ifr_name ifr_ifrn.ifrn_name /* interface name */
|
#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
|
#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
|
#define ifr_addr ifr_ifru.ifru_addr /* address */
|
#define ifr_addr ifr_ifru.ifru_addr /* address */
|
#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */
|
#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */
|
#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
|
#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
|
#define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */
|
#define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */
|
#define ifr_flags ifr_ifru.ifru_flags /* flags */
|
#define ifr_flags ifr_ifru.ifru_flags /* flags */
|
#define ifr_metric ifr_ifru.ifru_metric /* metric */
|
#define ifr_metric ifr_ifru.ifru_metric /* metric */
|
#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */
|
#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */
|
#define ifr_map ifr_ifru.ifru_map /* device map */
|
#define ifr_map ifr_ifru.ifru_map /* device map */
|
#define ifr_slave ifr_ifru.ifru_slave /* slave device */
|
#define ifr_slave ifr_ifru.ifru_slave /* slave device */
|
#define ifr_data ifr_ifru.ifru_data /* for use by interface */
|
#define ifr_data ifr_ifru.ifru_data /* for use by interface */
|
|
|
/*
|
/*
|
* Structure used in SIOCGIFCONF request.
|
* Structure used in SIOCGIFCONF request.
|
* Used to retrieve interface configuration
|
* Used to retrieve interface configuration
|
* for machine (useful for programs which
|
* for machine (useful for programs which
|
* must know all networks accessible).
|
* must know all networks accessible).
|
*/
|
*/
|
|
|
struct ifconf
|
struct ifconf
|
{
|
{
|
int ifc_len; /* size of buffer */
|
int ifc_len; /* size of buffer */
|
union
|
union
|
{
|
{
|
caddr_t ifcu_buf;
|
caddr_t ifcu_buf;
|
struct ifreq *ifcu_req;
|
struct ifreq *ifcu_req;
|
} ifc_ifcu;
|
} ifc_ifcu;
|
};
|
};
|
#define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
|
#define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
|
#define ifc_req ifc_ifcu.ifcu_req /* array of structures */
|
#define ifc_req ifc_ifcu.ifcu_req /* array of structures */
|
|
|
#endif /* _LINUX_IF_H */
|
#endif /* _LINUX_IF_H */
|
|
|