3 /* Interface definitions for ethernet access library */
5 typedef union etheraddr
7 unsigned char bytes
[6]; /* byteorder safe initialization */
8 unsigned short shorts
[3]; /* force 2-byte alignment */
12 typedef struct etherpacket
16 unsigned char type
[2]; /* in network byte order! */
17 unsigned short pktlen
; /* length of pktbuf ONLY */
22 typedef struct ethervec
26 unsigned char type
[2]; /* in network byte order! */
27 unsigned short iovcnt
; /* number of iovec to use */
28 struct iovec
*iov
; /* ptr to array of iovec */
32 #ifndef __ETHER_BCAST_ADDR__
33 extern ether_addr ether_bcast_addr
;
38 int ether_open (char *name
, unsigned type
, ether_addr
* address
);
40 ether_addr
*ether_address (int fd
, ether_addr
* address
);
42 ether_addr
*ether_intfaddr (char *intf
, ether_addr
* address
);
44 char **ether_interfaces (void);
46 int ether_write (int fd
, ether_packet
* packet
);
48 int ether_writev (int fd
, ether_vec
* packet
);
50 int ether_read (int fd
, ether_packet
* packet
);
52 int ether_readv (int fd
, ether_vec
* packet
);
54 int ether_blocking (int fd
, int state
);
56 int ether_send_self (int fd
);
58 int ether_mcast_self (int fd
);
60 int ether_bcast_self (int fd
);
62 char *ether_ntoa (ether_addr
*);
64 ether_addr
*ether_aton (char *);
69 * Avoid stupid warnings if structs aren't defined
72 typedef struct in_addr
*_ether_NoNsEnSe
;
73 typedef struct hostent
*_ether_nOnSeNsE
;
77 char *ether_e2a (ether_addr
*, char *);
79 ether_addr
*ether_a2e (char *, ether_addr
*);
81 struct in_addr
*ether_e2ip (ether_addr
*, struct in_addr
*);
83 ether_addr
*ether_ip2e (struct in_addr
*, ether_addr
*);
85 char *ether_e2host (ether_addr
*, char *);
87 ether_addr
*ether_host2e (char *, ether_addr
*);
89 ether_addr
*ether_hostent2e (struct hostent
*, ether_addr
*);
94 ether_addr
*ether_address ();
95 ether_addr
*ether_intfaddr ();
96 char **ether_interfaces ();
101 int ether_blocking ();
102 int ether_send_self ();
103 int ether_mcast_self ();
104 int ether_bcast_self ();
107 ether_addr
*ether_aton ();
109 ether_addr
*ether_a2e ();
110 struct in_addr
*ether_e2ip ();
111 ether_addr
*ether_ip2e ();
112 char *ether_e2host ();
113 ether_addr
*ether_host2e ();
114 ether_addr
*ether_hostent2e ();
118 #undef ether_cmp /* lose def from netinet/if_ether.h */
120 #define ether_cmp(addr1,addr2) \
121 ((addr1)->shorts[0] != (addr2)->shorts[0] \
122 || (addr1)->shorts[1] != (addr2)->shorts[1] \
123 || (addr1)->shorts[2] != (addr2)->shorts[2])
125 #define ETHERSTRLEN 18 /* max length of "xx:xx:xx:xx:xx:xx" */
127 #ifdef NOFILE /* i.e. we have included sys/param.h */
128 #ifndef MAXHOSTNAMELEN /* but MAXHOSTNAMELEN still isnt set */
129 #define MAXHOSTNAMELEN 64
133 /* should be defined in terms of ether_packet struct; need offsetof() macro */
137 #define ETHER_TYPE 12
140 #define ETHER_MAX 1500
142 #define ETHER_MINTYPE 0x5DD /* lowest protocol not valid IEEE802 */
143 #define ETHER_MAXTYPE 0xFFFF /* largest possible protocol */
145 #define ETHER_MCAST(addr) (((unsigned char *) (addr))[0] & 0x01)
148 #define ETHER_ALLTYPES NT_ALLTYPES
150 #define ETHER_ALLTYPES ((unsigned) -1)