ip.h - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       ip.h (3281B)
       ---
            1 
            2 enum 
            3 {
            4         IPaddrlen=        16,
            5         IPv4addrlen=        4,
            6         IPv4off=        12,
            7         IPllen=                4,
            8         IPV4HDR_LEN=        20,
            9 
           10         /* vihl & vcf[0] values */
           11         IP_VER4=         0x40,
           12         IP_VER6=        0x60,
           13 };
           14 
           15 #define ISIPV6MCAST(addr)        ((addr)[0] == 0xff)
           16 #define ISIPV6LINKLOCAL(addr) ((addr)[0] == 0xfe && ((addr)[1] & 0xc0) == 0x80)
           17 
           18 /*
           19  * ipv6 constants
           20  * `ra' is `router advertisement', `rs' is `router solicitation'.
           21  * `na' is `neighbour advertisement'.
           22  */
           23 enum {
           24         IPV6HDR_LEN        = 40,
           25 
           26         /* neighbour discovery option types */
           27         V6nd_srclladdr        = 1,
           28         V6nd_targlladdr        = 2,
           29         V6nd_pfxinfo        = 3,
           30         V6nd_redirhdr        = 4,
           31         V6nd_mtu        = 5,
           32         /* new since rfc2461; see iana.org/assignments/icmpv6-parameters */
           33         V6nd_home        = 8,
           34         V6nd_srcaddrs        = 9,                /* rfc3122 */
           35         V6nd_ip                = 17,
           36         /* /lib/rfc/drafts/draft-jeong-dnsop-ipv6-dns-discovery-12.txt */
           37         V6nd_rdns        = 25,
           38         /* plan 9 extensions */
           39         V6nd_9fs        = 250,
           40         V6nd_9auth        = 251,
           41 
           42         /* Router constants (all times in ms.) */
           43         Maxv6initraintvl= 16000,
           44         Maxv6initras        = 3,
           45         Maxv6finalras        = 3,
           46         Minv6interradelay= 3000,
           47         Maxv6radelay        = 500,
           48 
           49         /* Host constants */
           50         Maxv6rsdelay        = 1000,
           51         V6rsintvl        = 4000,
           52         Maxv6rss        = 3,
           53 
           54         /* Node constants */
           55         Maxv6mcastrss        = 3,
           56         Maxv6unicastrss        = 3,
           57         Maxv6anycastdelay= 1000,
           58         Maxv6na                = 3,
           59         V6reachabletime        = 30000,
           60         V6retranstimer        = 1000,
           61         V6initprobedelay= 5000,
           62 };
           63 
           64 /* V6 header on the wire */
           65 typedef struct Ip6hdr Ip6hdr;
           66 struct Ip6hdr {
           67         uchar        vcf[4];                /* version:4, traffic class:8, flow label:20 */
           68         uchar        ploadlen[2];        /* payload length: packet length - 40 */
           69         uchar        proto;                /* next header type */
           70         uchar        ttl;                /* hop limit */
           71         uchar        src[IPaddrlen];        /* source address */
           72         uchar        dst[IPaddrlen];        /* destination address */
           73         uchar        payload[];
           74 };
           75 
           76 /*
           77  *  user-level icmpv6 with control message "headers"
           78  */
           79 typedef struct Icmp6hdr Icmp6hdr;
           80 struct Icmp6hdr {
           81         uchar        _0_[8];
           82         uchar        laddr[IPaddrlen];        /* local address */
           83         uchar        raddr[IPaddrlen];        /* remote address */
           84 };
           85 
           86 /*
           87  *  user level udp headers with control message "headers"
           88  */
           89 enum 
           90 {
           91         Udphdrsize=        52,        /* size of a Udphdr */
           92 };
           93 
           94 typedef struct Udphdr Udphdr;
           95 struct Udphdr
           96 {
           97         uchar        raddr[IPaddrlen];        /* V6 remote address */
           98         uchar        laddr[IPaddrlen];        /* V6 local address */
           99         uchar        ifcaddr[IPaddrlen];        /* V6 ifc addr msg was received on */
          100         uchar        rport[2];                /* remote port */
          101         uchar        lport[2];                /* local port */
          102 };
          103 
          104 uchar*        defmask(uchar*);
          105 void        maskip(uchar*, uchar*, uchar*);
          106 int        eipfmt(Fmt*);
          107 int        isv4(uchar*);
          108 vlong        parseip(uchar*, char*);
          109 vlong        parseipmask(uchar*, char*);
          110 char*        v4parseip(uchar*, char*);
          111 char*        v4parsecidr(uchar*, uchar*, char*);
          112 int        parseether(uchar*, char*);
          113 int        myipaddr(uchar*, char*);
          114 int        myetheraddr(uchar*, char*);
          115 int        equivip4(uchar*, uchar*);
          116 int        equivip6(uchar*, uchar*);
          117 
          118 void        hnputv(void*, uvlong);
          119 void        hnputl(void*, uint);
          120 void        hnputs(void*, ushort);
          121 uvlong        nhgetv(void*);
          122 uint        nhgetl(void*);
          123 ushort        nhgets(void*);
          124 ushort        ptclbsum(uchar*, int);
          125 
          126 int        v6tov4(uchar*, uchar*);
          127 void        v4tov6(uchar*, uchar*);
          128 
          129 #define        ipcmp(x, y) memcmp(x, y, IPaddrlen)
          130 #define        ipmove(x, y) memmove(x, y, IPaddrlen)
          131 
          132 extern uchar IPv4bcast[IPaddrlen];
          133 extern uchar IPv4bcastobs[IPaddrlen];
          134 extern uchar IPv4allsys[IPaddrlen];
          135 extern uchar IPv4allrouter[IPaddrlen];
          136 extern uchar IPnoaddr[IPaddrlen];
          137 extern uchar v4prefix[IPaddrlen];
          138 extern uchar IPallbits[IPaddrlen];
          139 
          140 #define CLASS(p) ((*(uchar*)(p))>>6)
          141