henesyinit from p9fd787fda5 years agoHistory
335 lines · 6.8 KB · Text
RawDownload
.TH IP 2.SH NAMEeipfmt, parseip, parseipmask, v4parseip, v4parsecidr, parseether, myipaddr, myetheraddr, maskip, equivip, defmask, isv4, v4tov6, v6tov4, nhgetl, nhgets, hnputl, hnputs, ptclbsum, readipifc \- Internet protocol.SH SYNOPSIS.B #include <u.h>.br.B #include <libc.h>.br.B #include <ip.h>.PP.Bint	eipfmt(Fmt*).PP.Bulong	parseip(uchar *ipaddr, char *str).PP.Bulong	parseipmask(uchar *ipaddr, char *str).PP.Bchar*	v4parseip(uchar *ipaddr, char *str).PP.Bulong	v4parsecidr(uchar *addr, uchar *mask, char *str).PP.Bint	parseether(uchar *eaddr, char *str).PP.Bint	myetheraddr(uchar *eaddr, char *dev).PP.Bint	myipaddr(uchar *ipaddr, char *net).PP.Bvoid	maskip(uchar *from, uchar *mask, uchar *to).PP.Bint	equivip(uchar *ipaddr1, uchar *ipaddr2).PP.Buchar*	defmask(uchar *ipaddr).PP.Bint	isv4(uchar *ipaddr).PP.Bvoid	v4tov6(uchar *ipv6, uchar *ipv4).PP.Bvoid	v6tov4(uchar *ipv4, uchar *ipv6).PP.Bushort	nhgets(void *p).PP.Buint	nhgetl(void *p).PP.Bvoid	hnputs(void *p, ushort v).PP.Bvoid	hnputl(void *p, uint v).PP.Bushort	ptclbsum(uchar *a, int n).PP.BIpifc*	readipifc(char *net, Ipifc *ifc, int index).PP.Buchar	IPv4bcast[IPaddrlen];.PP.Buchar	IPv4allsys[IPaddrlen];.PP.Buchar	IPv4allrouter[IPaddrlen];.PP.Buchar	IPallbits[IPaddrlen];.PP.Buchar	IPnoaddr[IPaddrlen];.PP.Buchar	v4prefix[IPaddrlen];.SH DESCRIPTIONThese routines are used by Internet Protocol (IP) programs tomanipulate IP and Ethernet addresses.Plan 9, by default, uses V6 format IP addresses.  Since V4addresses fit into the V6 space, all IP addresses can be represented.IP addresses are stored as a string of 16.B unsigned.BR chars ,Ethernetaddresses 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 decimalintegers from 0 to 255 separated by periods.For V6 addresses, the representation is (up to) 8 hex integersfrom 0x0 to 0xFFFF separated by colons.Strings of 0 integers can be elided using two colons.For example,.B FFFF::1111is equivalent to.BR FFFF:0:0:0:0:0:0:1111 .The string representation for IP masks is a superset of theaddress representation.  It includes slash notation that indicatesthe number of leading 1 bits in the mask.  Thus, aV4 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 exactly12 hexadecimal digits..PP.I Eipfmtis 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 Parseipconverts a string pointed to by.I strto a 16-byte IP address starting at.IR ipaddr .As a concession to backwards compatibility,if the string is a V4 address, the return valueis an unsigned long integer containing the big-endian V4 address.If not, the return value is 6..I Parseipmaskconverts a string pointed to by.I strto 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 V4parseipconverts a string pointed to by.I strto a 4-byte V4 IP address starting at.IR ipaddr ..PP.I V4parsecidrconverts a string of the formaddr/mask, pointed to by.IR str ,to a 4-byte V4 IP address starting at.I ipaddrand a 4-byte V4 IP mask starting at.IR mask ..PP.I Myipaddrreturns the first valid IP address inthe IP stack rooted at.IR net ..PP.I Parseetherconverts a string pointed to by.I strto a 6-byte Ethernet address starting at.IR eaddr ..I Myetheraddrreads the Ethernet address string from file.IB dev /1/statsand parses it into.IR eaddr .Both routines return a negative number on errors..PP.I Maskipplaces the bit-wise AND of the IP addresses pointedto by its first two arguments into the buffer pointedto by the third..PP.I Equivipreturns non-zero if the IP addresses pointed to by its twoarguments are equal..PP.I Defmaskreturns the standard class A, B, or C mask for.IR ipaddr ..PP.I Isv4returns 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 V4tov6converts the V4 address,.IR v4ip ,to a V6 address and puts the result in.IR v6ip ..I V6tov4converts the V6 address,.IR v6ip ,to a V4 address and puts the result in.IR v4ip ..PP.I Hnputsand.I hnputlare used to store 16-bit and 32-bit integers into IP big-endian form..I Nhgetsand.I nhgetlconvert big-endian 2 and 4 byte quantities into integers..PP.I Pctlbsumreturns the one's complement checksum used in IP protocols, typically invoked as.EXhnputs(hdr->cksum, ~ptclbsum(data, len) & 0xffff);.EE.PPA number of standard IP addresses in V6 format are also defined.  Theyare:.IP \f5IPv4bcastthe V4 broadcast address.IP \f5IPv4allsysthe V4 all systems multicast address.IP \f5IPv4allrouterthe V4 all routers multicast address.IP \f5IPallbitsthe V6 all bits on address.IP \f5IPnoaddrthe V6 null address, all zeros.IP \f5v4prefixthe IP V6 prefix to all embedded V4 addresses.PP.I Readipifcreturns information abouta particular interface  (\fIindex\fP >= 0)or all IP interfaces (\fIindex\fP < 0)configured under amount point.IR net ,default.BR /net .Each interface is described by one.I Ipifcstructure which in turn points to a linked list of.IR Iplifcstructures describing the addresses assignedto this interface.If the list.IR ifcis supplied,that list is freed.Thus, subsequent calls can be usedto free the list returned by the previous call..I Ipifcis:.PP.EXtypedef 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 */ 	long	validlt;	/* valid life time */ 	long	preflt;		/* preferred life time */	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 Iplifcis:.PP.EXstruct 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 Ipv6rpis: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;	};.PP.I Devcontains the first 64 bytes of the device configured with thisinterface..I Netis.IB ip & maskif the network is multipoint orthe remote address if the network ispoint to point..SH SOURCE.B /sys/src/libip.SH SEE ALSO.IR print (2)