xref: /onnv-gate/usr/src/lib/libvrrpadm/common/libvrrpadm.h (revision 11451:84318b5fda90)
111076SCathy.Zhou@Sun.COM /*
211076SCathy.Zhou@Sun.COM  * CDDL HEADER START
311076SCathy.Zhou@Sun.COM  *
411076SCathy.Zhou@Sun.COM  * The contents of this file are subject to the terms of the
511076SCathy.Zhou@Sun.COM  * Common Development and Distribution License (the "License").
611076SCathy.Zhou@Sun.COM  * You may not use this file except in compliance with the License.
711076SCathy.Zhou@Sun.COM  *
811076SCathy.Zhou@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
911076SCathy.Zhou@Sun.COM  * or http://www.opensolaris.org/os/licensing.
1011076SCathy.Zhou@Sun.COM  * See the License for the specific language governing permissions
1111076SCathy.Zhou@Sun.COM  * and limitations under the License.
1211076SCathy.Zhou@Sun.COM  *
1311076SCathy.Zhou@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
1411076SCathy.Zhou@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1511076SCathy.Zhou@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
1611076SCathy.Zhou@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
1711076SCathy.Zhou@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
1811076SCathy.Zhou@Sun.COM  *
1911076SCathy.Zhou@Sun.COM  * CDDL HEADER END
2011076SCathy.Zhou@Sun.COM  */
2111076SCathy.Zhou@Sun.COM 
2211076SCathy.Zhou@Sun.COM /*
23*11451SCathy.Zhou@Sun.COM  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
2411076SCathy.Zhou@Sun.COM  * Use is subject to license terms.
2511076SCathy.Zhou@Sun.COM  */
2611076SCathy.Zhou@Sun.COM 
2711076SCathy.Zhou@Sun.COM #ifndef	_LIBVRRPADM_H
2811076SCathy.Zhou@Sun.COM #define	_LIBVRRPADM_H
2911076SCathy.Zhou@Sun.COM 
3011076SCathy.Zhou@Sun.COM #include <sys/types.h>
3111076SCathy.Zhou@Sun.COM #include <sys/socket.h>
3211076SCathy.Zhou@Sun.COM #include <netinet/in.h>		/* in(6)_addr_t */
3311076SCathy.Zhou@Sun.COM #include <arpa/inet.h>
3411076SCathy.Zhou@Sun.COM #include <net/if.h>		/* LIFNAMSIZ */
3511076SCathy.Zhou@Sun.COM #include <limits.h>
3611076SCathy.Zhou@Sun.COM #include <netinet/vrrp.h>
3711076SCathy.Zhou@Sun.COM #include <syslog.h>
3811076SCathy.Zhou@Sun.COM #include <libdladm.h>
3911076SCathy.Zhou@Sun.COM 
4011076SCathy.Zhou@Sun.COM #ifdef __cplusplus
4111076SCathy.Zhou@Sun.COM extern "C" {
4211076SCathy.Zhou@Sun.COM #endif
4311076SCathy.Zhou@Sun.COM 
4411076SCathy.Zhou@Sun.COM #define	VRRP_NAME_MAX	32
4511076SCathy.Zhou@Sun.COM #define	VRRPD_SOCKET	"/var/run/vrrpd.socket"
4611076SCathy.Zhou@Sun.COM 
4711076SCathy.Zhou@Sun.COM /*
4811076SCathy.Zhou@Sun.COM  * to store the IP addresses
4911076SCathy.Zhou@Sun.COM  */
5011076SCathy.Zhou@Sun.COM typedef struct vrrp_addr {
5111076SCathy.Zhou@Sun.COM 	union {
5211076SCathy.Zhou@Sun.COM 		struct sockaddr_in	a4;
5311076SCathy.Zhou@Sun.COM 		struct sockaddr_in6	a6;
5411076SCathy.Zhou@Sun.COM 	} in;
5511076SCathy.Zhou@Sun.COM #define	in4	in.a4
5611076SCathy.Zhou@Sun.COM #define	in6	in.a6
5711076SCathy.Zhou@Sun.COM } vrrp_addr_t;
5811076SCathy.Zhou@Sun.COM 
5911076SCathy.Zhou@Sun.COM /*
6011076SCathy.Zhou@Sun.COM  * VRRP instance (configuration information).
6111076SCathy.Zhou@Sun.COM  * Passed to vrrp_create(), returned by vrrp_query().
6211076SCathy.Zhou@Sun.COM  */
6311076SCathy.Zhou@Sun.COM typedef struct vrrp_vr_conf_s {
6411076SCathy.Zhou@Sun.COM 	char		vvc_name[VRRP_NAME_MAX];	/* VRRP router name */
6511076SCathy.Zhou@Sun.COM 	char		vvc_link[MAXLINKNAMELEN];	/* data-link name */
6611076SCathy.Zhou@Sun.COM 	vrid_t		vvc_vrid;			/* VRID */
6711076SCathy.Zhou@Sun.COM 	int		vvc_af;				/* IPv4/IPv6 */
6811076SCathy.Zhou@Sun.COM 	int		vvc_pri;
6911076SCathy.Zhou@Sun.COM 	uint32_t	vvc_adver_int;			/* in ms */
7011076SCathy.Zhou@Sun.COM 	boolean_t	vvc_preempt;
7111076SCathy.Zhou@Sun.COM 	boolean_t	vvc_accept;
7211076SCathy.Zhou@Sun.COM 	boolean_t	vvc_enabled;
7311076SCathy.Zhou@Sun.COM } vrrp_vr_conf_t;
7411076SCathy.Zhou@Sun.COM 
7511076SCathy.Zhou@Sun.COM /*
7611076SCathy.Zhou@Sun.COM  * VRRP state machine
7711076SCathy.Zhou@Sun.COM  */
7811076SCathy.Zhou@Sun.COM typedef enum {
7911076SCathy.Zhou@Sun.COM 	VRRP_STATE_NONE = -1,
8011076SCathy.Zhou@Sun.COM 	VRRP_STATE_INIT,
8111076SCathy.Zhou@Sun.COM 	VRRP_STATE_MASTER,
8211076SCathy.Zhou@Sun.COM 	VRRP_STATE_BACKUP
8311076SCathy.Zhou@Sun.COM } vrrp_state_t;
8411076SCathy.Zhou@Sun.COM 
8511076SCathy.Zhou@Sun.COM /*
8611076SCathy.Zhou@Sun.COM  * VRRP status structure
8711076SCathy.Zhou@Sun.COM  * Returned by vrrp_query() as part of vrrp_queryinfo_t.
8811076SCathy.Zhou@Sun.COM  */
8911076SCathy.Zhou@Sun.COM typedef struct vrrp_statusinfo_s {
9011076SCathy.Zhou@Sun.COM 	vrrp_state_t	vs_state;
9111076SCathy.Zhou@Sun.COM 	vrrp_state_t	vs_prev_state;
9211076SCathy.Zhou@Sun.COM 	struct timeval	vs_st_time;	/* timestamp of last state trans */
9311076SCathy.Zhou@Sun.COM } vrrp_stateinfo_t;
9411076SCathy.Zhou@Sun.COM 
9511076SCathy.Zhou@Sun.COM /*
9611076SCathy.Zhou@Sun.COM  * The information obtained from peer's advertisements
9711076SCathy.Zhou@Sun.COM  * Returned by vrrp_query() as part of vrrp_queryinfo_t.
9811076SCathy.Zhou@Sun.COM  */
9911076SCathy.Zhou@Sun.COM typedef struct vrrp_peer_s {
10011076SCathy.Zhou@Sun.COM 	vrrp_addr_t	vp_addr;	/* source IP addr of the message */
10111076SCathy.Zhou@Sun.COM 	int		vp_prio;	/* priority in adv message */
10211076SCathy.Zhou@Sun.COM 	struct timeval	vp_time;	/* timestamp of the adv message */
10311076SCathy.Zhou@Sun.COM 	int		vp_adver_int;	/* adv interval in adv message */
10411076SCathy.Zhou@Sun.COM } vrrp_peer_t;
10511076SCathy.Zhou@Sun.COM 
10611076SCathy.Zhou@Sun.COM /*
10711076SCathy.Zhou@Sun.COM  * Useful timer information, in ms
10811076SCathy.Zhou@Sun.COM  */
10911076SCathy.Zhou@Sun.COM typedef struct vrrp_timeinfo_s {
11011076SCathy.Zhou@Sun.COM 	int	vt_since_last_tran;	/* time since last state transition */
11111076SCathy.Zhou@Sun.COM 	int	vt_since_last_adv;	/* time since last advertisement */
11211076SCathy.Zhou@Sun.COM 	int	vt_master_down_intv;	/* timer interval for backup to */
11311076SCathy.Zhou@Sun.COM 					/* declare master down */
11411076SCathy.Zhou@Sun.COM } vrrp_timerinfo_t;
11511076SCathy.Zhou@Sun.COM 
11611076SCathy.Zhou@Sun.COM /*
11711076SCathy.Zhou@Sun.COM  * Address information
11811076SCathy.Zhou@Sun.COM  */
11911076SCathy.Zhou@Sun.COM typedef struct vrrp_addrinfo_s {
12011076SCathy.Zhou@Sun.COM 	char		va_vnic[MAXLINKNAMELEN];
12111076SCathy.Zhou@Sun.COM 	vrrp_addr_t	va_primary;
12211076SCathy.Zhou@Sun.COM 	uint32_t	va_vipcnt;
12311076SCathy.Zhou@Sun.COM 	vrrp_addr_t	va_vips[1];
12411076SCathy.Zhou@Sun.COM } vrrp_addrinfo_t;
12511076SCathy.Zhou@Sun.COM 
12611076SCathy.Zhou@Sun.COM /*
12711076SCathy.Zhou@Sun.COM  * VRRP instance configuration and run-time states information
12811076SCathy.Zhou@Sun.COM  * Returned by vrrp_query().
12911076SCathy.Zhou@Sun.COM  */
13011076SCathy.Zhou@Sun.COM typedef struct vrrp_queryinfo {
13111076SCathy.Zhou@Sun.COM 	vrrp_vr_conf_t		show_vi;
13211076SCathy.Zhou@Sun.COM 	vrrp_stateinfo_t	show_vs;
13311076SCathy.Zhou@Sun.COM 	vrrp_peer_t		show_vp;
13411076SCathy.Zhou@Sun.COM 	vrrp_timerinfo_t	show_vt;
13511076SCathy.Zhou@Sun.COM 	vrrp_addrinfo_t		show_va;
13611076SCathy.Zhou@Sun.COM } vrrp_queryinfo_t;
13711076SCathy.Zhou@Sun.COM 
13811076SCathy.Zhou@Sun.COM /*
13911076SCathy.Zhou@Sun.COM  * flags sent with the VRRP_CMD_MODIFY command. Used in vrrp_setprop().
14011076SCathy.Zhou@Sun.COM  */
14111076SCathy.Zhou@Sun.COM #define	VRRP_CONF_PRIORITY	0x01
14211076SCathy.Zhou@Sun.COM #define	VRRP_CONF_INTERVAL	0x02
14311076SCathy.Zhou@Sun.COM #define	VRRP_CONF_PREEMPT	0x04
14411076SCathy.Zhou@Sun.COM #define	VRRP_CONF_ACCEPT	0x08
14511076SCathy.Zhou@Sun.COM 
14611076SCathy.Zhou@Sun.COM /*
14711076SCathy.Zhou@Sun.COM  * Errors
14811076SCathy.Zhou@Sun.COM  */
14911076SCathy.Zhou@Sun.COM typedef enum {
15011076SCathy.Zhou@Sun.COM 	VRRP_SUCCESS = 0,
15111076SCathy.Zhou@Sun.COM 	VRRP_EINVAL,		/* invalid parameter */
15211076SCathy.Zhou@Sun.COM 	VRRP_EINVALVRNAME,	/* invalid router name */
15311076SCathy.Zhou@Sun.COM 	VRRP_ENOMEM,		/* no memory */
15411076SCathy.Zhou@Sun.COM 	VRRP_ENOVIRT,		/* no virtual IP addresses */
15511076SCathy.Zhou@Sun.COM 	VRRP_ENOPRIM,		/* no primary IP address */
15611076SCathy.Zhou@Sun.COM 	VRRP_ENOVNIC,		/* no vnic created */
15711076SCathy.Zhou@Sun.COM 	VRRP_ENOLINK,		/* the link does not exist */
15811076SCathy.Zhou@Sun.COM 	VRRP_EINVALLINK,	/* invalid link */
15911076SCathy.Zhou@Sun.COM 	VRRP_EINVALADDR,	/* invalid IP address */
16011076SCathy.Zhou@Sun.COM 	VRRP_EINVALAF,		/* invalid IP address familty */
16111076SCathy.Zhou@Sun.COM 	VRRP_EDB,		/* configuration error */
16211076SCathy.Zhou@Sun.COM 	VRRP_EPERM,		/* permission denied */
16311076SCathy.Zhou@Sun.COM 	VRRP_EBADSTATE,		/* VRRP router in bad state */
16411076SCathy.Zhou@Sun.COM 	VRRP_EVREXIST,		/* <vrid, intf, af> three-tuple exists */
16511076SCathy.Zhou@Sun.COM 	VRRP_EINSTEXIST,	/* router name already exists */
16611076SCathy.Zhou@Sun.COM 	VRRP_EEXIST,		/* already exists */
16711076SCathy.Zhou@Sun.COM 	VRRP_ENOTFOUND,		/* vrrp router not found */
16811076SCathy.Zhou@Sun.COM 	VRRP_ETOOSMALL,		/* too small space */
16911076SCathy.Zhou@Sun.COM 	VRRP_EAGAIN,		/* Try again */
17011076SCathy.Zhou@Sun.COM 	VRRP_EALREADY,		/* already */
17111076SCathy.Zhou@Sun.COM 	VRRP_EDLADM,		/* dladm failure */
17211076SCathy.Zhou@Sun.COM 	VRRP_EIPADM,		/* ipadm failure */
17311076SCathy.Zhou@Sun.COM 	VRRP_ESYS,		/* system error */
174*11451SCathy.Zhou@Sun.COM 	VRRP_ENOSVC		/* VRRP service not enabled */
17511076SCathy.Zhou@Sun.COM } vrrp_err_t;
17611076SCathy.Zhou@Sun.COM 
17711076SCathy.Zhou@Sun.COM /*
17811076SCathy.Zhou@Sun.COM  * Internal commands used between vrrpadm and vrrpd.
17911076SCathy.Zhou@Sun.COM  */
18011076SCathy.Zhou@Sun.COM typedef enum {
18111076SCathy.Zhou@Sun.COM 	VRRP_CMD_RETURN = 0,
18211076SCathy.Zhou@Sun.COM 	VRRP_CMD_CREATE,
18311076SCathy.Zhou@Sun.COM 	VRRP_CMD_DELETE,
18411076SCathy.Zhou@Sun.COM 	VRRP_CMD_ENABLE,
18511076SCathy.Zhou@Sun.COM 	VRRP_CMD_DISABLE,
18611076SCathy.Zhou@Sun.COM 	VRRP_CMD_MODIFY,
18711076SCathy.Zhou@Sun.COM 	VRRP_CMD_LIST,
18811076SCathy.Zhou@Sun.COM 	VRRP_CMD_QUERY
18911076SCathy.Zhou@Sun.COM } vrrp_cmd_type_t;
19011076SCathy.Zhou@Sun.COM 
19111076SCathy.Zhou@Sun.COM #define	addr_len(af) ((af) == AF_INET ? sizeof (in_addr_t): sizeof (in6_addr_t))
19211076SCathy.Zhou@Sun.COM 
19311076SCathy.Zhou@Sun.COM #define	VRRPADDR_UNSPECIFIED(af, addr) 					\
19411076SCathy.Zhou@Sun.COM 	(((af) == AF_INET6 && IN6_IS_ADDR_UNSPECIFIED(			\
19511076SCathy.Zhou@Sun.COM 	    &(addr)->in6.sin6_addr)) || ((af) == AF_INET &&		\
19611076SCathy.Zhou@Sun.COM 	    ((addr)->in4.sin_addr.s_addr == INADDR_ANY)))
19711076SCathy.Zhou@Sun.COM 
19811076SCathy.Zhou@Sun.COM #define	VRRPADDR2STR(af, addr, abuf, size, append) {			\
19911076SCathy.Zhou@Sun.COM 	char ap[INET6_ADDRSTRLEN];					\
20011076SCathy.Zhou@Sun.COM 									\
20111076SCathy.Zhou@Sun.COM 	if (VRRPADDR_UNSPECIFIED(af, addr)) {				\
20211076SCathy.Zhou@Sun.COM 		(void) strlcpy(ap, "--", INET6_ADDRSTRLEN);		\
20311076SCathy.Zhou@Sun.COM 	} else if ((af) == AF_INET) {					\
20411076SCathy.Zhou@Sun.COM 		(void) inet_ntop((af), &(addr)->in4.sin_addr, ap,	\
20511076SCathy.Zhou@Sun.COM 		    INET6_ADDRSTRLEN);					\
20611076SCathy.Zhou@Sun.COM 	} else {							\
20711076SCathy.Zhou@Sun.COM 		(void) inet_ntop((af), &(addr)->in6.sin6_addr, ap,	\
20811076SCathy.Zhou@Sun.COM 		    INET6_ADDRSTRLEN);					\
20911076SCathy.Zhou@Sun.COM 	}								\
21011076SCathy.Zhou@Sun.COM 	if (append)							\
21111076SCathy.Zhou@Sun.COM 		(void) strlcat(abuf, ap, size);				\
21211076SCathy.Zhou@Sun.COM 	else								\
21311076SCathy.Zhou@Sun.COM 		(void) strlcpy(abuf, ap, size);				\
21411076SCathy.Zhou@Sun.COM }
21511076SCathy.Zhou@Sun.COM 
21611076SCathy.Zhou@Sun.COM typedef struct vrrp_cmd_create_s {
21711076SCathy.Zhou@Sun.COM 	uint32_t	vcc_cmd;
21811076SCathy.Zhou@Sun.COM 	vrrp_vr_conf_t	vcc_conf;
21911076SCathy.Zhou@Sun.COM } vrrp_cmd_create_t;
22011076SCathy.Zhou@Sun.COM 
22111076SCathy.Zhou@Sun.COM typedef struct vrrp_ret_create_s {
22211076SCathy.Zhou@Sun.COM 	vrrp_err_t	vrc_err;
22311076SCathy.Zhou@Sun.COM } vrrp_ret_create_t;
22411076SCathy.Zhou@Sun.COM 
22511076SCathy.Zhou@Sun.COM typedef struct vrrp_cmd_delete_s {
22611076SCathy.Zhou@Sun.COM 	uint32_t	vcd_cmd;
22711076SCathy.Zhou@Sun.COM 	char		vcd_name[VRRP_NAME_MAX];
22811076SCathy.Zhou@Sun.COM } vrrp_cmd_delete_t;
22911076SCathy.Zhou@Sun.COM 
23011076SCathy.Zhou@Sun.COM typedef struct vrrp_ret_delete_s {
23111076SCathy.Zhou@Sun.COM 	vrrp_err_t	vrd_err;
23211076SCathy.Zhou@Sun.COM } vrrp_ret_delete_t;
23311076SCathy.Zhou@Sun.COM 
23411076SCathy.Zhou@Sun.COM typedef struct vrrp_cmd_enable_s {
23511076SCathy.Zhou@Sun.COM 	uint32_t	vcs_cmd;
23611076SCathy.Zhou@Sun.COM 	char		vcs_name[VRRP_NAME_MAX];
23711076SCathy.Zhou@Sun.COM } vrrp_cmd_enable_t;
23811076SCathy.Zhou@Sun.COM 
23911076SCathy.Zhou@Sun.COM typedef struct vrrp_ret_enable_s {
24011076SCathy.Zhou@Sun.COM 	vrrp_err_t	vrs_err;
24111076SCathy.Zhou@Sun.COM } vrrp_ret_enable_t;
24211076SCathy.Zhou@Sun.COM 
24311076SCathy.Zhou@Sun.COM typedef struct vrrp_cmd_disable_s {
24411076SCathy.Zhou@Sun.COM 	uint32_t	vcx_cmd;
24511076SCathy.Zhou@Sun.COM 	char		vcx_name[VRRP_NAME_MAX];
24611076SCathy.Zhou@Sun.COM } vrrp_cmd_disable_t;
24711076SCathy.Zhou@Sun.COM 
24811076SCathy.Zhou@Sun.COM typedef struct vrrp_ret_disable_s {
24911076SCathy.Zhou@Sun.COM 	vrrp_err_t	vrx_err;
25011076SCathy.Zhou@Sun.COM } vrrp_ret_disable_t;
25111076SCathy.Zhou@Sun.COM 
25211076SCathy.Zhou@Sun.COM typedef struct vrrp_cmd_modify_s {
25311076SCathy.Zhou@Sun.COM 	uint32_t	vcm_cmd;
25411076SCathy.Zhou@Sun.COM 	uint32_t	vcm_mask;
25511076SCathy.Zhou@Sun.COM 	vrrp_vr_conf_t	vcm_conf;
25611076SCathy.Zhou@Sun.COM } vrrp_cmd_modify_t;
25711076SCathy.Zhou@Sun.COM 
25811076SCathy.Zhou@Sun.COM typedef struct vrrp_ret_modify_s {
25911076SCathy.Zhou@Sun.COM 	vrrp_err_t	vrm_err;
26011076SCathy.Zhou@Sun.COM } vrrp_ret_modify_t;
26111076SCathy.Zhou@Sun.COM 
26211076SCathy.Zhou@Sun.COM typedef struct vrrp_cmd_list_s {
26311076SCathy.Zhou@Sun.COM 	uint32_t	vcl_cmd;
26411076SCathy.Zhou@Sun.COM 	vrid_t		vcl_vrid;
26511076SCathy.Zhou@Sun.COM 	char		vcl_ifname[LIFNAMSIZ];
26611076SCathy.Zhou@Sun.COM 	int		vcl_af;
26711076SCathy.Zhou@Sun.COM } vrrp_cmd_list_t;
26811076SCathy.Zhou@Sun.COM 
26911076SCathy.Zhou@Sun.COM typedef struct vrrp_ret_list_s {
27011076SCathy.Zhou@Sun.COM 	vrrp_err_t	vrl_err;
27111076SCathy.Zhou@Sun.COM 	uint32_t	vrl_cnt;
27211076SCathy.Zhou@Sun.COM 	/*
27311076SCathy.Zhou@Sun.COM 	 * When vrl_cnt is non-zero, the return structure will be followed
27411076SCathy.Zhou@Sun.COM 	 * by the list of router names, separated by '\0'. Its size will
27511076SCathy.Zhou@Sun.COM 	 * be vrl_cnt * VRRP_NAME_MAX.
27611076SCathy.Zhou@Sun.COM 	 */
27711076SCathy.Zhou@Sun.COM } vrrp_ret_list_t;
27811076SCathy.Zhou@Sun.COM 
27911076SCathy.Zhou@Sun.COM typedef struct vrrp_cmd_query_s {
28011076SCathy.Zhou@Sun.COM 	uint32_t	vcq_cmd;
28111076SCathy.Zhou@Sun.COM 	char		vcq_name[VRRP_NAME_MAX];
28211076SCathy.Zhou@Sun.COM } vrrp_cmd_query_t;
28311076SCathy.Zhou@Sun.COM 
28411076SCathy.Zhou@Sun.COM typedef struct vrrp_ret_query_s {
28511076SCathy.Zhou@Sun.COM 	vrrp_err_t		vrq_err;
28611076SCathy.Zhou@Sun.COM 	vrrp_queryinfo_t	vrq_qinfo;
28711076SCathy.Zhou@Sun.COM } vrrp_ret_query_t;
28811076SCathy.Zhou@Sun.COM 
28911076SCathy.Zhou@Sun.COM /*
29011076SCathy.Zhou@Sun.COM  * Union of all VRRP commands
29111076SCathy.Zhou@Sun.COM  */
29211076SCathy.Zhou@Sun.COM typedef union vrrp_cmd_s {
29311076SCathy.Zhou@Sun.COM 	uint32_t		vc_cmd;
29411076SCathy.Zhou@Sun.COM 	vrrp_cmd_create_t	vc_cmd_create;
29511076SCathy.Zhou@Sun.COM 	vrrp_cmd_delete_t	vc_cmd_delete;
29611076SCathy.Zhou@Sun.COM 	vrrp_cmd_enable_t	vc_cmd_enable;
29711076SCathy.Zhou@Sun.COM 	vrrp_cmd_disable_t	vc_cmd_disable;
29811076SCathy.Zhou@Sun.COM 	vrrp_cmd_modify_t	vc_cmd_modify;
29911076SCathy.Zhou@Sun.COM 	vrrp_cmd_list_t		vc_cmd_list;
30011076SCathy.Zhou@Sun.COM } vrrp_cmd_t;
30111076SCathy.Zhou@Sun.COM 
30211076SCathy.Zhou@Sun.COM /*
30311076SCathy.Zhou@Sun.COM  * Union of all VRRP replies of the VRRP commands
30411076SCathy.Zhou@Sun.COM  */
30511076SCathy.Zhou@Sun.COM typedef union vrrp_ret_s {
30611076SCathy.Zhou@Sun.COM 	vrrp_err_t		vr_err;
30711076SCathy.Zhou@Sun.COM 	vrrp_ret_create_t	vr_ret_create;
30811076SCathy.Zhou@Sun.COM 	vrrp_ret_delete_t	vr_ret_delete;
30911076SCathy.Zhou@Sun.COM 	vrrp_ret_enable_t	vr_ret_enable;
31011076SCathy.Zhou@Sun.COM 	vrrp_ret_disable_t	vr_ret_disable;
31111076SCathy.Zhou@Sun.COM 	vrrp_ret_modify_t	vr_ret_modify;
31211076SCathy.Zhou@Sun.COM 	vrrp_ret_list_t		vr_ret_list;
31311076SCathy.Zhou@Sun.COM 	vrrp_ret_query_t	vr_ret_query;
31411076SCathy.Zhou@Sun.COM } vrrp_ret_t;
31511076SCathy.Zhou@Sun.COM 
31611076SCathy.Zhou@Sun.COM /*
31711076SCathy.Zhou@Sun.COM  * Public APIs
31811076SCathy.Zhou@Sun.COM  */
31911076SCathy.Zhou@Sun.COM struct vrrp_handle {
32011076SCathy.Zhou@Sun.COM 	dladm_handle_t	vh_dh;
32111076SCathy.Zhou@Sun.COM };
32211076SCathy.Zhou@Sun.COM typedef struct vrrp_handle *vrrp_handle_t;
32311076SCathy.Zhou@Sun.COM 
32411076SCathy.Zhou@Sun.COM const char	*vrrp_err2str(vrrp_err_t);
32511076SCathy.Zhou@Sun.COM const char	*vrrp_state2str(vrrp_state_t);
32611076SCathy.Zhou@Sun.COM 
32711076SCathy.Zhou@Sun.COM vrrp_err_t	vrrp_open(vrrp_handle_t *);
32811076SCathy.Zhou@Sun.COM void		vrrp_close(vrrp_handle_t);
32911076SCathy.Zhou@Sun.COM 
33011076SCathy.Zhou@Sun.COM boolean_t	vrrp_valid_name(const char *);
33111076SCathy.Zhou@Sun.COM 
33211076SCathy.Zhou@Sun.COM vrrp_err_t	vrrp_create(vrrp_handle_t, vrrp_vr_conf_t *);
33311076SCathy.Zhou@Sun.COM vrrp_err_t	vrrp_delete(vrrp_handle_t, const char *);
33411076SCathy.Zhou@Sun.COM 
33511076SCathy.Zhou@Sun.COM vrrp_err_t	vrrp_enable(vrrp_handle_t, const char *);
33611076SCathy.Zhou@Sun.COM vrrp_err_t	vrrp_disable(vrrp_handle_t, const char *);
33711076SCathy.Zhou@Sun.COM 
33811076SCathy.Zhou@Sun.COM vrrp_err_t	vrrp_modify(vrrp_handle_t, vrrp_vr_conf_t *, uint32_t);
33911076SCathy.Zhou@Sun.COM 
34011076SCathy.Zhou@Sun.COM vrrp_err_t	vrrp_query(vrrp_handle_t, const char *, vrrp_queryinfo_t **);
34111076SCathy.Zhou@Sun.COM 
34211076SCathy.Zhou@Sun.COM vrrp_err_t	vrrp_list(vrrp_handle_t, vrid_t, const char *, int,
34311076SCathy.Zhou@Sun.COM 		    uint32_t *, char *);
34411076SCathy.Zhou@Sun.COM 
34511076SCathy.Zhou@Sun.COM boolean_t	vrrp_is_vrrp_vnic(vrrp_handle_t, datalink_id_t,
34611076SCathy.Zhou@Sun.COM 		    datalink_id_t *, uint16_t *, vrid_t *, int *);
34711076SCathy.Zhou@Sun.COM 
34811076SCathy.Zhou@Sun.COM vrrp_err_t	vrrp_get_vnicname(vrrp_handle_t, vrid_t, int, char *,
34911076SCathy.Zhou@Sun.COM 		    datalink_id_t *, uint16_t *, char *, size_t);
35011076SCathy.Zhou@Sun.COM 
35111076SCathy.Zhou@Sun.COM #ifdef __cplusplus
35211076SCathy.Zhou@Sun.COM }
35311076SCathy.Zhou@Sun.COM #endif
35411076SCathy.Zhou@Sun.COM 
35511076SCathy.Zhou@Sun.COM #endif	/* _LIBVRRPADM_H */
356