root/netinet/in.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. in_cksum_phdr
  2. in_cksum_addword

    1 /*      $OpenBSD: in.h,v 1.73 2006/10/11 09:34:51 henning Exp $ */
    2 /*      $NetBSD: in.h,v 1.20 1996/02/13 23:41:47 christos Exp $ */
    3 
    4 /*
    5  * Copyright (c) 1982, 1986, 1990, 1993
    6  *      The Regents of the University of California.  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 University 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 REGENTS 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 REGENTS 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  *      @(#)in.h        8.3 (Berkeley) 1/3/94
   33  */
   34 
   35 /*
   36  * Constants and structures defined by the internet system,
   37  * Per RFC 790, September 1981, and numerous additions.
   38  */
   39 
   40 #ifndef _NETINET_IN_H_
   41 #define _NETINET_IN_H_
   42 
   43 /*
   44  * Protocols
   45  */
   46 #define IPPROTO_IP              0               /* dummy for IP */
   47 #define IPPROTO_HOPOPTS         IPPROTO_IP      /* Hop-by-hop option header */
   48 #define IPPROTO_ICMP            1               /* control message protocol */
   49 #define IPPROTO_IGMP            2               /* group mgmt protocol */
   50 #define IPPROTO_GGP             3               /* gateway^2 (deprecated) */
   51 #define IPPROTO_IPIP            4               /* IP inside IP */
   52 #define IPPROTO_IPV4            IPPROTO_IPIP    /* IP inside IP */
   53 #define IPPROTO_TCP             6               /* tcp */
   54 #define IPPROTO_EGP             8               /* exterior gateway protocol */
   55 #define IPPROTO_PUP             12              /* pup */
   56 #define IPPROTO_UDP             17              /* user datagram protocol */
   57 #define IPPROTO_IDP             22              /* xns idp */
   58 #define IPPROTO_TP              29              /* tp-4 w/ class negotiation */
   59 #define IPPROTO_IPV6            41              /* IPv6 in IPv6 */
   60 #define IPPROTO_ROUTING         43              /* Routing header */
   61 #define IPPROTO_FRAGMENT        44              /* Fragmentation/reassembly header */
   62 #define IPPROTO_RSVP            46              /* resource reservation */
   63 #define IPPROTO_GRE             47              /* GRE encap, RFCs 1701/1702 */
   64 #define IPPROTO_ESP             50              /* Encap. Security Payload */
   65 #define IPPROTO_AH              51              /* Authentication header */
   66 #define IPPROTO_MOBILE          55              /* IP Mobility, RFC 2004 */
   67 #define IPPROTO_ICMPV6          58              /* ICMP for IPv6 */
   68 #define IPPROTO_NONE            59              /* No next header */
   69 #define IPPROTO_DSTOPTS         60              /* Destination options header */
   70 #define IPPROTO_EON             80              /* ISO cnlp */
   71 #define IPPROTO_ETHERIP         97              /* Ethernet in IPv4 */
   72 #define IPPROTO_ENCAP           98              /* encapsulation header */
   73 #define IPPROTO_PIM             103             /* Protocol indep. multicast */
   74 #define IPPROTO_IPCOMP          108             /* IP Payload Comp. Protocol */
   75 #define IPPROTO_CARP            112             /* CARP */
   76 #define IPPROTO_PFSYNC          240             /* PFSYNC */
   77 #define IPPROTO_RAW             255             /* raw IP packet */
   78 
   79 #define IPPROTO_MAX             256
   80 
   81 /*
   82  * From FreeBSD:
   83  *
   84  * Local port number conventions:
   85  *
   86  * When a user does a bind(2) or connect(2) with a port number of zero,
   87  * a non-conflicting local port address is chosen.
   88  * The default range is IPPORT_RESERVED through
   89  * IPPORT_USERRESERVED, although that is settable by sysctl.
   90  *
   91  * A user may set the IPPROTO_IP option IP_PORTRANGE to change this
   92  * default assignment range.
   93  *
   94  * The value IP_PORTRANGE_DEFAULT causes the default behavior.
   95  *
   96  * The value IP_PORTRANGE_HIGH changes the range of candidate port numbers
   97  * into the "high" range.  These are reserved for client outbound connections
   98  * which do not want to be filtered by any firewalls.
   99  *
  100  * The value IP_PORTRANGE_LOW changes the range to the "low" are
  101  * that is (by convention) restricted to privileged processes.  This
  102  * convention is based on "vouchsafe" principles only.  It is only secure
  103  * if you trust the remote host to restrict these ports.
  104  *
  105  * The default range of ports and the high range can be changed by
  106  * sysctl(3).  (net.inet.ip.port{hi}{first,last})
  107  *
  108  * Changing those values has bad security implications if you are
  109  * using a a stateless firewall that is allowing packets outside of that
  110  * range in order to allow transparent outgoing connections.
  111  *
  112  * Such a firewall configuration will generally depend on the use of these
  113  * default values.  If you change them, you may find your Security
  114  * Administrator looking for you with a heavy object.
  115  */
  116 
  117 /*
  118  * Ports < IPPORT_RESERVED are reserved for
  119  * privileged processes (e.g. root).
  120  * Ports > IPPORT_USERRESERVED are reserved
  121  * for servers, not necessarily privileged.
  122  */
  123 #define IPPORT_RESERVED         1024
  124 #define IPPORT_USERRESERVED     49151
  125 
  126 /*
  127  * Default local port range to use by setting IP_PORTRANGE_HIGH
  128  */
  129 #define IPPORT_HIFIRSTAUTO      49152
  130 #define IPPORT_HILASTAUTO       65535
  131 
  132 /*
  133  * IP Version 4 Internet address (a structure for historical reasons)
  134  */
  135 struct in_addr {
  136         in_addr_t s_addr;
  137 };
  138 
  139 /* last return value of *_input(), meaning "all job for this pkt is done".  */
  140 #define IPPROTO_DONE            257
  141 
  142 /*
  143  * Definitions of bits in internet address integers.
  144  * On subnets, the decomposition of addresses to host and net parts
  145  * is done according to subnet mask, not the masks here.
  146  *
  147  * By byte-swapping the constants, we avoid ever having to byte-swap IP
  148  * addresses inside the kernel.  Unfortunately, user-level programs rely
  149  * on these macros not doing byte-swapping.
  150  */
  151 #ifdef _KERNEL
  152 #define __IPADDR(x)     ((u_int32_t) htonl((u_int32_t)(x)))
  153 #else
  154 #define __IPADDR(x)     ((u_int32_t)(x))
  155 #endif
  156 
  157 #define IN_CLASSA(i)            (((u_int32_t)(i) & __IPADDR(0x80000000)) == \
  158                                  __IPADDR(0x00000000))
  159 #define IN_CLASSA_NET           __IPADDR(0xff000000)
  160 #define IN_CLASSA_NSHIFT        24
  161 #define IN_CLASSA_HOST          __IPADDR(0x00ffffff)
  162 #define IN_CLASSA_MAX           128
  163 
  164 #define IN_CLASSB(i)            (((u_int32_t)(i) & __IPADDR(0xc0000000)) == \
  165                                  __IPADDR(0x80000000))
  166 #define IN_CLASSB_NET           __IPADDR(0xffff0000)
  167 #define IN_CLASSB_NSHIFT        16
  168 #define IN_CLASSB_HOST          __IPADDR(0x0000ffff)
  169 #define IN_CLASSB_MAX           65536
  170 
  171 #define IN_CLASSC(i)            (((u_int32_t)(i) & __IPADDR(0xe0000000)) == \
  172                                  __IPADDR(0xc0000000))
  173 #define IN_CLASSC_NET           __IPADDR(0xffffff00)
  174 #define IN_CLASSC_NSHIFT        8
  175 #define IN_CLASSC_HOST          __IPADDR(0x000000ff)
  176 
  177 #define IN_CLASSD(i)            (((u_int32_t)(i) & __IPADDR(0xf0000000)) == \
  178                                  __IPADDR(0xe0000000))
  179 /* These ones aren't really net and host fields, but routing needn't know. */
  180 #define IN_CLASSD_NET           __IPADDR(0xf0000000)
  181 #define IN_CLASSD_NSHIFT        28
  182 #define IN_CLASSD_HOST          __IPADDR(0x0fffffff)
  183 #define IN_MULTICAST(i)         IN_CLASSD(i)
  184 
  185 #define IN_EXPERIMENTAL(i)      (((u_int32_t)(i) & __IPADDR(0xf0000000)) == \
  186                                  __IPADDR(0xf0000000))
  187 #define IN_BADCLASS(i)          (((u_int32_t)(i) & __IPADDR(0xf0000000)) == \
  188                                  __IPADDR(0xf0000000))
  189 
  190 #define IN_LOCAL_GROUP(i)       (((u_int32_t)(i) & __IPADDR(0xffffff00)) == \
  191                                  __IPADDR(0xe0000000))
  192 
  193 #define INADDR_ANY              __IPADDR(0x00000000)
  194 #define INADDR_LOOPBACK         __IPADDR(0x7f000001)
  195 #define INADDR_BROADCAST        __IPADDR(0xffffffff)    /* must be masked */
  196 #ifndef _KERNEL
  197 #define INADDR_NONE             __IPADDR(0xffffffff)    /* -1 return */
  198 #endif
  199 
  200 #define INADDR_UNSPEC_GROUP     __IPADDR(0xe0000000)    /* 224.0.0.0 */
  201 #define INADDR_ALLHOSTS_GROUP   __IPADDR(0xe0000001)    /* 224.0.0.1 */
  202 #define INADDR_ALLROUTERS_GROUP __IPADDR(0xe0000002)    /* 224.0.0.2 */
  203 #define INADDR_CARP_GROUP       __IPADDR(0xe0000012)    /* 224.0.0.18 */
  204 #define INADDR_PFSYNC_GROUP     __IPADDR(0xe00000f0)    /* 224.0.0.240 */
  205 #define INADDR_MAX_LOCAL_GROUP  __IPADDR(0xe00000ff)    /* 224.0.0.255 */
  206 
  207 #define IN_LOOPBACKNET          127                     /* official! */
  208 
  209 /*
  210  * IP Version 4 socket address.
  211  */
  212 struct sockaddr_in {
  213         u_int8_t    sin_len;
  214         sa_family_t sin_family;
  215         in_port_t   sin_port;
  216         struct      in_addr sin_addr;
  217         int8_t      sin_zero[8];
  218 };
  219 
  220 /*
  221  * Structure used to describe IP options.
  222  * Used to store options internally, to pass them to a process,
  223  * or to restore options retrieved earlier.
  224  * The ip_dst is used for the first-hop gateway when using a source route
  225  * (this gets put into the header proper).
  226  */
  227 struct ip_opts {
  228         struct in_addr  ip_dst;         /* first hop, 0 w/o src rt */
  229 #if defined(__cplusplus)
  230         int8_t          Ip_opts[40];    /* cannot have same name as class */
  231 #else
  232         int8_t          ip_opts[40];    /* actually variable in size */
  233 #endif
  234 };
  235 
  236 /*
  237  * Options for use with [gs]etsockopt at the IP level.
  238  * First word of comment is data type; bool is stored in int.
  239  */
  240 #define IP_OPTIONS              1    /* buf/ip_opts; set/get IP options */
  241 #define IP_HDRINCL              2    /* int; header is included with data */
  242 #define IP_TOS                  3    /* int; IP type of service and preced. */
  243 #define IP_TTL                  4    /* int; IP time to live */
  244 #define IP_RECVOPTS             5    /* bool; receive all IP opts w/dgram */
  245 #define IP_RECVRETOPTS          6    /* bool; receive IP opts for response */
  246 #define IP_RECVDSTADDR          7    /* bool; receive IP dst addr w/dgram */
  247 #define IP_RETOPTS              8    /* ip_opts; set/get IP options */
  248 #define IP_MULTICAST_IF         9    /* in_addr; set/get IP multicast i/f  */
  249 #define IP_MULTICAST_TTL        10   /* u_char; set/get IP multicast ttl */
  250 #define IP_MULTICAST_LOOP       11   /* u_char; set/get IP multicast loopback */
  251 #define IP_ADD_MEMBERSHIP       12   /* ip_mreq; add an IP group membership */
  252 #define IP_DROP_MEMBERSHIP      13   /* ip_mreq; drop an IP group membership */
  253 
  254 /* 14-17 left empty for future compatibility with FreeBSD */
  255 
  256 #define IP_PORTRANGE            19   /* int; range to choose for unspec port */
  257 #define IP_AUTH_LEVEL           20   /* int; authentication used */
  258 #define IP_ESP_TRANS_LEVEL      21   /* int; transport encryption */
  259 #define IP_ESP_NETWORK_LEVEL    22   /* int; full-packet encryption */
  260 #define IP_IPSEC_LOCAL_ID       23   /* buf; IPsec local ID */
  261 #define IP_IPSEC_REMOTE_ID      24   /* buf; IPsec remote ID */
  262 #define IP_IPSEC_LOCAL_CRED     25   /* buf; IPsec local credentials */
  263 #define IP_IPSEC_REMOTE_CRED    26   /* buf; IPsec remote credentials */
  264 #define IP_IPSEC_LOCAL_AUTH     27   /* buf; IPsec local auth material */
  265 #define IP_IPSEC_REMOTE_AUTH    28   /* buf; IPsec remote auth material */
  266 #define IP_IPCOMP_LEVEL         29   /* int; compression used */
  267 #define IP_RECVIF               30   /* bool; receive reception if w/dgram */
  268 #define IP_RECVTTL              31   /* bool; receive IP TTL w/dgram */
  269 #define IP_MINTTL               32   /* minimum TTL for packet or drop */
  270 
  271 /*
  272  * Security levels - IPsec, not IPSO
  273  */
  274 
  275 #define IPSEC_LEVEL_BYPASS      0x00    /* Bypass policy altogether */
  276 #define IPSEC_LEVEL_NONE        0x00    /* Send clear, accept any */
  277 #define IPSEC_LEVEL_AVAIL       0x01    /* Send secure if SA available */
  278 #define IPSEC_LEVEL_USE         0x02    /* Send secure, accept any */
  279 #define IPSEC_LEVEL_REQUIRE     0x03    /* Require secure inbound, also use */
  280 #define IPSEC_LEVEL_UNIQUE      0x04    /* Use outbound SA that is unique */
  281 #define IPSEC_LEVEL_DEFAULT     IPSEC_LEVEL_AVAIL
  282 
  283 #define IPSEC_AUTH_LEVEL_DEFAULT IPSEC_LEVEL_DEFAULT
  284 #define IPSEC_ESP_TRANS_LEVEL_DEFAULT IPSEC_LEVEL_DEFAULT
  285 #define IPSEC_ESP_NETWORK_LEVEL_DEFAULT IPSEC_LEVEL_DEFAULT
  286 #define IPSEC_IPCOMP_LEVEL_DEFAULT IPSEC_LEVEL_DEFAULT
  287 
  288 /*
  289  * Defaults and limits for options
  290  */
  291 #define IP_DEFAULT_MULTICAST_TTL  1     /* normally limit m'casts to 1 hop  */
  292 #define IP_DEFAULT_MULTICAST_LOOP 1     /* normally hear sends if a member  */
  293 #define IP_MAX_MEMBERSHIPS      20      /* per socket; must fit in one mbuf */
  294 
  295 /*
  296  * Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
  297  */
  298 struct ip_mreq {
  299         struct  in_addr imr_multiaddr;  /* IP multicast address of group */
  300         struct  in_addr imr_interface;  /* local IP address of interface */
  301 };
  302 
  303 /*
  304  * Argument for IP_PORTRANGE:
  305  * - which range to search when port is unspecified at bind() or connect()
  306  */
  307 #define IP_PORTRANGE_DEFAULT    0       /* default range */
  308 #define IP_PORTRANGE_HIGH       1       /* "high" - request firewall bypass */
  309 #define IP_PORTRANGE_LOW        2       /* "low" - vouchsafe security */
  310 
  311 /*
  312  * Buffer lengths for strings containing printable IP addresses
  313  */
  314 #define INET_ADDRSTRLEN         16
  315 
  316 /*
  317  * Definitions for inet sysctl operations.
  318  *
  319  * Third level is protocol number.
  320  * Fourth level is desired variable within that protocol.
  321  */
  322 #define IPPROTO_MAXID   (IPPROTO_CARP + 1)      /* don't list to IPPROTO_MAX */
  323 
  324 #define CTL_IPPROTO_NAMES { \
  325         { "ip", CTLTYPE_NODE }, \
  326         { "icmp", CTLTYPE_NODE }, \
  327         { "igmp", CTLTYPE_NODE }, \
  328         { "ggp", CTLTYPE_NODE }, \
  329         { "ipip", CTLTYPE_NODE }, \
  330         { 0, 0 }, \
  331         { "tcp", CTLTYPE_NODE }, \
  332         { 0, 0 }, \
  333         { "egp", CTLTYPE_NODE }, \
  334         { 0, 0 }, \
  335         { 0, 0 }, \
  336         { 0, 0 }, \
  337         { "pup", CTLTYPE_NODE }, \
  338         { 0, 0 }, \
  339         { 0, 0 }, \
  340         { 0, 0 }, \
  341         { 0, 0 }, \
  342         { "udp", CTLTYPE_NODE }, \
  343         { 0, 0 }, \
  344         { 0, 0 }, \
  345         { 0, 0 }, \
  346         { 0, 0 }, \
  347         { 0, 0 }, \
  348         { 0, 0 }, \
  349         { 0, 0 }, \
  350         { 0, 0 }, \
  351         { 0, 0 }, \
  352         { 0, 0 }, \
  353         { 0, 0 }, \
  354         { 0, 0 }, \
  355         { 0, 0 }, \
  356         { 0, 0 }, \
  357         { 0, 0 }, \
  358         { 0, 0 }, \
  359         { 0, 0 }, \
  360         { 0, 0 }, \
  361         { 0, 0 }, \
  362         { 0, 0 }, \
  363         { 0, 0 }, \
  364         { 0, 0 }, \
  365         { 0, 0 }, \
  366         { 0, 0 }, \
  367         { 0, 0 }, \
  368         { 0, 0 }, \
  369         { 0, 0 }, \
  370         { 0, 0 }, \
  371         { 0, 0 }, \
  372         { "gre", CTLTYPE_NODE }, \
  373         { 0, 0 }, \
  374         { 0, 0 }, \
  375         { "esp", CTLTYPE_NODE }, \
  376         { "ah", CTLTYPE_NODE }, \
  377         { 0, 0 }, \
  378         { 0, 0 }, \
  379         { 0, 0 }, \
  380         { "mobileip", CTLTYPE_NODE }, \
  381         { 0, 0 }, \
  382         { 0, 0 }, \
  383         { 0, 0 }, \
  384         { 0, 0 }, \
  385         { 0, 0 }, \
  386         { 0, 0 }, \
  387         { 0, 0 }, \
  388         { 0, 0 }, \
  389         { 0, 0 }, \
  390         { 0, 0 }, \
  391         { 0, 0 }, \
  392         { 0, 0 }, \
  393         { 0, 0 }, \
  394         { 0, 0 }, \
  395         { 0, 0 }, \
  396         { 0, 0 }, \
  397         { 0, 0 }, \
  398         { 0, 0 }, \
  399         { 0, 0 }, \
  400         { 0, 0 }, \
  401         { 0, 0 }, \
  402         { 0, 0 }, \
  403         { 0, 0 }, \
  404         { 0, 0 }, \
  405         { 0, 0 }, \
  406         { 0, 0 }, \
  407         { 0, 0 }, \
  408         { 0, 0 }, \
  409         { 0, 0 }, \
  410         { 0, 0 }, \
  411         { 0, 0 }, \
  412         { 0, 0 }, \
  413         { 0, 0 }, \
  414         { 0, 0 }, \
  415         { 0, 0 }, \
  416         { 0, 0 }, \
  417         { 0, 0 }, \
  418         { 0, 0 }, \
  419         { 0, 0 }, \
  420         { 0, 0 }, \
  421         { 0, 0 }, \
  422         { "etherip", CTLTYPE_NODE }, \
  423         { 0, 0 }, \
  424         { 0, 0 }, \
  425         { 0, 0 }, \
  426         { 0, 0 }, \
  427         { 0, 0 }, \
  428         { "pim", CTLTYPE_NODE }, \
  429         { 0, 0 }, \
  430         { 0, 0 }, \
  431         { 0, 0 }, \
  432         { 0, 0 }, \
  433         { "ipcomp", CTLTYPE_NODE }, \
  434         { 0, 0 }, \
  435         { 0, 0 }, \
  436         { 0, 0 }, \
  437         { "carp", CTLTYPE_NODE }, \
  438 }
  439 
  440 /*
  441  * Names for IP sysctl objects
  442  */
  443 #define IPCTL_FORWARDING        1       /* act as router */
  444 #define IPCTL_SENDREDIRECTS     2       /* may send redirects when forwarding */
  445 #define IPCTL_DEFTTL            3       /* default TTL */
  446 #ifdef notyet
  447 #define IPCTL_DEFMTU            4       /* default MTU */
  448 #endif
  449 #define IPCTL_SOURCEROUTE       5       /* may perform source routes */
  450 #define IPCTL_DIRECTEDBCAST     6       /* default broadcast behavior */
  451 #define IPCTL_IPPORT_FIRSTAUTO  7
  452 #define IPCTL_IPPORT_LASTAUTO   8
  453 #define IPCTL_IPPORT_HIFIRSTAUTO 9
  454 #define IPCTL_IPPORT_HILASTAUTO 10
  455 #define IPCTL_IPPORT_MAXQUEUE   11
  456 #define IPCTL_ENCDEBUG          12
  457 #ifdef notdef   /*obsolete*/
  458 #define IPCTL_GIF_TTL           13      /* default TTL for gif encap packet */
  459 #endif
  460 #define IPCTL_IPSEC_EXPIRE_ACQUIRE 14   /* How long to wait for key mgmt. */
  461 #define IPCTL_IPSEC_EMBRYONIC_SA_TIMEOUT        15 /* new SA lifetime */
  462 #define IPCTL_IPSEC_REQUIRE_PFS 16
  463 #define IPCTL_IPSEC_SOFT_ALLOCATIONS            17
  464 #define IPCTL_IPSEC_ALLOCATIONS 18
  465 #define IPCTL_IPSEC_SOFT_BYTES  19
  466 #define IPCTL_IPSEC_BYTES       20
  467 #define IPCTL_IPSEC_TIMEOUT     21
  468 #define IPCTL_IPSEC_SOFT_TIMEOUT 22
  469 #define IPCTL_IPSEC_SOFT_FIRSTUSE 23
  470 #define IPCTL_IPSEC_FIRSTUSE    24
  471 #define IPCTL_IPSEC_ENC_ALGORITHM 25
  472 #define IPCTL_IPSEC_AUTH_ALGORITHM 26
  473 #define IPCTL_MTUDISC           27      /* allow path MTU discovery */
  474 #define IPCTL_MTUDISCTIMEOUT    28      /* allow path MTU discovery */
  475 #define IPCTL_IPSEC_IPCOMP_ALGORITHM    29
  476 #define IPCTL_IFQUEUE           30
  477 #define IPCTL_MFORWARDING       31
  478 #define IPCTL_MULTIPATH         32
  479 #define IPCTL_MAXID             33
  480 
  481 #define IPCTL_NAMES { \
  482         { 0, 0 }, \
  483         { "forwarding", CTLTYPE_INT }, \
  484         { "redirect", CTLTYPE_INT }, \
  485         { "ttl", CTLTYPE_INT }, \
  486         /* { "mtu", CTLTYPE_INT }, */ { 0, 0 }, \
  487         { "sourceroute", CTLTYPE_INT }, \
  488         { "directed-broadcast", CTLTYPE_INT }, \
  489         { "portfirst", CTLTYPE_INT }, \
  490         { "portlast", CTLTYPE_INT }, \
  491         { "porthifirst", CTLTYPE_INT }, \
  492         { "porthilast", CTLTYPE_INT }, \
  493         { "maxqueue", CTLTYPE_INT }, \
  494         { "encdebug", CTLTYPE_INT }, \
  495         { 0, 0 }, \
  496         { "ipsec-expire-acquire", CTLTYPE_INT }, \
  497         { "ipsec-invalid-life", CTLTYPE_INT }, \
  498         { "ipsec-pfs", CTLTYPE_INT }, \
  499         { "ipsec-soft-allocs", CTLTYPE_INT }, \
  500         { "ipsec-allocs", CTLTYPE_INT }, \
  501         { "ipsec-soft-bytes", CTLTYPE_INT }, \
  502         { "ipsec-bytes", CTLTYPE_INT }, \
  503         { "ipsec-timeout", CTLTYPE_INT }, \
  504         { "ipsec-soft-timeout", CTLTYPE_INT }, \
  505         { "ipsec-soft-firstuse", CTLTYPE_INT }, \
  506         { "ipsec-firstuse", CTLTYPE_INT }, \
  507         { "ipsec-enc-alg", CTLTYPE_STRING }, \
  508         { "ipsec-auth-alg", CTLTYPE_STRING }, \
  509         { "mtudisc", CTLTYPE_INT }, \
  510         { "mtudisctimeout", CTLTYPE_INT }, \
  511         { "ipsec-comp-alg", CTLTYPE_STRING }, \
  512         { "ifq", CTLTYPE_NODE }, \
  513         { "mforwarding", CTLTYPE_INT }, \
  514         { "multipath", CTLTYPE_INT } \
  515 }
  516 #define IPCTL_VARS { \
  517         NULL, \
  518         &ipforwarding, \
  519         &ipsendredirects, \
  520         &ip_defttl, \
  521         NULL, \
  522         NULL, \
  523         &ip_directedbcast, \
  524         &ipport_firstauto, \
  525         &ipport_lastauto, \
  526         &ipport_hifirstauto, \
  527         &ipport_hilastauto, \
  528         &ip_maxqueue, \
  529         &encdebug, \
  530         NULL, \
  531         &ipsec_expire_acquire, \
  532         &ipsec_keep_invalid, \
  533         &ipsec_require_pfs, \
  534         &ipsec_soft_allocations, \
  535         &ipsec_exp_allocations, \
  536         &ipsec_soft_bytes, \
  537         &ipsec_exp_bytes, \
  538         &ipsec_exp_timeout, \
  539         &ipsec_soft_timeout, \
  540         &ipsec_soft_first_use, \
  541         &ipsec_exp_first_use, \
  542         NULL, \
  543         NULL, \
  544         NULL, \
  545         NULL, \
  546         NULL, \
  547         NULL, \
  548         &ipmforwarding, \
  549         &ipmultipath \
  550 }
  551 
  552 /* INET6 stuff */
  553 #define __KAME_NETINET_IN_H_INCLUDED_
  554 #include <netinet6/in6.h>
  555 #undef __KAME_NETINET_IN_H_INCLUDED_
  556 
  557 #ifndef _KERNEL
  558 
  559 #include <sys/cdefs.h>
  560 
  561 __BEGIN_DECLS
  562 int        bindresvport(int, struct sockaddr_in *);
  563 struct sockaddr;
  564 int        bindresvport_sa(int, struct sockaddr *);
  565 __END_DECLS
  566 
  567 #else
  568 /*
  569  * in_cksum_phdr:
  570  *
  571  *      Compute significant parts of the IPv4 checksum pseudo-header
  572  *      for use in a delayed TCP/UDP checksum calculation.
  573  *
  574  *      Args:
  575  *
  576  *              src             Source IP address
  577  *              dst             Destination IP address
  578  *              lenproto        htons(proto-hdr-len + proto-number)
  579  */
  580 static __inline u_int16_t __attribute__((__unused__))
  581 in_cksum_phdr(u_int32_t src, u_int32_t dst, u_int32_t lenproto)
  582 {
  583         u_int32_t sum;
  584 
  585         sum = lenproto +
  586               (u_int16_t)(src >> 16) +
  587               (u_int16_t)(src /*& 0xffff*/) +
  588               (u_int16_t)(dst >> 16) +
  589               (u_int16_t)(dst /*& 0xffff*/);
  590 
  591         sum = (u_int16_t)(sum >> 16) + (u_int16_t)(sum /*& 0xffff*/);
  592 
  593         if (sum > 0xffff)
  594                 sum -= 0xffff;
  595 
  596         return (sum);
  597 }
  598 
  599 /*
  600  * in_cksum_addword:
  601  *
  602  *      Add the two 16-bit network-order values, carry, and return.
  603  */
  604 static __inline u_int16_t __attribute__((__unused__))
  605 in_cksum_addword(u_int16_t a, u_int16_t b)
  606 {
  607         u_int32_t sum = a + b;
  608 
  609         if (sum > 0xffff)
  610                 sum -= 0xffff;
  611 
  612         return (sum);
  613 }
  614 
  615 extern     struct in_addr zeroin_addr;
  616 
  617 int        in_broadcast(struct in_addr, struct ifnet *);
  618 int        in_canforward(struct in_addr);
  619 int        in_cksum(struct mbuf *, int);
  620 int        in4_cksum(struct mbuf *, u_int8_t, int, int);
  621 void       in_delayed_cksum(struct mbuf *);
  622 int        in_localaddr(struct in_addr);
  623 void       in_socktrim(struct sockaddr_in *);
  624 char      *inet_ntoa(struct in_addr);
  625 
  626 #define in_hosteq(s,t)  ((s).s_addr == (t).s_addr)
  627 #define in_nullhost(x)  ((x).s_addr == INADDR_ANY)
  628 
  629 #define satosin(sa)     ((struct sockaddr_in *)(sa))
  630 #define sintosa(sin)    ((struct sockaddr *)(sin))
  631 #define ifatoia(ifa)    ((struct in_ifaddr *)(ifa))
  632 #endif /* _KERNEL */
  633 #endif /* _NETINET_IN_H_ */

/* [<][>][^][v][top][bottom][index][help] */