Blame


1 cfa37a7b 2004-04-10 devnull .TH IP 3
2 cfa37a7b 2004-04-10 devnull .SH NAME
3 cfa37a7b 2004-04-10 devnull eipfmt, parseip, parseipmask, v4parseip, v4parsecidr, parseether, myipaddr, myetheraddr, maskip, equivip, defmask, isv4, v4tov6, v6tov4, nhgetl, nhgets, hnputl, hnputs, ptclbsum, readipifc \- Internet protocol
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
5 cfa37a7b 2004-04-10 devnull .B #include <u.h>
6 cfa37a7b 2004-04-10 devnull .br
7 cfa37a7b 2004-04-10 devnull .B #include <libc.h>
8 cfa37a7b 2004-04-10 devnull .br
9 cfa37a7b 2004-04-10 devnull .B #include <ip.h>
10 cfa37a7b 2004-04-10 devnull .PP
11 cfa37a7b 2004-04-10 devnull .B
12 cfa37a7b 2004-04-10 devnull int eipfmt(Fmt*)
13 cfa37a7b 2004-04-10 devnull .PP
14 cfa37a7b 2004-04-10 devnull .B
15 cfa37a7b 2004-04-10 devnull ulong parseip(uchar *ipaddr, char *str)
16 cfa37a7b 2004-04-10 devnull .PP
17 cfa37a7b 2004-04-10 devnull .B
18 cfa37a7b 2004-04-10 devnull ulong parseipmask(uchar *ipaddr, char *str)
19 cfa37a7b 2004-04-10 devnull .PP
20 cfa37a7b 2004-04-10 devnull .B
21 cfa37a7b 2004-04-10 devnull char* v4parseip(uchar *ipaddr, char *str)
22 cfa37a7b 2004-04-10 devnull .PP
23 cfa37a7b 2004-04-10 devnull .B
24 cfa37a7b 2004-04-10 devnull ulong v4parsecidr(uchar *addr, uchar *mask, char *str)
25 cfa37a7b 2004-04-10 devnull .PP
26 cfa37a7b 2004-04-10 devnull .B
27 cfa37a7b 2004-04-10 devnull int parseether(uchar *eaddr, char *str)
28 cfa37a7b 2004-04-10 devnull .PP
29 cfa37a7b 2004-04-10 devnull .B
30 cfa37a7b 2004-04-10 devnull int myetheraddr(uchar *eaddr, char *dev)
31 cfa37a7b 2004-04-10 devnull .PP
32 cfa37a7b 2004-04-10 devnull .B
33 cfa37a7b 2004-04-10 devnull int myipaddr(uchar *ipaddr, char *net)
34 cfa37a7b 2004-04-10 devnull .PP
35 cfa37a7b 2004-04-10 devnull .B
36 cfa37a7b 2004-04-10 devnull void maskip(uchar *from, uchar *mask, uchar *to)
37 cfa37a7b 2004-04-10 devnull .PP
38 cfa37a7b 2004-04-10 devnull .B
39 cfa37a7b 2004-04-10 devnull int equivip(uchar *ipaddr1, uchar *ipaddr2)
40 cfa37a7b 2004-04-10 devnull .PP
41 cfa37a7b 2004-04-10 devnull .B
42 cfa37a7b 2004-04-10 devnull uchar* defmask(uchar *ipaddr)
43 cfa37a7b 2004-04-10 devnull .PP
44 cfa37a7b 2004-04-10 devnull .B
45 cfa37a7b 2004-04-10 devnull int isv4(uchar *ipaddr)
46 cfa37a7b 2004-04-10 devnull .PP
47 cfa37a7b 2004-04-10 devnull .B
48 cfa37a7b 2004-04-10 devnull void v4tov6(uchar *ipv6, uchar *ipv4)
49 cfa37a7b 2004-04-10 devnull .PP
50 cfa37a7b 2004-04-10 devnull .B
51 cfa37a7b 2004-04-10 devnull void v6tov4(uchar *ipv4, uchar *ipv6)
52 cfa37a7b 2004-04-10 devnull .PP
53 cfa37a7b 2004-04-10 devnull .B
54 cfa37a7b 2004-04-10 devnull ushort nhgets(void *p)
55 cfa37a7b 2004-04-10 devnull .PP
56 cfa37a7b 2004-04-10 devnull .B
57 cfa37a7b 2004-04-10 devnull uint nhgetl(void *p)
58 cfa37a7b 2004-04-10 devnull .PP
59 cfa37a7b 2004-04-10 devnull .B
60 cfa37a7b 2004-04-10 devnull void hnputs(void *p, ushort v)
61 cfa37a7b 2004-04-10 devnull .PP
62 cfa37a7b 2004-04-10 devnull .B
63 cfa37a7b 2004-04-10 devnull void hnputl(void *p, uint v)
64 cfa37a7b 2004-04-10 devnull .PP
65 cfa37a7b 2004-04-10 devnull .B
66 cfa37a7b 2004-04-10 devnull ushort ptclbsum(uchar *a, int n)
67 cfa37a7b 2004-04-10 devnull .PP
68 cfa37a7b 2004-04-10 devnull .B
69 cfa37a7b 2004-04-10 devnull Ipifc* readipifc(char *net, Ipifc *ifc, int index)
70 cfa37a7b 2004-04-10 devnull .PP
71 cfa37a7b 2004-04-10 devnull .B
72 cfa37a7b 2004-04-10 devnull uchar IPv4bcast[IPaddrlen];
73 cfa37a7b 2004-04-10 devnull .PP
74 cfa37a7b 2004-04-10 devnull .B
75 cfa37a7b 2004-04-10 devnull uchar IPv4allsys[IPaddrlen];
76 cfa37a7b 2004-04-10 devnull .PP
77 cfa37a7b 2004-04-10 devnull .B
78 cfa37a7b 2004-04-10 devnull uchar IPv4allrouter[IPaddrlen];
79 cfa37a7b 2004-04-10 devnull .PP
80 cfa37a7b 2004-04-10 devnull .B
81 cfa37a7b 2004-04-10 devnull uchar IPallbits[IPaddrlen];
82 cfa37a7b 2004-04-10 devnull .PP
83 cfa37a7b 2004-04-10 devnull .B
84 cfa37a7b 2004-04-10 devnull uchar IPnoaddr[IPaddrlen];
85 cfa37a7b 2004-04-10 devnull .PP
86 cfa37a7b 2004-04-10 devnull .B
87 cfa37a7b 2004-04-10 devnull uchar v4prefix[IPaddrlen];
88 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
89 cfa37a7b 2004-04-10 devnull These routines are used by Internet Protocol (IP) programs to
90 cfa37a7b 2004-04-10 devnull manipulate IP and Ethernet addresses.
91 cfa37a7b 2004-04-10 devnull Plan 9, by default, uses V6 format IP addresses. Since V4
92 cfa37a7b 2004-04-10 devnull addresses fit into the V6 space, all IP addresses can be represented.
93 cfa37a7b 2004-04-10 devnull IP addresses are stored as a string of 16
94 cfa37a7b 2004-04-10 devnull .B unsigned
95 cfa37a7b 2004-04-10 devnull .BR chars ,
96 cfa37a7b 2004-04-10 devnull Ethernet
97 cfa37a7b 2004-04-10 devnull addresses as 6
98 cfa37a7b 2004-04-10 devnull .B unsigned
99 cfa37a7b 2004-04-10 devnull .BR chars .
100 cfa37a7b 2004-04-10 devnull Either V4 or V6 string representation can be used for IP addresses.
101 cfa37a7b 2004-04-10 devnull For V4 addresses, the representation can be (up to) 4 decimal
102 cfa37a7b 2004-04-10 devnull integers from 0 to 255 separated by periods.
103 cfa37a7b 2004-04-10 devnull For V6 addresses, the representation is (up to) 8 hex integers
104 cfa37a7b 2004-04-10 devnull from 0x0 to 0xFFFF separated by colons.
105 cfa37a7b 2004-04-10 devnull Strings of 0 integers can be elided using two colons.
106 cfa37a7b 2004-04-10 devnull For example,
107 cfa37a7b 2004-04-10 devnull .B FFFF::1111
108 cfa37a7b 2004-04-10 devnull is equivalent to
109 cfa37a7b 2004-04-10 devnull .BR FFFF:0:0:0:0:0:0:1111 .
110 cfa37a7b 2004-04-10 devnull The string representation for IP masks is a superset of the
111 cfa37a7b 2004-04-10 devnull address representation. It includes slash notation that indicates
112 cfa37a7b 2004-04-10 devnull the number of leading 1 bits in the mask. Thus, a
113 cfa37a7b 2004-04-10 devnull V4 class C mask can be represented as
114 cfa37a7b 2004-04-10 devnull .BR FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FF00 ,
115 cfa37a7b 2004-04-10 devnull .BR 255.255.255.0 ,
116 cfa37a7b 2004-04-10 devnull or
117 cfa37a7b 2004-04-10 devnull .BR /120.
118 cfa37a7b 2004-04-10 devnull The string representation of Ethernet addresses is exactly
119 cfa37a7b 2004-04-10 devnull 12 hexadecimal digits.
120 cfa37a7b 2004-04-10 devnull .PP
121 cfa37a7b 2004-04-10 devnull .I Eipfmt
122 cfa37a7b 2004-04-10 devnull is a
123 bf8a59fa 2004-04-11 devnull .IR print (3)
124 cfa37a7b 2004-04-10 devnull formatter for Ethernet (verb
125 cfa37a7b 2004-04-10 devnull .BR E )
126 cfa37a7b 2004-04-10 devnull addresses,
127 cfa37a7b 2004-04-10 devnull IP V6 (verb
128 cfa37a7b 2004-04-10 devnull .BR I )
129 cfa37a7b 2004-04-10 devnull addresses,
130 cfa37a7b 2004-04-10 devnull IP V4 (verb
131 cfa37a7b 2004-04-10 devnull .BR V )
132 cfa37a7b 2004-04-10 devnull addresses,
133 cfa37a7b 2004-04-10 devnull and IP V6 (verb
134 cfa37a7b 2004-04-10 devnull .BR M )
135 cfa37a7b 2004-04-10 devnull masks.
136 cfa37a7b 2004-04-10 devnull .PP
137 cfa37a7b 2004-04-10 devnull .I Parseip
138 cfa37a7b 2004-04-10 devnull converts a string pointed to by
139 cfa37a7b 2004-04-10 devnull .I str
140 cfa37a7b 2004-04-10 devnull to a 16-byte IP address starting at
141 cfa37a7b 2004-04-10 devnull .IR ipaddr .
142 cfa37a7b 2004-04-10 devnull As a concession to backwards compatibility,
143 cfa37a7b 2004-04-10 devnull if the string is a V4 address, the return value
144 cfa37a7b 2004-04-10 devnull is an unsigned long integer containing the big-endian V4 address.
145 cfa37a7b 2004-04-10 devnull If not, the return value is 6.
146 cfa37a7b 2004-04-10 devnull .I Parseipmask
147 cfa37a7b 2004-04-10 devnull converts a string pointed to by
148 cfa37a7b 2004-04-10 devnull .I str
149 cfa37a7b 2004-04-10 devnull to a 6-byte IP mask starting at
150 cfa37a7b 2004-04-10 devnull .IR ipaddr .
151 cfa37a7b 2004-04-10 devnull It too returns an unsigned long big-endian V4 address or 6.
152 cfa37a7b 2004-04-10 devnull Both routines return -1 on errors.
153 cfa37a7b 2004-04-10 devnull .PP
154 cfa37a7b 2004-04-10 devnull .I V4parseip
155 cfa37a7b 2004-04-10 devnull converts a string pointed to by
156 cfa37a7b 2004-04-10 devnull .I str
157 cfa37a7b 2004-04-10 devnull to a 4-byte V4 IP address starting at
158 cfa37a7b 2004-04-10 devnull .IR ipaddr .
159 cfa37a7b 2004-04-10 devnull .PP
160 cfa37a7b 2004-04-10 devnull .I V4parsecidr
161 cfa37a7b 2004-04-10 devnull converts a string of the form
162 cfa37a7b 2004-04-10 devnull addr/mask, pointed to by
163 cfa37a7b 2004-04-10 devnull .IR str ,
164 cfa37a7b 2004-04-10 devnull to a 4-byte V4 IP address starting at
165 cfa37a7b 2004-04-10 devnull .I ipaddr
166 cfa37a7b 2004-04-10 devnull and a 4-byte V4 IP mask starting at
167 cfa37a7b 2004-04-10 devnull .IR mask .
168 cfa37a7b 2004-04-10 devnull .PP
169 cfa37a7b 2004-04-10 devnull .I Myipaddr
170 cfa37a7b 2004-04-10 devnull returns the first valid IP address in
171 cfa37a7b 2004-04-10 devnull the IP stack rooted at
172 cfa37a7b 2004-04-10 devnull .IR net .
173 cfa37a7b 2004-04-10 devnull .PP
174 cfa37a7b 2004-04-10 devnull .I Parseether
175 cfa37a7b 2004-04-10 devnull converts a string pointed to by
176 cfa37a7b 2004-04-10 devnull .I str
177 cfa37a7b 2004-04-10 devnull to a 6-byte Ethernet address starting at
178 cfa37a7b 2004-04-10 devnull .IR eaddr .
179 cfa37a7b 2004-04-10 devnull .I Myetheraddr
180 cfa37a7b 2004-04-10 devnull reads the Ethernet address string from file
181 cfa37a7b 2004-04-10 devnull .IB dev /1/stats
182 cfa37a7b 2004-04-10 devnull and parses it into
183 cfa37a7b 2004-04-10 devnull .IR eaddr .
184 cfa37a7b 2004-04-10 devnull Both routines return a negative number on errors.
185 cfa37a7b 2004-04-10 devnull .PP
186 cfa37a7b 2004-04-10 devnull .I Maskip
187 cfa37a7b 2004-04-10 devnull places the bit-wise AND of the IP addresses pointed
188 cfa37a7b 2004-04-10 devnull to by its first two arguments into the buffer pointed
189 cfa37a7b 2004-04-10 devnull to by the third.
190 cfa37a7b 2004-04-10 devnull .PP
191 cfa37a7b 2004-04-10 devnull .I Equivip
192 cfa37a7b 2004-04-10 devnull returns non-zero if the IP addresses pointed to by its two
193 cfa37a7b 2004-04-10 devnull arguments are equal.
194 cfa37a7b 2004-04-10 devnull .PP
195 cfa37a7b 2004-04-10 devnull .I Defmask
196 cfa37a7b 2004-04-10 devnull returns the standard class A, B, or C mask for
197 cfa37a7b 2004-04-10 devnull .IR ipaddr .
198 cfa37a7b 2004-04-10 devnull .PP
199 cfa37a7b 2004-04-10 devnull .I Isv4
200 cfa37a7b 2004-04-10 devnull returns non-zero if the V6 address is in the V4 space, that is,
201 cfa37a7b 2004-04-10 devnull if it starts with
202 cfa37a7b 2004-04-10 devnull .BR 0:0:0:0:0:0:FFFF .
203 cfa37a7b 2004-04-10 devnull .I V4tov6
204 cfa37a7b 2004-04-10 devnull converts the V4 address,
205 cfa37a7b 2004-04-10 devnull .IR v4ip ,
206 cfa37a7b 2004-04-10 devnull to a V6 address and puts the result in
207 cfa37a7b 2004-04-10 devnull .IR v6ip .
208 cfa37a7b 2004-04-10 devnull .I V6tov4
209 cfa37a7b 2004-04-10 devnull converts the V6 address,
210 cfa37a7b 2004-04-10 devnull .IR v6ip ,
211 cfa37a7b 2004-04-10 devnull to a V4 address and puts the result in
212 cfa37a7b 2004-04-10 devnull .IR v4ip .
213 cfa37a7b 2004-04-10 devnull .PP
214 cfa37a7b 2004-04-10 devnull .I Hnputs
215 cfa37a7b 2004-04-10 devnull and
216 cfa37a7b 2004-04-10 devnull .I hnputl
217 cfa37a7b 2004-04-10 devnull are used to store 16-bit and 32-bit integers into IP big-endian form.
218 cfa37a7b 2004-04-10 devnull .I Nhgets
219 cfa37a7b 2004-04-10 devnull and
220 cfa37a7b 2004-04-10 devnull .I nhgetl
221 cfa37a7b 2004-04-10 devnull convert big-endian 2 and 4 byte quantities into integers.
222 cfa37a7b 2004-04-10 devnull .PP
223 cfa37a7b 2004-04-10 devnull .I Pctlbsum
224 cfa37a7b 2004-04-10 devnull returns the one's complement checksum used in IP protocols, typically invoked as
225 cfa37a7b 2004-04-10 devnull .EX
226 cfa37a7b 2004-04-10 devnull hnputs(hdr->cksum, ~ptclbsum(data, len) & 0xffff);
227 cfa37a7b 2004-04-10 devnull .EE
228 cfa37a7b 2004-04-10 devnull .PP
229 cfa37a7b 2004-04-10 devnull A number of standard IP addresses in V6 format are also defined. They
230 cfa37a7b 2004-04-10 devnull are:
231 cfa37a7b 2004-04-10 devnull .IP \f5IPv4bcast
232 cfa37a7b 2004-04-10 devnull the V4 broadcast address
233 cfa37a7b 2004-04-10 devnull .IP \f5IPv4allsys
234 cfa37a7b 2004-04-10 devnull the V4 all systems multicast address
235 cfa37a7b 2004-04-10 devnull .IP \f5IPv4allrouter
236 cfa37a7b 2004-04-10 devnull the V4 all routers multicast address
237 cfa37a7b 2004-04-10 devnull .IP \f5IPallbits
238 cfa37a7b 2004-04-10 devnull the V6 all bits on address
239 cfa37a7b 2004-04-10 devnull .IP \f5IPnoaddr
240 cfa37a7b 2004-04-10 devnull the V6 null address, all zeros
241 cfa37a7b 2004-04-10 devnull .IP \f5v4prefix
242 cfa37a7b 2004-04-10 devnull the IP V6 prefix to all embedded V4 addresses
243 cfa37a7b 2004-04-10 devnull .PP
244 cfa37a7b 2004-04-10 devnull .I Readipifc
245 cfa37a7b 2004-04-10 devnull returns information about
246 cfa37a7b 2004-04-10 devnull a particular interface (\fIindex\fP >= 0)
247 cfa37a7b 2004-04-10 devnull or all IP interfaces (\fIindex\fP < 0)
248 cfa37a7b 2004-04-10 devnull configured under a
249 cfa37a7b 2004-04-10 devnull mount point
250 cfa37a7b 2004-04-10 devnull .IR net ,
251 cfa37a7b 2004-04-10 devnull default
252 cfa37a7b 2004-04-10 devnull .BR /net .
253 cfa37a7b 2004-04-10 devnull Each interface is described by one
254 cfa37a7b 2004-04-10 devnull .I Ipifc
255 cfa37a7b 2004-04-10 devnull structure which in turn points to a linked list of
256 cfa37a7b 2004-04-10 devnull .IR Iplifc
257 cfa37a7b 2004-04-10 devnull structures describing the addresses assigned
258 cfa37a7b 2004-04-10 devnull to this interface.
259 cfa37a7b 2004-04-10 devnull If the list
260 cfa37a7b 2004-04-10 devnull .IR ifc
261 cfa37a7b 2004-04-10 devnull is supplied,
262 cfa37a7b 2004-04-10 devnull that list is freed.
263 cfa37a7b 2004-04-10 devnull Thus, subsequent calls can be used
264 cfa37a7b 2004-04-10 devnull to free the list returned by the previous call.
265 cfa37a7b 2004-04-10 devnull .I Ipifc
266 cfa37a7b 2004-04-10 devnull is:
267 cfa37a7b 2004-04-10 devnull .PP
268 cfa37a7b 2004-04-10 devnull .EX
269 cfa37a7b 2004-04-10 devnull typedef struct Ipifc
270 cfa37a7b 2004-04-10 devnull {
271 cfa37a7b 2004-04-10 devnull Ipifc *next;
272 cfa37a7b 2004-04-10 devnull Iplifc *lifc; /* local addressses */
273 cfa37a7b 2004-04-10 devnull
274 cfa37a7b 2004-04-10 devnull /* per ip interface */
275 cfa37a7b 2004-04-10 devnull int index; /* number of interface in ipifc dir */
276 cfa37a7b 2004-04-10 devnull char dev[64]; /* associated physical device */
277 cfa37a7b 2004-04-10 devnull int mtu; /* max transfer unit */
278 cfa37a7b 2004-04-10 devnull
279 cfa37a7b 2004-04-10 devnull long validlt; /* valid life time */
280 cfa37a7b 2004-04-10 devnull long preflt; /* preferred life time */
281 cfa37a7b 2004-04-10 devnull uchar sendra6; /* on == send router adv */
282 cfa37a7b 2004-04-10 devnull uchar recvra6; /* on == rcv router adv */
283 cfa37a7b 2004-04-10 devnull
284 cfa37a7b 2004-04-10 devnull ulong pktin; /* packets read */
285 cfa37a7b 2004-04-10 devnull ulong pktout; /* packets written */
286 cfa37a7b 2004-04-10 devnull ulong errin; /* read errors */
287 cfa37a7b 2004-04-10 devnull ulong errout; /* write errors */
288 cfa37a7b 2004-04-10 devnull Ipv6rp rp; /* route advertisement params */
289 cfa37a7b 2004-04-10 devnull } Ipifc;
290 cfa37a7b 2004-04-10 devnull .EE
291 cfa37a7b 2004-04-10 devnull .PP
292 cfa37a7b 2004-04-10 devnull .I Iplifc
293 cfa37a7b 2004-04-10 devnull is:
294 cfa37a7b 2004-04-10 devnull .PP
295 cfa37a7b 2004-04-10 devnull .EX
296 cfa37a7b 2004-04-10 devnull struct Iplifc
297 cfa37a7b 2004-04-10 devnull {
298 cfa37a7b 2004-04-10 devnull Iplifc *next;
299 cfa37a7b 2004-04-10 devnull
300 cfa37a7b 2004-04-10 devnull uchar ip[IPaddrlen];
301 cfa37a7b 2004-04-10 devnull uchar mask[IPaddrlen];
302 cfa37a7b 2004-04-10 devnull uchar net[IPaddrlen]; /* ip & mask */
303 cfa37a7b 2004-04-10 devnull ulong preflt; /* preferred lifetime */
304 cfa37a7b 2004-04-10 devnull ulong validlt; /* valid lifetime */
305 cfa37a7b 2004-04-10 devnull };
306 cfa37a7b 2004-04-10 devnull .EE
307 cfa37a7b 2004-04-10 devnull .PP
308 cfa37a7b 2004-04-10 devnull .I Ipv6rp
309 cfa37a7b 2004-04-10 devnull is:
310 cfa37a7b 2004-04-10 devnull struct Ipv6rp
311 cfa37a7b 2004-04-10 devnull {
312 cfa37a7b 2004-04-10 devnull int mflag;
313 cfa37a7b 2004-04-10 devnull int oflag;
314 cfa37a7b 2004-04-10 devnull int maxraint; /* max route adv interval */
315 cfa37a7b 2004-04-10 devnull int minraint; /* min route adv interval */
316 cfa37a7b 2004-04-10 devnull int linkmtu;
317 cfa37a7b 2004-04-10 devnull int reachtime;
318 cfa37a7b 2004-04-10 devnull int rxmitra;
319 cfa37a7b 2004-04-10 devnull int ttl;
320 cfa37a7b 2004-04-10 devnull int routerlt;
321 cfa37a7b 2004-04-10 devnull };
322 cfa37a7b 2004-04-10 devnull .PP
323 cfa37a7b 2004-04-10 devnull .I Dev
324 cfa37a7b 2004-04-10 devnull contains the first 64 bytes of the device configured with this
325 cfa37a7b 2004-04-10 devnull interface.
326 cfa37a7b 2004-04-10 devnull .I Net
327 cfa37a7b 2004-04-10 devnull is
328 cfa37a7b 2004-04-10 devnull .IB ip & mask
329 cfa37a7b 2004-04-10 devnull if the network is multipoint or
330 cfa37a7b 2004-04-10 devnull the remote address if the network is
331 cfa37a7b 2004-04-10 devnull point to point.
332 cfa37a7b 2004-04-10 devnull .SH SOURCE
333 cfa37a7b 2004-04-10 devnull .B /sys/src/libip
334 cfa37a7b 2004-04-10 devnull .SH SEE ALSO
335 bf8a59fa 2004-04-11 devnull .IR print (3)