haiku/headers/posix/net/if.h
Scott McCreary 0fae873352 Updated posix headers to remove commas from copyright line, to match the preferred coding guidelines.
Cleaned up some header style violations, making sure there are two blank lines after the header guards.
This fixes the posix header part of #2191.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39288 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-11-03 21:46:47 +00:00

127 lines
3.0 KiB
C

/*
* Copyright 2006-2010 Haiku Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _NET_IF_H
#define _NET_IF_H
#include <net/route.h>
#include <sys/socket.h>
#define IF_NAMESIZE 32
/* BSD specific/proprietary part */
#define IFNAMSIZ IF_NAMESIZE
struct ifreq_stream_stats {
uint32_t packets;
uint32_t errors;
uint64_t bytes;
uint32_t multicast_packets;
uint32_t dropped;
};
struct ifreq_stats {
struct ifreq_stream_stats receive;
struct ifreq_stream_stats send;
uint32_t collisions;
};
struct ifreq {
char ifr_name[IF_NAMESIZE];
union {
struct sockaddr ifr_addr;
struct sockaddr ifr_dstaddr;
struct sockaddr ifr_broadaddr;
struct sockaddr ifr_mask;
struct ifreq_stats ifr_stats;
struct route_entry ifr_route;
int ifr_flags;
int ifr_index;
int ifr_metric;
int ifr_mtu;
int ifr_media;
int ifr_type;
int ifr_reqcap;
int ifr_count;
uint8_t* ifr_data;
};
};
/* used with SIOC_IF_ALIAS_ADD, SIOC_IF_ALIAS_GET, SIOC_ALIAS_SET */
struct ifaliasreq {
char ifra_name[IF_NAMESIZE];
int ifra_index;
struct sockaddr_storage ifra_addr;
union {
struct sockaddr_storage ifra_broadaddr;
struct sockaddr_storage ifra_destination;
};
struct sockaddr_storage ifra_mask;
uint32_t ifra_flags;
};
/* interface flags */
#define IFF_UP 0x0001
#define IFF_BROADCAST 0x0002 /* valid broadcast address */
#define IFF_LOOPBACK 0x0008
#define IFF_POINTOPOINT 0x0010 /* point-to-point link */
#define IFF_NOARP 0x0040 /* no address resolution */
#define IFF_AUTOUP 0x0080 /* auto dial */
#define IFF_PROMISC 0x0100 /* receive all packets */
#define IFF_ALLMULTI 0x0200 /* receive all multicast packets */
#define IFF_SIMPLEX 0x0800 /* doesn't receive own transmissions */
#define IFF_LINK 0x1000 /* has link */
#define IFF_AUTO_CONFIGURED 0x2000
#define IFF_CONFIGURING 0x4000
#define IFF_MULTICAST 0x8000 /* supports multicast */
/* interface alias flags */
#define IFAF_AUTO_CONFIGURED 0x0001 /* has been automatically configured */
#define IFAF_CONFIGURING 0x0002 /* auto configuration in progress */
/* used with SIOCGIFCOUNT, and SIOCGIFCONF */
struct ifconf {
int ifc_len; /* size of buffer */
union {
void* ifc_buf;
struct ifreq* ifc_req;
int ifc_value;
};
};
/* Macro that returns the size of a single address within a SIOCGIFCONF buffer;
it looks like this because of compatibility with other platforms. */
#define _SIZEOF_ADDR_IFREQ(request) \
(IF_NAMESIZE + (request).ifr_addr.sa_len > (int)sizeof(ifreq) \
? IF_NAMESIZE + (request).ifr_addr.sa_len : sizeof(ifreq))
/* POSIX definitions follow */
struct if_nameindex {
unsigned if_index; /* positive interface index */
char* if_name; /* interface name, ie. "loopback" */
};
#ifdef __cplusplus
extern "C" {
#endif
unsigned if_nametoindex(const char* name);
char* if_indextoname(unsigned interfaceIndex, char* nameBuffer);
struct if_nameindex* if_nameindex(void);
void if_freenameindex(struct if_nameindex* interfaceArray);
#ifdef __cplusplus
}
#endif
#endif /* _NET_IF_H */