ipv6.h - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       ipv6.h (4530B)
       ---
            1 /*
            2  * Internet Protocol Version 6
            3  *
            4  * rfc2460 defines the protocol, rfc2461 neighbour discovery, and
            5  * rfc2462 address autoconfiguration.  rfc4443 defines ICMP; was rfc2463.
            6  * rfc4291 defines the address architecture (including prefices), was rfc3513.
            7  * rfc4007 defines the scoped address architecture.
            8  *
            9  * global unicast is anything but unspecified (::), loopback (::1),
           10  * multicast (ff00::/8), and link-local unicast (fe80::/10).
           11  *
           12  * site-local (fec0::/10) is now deprecated, originally by rfc3879.
           13  *
           14  * Unique Local IPv6 Unicast Addresses are defined by rfc4193.
           15  * prefix is fc00::/7, scope is global, routing is limited to roughly a site.
           16  */
           17 #define isv6mcast(addr)          ((addr)[0] == 0xff)
           18 #define islinklocal(addr) ((addr)[0] == 0xfe && ((addr)[1] & 0xc0) == 0x80)
           19 
           20 #define optexsts(np)        (nhgets((np)->ploadlen) > 24)
           21 #define issmcast(addr)        (memcmp((addr), v6solicitednode, 13) == 0)
           22 
           23 #ifndef MIN
           24 #define MIN(a, b) ((a) <= (b)? (a): (b))
           25 #endif
           26 
           27 #undef ESP
           28 
           29 enum {                                /* Header Types */
           30         HBH                = 0,        /* hop-by-hop multicast routing protocol */
           31         ICMP                = 1,
           32         IGMP                = 2,
           33         GGP                = 3,
           34         IPINIP                = 4,
           35         ST                = 5,
           36         TCP                = 6,
           37         UDP                = 17,
           38         ISO_TP4                = 29,
           39         RH                = 43,
           40         FH                = 44,
           41         IDRP                = 45,
           42         RSVP                = 46,
           43         AH                = 51,
           44         ESP                = 52,
           45         ICMPv6                = 58,
           46         NNH                = 59,
           47         DOH                = 60,
           48         ISO_IP                = 80,
           49         IGRP                = 88,
           50         OSPF                = 89,
           51 
           52         Maxhdrtype        = 256,
           53 };
           54 
           55 enum {
           56         /* multicast flags and scopes */
           57 
           58 //        Well_known_flg        = 0,
           59 //        Transient_flg        = 1,
           60 
           61 //        Interface_local_scop = 1,
           62         Link_local_scop        = 2,
           63 //        Site_local_scop        = 5,
           64 //        Org_local_scop        = 8,
           65         Global_scop        = 14,
           66 
           67         /* various prefix lengths */
           68         SOLN_PREF_LEN        = 13,
           69 
           70         /* icmpv6 unreachability codes */
           71         Icmp6_no_route                = 0,
           72         Icmp6_ad_prohib                = 1,
           73         Icmp6_out_src_scope        = 2,
           74         Icmp6_adr_unreach        = 3,
           75         Icmp6_port_unreach        = 4,
           76         Icmp6_gress_src_fail        = 5,
           77         Icmp6_rej_route                = 6,
           78         Icmp6_unknown                = 7,  /* our own invention for internal use */
           79 
           80         /* various flags & constants */
           81         v6MINTU                = 1280,
           82         HOP_LIMIT        = 255,
           83         IP6HDR                = 20,                /* sizeof(Ip6hdr) */
           84 
           85         /* option types */
           86 
           87         /* neighbour discovery */
           88         SRC_LLADDR        = 1,
           89         TARGET_LLADDR        = 2,
           90         PREFIX_INFO        = 3,
           91         REDIR_HEADER        = 4,
           92         MTU_OPTION        = 5,
           93         /* new since rfc2461; see iana.org/assignments/icmpv6-parameters */
           94         V6nd_home        = 8,
           95         V6nd_srcaddrs        = 9,                /* rfc3122 */
           96         V6nd_ip                = 17,
           97         /* /lib/rfc/drafts/draft-jeong-dnsop-ipv6-dns-discovery-12.txt */
           98         V6nd_rdns        = 25,
           99         /* plan 9 extensions */
          100         V6nd_9fs        = 250,
          101         V6nd_9auth        = 251,
          102 
          103         SRC_UNSPEC        = 0,
          104         SRC_UNI                = 1,
          105         TARG_UNI        = 2,
          106         TARG_MULTI        = 3,
          107 
          108         Tunitent        = 1,
          109         Tuniproxy        = 2,
          110         Tunirany        = 3,
          111 
          112         /* Node constants */
          113         MAX_MULTICAST_SOLICIT        = 3,
          114         RETRANS_TIMER                = 1000,
          115 };
          116 
          117 typedef struct Ip6hdr        Ip6hdr;
          118 typedef struct Opthdr        Opthdr;
          119 typedef struct Routinghdr Routinghdr;
          120 typedef struct Fraghdr6        Fraghdr6;
          121 
          122 struct        Ip6hdr {
          123         uchar        vcf[4];                /* version:4, traffic class:8, flow label:20 */
          124         uchar        ploadlen[2];        /* payload length: packet length - 40 */
          125         uchar        proto;                /* next header type */
          126         uchar        ttl;                /* hop limit */
          127         uchar        src[IPaddrlen];
          128         uchar        dst[IPaddrlen];
          129 };
          130 
          131 struct        Opthdr {
          132         uchar        nexthdr;
          133         uchar        len;
          134 };
          135 
          136 /*
          137  * Beware routing header type 0 (loose source routing); see
          138  * http://www.secdev.org/conf/IPv6_RH_security-csw07.pdf.
          139  * Type 1 is unused.  Type 2 is for MIPv6 (mobile IPv6) filtering
          140  * against type 0 header.
          141  */
          142 struct        Routinghdr {
          143         uchar        nexthdr;
          144         uchar        len;
          145         uchar        rtetype;
          146         uchar        segrem;
          147 };
          148 
          149 struct        Fraghdr6 {
          150         uchar        nexthdr;
          151         uchar        res;
          152         uchar        offsetRM[2];        /* Offset, Res, M flag */
          153         uchar        id[4];
          154 };
          155 
          156 extern uchar v6allnodesN[IPaddrlen];
          157 extern uchar v6allnodesL[IPaddrlen];
          158 extern uchar v6allroutersN[IPaddrlen];
          159 extern uchar v6allroutersL[IPaddrlen];
          160 extern uchar v6allnodesNmask[IPaddrlen];
          161 extern uchar v6allnodesLmask[IPaddrlen];
          162 extern uchar v6solicitednode[IPaddrlen];
          163 extern uchar v6solicitednodemask[IPaddrlen];
          164 extern uchar v6Unspecified[IPaddrlen];
          165 extern uchar v6loopback[IPaddrlen];
          166 extern uchar v6loopbackmask[IPaddrlen];
          167 extern uchar v6linklocal[IPaddrlen];
          168 extern uchar v6linklocalmask[IPaddrlen];
          169 extern uchar v6multicast[IPaddrlen];
          170 extern uchar v6multicastmask[IPaddrlen];
          171 
          172 extern int v6llpreflen;
          173 extern int v6mcpreflen;
          174 extern int v6snpreflen;
          175 extern int v6aNpreflen;
          176 extern int v6aLpreflen;
          177 
          178 extern int ReTransTimer;
          179 
          180 void ipv62smcast(uchar *, uchar *);
          181 void icmpns(Fs *f, uchar* src, int suni, uchar* targ, int tuni, uchar* mac);
          182 void icmpna(Fs *f, uchar* src, uchar* dst, uchar* targ, uchar* mac, uchar flags);
          183 void icmpttlexceeded6(Fs *f, Ipifc *ifc, Block *bp);
          184 void icmppkttoobig6(Fs *f, Ipifc *ifc, Block *bp);
          185 void icmphostunr(Fs *f, Ipifc *ifc, Block *bp, int code, int free);