IP(2)                                                       IP(2)

     NAME
          eipconv, parseip, parseipmask, v4parseip, v4parsecidr,
          parseether, myipaddr, myetheraddr, maskip, equivip, defmask,
          isv4, v4tov6, v6tov4, nhgetl, nhgets, hnputl, hnputs,
          readipifc - Internet protocol

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

          int  eipconv(void *o, int f1, int f2, int f3, int chr)

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

          void hnputs(void *p, ushort v)

          void hnputl(void *p, uint v)

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

          uchar     IPv4bcast[IPaddrlen];

          uchar     IPv4allsys[IPaddrlen];

     Page 1                       Plan 9             (printed 3/28/24)

     IP(2)                                                       IP(2)

          uchar     IPv4allrouter[IPaddrlen];

          uchar     IPallbits[IPaddrlen];

          uchar     IPnoaddr[IPaddrlen];

          uchar     v4prefix[IPaddrlen];

     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 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 inte-
          gers 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, FFFF::1111 is equiva-
          lent 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 Ether-
          net addresses is exactly 12 hexadecimal digits.

          Eipconv 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 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.

          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 net/1/stats and parses it

     Page 2                       Plan 9             (printed 3/28/24)

     IP(2)                                                       IP(2)

          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 con-
          verts 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 and hnputl are used to store 16-bit and 32-bit inte-
          gers into IP big-endian form.  Nhgets and nhgetl convert
          big-endian 2 and 4 byte quantities into integers.

          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 updates the linked list of IP interfaces, ifc,
          with those currently configured under mountpoint net,
          default /net.  The new list is returned.  Ipifc is:

          typedef struct Ipifc
          {
               char dev[64];
               uchar     ip[IPaddrlen];

     Page 3                       Plan 9             (printed 3/28/24)

     IP(2)                                                       IP(2)

               uchar     mask[IPaddrlen];
               uchar     net[IPaddrlen];
               int  mtu;
               Ipifc     *next;
          } Ipifc;

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

     SOURCE
          /sys/src/libip

     SEE ALSO
          print(2)

     Page 4                       Plan 9             (printed 3/28/24)