Uninitialized vector entry?
[minix3.git] / lib / ip / ether.h
blob276b95c59180265356bcc4cea9aeee18e616937f
1 /* $Id$ */
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 */
10 ether_addr;
12 typedef struct etherpacket
14 ether_addr dest;
15 ether_addr src;
16 unsigned char type[2]; /* in network byte order! */
17 unsigned short pktlen; /* length of pktbuf ONLY */
18 char *pktbuf;
20 ether_packet;
22 typedef struct ethervec
24 ether_addr dest;
25 ether_addr src;
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 */
30 ether_vec;
32 #ifndef __ETHER_BCAST_ADDR__
33 extern ether_addr ether_bcast_addr;
34 #endif
36 #ifdef __STDC__
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 *);
66 #ifdef __GNUC__
69 * Avoid stupid warnings if structs aren't defined
72 typedef struct in_addr *_ether_NoNsEnSe;
73 typedef struct hostent *_ether_nOnSeNsE;
75 #endif
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 *);
91 #else
93 int ether_open ();
94 ether_addr *ether_address ();
95 ether_addr *ether_intfaddr ();
96 char **ether_interfaces ();
97 int ether_write ();
98 int ether_writev ();
99 int ether_read ();
100 int ether_readv ();
101 int ether_blocking ();
102 int ether_send_self ();
103 int ether_mcast_self ();
104 int ether_bcast_self ();
106 char *ether_ntoa ();
107 ether_addr *ether_aton ();
108 char *ether_e2a ();
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 ();
116 #endif
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
130 #endif
131 #endif
133 /* should be defined in terms of ether_packet struct; need offsetof() macro */
135 #define ETHER_DST 0
136 #define ETHER_SRC 6
137 #define ETHER_TYPE 12
138 #define ETHER_PKT 14
139 #define ETHER_MIN 46
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)
147 #ifdef NT_ALLTYPES
148 #define ETHER_ALLTYPES NT_ALLTYPES
149 #else
150 #define ETHER_ALLTYPES ((unsigned) -1)
151 #endif