123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370 |
- .TH IP 2
- .SH NAME
- eipfmt, parseip, parseipmask, v4parseip, v4parsecidr, parseether, myipaddr, myetheraddr, maskip, equivip4, equivip6, ipcmp, defmask, isv4, v4tov6, v6tov4, nhgetv, nhgetl, nhgets, hnputv, hnputl, hnputs, ptclbsum, readipifc \- Internet Protocol addressing
- .SH SYNOPSIS
- .B #include <u.h>
- .br
- .B #include <libc.h>
- .br
- .B #include <ip.h>
- .PP
- .B
- int eipfmt(Fmt*)
- .PP
- .B
- vlong parseip(uchar *ipaddr, char *str)
- .PP
- .B
- vlong parseipmask(uchar *ipaddr, char *str)
- .PP
- .B
- char* v4parseip(uchar *ipaddr, char *str)
- .PP
- .B
- ulong v4parsecidr(uchar *addr, uchar *mask, char *str)
- .PP
- .B
- int parseether(uchar *eaddr, char *str)
- .PP
- .B
- int myetheraddr(uchar *eaddr, char *dev)
- .PP
- .B
- int myipaddr(uchar *ipaddr, char *net)
- .PP
- .B
- void maskip(uchar *from, uchar *mask, uchar *to)
- .PP
- .B
- int equivip4(uchar *ipaddr1, uchar *ipaddr2)
- .PP
- .B
- int equivip6(uchar *ipaddr1, uchar *ipaddr2)
- .PP
- .B
- int ipcmp(uchar *ipaddr1, uchar *ipaddr2)
- .PP
- .B
- uchar* defmask(uchar *ipaddr)
- .PP
- .B
- int isv4(uchar *ipaddr)
- .PP
- .B
- void v4tov6(uchar *ipv6, uchar *ipv4)
- .PP
- .B
- void v6tov4(uchar *ipv4, uchar *ipv6)
- .PP
- .B
- ushort nhgets(void *p)
- .PP
- .B
- uint nhgetl(void *p)
- .PP
- .B
- uvlong nhgetv(void *p)
- .PP
- .B
- void hnputs(void *p, ushort v)
- .PP
- .B
- void hnputl(void *p, uint v)
- .PP
- .B
- void hnputv(void *p, uvlong v)
- .PP
- .B
- ushort ptclbsum(uchar *a, int n)
- .PP
- .B
- Ipifc* readipifc(char *net, Ipifc *ifc, int index)
- .PP
- .B
- uchar IPv4bcast[IPaddrlen];
- .PP
- .B
- uchar IPv4allsys[IPaddrlen];
- .PP
- .B
- uchar IPv4allrouter[IPaddrlen];
- .PP
- .B
- uchar IPallbits[IPaddrlen];
- .PP
- .B
- uchar IPnoaddr[IPaddrlen];
- .PP
- .B
- uchar v4prefix[IPaddrlen];
- .SH DESCRIPTION
- These routines are used by Internet Protocol (IP) programs to
- manipulate IP and Ethernet addresses.
- Plan 9, by default, uses V6 format IP addresses. Since V4
- addresses fit into the V6 space, all IP addresses can be represented.
- IP addresses are stored as a string of 16
- .B unsigned
- .BR chars ,
- Ethernet
- addresses as 6
- .B unsigned
- .BR chars .
- Either V4 or V6 string representation can be used for IP addresses.
- For V4 addresses, the representation can be (up to) 4 decimal
- integers from 0 to 255 separated by periods.
- For V6 addresses, the representation is (up to) 8 hex integers
- from 0x0 to 0xFFFF separated by colons.
- Strings of 0 integers can be elided using two colons.
- For example,
- .B FFFF::1111
- is equivalent to
- .BR FFFF:0:0:0:0:0:0:1111 .
- The string representation for IP masks is a superset of the
- address representation. It includes slash notation that indicates
- the number of leading 1 bits in the mask. Thus, a
- V4 class C mask can be represented as
- .BR FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FF00 ,
- .BR 255.255.255.0 ,
- or
- .BR /120.
- The string representation of Ethernet addresses is exactly
- 12 hexadecimal digits.
- .PP
- .I Eipfmt
- is a
- .IR print (2)
- formatter for Ethernet (verb
- .BR E )
- addresses,
- IP V6 (verb
- .BR I )
- addresses,
- IP V4 (verb
- .BR V )
- addresses,
- and IP V6 (verb
- .BR M )
- masks.
- .PP
- .I Parseip
- converts a string pointed to by
- .I str
- to a 16-byte IP address starting at
- .IR ipaddr .
- As a concession to backwards compatibility,
- if the string is a V4 address, the return value
- is an unsigned long integer containing the big-endian V4 address.
- If not, the return value is 6.
- .I Parseipmask
- converts a string pointed to by
- .I str
- to a 6-byte IP mask starting at
- .IR ipaddr .
- It too returns an unsigned long big-endian V4 address or 6.
- Both routines return -1 on errors.
- .PP
- .I V4parseip
- converts a string pointed to by
- .I str
- to a 4-byte V4 IP address starting at
- .IR ipaddr .
- .PP
- .I V4parsecidr
- converts a string of the form
- addr/mask, pointed to by
- .IR str ,
- to a 4-byte V4 IP address starting at
- .I ipaddr
- and a 4-byte V4 IP mask starting at
- .IR mask .
- .PP
- .I Myipaddr
- returns the first valid IP address in
- the IP stack rooted at
- .IR net .
- .PP
- .I Parseether
- converts a string pointed to by
- .I str
- to a 6-byte Ethernet address starting at
- .IR eaddr .
- .I Myetheraddr
- reads the Ethernet address string from file
- .IB dev /addr
- and parses it into
- .IR eaddr .
- Both routines return a negative number on errors.
- .PP
- .I Maskip
- places the bit-wise AND of the IP addresses pointed
- to by its first two arguments into the buffer pointed
- to by the third.
- .PP
- .I Equivip
- returns non-zero if the IP addresses pointed to by its two
- arguments are equal.
- .I Equivip4
- operates on v4 addresses,
- .I equivip6
- operates on v6 addresses.
- .I Ipcmp
- is a macro that compares V6 addresses per
- .IR memcmp (2)).
- .PP
- .I Defmask
- returns the standard class A, B, or C mask for
- .IR ipaddr .
- .PP
- .I Isv4
- returns non-zero if the V6 address is in the V4 space, that is,
- if it starts with
- .BR 0:0:0:0:0:0:FFFF .
- .I V4tov6
- converts the 4-byte V4 address,
- .IR v4ip ,
- to a V6 address and puts the result in
- .IR v6ip .
- .I V6tov4
- converts the V6 address,
- .IR v6ip ,
- to a 4-byte V4 address and puts the result in
- .IR v4ip .
- .PP
- .IR Hnputs ,
- .I hnputl
- and
- .I hnputv
- are used to store 16-bit, 32-bit, and 64-bit integers, respectively, into IP big-endian form.
- .IR Nhgets ,
- .I nhgetl
- and
- .I nhgetv
- convert big-endian 2, 4 and 8 byte quantities into integers (or
- .IR uvlong s).
- .PP
- .I Pctlbsum
- returns the one's complement checksum used in IP protocols, typically invoked as
- .IP
- .EX
- hnputs(hdr->cksum, ~ptclbsum(data, len) & 0xffff);
- .EE
- .PP
- A number of standard IP addresses in V6 format are also defined. They are:
- .TF IPv4allrouter
- .TP
- .B IPv4bcast
- the V4 broadcast address
- .TP
- .B IPv4allsys
- the V4 all systems multicast address
- .TP
- .B IPv4allrouter
- the V4 all routers multicast address
- .TP
- .B IPallbits
- the V6 all bits on address
- .TP
- .B IPnoaddr
- the V6 null address, all zeros
- .TP
- .B v4prefix
- the IP V6 prefix to all embedded V4 addresses
- .PD
- .PP
- .I Readipifc
- returns information about
- a particular interface
- .RI ( index
- >= 0)
- or all IP interfaces
- .RI ( index
- < 0)
- configured under a mount point
- .IR net ,
- default
- .BR /net .
- Each interface is described by one
- .I Ipifc
- structure which in turn points to a linked list of
- .IR Iplifc
- structures describing the addresses assigned
- to this interface.
- If the list
- .IR ifc
- is supplied,
- that list is freed.
- Thus, subsequent calls can be used
- to free the list returned by the previous call.
- .I Ipifc
- is:
- .PP
- .EX
- typedef struct Ipifc
- {
- Ipifc *next;
- Iplifc *lifc; /* local addressses */
- /* per ip interface */
- int index; /* number of interface in ipifc dir */
- char dev[64]; /* associated physical device */
- int mtu; /* max transfer unit */
- uchar sendra6; /* on == send router adv */
- uchar recvra6; /* on == rcv router adv */
- ulong pktin; /* packets read */
- ulong pktout; /* packets written */
- ulong errin; /* read errors */
- ulong errout; /* write errors */
- Ipv6rp rp; /* route advertisement params */
- } Ipifc;
- .EE
- .PP
- .I Iplifc
- is:
- .PP
- .EX
- struct Iplifc
- {
- Iplifc *next;
- uchar ip[IPaddrlen];
- uchar mask[IPaddrlen];
- uchar net[IPaddrlen]; /* ip & mask */
- ulong preflt; /* preferred lifetime */
- ulong validlt; /* valid lifetime */
- };
- .EE
- .PP
- .I Ipv6rp
- is:
- .PP
- .EX
- struct Ipv6rp
- {
- int mflag;
- int oflag;
- int maxraint; /* max route adv interval */
- int minraint; /* min route adv interval */
- int linkmtu;
- int reachtime;
- int rxmitra;
- int ttl;
- int routerlt;
- };
- .EE
- .PP
- .I Dev
- contains the first 64 bytes of the device configured with this
- interface.
- .I Net
- is
- .IB ip & mask
- if the network is multipoint or
- the remote address if the network is
- point to point.
- .SH SOURCE
- .B /sys/src/libip
- .SH SEE ALSO
- .IR print (2),
- .IR ip (3)
|