minix/lib/ip/ether.h
2009-11-09 10:26:00 +00:00

151 lines
3.4 KiB
C

/* $Id$ */
/* Interface definitions for ethernet access library */
typedef union etheraddr
{
unsigned char bytes[6]; /* byteorder safe initialization */
unsigned short shorts[3]; /* force 2-byte alignment */
}
ether_addr;
typedef struct etherpacket
{
ether_addr dest;
ether_addr src;
unsigned char type[2]; /* in network byte order! */
unsigned short pktlen; /* length of pktbuf ONLY */
char *pktbuf;
}
ether_packet;
typedef struct ethervec
{
ether_addr dest;
ether_addr src;
unsigned char type[2]; /* in network byte order! */
unsigned short iovcnt; /* number of iovec to use */
struct iovec *iov; /* ptr to array of iovec */
}
ether_vec;
#ifndef __ETHER_BCAST_ADDR__
extern ether_addr ether_bcast_addr;
#endif
#ifdef __STDC__
int ether_open (char *name, unsigned type, ether_addr * address);
ether_addr *ether_address (int fd, ether_addr * address);
ether_addr *ether_intfaddr (char *intf, ether_addr * address);
char **ether_interfaces (void);
int ether_write (int fd, ether_packet * packet);
int ether_writev (int fd, ether_vec * packet);
int ether_read (int fd, ether_packet * packet);
int ether_readv (int fd, ether_vec * packet);
int ether_blocking (int fd, int state);
int ether_send_self (int fd);
int ether_mcast_self (int fd);
int ether_bcast_self (int fd);
char *ether_ntoa (ether_addr *);
ether_addr *ether_aton (char *);
#ifdef __GNUC__
/*
* Avoid stupid warnings if structs aren't defined
*/
typedef struct in_addr *_ether_NoNsEnSe;
typedef struct hostent *_ether_nOnSeNsE;
#endif
char *ether_e2a (ether_addr *, char *);
ether_addr *ether_a2e (char *, ether_addr *);
struct in_addr *ether_e2ip (ether_addr *, struct in_addr *);
ether_addr *ether_ip2e (struct in_addr *, ether_addr *);
char *ether_e2host (ether_addr *, char *);
ether_addr *ether_host2e (char *, ether_addr *);
ether_addr *ether_hostent2e (struct hostent *, ether_addr *);
#else
int ether_open ();
ether_addr *ether_address ();
ether_addr *ether_intfaddr ();
char **ether_interfaces ();
int ether_write ();
int ether_writev ();
int ether_read ();
int ether_readv ();
int ether_blocking ();
int ether_send_self ();
int ether_mcast_self ();
int ether_bcast_self ();
char *ether_ntoa ();
ether_addr *ether_aton ();
char *ether_e2a ();
ether_addr *ether_a2e ();
struct in_addr *ether_e2ip ();
ether_addr *ether_ip2e ();
char *ether_e2host ();
ether_addr *ether_host2e ();
ether_addr *ether_hostent2e ();
#endif
#undef ether_cmp /* lose def from netinet/if_ether.h */
#define ether_cmp(addr1,addr2) \
((addr1)->shorts[0] != (addr2)->shorts[0] \
|| (addr1)->shorts[1] != (addr2)->shorts[1] \
|| (addr1)->shorts[2] != (addr2)->shorts[2])
#define ETHERSTRLEN 18 /* max length of "xx:xx:xx:xx:xx:xx" */
#ifdef NOFILE /* i.e. we have included sys/param.h */
#ifndef MAXHOSTNAMELEN /* but MAXHOSTNAMELEN still isnt set */
#define MAXHOSTNAMELEN 64
#endif
#endif
/* should be defined in terms of ether_packet struct; need offsetof() macro */
#define ETHER_DST 0
#define ETHER_SRC 6
#define ETHER_TYPE 12
#define ETHER_PKT 14
#define ETHER_MIN 46
#define ETHER_MAX 1500
#define ETHER_MINTYPE 0x5DD /* lowest protocol not valid IEEE802 */
#define ETHER_MAXTYPE 0xFFFF /* largest possible protocol */
#define ETHER_MCAST(addr) (((unsigned char *) (addr))[0] & 0x01)
#ifdef NT_ALLTYPES
#define ETHER_ALLTYPES NT_ALLTYPES
#else
#define ETHER_ALLTYPES ((unsigned) -1)
#endif