source: trunk/minix/lib/ip/ether.h@ 15

Last change on this file since 15 was 9, checked in by Mattia Monga, 14 years ago

Minix 3.1.2a

File size: 3.4 KB
Line 
1/* $Id: ether.h,v 1.1.1.1 2005/04/21 14:56:15 beng Exp $ */
2
3/* Interface definitions for ethernet access library */
4
5typedef union etheraddr
6{
7 unsigned char bytes[6]; /* byteorder safe initialization */
8 unsigned short shorts[3]; /* force 2-byte alignment */
9}
10 ether_addr;
11
12typedef struct etherpacket
13{
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;
19}
20 ether_packet;
21
22typedef struct ethervec
23{
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 */
29}
30 ether_vec;
31
32#ifndef __ETHER_BCAST_ADDR__
33extern ether_addr ether_bcast_addr;
34#endif
35
36#ifdef __STDC__
37
38int ether_open (char *name, unsigned type, ether_addr * address);
39
40ether_addr *ether_address (int fd, ether_addr * address);
41
42ether_addr *ether_intfaddr (char *intf, ether_addr * address);
43
44char **ether_interfaces (void);
45
46int ether_write (int fd, ether_packet * packet);
47
48int ether_writev (int fd, ether_vec * packet);
49
50int ether_read (int fd, ether_packet * packet);
51
52int ether_readv (int fd, ether_vec * packet);
53
54int ether_blocking (int fd, int state);
55
56int ether_send_self (int fd);
57
58int ether_mcast_self (int fd);
59
60int ether_bcast_self (int fd);
61
62char *ether_ntoa (ether_addr *);
63
64ether_addr *ether_aton (char *);
65
66#ifdef __GNUC__
67
68/*
69 * Avoid stupid warnings if structs aren't defined
70 */
71
72typedef struct in_addr *_ether_NoNsEnSe;
73typedef struct hostent *_ether_nOnSeNsE;
74
75#endif
76
77char *ether_e2a (ether_addr *, char *);
78
79ether_addr *ether_a2e (char *, ether_addr *);
80
81struct in_addr *ether_e2ip (ether_addr *, struct in_addr *);
82
83ether_addr *ether_ip2e (struct in_addr *, ether_addr *);
84
85char *ether_e2host (ether_addr *, char *);
86
87ether_addr *ether_host2e (char *, ether_addr *);
88
89ether_addr *ether_hostent2e (struct hostent *, ether_addr *);
90
91#else
92
93int ether_open ();
94ether_addr *ether_address ();
95ether_addr *ether_intfaddr ();
96char **ether_interfaces ();
97int ether_write ();
98int ether_writev ();
99int ether_read ();
100int ether_readv ();
101int ether_blocking ();
102int ether_send_self ();
103int ether_mcast_self ();
104int ether_bcast_self ();
105
106char *ether_ntoa ();
107ether_addr *ether_aton ();
108char *ether_e2a ();
109ether_addr *ether_a2e ();
110struct in_addr *ether_e2ip ();
111ether_addr *ether_ip2e ();
112char *ether_e2host ();
113ether_addr *ether_host2e ();
114ether_addr *ether_hostent2e ();
115
116#endif
117
118#undef ether_cmp /* lose def from netinet/if_ether.h */
119
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])
124
125#define ETHERSTRLEN 18 /* max length of "xx:xx:xx:xx:xx:xx" */
126
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
132
133/* should be defined in terms of ether_packet struct; need offsetof() macro */
134
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
141
142#define ETHER_MINTYPE 0x5DD /* lowest protocol not valid IEEE802 */
143#define ETHER_MAXTYPE 0xFFFF /* largest possible protocol */
144
145#define ETHER_MCAST(addr) (((unsigned char *) (addr))[0] & 0x01)
146
147#ifdef NT_ALLTYPES
148#define ETHER_ALLTYPES NT_ALLTYPES
149#else
150#define ETHER_ALLTYPES ((unsigned) -1)
151#endif
Note: See TracBrowser for help on using the repository browser.