File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / freevrrpd / vrrp_proto.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 14 12:01:54 2017 UTC (7 years ago) by misho
Branches: freevrrpd, MAIN
CVS tags: v1_1, HEAD
freevrrpd 1.1

/*
 * Copyright (c) 2001,2002 Sebastien Petit <spe@bsdfr.org>
 *
 * Redistribution and use in source forms, with and without modification,
 * are permitted provided that the following conditions are met:
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution. Obviously, it
 *    would be nice if you gave credit where credit is due but requiring it
 *    would be too onerous.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *      This product includes software developed by Sebastien Petit.
 * 4. Neither the name of its contributors may be used to endorse or promote
 *    products derived from this software without specific prior written
 *    permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * $Id: vrrp_proto.h,v 1.1.1.1 2017/06/14 12:01:54 misho Exp $
 */

#ifndef _VRRP_PROTO_H
#define _VRRP_PROTO_H

#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <netinet/in.h>
#ifdef __FreeBSD__
#include <net/ethernet.h>
#endif
#ifdef __NetBSD__
#include <net/if_ether.h>
#endif
#ifdef __OpenBSD__
#include <netinet/if_ether.h>
#endif
#include "vrrp_define.h"

/* RFC 2338 vrrp header */
struct vrrp_hdr {
#if BYTE_ORDER == LITTLE_ENDIAN
	u_int           vrrp_t:4, vrrp_v:4;
#endif
#if BYTE_ORDER == BIG_ENDIAN
	u_int           vrrp_v:4, vrrp_t:4;
#endif
	u_char          vr_id;
	u_char          priority;
	u_char          cnt_ip;
	u_char          auth_type;
	u_char          adv_int;
	u_short         csum;
	/* Some IP adresses, number are not defined */
	/*
	 * After IP adresses, we can found Authentification Data 1 & 2 (total
	 * of 8 bytes)
	 */
};

struct vrrp_if {
	char            if_name[IFNAMSIZ];
	u_char          nb_ip;
	int		alive;
	int		nberrors;
	int		checksok;
	int		reportsyslog;
	struct in_addr  ip_addrs[MAX_IP_ALIAS];
	struct ether_addr ethaddr;
	struct ether_addr actualethaddr;
	struct vrrp_ethaddr_list *p, *d;
	struct vrrp_vlan_list *vlanp, *vland;
	int		carrier_timeout;
};

struct vrrp_vip {
	struct in_addr  addr;
	u_char          owner;
	char		*if_name;
};

/* Timers RFC2338-6.2 */
struct vrrp_timer {
	struct timeval  master_down_tm;
	struct timeval  adv_tm;
};

/*
 * Parameters per Virtual Router RFC2338-6.1.2 and
 * draft-ietf-vrrp-spec-v2-05.txt
 */
struct vrrp_vr {
	u_char          vr_id;
	u_char          priority;
	int             sd;
	int		ioctl_sd;			/* socket used to pass ioctl */
	struct ether_addr ethaddr;
	u_char          cnt_ip;
	struct vrrp_vip *vr_ip;
	u_int          *vr_netmask;
	u_char          adv_int;
	u_int           master_down_int;
	u_int           skew_time;
	struct vrrp_timer tm;
	u_char          preempt_mode;	/* False = 0, True = 1 */
	u_char          state;	/* 0 = INITIALIZE, 1 = MASTER, 2 = BACKUP */
	u_char          auth_type;
	u_char          auth_data[VRRP_AUTH_DATA_LEN];
	struct vrrp_if *vr_if;
	char		viface_name[IFNAMSIZ]; /* Real interface name for vrrp announces */
	int		bridge_link_number;
#ifdef ENABLE_VRRP_AH
	struct ah_header *ahctx;
#endif
	char           *password;
	char           *master_script;
	char           *backup_script;
	int	       *vridsdeps;
	int		fault;
	int		useIKE;
	int		useMonitoredCircuits;
	int		AHencryption;
	int		sendGratuitousArp;
	int		spanningTreeLatency;
	int		monitoredCircuitsClearErrorsCount;
};

struct vrrp_ethaddr_list {
	struct ether_addr ethaddr;
	struct vrrp_ethaddr_list *next;
	struct vrrp_ethaddr_list *previous;
};

struct vrrp_vlan_list {
	char vlan_ifname[IFNAMSIZ];
	struct vrrp_vlan_list *next;
	struct vrrp_vlan_list *previous;
};

#endif

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