Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
IP(3)									 IP(3)

       eipfmt,	parseip, parseipmask, v4parseip, v4parsecidr, parseether, myi-
       paddr, myetheraddr, maskip, equivip,  defmask,  isv4,  v4tov6,  v6tov4,
       nhgetl,	nhgets,	 nhgetv, hnputl, hnputs, hnputv, ptclbsum, readipifc -
       Internet	protocol

       #include	<u.h>
       #include	<libc.h>
       #include	<ip.h>

       int  eipfmt(Fmt*)

       ulong	 parseip(uchar *ipaddr,	char *str)

       ulong	 parseipmask(uchar *ipaddr, char *str)

       char*	 v4parseip(uchar *ipaddr, char *str)

       ulong	 v4parsecidr(uchar *addr, uchar	*mask, char *str)

       int  parseether(uchar *eaddr, char *str)

       int  myetheraddr(uchar *eaddr, char *dev)

       int  myipaddr(uchar *ipaddr, char *net)

       void maskip(uchar *from,	uchar *mask, uchar *to)

       int  equivip(uchar *ipaddr1, uchar *ipaddr2)

       uchar*	 defmask(uchar *ipaddr)

       int  isv4(uchar *ipaddr)

       void v4tov6(uchar *ipv6,	uchar *ipv4)

       void v6tov4(uchar *ipv4,	uchar *ipv6)

       ushort	 nhgets(void *p)

       uint nhgetl(void	*p)

       uvlong	 nhgetv(void *p)

       void hnputs(void	*p, ushort v)

       void hnputl(void	*p, uint v)

       void hnputv(void	*p, uvlong v)

       ushort	 ptclbsum(uchar	*a, int	n)

       Ipifc*	 readipifc(char	*net, Ipifc *ifc, int index)

       uchar	 IPv4bcast[IPaddrlen];

       uchar	 IPv4allsys[IPaddrlen];

       uchar	 IPv4allrouter[IPaddrlen];

       uchar	 IPallbits[IPaddrlen];

       uchar	 IPnoaddr[IPaddrlen];

       uchar	 v4prefix[IPaddrlen];

       These routines are used by Internet Protocol (IP) programs  to  manipu-
       late  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 unsigned
       chars, Ethernet addresses as 6 unsigned 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	 sepa-
       rated  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, FFFF::1111 is
       equivalent to 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
       FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FF00,, or  /120.   The
       string  representation  of Ethernet addresses is	exactly	12 hexadecimal

       Eipfmt is a print(3) formatter for Ethernet (verb E) addresses,	IP  V6
       (verb I)	addresses, IP V4 (verb V) addresses, and IP V6 (verb M)	masks.

       Parseip converts	a string pointed to by str to  a  16-byte  IP  address
       starting	at 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.
       Parseipmask converts a string pointed to	by str to  a  6-byte  IP  mask
       starting	 at  ipaddr.   It  too	returns	an unsigned long big-endian V4
       address or 6.  Both routines return -1 on errors.

       V4parseip converts a string pointed to by str to	a 4-byte V4 IP address
       starting	at ipaddr.

       V4parsecidr converts a string of	the form addr/mask, pointed to by str,
       to a 4-byte V4 IP address starting at ipaddr and	a 4-byte  V4  IP  mask
       starting	at mask.

       Myipaddr	 returns  the first valid IP address in	the IP stack rooted at

       Parseether converts a string pointed to by str  to  a  6-byte  Ethernet
       address	starting  at  eaddr.   Myetheraddr  reads the Ethernet address
       string from file	dev/1/stats and	parses it into eaddr.	Both  routines
       return a	negative number	on errors.

       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.

       Equivip returns non-zero	if the IP addresses  pointed  to  by  its  two
       arguments are equal.

       Defmask returns the standard class A, B,	or C mask for ipaddr.

       Isv4 returns non-zero if	the V6 address is in the V4 space, that	is, if
       it starts with 0:0:0:0:0:0:FFFF.	 V4tov6	converts the V4	address, v4ip,
       to  a  V6  address and puts the result in v6ip.	V6tov4 converts	the V6
       address,	v6ip, to a V4 address and puts the result in v4ip.

       Hnputs, hnputl, and hnputv are used to store 16-, 32-, and 64-bit inte-
       gers  into IP big-endian	form.  Nhgets, nhgetl, and nhgetv convert big-
       endian 2-, 4-, and 8-byte quantities into integers.

       Pctlbsum	returns	the one's complement checksum used  in	IP  protocols,
       typically invoked as hnputs(hdr->cksum, ~ptclbsum(data, len) & 0xffff);

       A number	of standard IP addresses in V6 format are also defined.	  They

	      the V4 broadcast address

	      the V4 all systems multicast address

	      the V4 all routers multicast address

	      the V6 all bits on address

	      the V6 null address, all zeros

	      the IP V6	prefix to all embedded V4 addresses

       Readipifc  returns  information about a particular interface  (index >=
       0) or all IP interfaces (index <	0) configured under a mount point net,
       default /net.  Each interface is	described by one Ipifc structure which
       in turn points to a linked list of  Iplifc  structures  describing  the
       addresses  assigned  to	this  interface.  If the list ifc is supplied,
       that list is freed.  Thus, subsequent calls can be  used	 to  free  the
       list returned by	the previous call.  Ipifc is:

       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	*/

	    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;

       Iplifc is:

       struct Iplifc {	    Iplifc    *next;

	    uchar     ip[IPaddrlen];		    uchar     mask[IPaddrlen];
	    uchar     net[IPaddrlen];	       /*     ip     &	   mask	    */
	    ulong     preflt;		  /*	 preferred     lifetime	    */
	    ulong     validlt;	     /*	valid lifetime */ };

       Ipv6rp  is:  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;  };

       Dev contains the	first 64 bytes of  the	device	configured  with  this
       interface.   Net	 is ip&mask if the network is multipoint or the	remote
       address if the network is point to point.





Want to link to this manual page? Use this URL:

home | help