[BACK]Return to ip_carp.h CVS log [TXT][DIR] Up to [local] / sys / netinet

Annotation of sys/netinet/ip_carp.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: ip_carp.h,v 1.22 2007/03/18 23:23:17 mpf Exp $        */
                      2:
                      3: /*
                      4:  * Copyright (c) 2002 Michael Shalayeff. All rights reserved.
                      5:  * Copyright (c) 2003 Ryan McBride. 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:  *
                     16:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     17:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     18:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     19:  * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
                     20:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
                     21:  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
                     22:  * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     23:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
                     24:  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
                     25:  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
                     26:  * THE POSSIBILITY OF SUCH DAMAGE.
                     27:  */
                     28:
                     29: #ifndef _NETINET_IP_CARP_H_
                     30: #define _NETINET_IP_CARP_H_
                     31:
                     32: /*
                     33:  * The CARP header layout is as follows:
                     34:  *
                     35:  *     0                   1                   2                   3
                     36:  *     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
                     37:  *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     38:  *    |Version| Type  | VirtualHostID |    AdvSkew    |    Auth Len   |
                     39:  *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     40:  *    |    Demotion   |     AdvBase   |          Checksum             |
                     41:  *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     42:  *    |                         Counter (1)                           |
                     43:  *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     44:  *    |                         Counter (2)                           |
                     45:  *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     46:  *    |                        SHA-1 HMAC (1)                         |
                     47:  *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     48:  *    |                        SHA-1 HMAC (2)                         |
                     49:  *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     50:  *    |                        SHA-1 HMAC (3)                         |
                     51:  *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     52:  *    |                        SHA-1 HMAC (4)                         |
                     53:  *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     54:  *    |                        SHA-1 HMAC (5)                         |
                     55:  *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     56:  *
                     57:  */
                     58:
                     59: struct carp_header {
                     60: #if _BYTE_ORDER == _LITTLE_ENDIAN
                     61:        u_int           carp_type:4,
                     62:                        carp_version:4;
                     63: #endif
                     64: #if _BYTE_ORDER == _BIG_ENDIAN
                     65:        u_int           carp_version:4,
                     66:                        carp_type:4;
                     67: #endif
                     68:        u_int8_t        carp_vhid;      /* virtual host id */
                     69:        u_int8_t        carp_advskew;   /* advertisement skew */
                     70:        u_int8_t        carp_authlen;   /* size of counter+md, 32bit chunks */
                     71:        u_int8_t        carp_demote;    /* demotion indicator */
                     72:        u_int8_t        carp_advbase;   /* advertisement interval */
                     73:        u_int16_t       carp_cksum;
                     74:        u_int32_t       carp_counter[2];
                     75:        unsigned char   carp_md[20];    /* SHA1 HMAC */
                     76: } __packed;
                     77:
                     78: #define        CARP_DFLTTL             255
                     79:
                     80: /* carp_version */
                     81: #define        CARP_VERSION            2
                     82:
                     83: /* carp_type */
                     84: #define        CARP_ADVERTISEMENT      0x01
                     85:
                     86: #define        CARP_KEY_LEN            20      /* a sha1 hash of a passphrase */
                     87:
                     88: /* carp_advbase */
                     89: #define        CARP_DFLTINTV           1
                     90:
                     91: /*
                     92:  * Statistics.
                     93:  */
                     94: struct carpstats {
                     95:        u_int64_t       carps_ipackets;         /* total input packets, IPv4 */
                     96:        u_int64_t       carps_ipackets6;        /* total input packets, IPv6 */
                     97:        u_int64_t       carps_badif;            /* wrong interface */
                     98:        u_int64_t       carps_badttl;           /* TTL is not CARP_DFLTTL */
                     99:        u_int64_t       carps_hdrops;           /* packets shorter than hdr */
                    100:        u_int64_t       carps_badsum;           /* bad checksum */
                    101:        u_int64_t       carps_badver;           /* bad (incl unsupp) version */
                    102:        u_int64_t       carps_badlen;           /* data length does not match */
                    103:        u_int64_t       carps_badauth;          /* bad authentication */
                    104:        u_int64_t       carps_badvhid;          /* bad VHID */
                    105:        u_int64_t       carps_badaddrs;         /* bad address list */
                    106:
                    107:        u_int64_t       carps_opackets;         /* total output packets, IPv4 */
                    108:        u_int64_t       carps_opackets6;        /* total output packets, IPv6 */
                    109:        u_int64_t       carps_onomem;           /* no memory for an mbuf */
                    110:        u_int64_t       carps_ostates;          /* total state updates sent */
                    111:
                    112:        u_int64_t       carps_preempt;          /* if enabled, preemptions */
                    113: };
                    114:
                    115: #define CARPDEVNAMSIZ  16
                    116: #ifdef IFNAMSIZ
                    117: #if CARPDEVNAMSIZ != IFNAMSIZ
                    118: #error
                    119: #endif
                    120: #endif
                    121:
                    122: /*
                    123:  * Configuration structure for SIOCSVH SIOCGVH
                    124:  */
                    125: struct carpreq {
                    126:        int             carpr_state;
                    127: #define        CARP_STATES     "INIT", "BACKUP", "MASTER"
                    128: #define        CARP_MAXSTATE   2
                    129:
                    130:        char            carpr_carpdev[CARPDEVNAMSIZ];
                    131:        int             carpr_vhid;
                    132:        int             carpr_advskew;
                    133:        int             carpr_advbase;
                    134:        unsigned char   carpr_key[CARP_KEY_LEN];
                    135: };
                    136:
                    137: /*
                    138:  * Names for CARP sysctl objects
                    139:  */
                    140: #define        CARPCTL_ALLOW           1       /* accept incoming CARP packets */
                    141: #define        CARPCTL_PREEMPT         2       /* high-pri backup preemption mode */
                    142: #define        CARPCTL_LOG             3       /* log bad packets */
                    143: #define        CARPCTL_ARPBALANCE      4       /* balance arp responses */
                    144: #define        CARPCTL_MAXID           5
                    145:
                    146: #define        CARPCTL_NAMES { \
                    147:        { 0, 0 }, \
                    148:        { "allow", CTLTYPE_INT }, \
                    149:        { "preempt", CTLTYPE_INT }, \
                    150:        { "log", CTLTYPE_INT }, \
                    151:        { "arpbalance", CTLTYPE_INT }, \
                    152: }
                    153:
                    154: #ifdef _KERNEL
                    155: void            carp_ifdetach (struct ifnet *);
                    156: void            carp_proto_input (struct mbuf *, ...);
                    157: void            carp_carpdev_state(void *);
                    158: void            carp_group_demote_adj(struct ifnet *, int);
                    159: int             carp6_proto_input(struct mbuf **, int *, int);
                    160: int             carp_iamatch(struct in_ifaddr *, u_char *,
                    161:                     u_int32_t *, u_int32_t);
                    162: int             carp_iamatch6(struct ifnet *, struct ifaddr *);
                    163: struct ifnet   *carp_ourether(void *, struct ether_header *, u_char, int);
                    164: int             carp_input(struct mbuf *, u_int8_t *, u_int8_t *, u_int16_t);
                    165: int             carp_output(struct ifnet *, struct mbuf *, struct sockaddr *,
                    166:                     struct rtentry *);
                    167: int             carp_sysctl(int *, u_int,  void *, size_t *, void *, size_t);
                    168: int             carp_lsdrop(struct mbuf *, sa_family_t, u_int32_t *, u_int32_t *);
                    169: #endif /* _KERNEL */
                    170: #endif /* _NETINET_IP_CARP_H_ */

CVSweb