[BACK]Return to ip6_var.h CVS log [TXT][DIR] Up to [local] / sys / netinet6

Annotation of sys/netinet6/ip6_var.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: ip6_var.h,v 1.31 2007/06/01 00:52:38 henning Exp $    */
        !             2: /*     $KAME: ip6_var.h,v 1.33 2000/06/11 14:59:20 jinmei Exp $        */
        !             3:
        !             4: /*
        !             5:  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * Redistribution and use in source and binary forms, with or without
        !             9:  * modification, are permitted provided that the following conditions
        !            10:  * are met:
        !            11:  * 1. Redistributions of source code must retain the above copyright
        !            12:  *    notice, this list of conditions and the following disclaimer.
        !            13:  * 2. Redistributions in binary form must reproduce the above copyright
        !            14:  *    notice, this list of conditions and the following disclaimer in the
        !            15:  *    documentation and/or other materials provided with the distribution.
        !            16:  * 3. Neither the name of the project nor the names of its contributors
        !            17:  *    may be used to endorse or promote products derived from this software
        !            18:  *    without specific prior written permission.
        !            19:  *
        !            20:  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
        !            21:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            22:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            23:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
        !            24:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            25:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            26:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            27:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            28:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            29:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            30:  * SUCH DAMAGE.
        !            31:  */
        !            32:
        !            33: /*
        !            34:  * Copyright (c) 1982, 1986, 1993
        !            35:  *     The Regents of the University of California.  All rights reserved.
        !            36:  *
        !            37:  * Redistribution and use in source and binary forms, with or without
        !            38:  * modification, are permitted provided that the following conditions
        !            39:  * are met:
        !            40:  * 1. Redistributions of source code must retain the above copyright
        !            41:  *    notice, this list of conditions and the following disclaimer.
        !            42:  * 2. Redistributions in binary form must reproduce the above copyright
        !            43:  *    notice, this list of conditions and the following disclaimer in the
        !            44:  *    documentation and/or other materials provided with the distribution.
        !            45:  * 3. Neither the name of the University nor the names of its contributors
        !            46:  *    may be used to endorse or promote products derived from this software
        !            47:  *    without specific prior written permission.
        !            48:  *
        !            49:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            50:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            51:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            52:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            53:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            54:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            55:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            56:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            57:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            58:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            59:  * SUCH DAMAGE.
        !            60:  *
        !            61:  *     @(#)ip_var.h    8.1 (Berkeley) 6/10/93
        !            62:  */
        !            63:
        !            64: #ifndef _NETINET6_IP6_VAR_H_
        !            65: #define _NETINET6_IP6_VAR_H_
        !            66:
        !            67: /*
        !            68:  * IP6 reassembly queue structure.  Each fragment
        !            69:  * being reassembled is attached to one of these structures.
        !            70:  */
        !            71: struct ip6q {
        !            72:        u_int32_t       ip6q_head;
        !            73:        u_int16_t       ip6q_len;
        !            74:        u_int8_t        ip6q_nxt;       /* ip6f_nxt in first fragment */
        !            75:        u_int8_t        ip6q_hlim;
        !            76:        struct ip6asfrag *ip6q_down;
        !            77:        struct ip6asfrag *ip6q_up;
        !            78:        u_int32_t       ip6q_ident;
        !            79:        u_int8_t        ip6q_arrive;
        !            80:        u_int8_t        ip6q_ttl;
        !            81:        struct in6_addr ip6q_src, ip6q_dst;
        !            82:        struct ip6q     *ip6q_next;
        !            83:        struct ip6q     *ip6q_prev;
        !            84:        int             ip6q_unfrglen;  /* len of unfragmentable part */
        !            85: #ifdef notyet
        !            86:        u_char          *ip6q_nxtp;
        !            87: #endif
        !            88:        int             ip6q_nfrag;     /* # of fragments */
        !            89: };
        !            90:
        !            91: struct ip6asfrag {
        !            92:        u_int32_t       ip6af_head;
        !            93:        u_int16_t       ip6af_len;
        !            94:        u_int8_t        ip6af_nxt;
        !            95:        u_int8_t        ip6af_hlim;
        !            96:        /* must not override the above members during reassembling */
        !            97:        struct ip6asfrag *ip6af_down;
        !            98:        struct ip6asfrag *ip6af_up;
        !            99:        struct mbuf     *ip6af_m;
        !           100:        int             ip6af_offset;   /* offset in ip6af_m to next header */
        !           101:        int             ip6af_frglen;   /* fragmentable part length */
        !           102:        int             ip6af_off;      /* fragment offset */
        !           103:        u_int16_t       ip6af_mff;      /* more fragment bit in frag off */
        !           104: };
        !           105:
        !           106: #define IP6_REASS_MBUF(ip6af) ((ip6af)->ip6af_m)
        !           107:
        !           108: struct ip6_moptions {
        !           109:        struct  ifnet *im6o_multicast_ifp; /* ifp for outgoing multicasts */
        !           110:        u_char  im6o_multicast_hlim;    /* hoplimit for outgoing multicasts */
        !           111:        u_char  im6o_multicast_loop;    /* 1 >= hear sends if a member */
        !           112:        LIST_HEAD(, in6_multi_mship) im6o_memberships;
        !           113: };
        !           114:
        !           115: /*
        !           116:  * Control options for outgoing packets
        !           117:  */
        !           118:
        !           119: /* Routing header related info */
        !           120: struct ip6po_rhinfo {
        !           121:        struct  ip6_rthdr *ip6po_rhi_rthdr; /* Routing header */
        !           122:        struct  route_in6 ip6po_rhi_route; /* Route to the 1st hop */
        !           123: };
        !           124: #define ip6po_rthdr    ip6po_rhinfo.ip6po_rhi_rthdr
        !           125: #define ip6po_route    ip6po_rhinfo.ip6po_rhi_route
        !           126:
        !           127: /* Nexthop related info */
        !           128: struct ip6po_nhinfo {
        !           129:        struct sockaddr *ip6po_nhi_nexthop;
        !           130:        struct route_in6 ip6po_nhi_route;
        !           131: };
        !           132: #define ip6po_nexthop  ip6po_nhinfo.ip6po_nhi_nexthop
        !           133: #define ip6po_nextroute        ip6po_nhinfo.ip6po_nhi_route
        !           134:
        !           135: struct ip6_pktopts {
        !           136:        /* Hoplimit for outgoing packets */
        !           137:        int     ip6po_hlim;
        !           138:
        !           139:        /* Outgoing IF/address information */
        !           140:        struct in6_pktinfo *ip6po_pktinfo;
        !           141:
        !           142:        /* Next-hop address information */
        !           143:        struct  ip6po_nhinfo ip6po_nhinfo;
        !           144:
        !           145:        /* Hop-by-Hop options header */
        !           146:        struct  ip6_hbh *ip6po_hbh;
        !           147:
        !           148:        /* Destination options header (before a routing header) */
        !           149:        struct  ip6_dest *ip6po_dest1;
        !           150:
        !           151:        /* Routing header related info. */
        !           152:        struct  ip6po_rhinfo ip6po_rhinfo;
        !           153:
        !           154:        /* Destination options header (after a routing header) */
        !           155:        struct  ip6_dest *ip6po_dest2;
        !           156:
        !           157:        /* traffic class */
        !           158:        int     ip6po_tclass;
        !           159:
        !           160:        /* fragment vs PMTU discovery policy */
        !           161:        int     ip6po_minmtu;
        !           162: #define IP6PO_MINMTU_MCASTONLY -1 /* default: send at min MTU for multicast */
        !           163: #define IP6PO_MINMTU_DISABLE   0  /* always perform pmtu disc */
        !           164: #define IP6PO_MINMTU_ALL       1  /* always send at min MTU */
        !           165:
        !           166:        int     ip6po_flags;
        !           167: #define        IP6PO_DONTFRAG  0x04    /* disable fragmentation (IPV6_DONTFRAG) */
        !           168: };
        !           169:
        !           170: struct ip6stat {
        !           171:        u_int64_t ip6s_total;           /* total packets received */
        !           172:        u_int64_t ip6s_tooshort;        /* packet too short */
        !           173:        u_int64_t ip6s_toosmall;        /* not enough data */
        !           174:        u_int64_t ip6s_fragments;       /* fragments received */
        !           175:        u_int64_t ip6s_fragdropped;     /* frags dropped(dups, out of space) */
        !           176:        u_int64_t ip6s_fragtimeout;     /* fragments timed out */
        !           177:        u_int64_t ip6s_fragoverflow;    /* fragments that exceeded limit */
        !           178:        u_int64_t ip6s_forward;         /* packets forwarded */
        !           179:        u_int64_t ip6s_cantforward;     /* packets rcvd for unreachable dest */
        !           180:        u_int64_t ip6s_redirectsent;    /* packets forwarded on same net */
        !           181:        u_int64_t ip6s_delivered;       /* datagrams delivered to upper level*/
        !           182:        u_int64_t ip6s_localout;        /* total ip packets generated here */
        !           183:        u_int64_t ip6s_odropped;        /* lost packets due to nobufs, etc. */
        !           184:        u_int64_t ip6s_reassembled;     /* total packets reassembled ok */
        !           185:        u_int64_t ip6s_fragmented;      /* datagrams successfully fragmented */
        !           186:        u_int64_t ip6s_ofragments;      /* output fragments created */
        !           187:        u_int64_t ip6s_cantfrag;        /* don't fragment flag was set, etc. */
        !           188:        u_int64_t ip6s_badoptions;      /* error in option processing */
        !           189:        u_int64_t ip6s_noroute;         /* packets discarded due to no route */
        !           190:        u_int64_t ip6s_badvers;         /* ip6 version != 6 */
        !           191:        u_int64_t ip6s_rawout;          /* total raw ip packets generated */
        !           192:        u_int64_t ip6s_badscope;        /* scope error */
        !           193:        u_int64_t ip6s_notmember;       /* don't join this multicast group */
        !           194:        u_int64_t ip6s_nxthist[256];    /* next header history */
        !           195:        u_int64_t ip6s_m1;              /* one mbuf */
        !           196:        u_int64_t ip6s_m2m[32];         /* two or more mbuf */
        !           197:        u_int64_t ip6s_mext1;           /* one ext mbuf */
        !           198:        u_int64_t ip6s_mext2m;          /* two or more ext mbuf */
        !           199:        u_int64_t ip6s_exthdrtoolong;   /* ext hdr are not continuous */
        !           200:        u_int64_t ip6s_nogif;           /* no match gif found */
        !           201:        u_int64_t ip6s_toomanyhdr;      /* discarded due to too many headers */
        !           202:
        !           203:        /*
        !           204:         * statistics for improvement of the source address selection
        !           205:         * algorithm:
        !           206:         * XXX: hardcoded 16 = # of ip6 multicast scope types + 1
        !           207:         */
        !           208:        /* number of times that address selection fails */
        !           209:        u_int64_t ip6s_sources_none;
        !           210:        /* number of times that an address on the outgoing I/F is chosen */
        !           211:        u_int64_t ip6s_sources_sameif[16];
        !           212:        /* number of times that an address on a non-outgoing I/F is chosen */
        !           213:        u_int64_t ip6s_sources_otherif[16];
        !           214:        /*
        !           215:         * number of times that an address that has the same scope
        !           216:         * from the destination is chosen.
        !           217:         */
        !           218:        u_int64_t ip6s_sources_samescope[16];
        !           219:        /*
        !           220:         * number of times that an address that has a different scope
        !           221:         * from the destination is chosen.
        !           222:         */
        !           223:        u_int64_t ip6s_sources_otherscope[16];
        !           224:        /* number of times that an deprecated address is chosen */
        !           225:        u_int64_t ip6s_sources_deprecated[16];
        !           226:
        !           227:        u_int64_t ip6s_forward_cachehit;
        !           228:        u_int64_t ip6s_forward_cachemiss;
        !           229: };
        !           230:
        !           231: #ifdef _KERNEL
        !           232: /* flags passed to ip6_output as last parameter */
        !           233: #define        IPV6_UNSPECSRC          0x01    /* allow :: as the source address */
        !           234: #define        IPV6_FORWARDING         0x02    /* most of IPv6 header exists */
        !           235: #define        IPV6_MINMTU             0x04    /* use minimum MTU (IPV6_USE_MIN_MTU) */
        !           236:
        !           237: extern struct  ip6stat ip6stat;        /* statistics */
        !           238: extern int     ip6_defhlim;            /* default hop limit */
        !           239: extern int     ip6_defmcasthlim;       /* default multicast hop limit */
        !           240: extern int     ip6_forwarding;         /* act as router? */
        !           241: extern int     ip6_mforwarding;        /* act as multicast router? */
        !           242: extern int     ip6_multipath;          /* use multipath routes */
        !           243: extern int     ip6_sendredirect;       /* send ICMPv6 redirect? */
        !           244: extern int     ip6_forward_srcrt;      /* forward src-routed? */
        !           245: extern int     ip6_use_deprecated;     /* allow deprecated addr as source */
        !           246: extern int     ip6_rr_prune;           /* router renumbering prefix
        !           247:                                         * walk list every 5 sec.    */
        !           248: extern int     ip6_mcast_pmtu;         /* path MTU discovery for multicast */
        !           249: extern const int       ip6_v6only;
        !           250:
        !           251: extern struct socket *ip6_mrouter;     /* multicast routing daemon */
        !           252: extern int     ip6_sendredirects;      /* send IP redirects when forwarding? */
        !           253: extern int     ip6_maxfragpackets; /* Maximum packets in reassembly queue */
        !           254: extern int     ip6_maxfrags;   /* Maximum fragments in reassembly queue */
        !           255: extern int     ip6_sourcecheck;        /* Verify source interface */
        !           256: extern int     ip6_sourcecheck_interval; /* Interval between log messages */
        !           257: extern int     ip6_accept_rtadv;       /* Acts as a host not a router */
        !           258: extern int     ip6_keepfaith;          /* Firewall Aided Internet Translator */
        !           259: extern int     ip6_log_interval;
        !           260: extern time_t  ip6_log_time;
        !           261: extern int     ip6_hdrnestlimit; /* upper limit of # of extension headers */
        !           262: extern int     ip6_dad_count;          /* DupAddrDetectionTransmits */
        !           263:
        !           264: extern int ip6_auto_flowlabel;
        !           265: extern int ip6_auto_linklocal;
        !           266:
        !           267: struct in6pcb;
        !           268: struct inpcb;
        !           269:
        !           270: int    icmp6_ctloutput(int, struct socket *, int, int, struct mbuf **);
        !           271:
        !           272: void   ip6_init(void);
        !           273: void   ip6intr(void);
        !           274: void   ip6_input(struct mbuf *);
        !           275: void   ip6_freepcbopts(struct ip6_pktopts *);
        !           276: void   ip6_freemoptions(struct ip6_moptions *);
        !           277: int    ip6_unknown_opt(u_int8_t *, struct mbuf *, int);
        !           278: u_int8_t *ip6_get_prevhdr(struct mbuf *, int);
        !           279: int    ip6_nexthdr(struct mbuf *, int, int, int *);
        !           280: int    ip6_lasthdr(struct mbuf *, int, int, int *);
        !           281: int    ip6_mforward(struct ip6_hdr *, struct ifnet *, struct mbuf *);
        !           282: int    ip6_process_hopopts(struct mbuf *, u_int8_t *, int, u_int32_t *,
        !           283:             u_int32_t *);
        !           284: void   ip6_savecontrol(struct inpcb *, struct mbuf *, struct mbuf **);
        !           285: int    ip6_sysctl(int *, u_int, void *, size_t *, void *, size_t);
        !           286:
        !           287: void   ip6_forward(struct mbuf *, int);
        !           288:
        !           289: void   ip6_mloopback(struct ifnet *, struct mbuf *, struct sockaddr_in6 *);
        !           290: int    ip6_output(struct mbuf *, struct ip6_pktopts *, struct route_in6 *, int,
        !           291:            struct ip6_moptions *, struct ifnet **, struct inpcb *);
        !           292: int    ip6_ctloutput(int, struct socket *, int, int, struct mbuf **);
        !           293: int    ip6_raw_ctloutput(int, struct socket *, int, int, struct mbuf **);
        !           294: void   ip6_initpktopts(struct ip6_pktopts *);
        !           295: int    ip6_setpktopts(struct mbuf *, struct ip6_pktopts *,
        !           296:            struct ip6_pktopts *, int, int);
        !           297: void   ip6_clearpktopts(struct ip6_pktopts *, int);
        !           298: struct ip6_pktopts *ip6_copypktopts(struct ip6_pktopts *, int);
        !           299: int    ip6_optlen(struct inpcb *);
        !           300:
        !           301: int    route6_input(struct mbuf **, int *, int);
        !           302:
        !           303: void   frag6_init(void);
        !           304: int    frag6_input(struct mbuf **, int *, int);
        !           305: void   frag6_slowtimo(void);
        !           306: void   frag6_drain(void);
        !           307:
        !           308: void   rip6_init(void);
        !           309: int    rip6_input(struct mbuf **mp, int *offp, int proto);
        !           310: void   rip6_ctlinput(int, struct sockaddr *, void *);
        !           311: int    rip6_ctloutput(int, struct socket *, int, int, struct mbuf **);
        !           312: int    rip6_output(struct mbuf *, ...);
        !           313: int    rip6_usrreq(struct socket *,
        !           314:            int, struct mbuf *, struct mbuf *, struct mbuf *, struct proc *);
        !           315:
        !           316: int    dest6_input(struct mbuf **, int *, int);
        !           317: int    none_input(struct mbuf **, int *, int);
        !           318:
        !           319: struct in6_addr *in6_selectsrc(struct sockaddr_in6 *, struct ip6_pktopts *,
        !           320:            struct ip6_moptions *, struct route_in6 *, struct in6_addr *,
        !           321:            int *);
        !           322: int    in6_selectroute(struct sockaddr_in6 *, struct ip6_pktopts *,
        !           323:            struct ip6_moptions *, struct route_in6 *, struct ifnet **,
        !           324:            struct rtentry **);
        !           325:
        !           326: u_int32_t ip6_randomid(void);
        !           327: u_int32_t ip6_randomflowlabel(void);
        !           328: #endif /* _KERNEL */
        !           329:
        !           330: #endif /* !_NETINET6_IP6_VAR_H_ */

CVSweb