glenda.party
term% ls -F
term% pwd
$home/manuals/plan9_4th/2/ip
term% cat index.txt
IP(2)                         System Calls Manual                        IP(2)

NAME
       eipfmt,  parseip, parseipmask, v4parseip, v4parsecidr, parseether, myi‐
       paddr, myetheraddr, maskip, equivip4, equivip6, ipcmp,  defmask,  isv4,
       v4tov6,  v6tov4, nhgetv, nhgetl, nhgets, hnputv, hnputl, hnputs, ptclb‐
       sum, readipifc - Internet Protocol addressing

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

       int  eipfmt(Fmt*)

       vlong     parseip(uchar *ipaddr, char *str)

       vlong     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  equivip4(uchar *ipaddr1, uchar *ipaddr2)

       int  equivip6(uchar *ipaddr1, uchar *ipaddr2)

       int  ipcmp(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];

DESCRIPTION
       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 in‐
       tegers 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,  255.255.255.0,  or /120.  The
       string representation of Ethernet addresses is exactly  12  hexadecimal
       digits.

       Eipfmt  is  a print(2) 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  ad‐
       dress 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
       net.

       Parseether converts a string pointed to by str to a 6-byte Ethernet ad‐
       dress starting at eaddr.  Myetheraddr reads the Ethernet address string
       from  file  dev/addr  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 ar‐
       guments are equal.  Equivip4 operates on v4 addresses,  equivip6  oper‐
       ates  on v6 addresses.  Ipcmp is a macro that compares V6 addresses per
       memcmp(2)).

       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  4-byte  V4  ad‐
       dress,  v4ip, to a V6 address and puts the result in v6ip.  V6tov4 con‐
       verts the V6 address, v6ip, to a 4-byte V4 address and puts the  result
       in v4ip.

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

       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
       are:

       IPv4bcast
              the V4 broadcast address

       IPv4allsys
              the V4 all systems multicast address

       IPv4allrouter
              the V4 all routers multicast address

       IPallbits
              the V6 all bits on address

       IPnoaddr
              the V6 null address, all zeros

       v4prefix
              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 ad‐
       dresses  assigned to this interface.  If the list ifc is supplied, that
       list is freed.  Thus, subsequent calls can be used to free the list re‐
       turned 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 */

            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  in‐
       terface.  Net is ip&mask if the network is multipoint or the remote ad‐
       dress if the network is point to point.

SOURCE
       /sys/src/libip

SEE ALSO
       print(2), ip(3)

                                                                         IP(2)