Annotation of embedaddon/pimdd/include/netbsd/netinet/in.h, revision 1.1.1.1

1.1       misho       1: /*     $NetBSD: in.h,v 1.28 1997/10/18 21:18:29 kml Exp $      */
                      2: 
                      3: /*
                      4:  * Copyright (c) 1982, 1986, 1990, 1993
                      5:  *     The Regents of the University of California.  All rights reserved.
                      6:  *
                      7:  * Redistribution and use in source and binary forms, with or without
                      8:  * modification, are permitted provided that the following conditions
                      9:  * are met:
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  * 2. Redistributions in binary form must reproduce the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer in the
                     14:  *    documentation and/or other materials provided with the distribution.
                     15:  * 3. All advertising materials mentioning features or use of this software
                     16:  *    must display the following acknowledgement:
                     17:  *     This product includes software developed by the University of
                     18:  *     California, Berkeley and its contributors.
                     19:  * 4. Neither the name of the University nor the names of its contributors
                     20:  *    may be used to endorse or promote products derived from this software
                     21:  *    without specific prior written permission.
                     22:  *
                     23:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     24:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     25:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     26:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     27:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     28:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     29:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     30:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     31:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     32:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     33:  * SUCH DAMAGE.
                     34:  *
                     35:  *     @(#)in.h        8.3 (Berkeley) 1/3/94
                     36:  */
                     37: 
                     38: /*
                     39:  * Constants and structures defined by the internet system,
                     40:  * Per RFC 790, September 1981, and numerous additions.
                     41:  */
                     42: 
                     43: #ifndef _NETINET_IN_H_
                     44: #define        _NETINET_IN_H_
                     45: 
                     46: /*
                     47:  * Protocols
                     48:  */
                     49: #define        IPPROTO_IP              0               /* dummy for IP */
                     50: #define        IPPROTO_ICMP            1               /* control message protocol */
                     51: #define        IPPROTO_IGMP            2               /* group mgmt protocol */
                     52: #define        IPPROTO_GGP             3               /* gateway^2 (deprecated) */
                     53: #define        IPPROTO_IPIP            4               /* IP inside IP */
                     54: #define        IPPROTO_TCP             6               /* tcp */
                     55: #define        IPPROTO_EGP             8               /* exterior gateway protocol */
                     56: #define        IPPROTO_PUP             12              /* pup */
                     57: #define        IPPROTO_UDP             17              /* user datagram protocol */
                     58: #define        IPPROTO_IDP             22              /* xns idp */
                     59: #define        IPPROTO_TP              29              /* tp-4 w/ class negotiation */
                     60: #define        IPPROTO_ESP             50              /* encap. security payload */
                     61: #define        IPPROTO_AH              51              /* authentication header */
                     62: #define        IPPROTO_EON             80              /* ISO cnlp */
                     63: #define        IPPROTO_ENCAP           98              /* encapsulation header */
                     64: #define IPPROTO_PIM            103             /* Protocol Independent Mcast */
                     65: 
                     66: #define        IPPROTO_RAW             255             /* raw IP packet */
                     67: #define        IPPROTO_MAX             256
                     68: 
                     69: 
                     70: /*
                     71:  * Local port number conventions:
                     72:  * Ports < IPPORT_RESERVED are reserved for
                     73:  * privileged processes (e.g. root).
                     74:  * Ports > IPPORT_USERRESERVED are reserved
                     75:  * for servers, not necessarily privileged.
                     76:  */
                     77: #define        IPPORT_RESERVED         1024
                     78: #define        IPPORT_USERRESERVED     5000
                     79: 
                     80: /*
                     81:  * Internet address (a structure for historical reasons)
                     82:  */
                     83: struct in_addr {
                     84:        u_int32_t s_addr;
                     85: };
                     86: 
                     87: /*
                     88:  * Definitions of bits in internet address integers.
                     89:  * On subnets, the decomposition of addresses to host and net parts
                     90:  * is done according to subnet mask, not the masks here.
                     91:  *
                     92:  * By byte-swapping the constants, we avoid ever having to byte-swap IP
                     93:  * addresses inside the kernel.  Unfortunately, user-level programs rely
                     94:  * on these macros not doing byte-swapping.
                     95:  */
                     96: #ifdef _KERNEL
                     97: #define        __IPADDR(x)     ((u_int32_t) htonl((u_int32_t)(x)))
                     98: #else
                     99: #define        __IPADDR(x)     ((u_int32_t)(x))
                    100: #endif
                    101: 
                    102: #define        IN_CLASSA(i)            (((u_int32_t)(i) & __IPADDR(0x80000000)) == \
                    103:                                 __IPADDR(0x00000000))
                    104: #define        IN_CLASSA_NET           __IPADDR(0xff000000)
                    105: #define        IN_CLASSA_NSHIFT        24
                    106: #define        IN_CLASSA_HOST          __IPADDR(0x00ffffff)
                    107: #define        IN_CLASSA_MAX           128
                    108: 
                    109: #define        IN_CLASSB(i)            (((u_int32_t)(i) & __IPADDR(0xc0000000)) == \
                    110:                                 __IPADDR(0x80000000))
                    111: #define        IN_CLASSB_NET           __IPADDR(0xffff0000)
                    112: #define        IN_CLASSB_NSHIFT        16
                    113: #define        IN_CLASSB_HOST          __IPADDR(0x0000ffff)
                    114: #define        IN_CLASSB_MAX           65536
                    115: 
                    116: #define        IN_CLASSC(i)            (((u_int32_t)(i) & __IPADDR(0xe0000000)) == \
                    117:                                 __IPADDR(0xc0000000))
                    118: #define        IN_CLASSC_NET           __IPADDR(0xffffff00)
                    119: #define        IN_CLASSC_NSHIFT        8
                    120: #define        IN_CLASSC_HOST          __IPADDR(0x000000ff)
                    121: 
                    122: #define        IN_CLASSD(i)            (((u_int32_t)(i) & __IPADDR(0xf0000000)) == \
                    123:                                 __IPADDR(0xe0000000))
                    124: /* These ones aren't really net and host fields, but routing needn't know. */
                    125: #define        IN_CLASSD_NET           __IPADDR(0xf0000000)
                    126: #define        IN_CLASSD_NSHIFT        28
                    127: #define        IN_CLASSD_HOST          __IPADDR(0x0fffffff)
                    128: #define        IN_MULTICAST(i)         IN_CLASSD(i)
                    129: 
                    130: #define        IN_EXPERIMENTAL(i)      (((u_int32_t)(i) & __IPADDR(0xf0000000)) == \
                    131:                                 __IPADDR(0xf0000000))
                    132: #define        IN_BADCLASS(i)          (((u_int32_t)(i) & __IPADDR(0xf0000000)) == \
                    133:                                 __IPADDR(0xf0000000))
                    134: 
                    135: #define        IN_LOCAL_GROUP(i)       (((u_int32_t)(i) & __IPADDR(0xffffff00)) == \
                    136:                                 __IPADDR(0xe0000000))
                    137: 
                    138: #define        INADDR_ANY              __IPADDR(0x00000000)
                    139: #define        INADDR_LOOPBACK         __IPADDR(0x7f000001)
                    140: #define        INADDR_BROADCAST        __IPADDR(0xffffffff)    /* must be masked */
                    141: #ifndef _KERNEL
                    142: #define        INADDR_NONE             __IPADDR(0xffffffff)    /* -1 return */
                    143: #endif
                    144: 
                    145: #define        INADDR_UNSPEC_GROUP     __IPADDR(0xe0000000)    /* 224.0.0.0 */
                    146: #define        INADDR_ALLHOSTS_GROUP   __IPADDR(0xe0000001)    /* 224.0.0.1 */
                    147: 
                    148: #define        IN_LOOPBACKNET          127                     /* official! */
                    149: 
                    150: /*
                    151:  * Socket address, internet style.
                    152:  */
                    153: struct sockaddr_in {
                    154:        u_int8_t  sin_len;
                    155:        u_int8_t  sin_family;
                    156:        u_int16_t sin_port;
                    157:        struct    in_addr sin_addr;
                    158:        int8_t    sin_zero[8];
                    159: };
                    160: 
                    161: /*
                    162:  * Structure used to describe IP options.
                    163:  * Used to store options internally, to pass them to a process,
                    164:  * or to restore options retrieved earlier.
                    165:  * The ip_dst is used for the first-hop gateway when using a source route
                    166:  * (this gets put into the header proper).
                    167:  */
                    168: struct ip_opts {
                    169:        struct in_addr  ip_dst;         /* first hop, 0 w/o src rt */
                    170:        int8_t          ip_opts[40];    /* actually variable in size */
                    171: };
                    172: 
                    173: /*
                    174:  * Options for use with [gs]etsockopt at the IP level.
                    175:  * First word of comment is data type; bool is stored in int.
                    176:  */
                    177: #define        IP_OPTIONS              1    /* buf/ip_opts; set/get IP options */
                    178: #define        IP_HDRINCL              2    /* int; header is included with data */
                    179: #define        IP_TOS                  3    /* int; IP type of service and preced. */
                    180: #define        IP_TTL                  4    /* int; IP time to live */
                    181: #define        IP_RECVOPTS             5    /* bool; receive all IP opts w/dgram */
                    182: #define        IP_RECVRETOPTS          6    /* bool; receive IP opts for response */
                    183: #define        IP_RECVDSTADDR          7    /* bool; receive IP dst addr w/dgram */
                    184: #define        IP_RETOPTS              8    /* ip_opts; set/get IP options */
                    185: #define        IP_MULTICAST_IF         9    /* in_addr; set/get IP multicast i/f  */
                    186: #define        IP_MULTICAST_TTL        10   /* u_char; set/get IP multicast ttl */
                    187: #define        IP_MULTICAST_LOOP       11   /* u_char; set/get IP multicast loopback */
                    188: #define        IP_ADD_MEMBERSHIP       12   /* ip_mreq; add an IP group membership */
                    189: #define        IP_DROP_MEMBERSHIP      13   /* ip_mreq; drop an IP group membership */
                    190: #define        IP_RECVIF               20   /* bool; receive reception if w/dgram */
                    191: #define        IP_ERRORMTU             21   /* int; get MTU of last xmit = EMSGSIZE */
                    192: 
                    193: /*
                    194:  * Defaults and limits for options
                    195:  */
                    196: #define        IP_DEFAULT_MULTICAST_TTL  1     /* normally limit m'casts to 1 hop  */
                    197: #define        IP_DEFAULT_MULTICAST_LOOP 1     /* normally hear sends if a member  */
                    198: #define        IP_MAX_MEMBERSHIPS      20      /* per socket; must fit in one mbuf */
                    199: 
                    200: /*
                    201:  * Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
                    202:  */
                    203: struct ip_mreq {
                    204:        struct  in_addr imr_multiaddr;  /* IP multicast address of group */
                    205:        struct  in_addr imr_interface;  /* local IP address of interface */
                    206: };
                    207: 
                    208: /*
                    209:  * Definitions for inet sysctl operations.
                    210:  *
                    211:  * Third level is protocol number.
                    212:  * Fourth level is desired variable within that protocol.
                    213:  */
                    214: #define        IPPROTO_MAXID   (IPPROTO_IDP + 1)       /* don't list to IPPROTO_MAX */
                    215: 
                    216: #define        CTL_IPPROTO_NAMES { \
                    217:        { "ip", CTLTYPE_NODE }, \
                    218:        { "icmp", CTLTYPE_NODE }, \
                    219:        { "igmp", CTLTYPE_NODE }, \
                    220:        { "ggp", CTLTYPE_NODE }, \
                    221:        { 0, 0 }, \
                    222:        { 0, 0 }, \
                    223:        { "tcp", CTLTYPE_NODE }, \
                    224:        { 0, 0 }, \
                    225:        { "egp", CTLTYPE_NODE }, \
                    226:        { 0, 0 }, \
                    227:        { 0, 0 }, \
                    228:        { 0, 0 }, \
                    229:        { "pup", CTLTYPE_NODE }, \
                    230:        { 0, 0 }, \
                    231:        { 0, 0 }, \
                    232:        { 0, 0 }, \
                    233:        { 0, 0 }, \
                    234:        { "udp", CTLTYPE_NODE }, \
                    235:        { 0, 0 }, \
                    236:        { 0, 0 }, \
                    237:        { 0, 0 }, \
                    238:        { 0, 0 }, \
                    239:        { "idp", CTLTYPE_NODE }, \
                    240:        { 0, 0 }, \
                    241:        { 0, 0 }, \
                    242:        { 0, 0 }, \
                    243:        { 0, 0 }, \
                    244:        { 0, 0 }, \
                    245:        { 0, 0 }, \
                    246:        { 0, 0 }, \
                    247:        { 0, 0 }, \
                    248:        { 0, 0 }, \
                    249:        { 0, 0 }, \
                    250:        { 0, 0 }, \
                    251:        { 0, 0 }, \
                    252:        { 0, 0 }, \
                    253:        { 0, 0 }, \
                    254:        { 0, 0 }, \
                    255:        { 0, 0 }, \
                    256:        { 0, 0 }, \
                    257:        { 0, 0 }, \
                    258:        { 0, 0 }, \
                    259:        { 0, 0 }, \
                    260:        { 0, 0 }, \
                    261:        { 0, 0 }, \
                    262:        { 0, 0 }, \
                    263:        { 0, 0 }, \
                    264:        { 0, 0 }, \
                    265:        { 0, 0 }, \
                    266:        { 0, 0 }, \
                    267:        { 0, 0 }, \
                    268:        { 0, 0 }, \
                    269:        { 0, 0 }, \
                    270:        { 0, 0 }, \
                    271:        { 0, 0 }, \
                    272:        { 0, 0 }, \
                    273:        { 0, 0 }, \
                    274:        { 0, 0 }, \
                    275:        { 0, 0 }, \
                    276:        { 0, 0 }, \
                    277:        { 0, 0 }, \
                    278:        { 0, 0 }, \
                    279:        { 0, 0 }, \
                    280:        { 0, 0 }, \
                    281:        { 0, 0 }, \
                    282:        { 0, 0 }, \
                    283:        { 0, 0 }, \
                    284:        { 0, 0 }, \
                    285:        { 0, 0 }, \
                    286:        { 0, 0 }, \
                    287:        { 0, 0 }, \
                    288:        { 0, 0 }, \
                    289:        { 0, 0 }, \
                    290:        { 0, 0 }, \
                    291:        { 0, 0 }, \
                    292:        { 0, 0 }, \
                    293:        { 0, 0 }, \
                    294:        { 0, 0 }, \
                    295:        { 0, 0 }, \
                    296:        { 0, 0 }, \
                    297:        { 0, 0 }, \
                    298:        { 0, 0 }, \
                    299:        { 0, 0 }, \
                    300:        { 0, 0 }, \
                    301:        { 0, 0 }, \
                    302:        { 0, 0 }, \
                    303:        { 0, 0 }, \
                    304:        { 0, 0 }, \
                    305:        { 0, 0 }, \
                    306:        { 0, 0 }, \
                    307:        { 0, 0 }, \
                    308:        { 0, 0 }, \
                    309:        { 0, 0 }, \
                    310:        { 0, 0 }, \
                    311:        { 0, 0 }, \
                    312:        { 0, 0 }, \
                    313:        { 0, 0 }, \
                    314:        { 0, 0 }, \
                    315:        { 0, 0 }, \
                    316:        { 0, 0 }, \
                    317:        { 0, 0 }, \
                    318:        { 0, 0 }, \
                    319:        { 0, 0 }, \
                    320:        { "pim", CTLTYPE_NODE }, \
                    321: }
                    322: 
                    323: /*
                    324:  * Names for IP sysctl objects
                    325:  */
                    326: #define        IPCTL_FORWARDING        1       /* act as router */
                    327: #define        IPCTL_SENDREDIRECTS     2       /* may send redirects when forwarding */
                    328: #define        IPCTL_DEFTTL            3       /* default TTL */
                    329: #ifdef notyet
                    330: #define        IPCTL_DEFMTU            4       /* default MTU */
                    331: #endif
                    332: #define        IPCTL_FORWSRCRT         5       /* forward source-routed packets */
                    333: #define        IPCTL_DIRECTEDBCAST     6       /* default broadcast behavior */
                    334: #define        IPCTL_ALLOWSRCRT        7       /* allow/drop all source-routed pkts */
                    335: #define        IPCTL_SUBNETSARELOCAL   8       /* treat subnets as local addresses */
                    336: #define        IPCTL_MTUDISC           9       /* allow path MTU discovery */
                    337: #define        IPCTL_MAXID            10
                    338: 
                    339: #define        IPCTL_NAMES { \
                    340:        { 0, 0 }, \
                    341:        { "forwarding", CTLTYPE_INT }, \
                    342:        { "redirect", CTLTYPE_INT }, \
                    343:        { "ttl", CTLTYPE_INT }, \
                    344:        { "mtu", CTLTYPE_INT }, \
                    345:        { "forwsrcrt", CTLTYPE_INT }, \
                    346:        { "directed-broadcast", CTLTYPE_INT }, \
                    347:        { "allowsrcrt", CTLTYPE_INT }, \
                    348:        { "subnetsarelocal", CTLTYPE_INT }, \
                    349:        { "mtudisc", CTLTYPE_INT }, \
                    350: }
                    351: 
                    352: 
                    353: #ifdef _KERNEL
                    354: extern struct in_addr zeroin_addr;
                    355: 
                    356: int    in_broadcast __P((struct in_addr, struct ifnet *));
                    357: int    in_canforward __P((struct in_addr));
                    358: int    in_cksum __P((struct mbuf *, int));
                    359: int    in_localaddr __P((struct in_addr));
                    360: void   in_socktrim __P((struct sockaddr_in *));
                    361: 
                    362: #define        in_hosteq(s,t)  ((s).s_addr == (t).s_addr)
                    363: #define        in_nullhost(x)  ((x).s_addr == INADDR_ANY)
                    364: 
                    365: #define        satosin(sa)     ((struct sockaddr_in *)(sa))
                    366: #define        sintosa(sin)    ((struct sockaddr *)(sin))
                    367: #define        ifatoia(ifa)    ((struct in_ifaddr *)(ifa))
                    368: #endif
                    369: #endif /* !_NETINET_IN_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>