Annotation of sys/netinet/ip_carp.h, Revision 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