xref: /titanic_50/usr/src/lib/libvrrpadm/common/libvrrpadm.h (revision 1cb875ae88fb9463b368e725c2444776595895cb)
1*1cb875aeSCathy Zhou /*
2*1cb875aeSCathy Zhou  * CDDL HEADER START
3*1cb875aeSCathy Zhou  *
4*1cb875aeSCathy Zhou  * The contents of this file are subject to the terms of the
5*1cb875aeSCathy Zhou  * Common Development and Distribution License (the "License").
6*1cb875aeSCathy Zhou  * You may not use this file except in compliance with the License.
7*1cb875aeSCathy Zhou  *
8*1cb875aeSCathy Zhou  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*1cb875aeSCathy Zhou  * or http://www.opensolaris.org/os/licensing.
10*1cb875aeSCathy Zhou  * See the License for the specific language governing permissions
11*1cb875aeSCathy Zhou  * and limitations under the License.
12*1cb875aeSCathy Zhou  *
13*1cb875aeSCathy Zhou  * When distributing Covered Code, include this CDDL HEADER in each
14*1cb875aeSCathy Zhou  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*1cb875aeSCathy Zhou  * If applicable, add the following below this CDDL HEADER, with the
16*1cb875aeSCathy Zhou  * fields enclosed by brackets "[]" replaced with your own identifying
17*1cb875aeSCathy Zhou  * information: Portions Copyright [yyyy] [name of copyright owner]
18*1cb875aeSCathy Zhou  *
19*1cb875aeSCathy Zhou  * CDDL HEADER END
20*1cb875aeSCathy Zhou  */
21*1cb875aeSCathy Zhou 
22*1cb875aeSCathy Zhou /*
23*1cb875aeSCathy Zhou  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24*1cb875aeSCathy Zhou  * Use is subject to license terms.
25*1cb875aeSCathy Zhou  */
26*1cb875aeSCathy Zhou 
27*1cb875aeSCathy Zhou #ifndef	_LIBVRRPADM_H
28*1cb875aeSCathy Zhou #define	_LIBVRRPADM_H
29*1cb875aeSCathy Zhou 
30*1cb875aeSCathy Zhou #include <sys/types.h>
31*1cb875aeSCathy Zhou #include <sys/socket.h>
32*1cb875aeSCathy Zhou #include <netinet/in.h>		/* in(6)_addr_t */
33*1cb875aeSCathy Zhou #include <arpa/inet.h>
34*1cb875aeSCathy Zhou #include <net/if.h>		/* LIFNAMSIZ */
35*1cb875aeSCathy Zhou #include <limits.h>
36*1cb875aeSCathy Zhou #include <netinet/vrrp.h>
37*1cb875aeSCathy Zhou #include <syslog.h>
38*1cb875aeSCathy Zhou #include <libdladm.h>
39*1cb875aeSCathy Zhou 
40*1cb875aeSCathy Zhou #ifdef __cplusplus
41*1cb875aeSCathy Zhou extern "C" {
42*1cb875aeSCathy Zhou #endif
43*1cb875aeSCathy Zhou 
44*1cb875aeSCathy Zhou #define	VRRP_NAME_MAX	32
45*1cb875aeSCathy Zhou #define	VRRPD_SOCKET	"/var/run/vrrpd.socket"
46*1cb875aeSCathy Zhou 
47*1cb875aeSCathy Zhou /*
48*1cb875aeSCathy Zhou  * to store the IP addresses
49*1cb875aeSCathy Zhou  */
50*1cb875aeSCathy Zhou typedef struct vrrp_addr {
51*1cb875aeSCathy Zhou 	union {
52*1cb875aeSCathy Zhou 		struct sockaddr_in	a4;
53*1cb875aeSCathy Zhou 		struct sockaddr_in6	a6;
54*1cb875aeSCathy Zhou 	} in;
55*1cb875aeSCathy Zhou #define	in4	in.a4
56*1cb875aeSCathy Zhou #define	in6	in.a6
57*1cb875aeSCathy Zhou } vrrp_addr_t;
58*1cb875aeSCathy Zhou 
59*1cb875aeSCathy Zhou /*
60*1cb875aeSCathy Zhou  * VRRP instance (configuration information).
61*1cb875aeSCathy Zhou  * Passed to vrrp_create(), returned by vrrp_query().
62*1cb875aeSCathy Zhou  */
63*1cb875aeSCathy Zhou typedef struct vrrp_vr_conf_s {
64*1cb875aeSCathy Zhou 	char		vvc_name[VRRP_NAME_MAX];	/* VRRP router name */
65*1cb875aeSCathy Zhou 	char		vvc_link[MAXLINKNAMELEN];	/* data-link name */
66*1cb875aeSCathy Zhou 	vrid_t		vvc_vrid;			/* VRID */
67*1cb875aeSCathy Zhou 	int		vvc_af;				/* IPv4/IPv6 */
68*1cb875aeSCathy Zhou 	int		vvc_pri;
69*1cb875aeSCathy Zhou 	uint32_t	vvc_adver_int;			/* in ms */
70*1cb875aeSCathy Zhou 	boolean_t	vvc_preempt;
71*1cb875aeSCathy Zhou 	boolean_t	vvc_accept;
72*1cb875aeSCathy Zhou 	boolean_t	vvc_enabled;
73*1cb875aeSCathy Zhou } vrrp_vr_conf_t;
74*1cb875aeSCathy Zhou 
75*1cb875aeSCathy Zhou /*
76*1cb875aeSCathy Zhou  * VRRP state machine
77*1cb875aeSCathy Zhou  */
78*1cb875aeSCathy Zhou typedef enum {
79*1cb875aeSCathy Zhou 	VRRP_STATE_NONE = -1,
80*1cb875aeSCathy Zhou 	VRRP_STATE_INIT,
81*1cb875aeSCathy Zhou 	VRRP_STATE_MASTER,
82*1cb875aeSCathy Zhou 	VRRP_STATE_BACKUP
83*1cb875aeSCathy Zhou } vrrp_state_t;
84*1cb875aeSCathy Zhou 
85*1cb875aeSCathy Zhou /*
86*1cb875aeSCathy Zhou  * VRRP status structure
87*1cb875aeSCathy Zhou  * Returned by vrrp_query() as part of vrrp_queryinfo_t.
88*1cb875aeSCathy Zhou  */
89*1cb875aeSCathy Zhou typedef struct vrrp_statusinfo_s {
90*1cb875aeSCathy Zhou 	vrrp_state_t	vs_state;
91*1cb875aeSCathy Zhou 	vrrp_state_t	vs_prev_state;
92*1cb875aeSCathy Zhou 	struct timeval	vs_st_time;	/* timestamp of last state trans */
93*1cb875aeSCathy Zhou } vrrp_stateinfo_t;
94*1cb875aeSCathy Zhou 
95*1cb875aeSCathy Zhou /*
96*1cb875aeSCathy Zhou  * The information obtained from peer's advertisements
97*1cb875aeSCathy Zhou  * Returned by vrrp_query() as part of vrrp_queryinfo_t.
98*1cb875aeSCathy Zhou  */
99*1cb875aeSCathy Zhou typedef struct vrrp_peer_s {
100*1cb875aeSCathy Zhou 	vrrp_addr_t	vp_addr;	/* source IP addr of the message */
101*1cb875aeSCathy Zhou 	int		vp_prio;	/* priority in adv message */
102*1cb875aeSCathy Zhou 	struct timeval	vp_time;	/* timestamp of the adv message */
103*1cb875aeSCathy Zhou 	int		vp_adver_int;	/* adv interval in adv message */
104*1cb875aeSCathy Zhou } vrrp_peer_t;
105*1cb875aeSCathy Zhou 
106*1cb875aeSCathy Zhou /*
107*1cb875aeSCathy Zhou  * Useful timer information, in ms
108*1cb875aeSCathy Zhou  */
109*1cb875aeSCathy Zhou typedef struct vrrp_timeinfo_s {
110*1cb875aeSCathy Zhou 	int	vt_since_last_tran;	/* time since last state transition */
111*1cb875aeSCathy Zhou 	int	vt_since_last_adv;	/* time since last advertisement */
112*1cb875aeSCathy Zhou 	int	vt_master_down_intv;	/* timer interval for backup to */
113*1cb875aeSCathy Zhou 					/* declare master down */
114*1cb875aeSCathy Zhou } vrrp_timerinfo_t;
115*1cb875aeSCathy Zhou 
116*1cb875aeSCathy Zhou /*
117*1cb875aeSCathy Zhou  * Address information
118*1cb875aeSCathy Zhou  */
119*1cb875aeSCathy Zhou typedef struct vrrp_addrinfo_s {
120*1cb875aeSCathy Zhou 	char		va_vnic[MAXLINKNAMELEN];
121*1cb875aeSCathy Zhou 	vrrp_addr_t	va_primary;
122*1cb875aeSCathy Zhou 	uint32_t	va_vipcnt;
123*1cb875aeSCathy Zhou 	vrrp_addr_t	va_vips[1];
124*1cb875aeSCathy Zhou } vrrp_addrinfo_t;
125*1cb875aeSCathy Zhou 
126*1cb875aeSCathy Zhou /*
127*1cb875aeSCathy Zhou  * VRRP instance configuration and run-time states information
128*1cb875aeSCathy Zhou  * Returned by vrrp_query().
129*1cb875aeSCathy Zhou  */
130*1cb875aeSCathy Zhou typedef struct vrrp_queryinfo {
131*1cb875aeSCathy Zhou 	vrrp_vr_conf_t		show_vi;
132*1cb875aeSCathy Zhou 	vrrp_stateinfo_t	show_vs;
133*1cb875aeSCathy Zhou 	vrrp_peer_t		show_vp;
134*1cb875aeSCathy Zhou 	vrrp_timerinfo_t	show_vt;
135*1cb875aeSCathy Zhou 	vrrp_addrinfo_t		show_va;
136*1cb875aeSCathy Zhou } vrrp_queryinfo_t;
137*1cb875aeSCathy Zhou 
138*1cb875aeSCathy Zhou /*
139*1cb875aeSCathy Zhou  * flags sent with the VRRP_CMD_MODIFY command. Used in vrrp_setprop().
140*1cb875aeSCathy Zhou  */
141*1cb875aeSCathy Zhou #define	VRRP_CONF_PRIORITY	0x01
142*1cb875aeSCathy Zhou #define	VRRP_CONF_INTERVAL	0x02
143*1cb875aeSCathy Zhou #define	VRRP_CONF_PREEMPT	0x04
144*1cb875aeSCathy Zhou #define	VRRP_CONF_ACCEPT	0x08
145*1cb875aeSCathy Zhou 
146*1cb875aeSCathy Zhou /*
147*1cb875aeSCathy Zhou  * Errors
148*1cb875aeSCathy Zhou  */
149*1cb875aeSCathy Zhou typedef enum {
150*1cb875aeSCathy Zhou 	VRRP_SUCCESS = 0,
151*1cb875aeSCathy Zhou 	VRRP_EINVAL,		/* invalid parameter */
152*1cb875aeSCathy Zhou 	VRRP_EINVALVRNAME,	/* invalid router name */
153*1cb875aeSCathy Zhou 	VRRP_ENOMEM,		/* no memory */
154*1cb875aeSCathy Zhou 	VRRP_ENOVIRT,		/* no virtual IP addresses */
155*1cb875aeSCathy Zhou 	VRRP_ENOPRIM,		/* no primary IP address */
156*1cb875aeSCathy Zhou 	VRRP_ENOVNIC,		/* no vnic created */
157*1cb875aeSCathy Zhou 	VRRP_ENOLINK,		/* the link does not exist */
158*1cb875aeSCathy Zhou 	VRRP_EINVALLINK,	/* invalid link */
159*1cb875aeSCathy Zhou 	VRRP_EINVALADDR,	/* invalid IP address */
160*1cb875aeSCathy Zhou 	VRRP_EINVALAF,		/* invalid IP address familty */
161*1cb875aeSCathy Zhou 	VRRP_EDB,		/* configuration error */
162*1cb875aeSCathy Zhou 	VRRP_EPERM,		/* permission denied */
163*1cb875aeSCathy Zhou 	VRRP_EBADSTATE,		/* VRRP router in bad state */
164*1cb875aeSCathy Zhou 	VRRP_EVREXIST,		/* <vrid, intf, af> three-tuple exists */
165*1cb875aeSCathy Zhou 	VRRP_EINSTEXIST,	/* router name already exists */
166*1cb875aeSCathy Zhou 	VRRP_EEXIST,		/* already exists */
167*1cb875aeSCathy Zhou 	VRRP_ENOTFOUND,		/* vrrp router not found */
168*1cb875aeSCathy Zhou 	VRRP_ETOOSMALL,		/* too small space */
169*1cb875aeSCathy Zhou 	VRRP_EAGAIN,		/* Try again */
170*1cb875aeSCathy Zhou 	VRRP_EALREADY,		/* already */
171*1cb875aeSCathy Zhou 	VRRP_EDLADM,		/* dladm failure */
172*1cb875aeSCathy Zhou 	VRRP_EIPADM,		/* ipadm failure */
173*1cb875aeSCathy Zhou 	VRRP_ESYS,		/* system error */
174*1cb875aeSCathy Zhou 	VRRP_ECMD		/* command request error */
175*1cb875aeSCathy Zhou } vrrp_err_t;
176*1cb875aeSCathy Zhou 
177*1cb875aeSCathy Zhou /*
178*1cb875aeSCathy Zhou  * Internal commands used between vrrpadm and vrrpd.
179*1cb875aeSCathy Zhou  */
180*1cb875aeSCathy Zhou typedef enum {
181*1cb875aeSCathy Zhou 	VRRP_CMD_RETURN = 0,
182*1cb875aeSCathy Zhou 	VRRP_CMD_CREATE,
183*1cb875aeSCathy Zhou 	VRRP_CMD_DELETE,
184*1cb875aeSCathy Zhou 	VRRP_CMD_ENABLE,
185*1cb875aeSCathy Zhou 	VRRP_CMD_DISABLE,
186*1cb875aeSCathy Zhou 	VRRP_CMD_MODIFY,
187*1cb875aeSCathy Zhou 	VRRP_CMD_LIST,
188*1cb875aeSCathy Zhou 	VRRP_CMD_QUERY
189*1cb875aeSCathy Zhou } vrrp_cmd_type_t;
190*1cb875aeSCathy Zhou 
191*1cb875aeSCathy Zhou #define	addr_len(af) ((af) == AF_INET ? sizeof (in_addr_t): sizeof (in6_addr_t))
192*1cb875aeSCathy Zhou 
193*1cb875aeSCathy Zhou #define	VRRPADDR_UNSPECIFIED(af, addr) 					\
194*1cb875aeSCathy Zhou 	(((af) == AF_INET6 && IN6_IS_ADDR_UNSPECIFIED(			\
195*1cb875aeSCathy Zhou 	    &(addr)->in6.sin6_addr)) || ((af) == AF_INET &&		\
196*1cb875aeSCathy Zhou 	    ((addr)->in4.sin_addr.s_addr == INADDR_ANY)))
197*1cb875aeSCathy Zhou 
198*1cb875aeSCathy Zhou #define	VRRPADDR2STR(af, addr, abuf, size, append) {			\
199*1cb875aeSCathy Zhou 	char ap[INET6_ADDRSTRLEN];					\
200*1cb875aeSCathy Zhou 									\
201*1cb875aeSCathy Zhou 	if (VRRPADDR_UNSPECIFIED(af, addr)) {				\
202*1cb875aeSCathy Zhou 		(void) strlcpy(ap, "--", INET6_ADDRSTRLEN);		\
203*1cb875aeSCathy Zhou 	} else if ((af) == AF_INET) {					\
204*1cb875aeSCathy Zhou 		(void) inet_ntop((af), &(addr)->in4.sin_addr, ap,	\
205*1cb875aeSCathy Zhou 		    INET6_ADDRSTRLEN);					\
206*1cb875aeSCathy Zhou 	} else {							\
207*1cb875aeSCathy Zhou 		(void) inet_ntop((af), &(addr)->in6.sin6_addr, ap,	\
208*1cb875aeSCathy Zhou 		    INET6_ADDRSTRLEN);					\
209*1cb875aeSCathy Zhou 	}								\
210*1cb875aeSCathy Zhou 	if (append)							\
211*1cb875aeSCathy Zhou 		(void) strlcat(abuf, ap, size);				\
212*1cb875aeSCathy Zhou 	else								\
213*1cb875aeSCathy Zhou 		(void) strlcpy(abuf, ap, size);				\
214*1cb875aeSCathy Zhou }
215*1cb875aeSCathy Zhou 
216*1cb875aeSCathy Zhou typedef struct vrrp_cmd_create_s {
217*1cb875aeSCathy Zhou 	uint32_t	vcc_cmd;
218*1cb875aeSCathy Zhou 	vrrp_vr_conf_t	vcc_conf;
219*1cb875aeSCathy Zhou } vrrp_cmd_create_t;
220*1cb875aeSCathy Zhou 
221*1cb875aeSCathy Zhou typedef struct vrrp_ret_create_s {
222*1cb875aeSCathy Zhou 	vrrp_err_t	vrc_err;
223*1cb875aeSCathy Zhou } vrrp_ret_create_t;
224*1cb875aeSCathy Zhou 
225*1cb875aeSCathy Zhou typedef struct vrrp_cmd_delete_s {
226*1cb875aeSCathy Zhou 	uint32_t	vcd_cmd;
227*1cb875aeSCathy Zhou 	char		vcd_name[VRRP_NAME_MAX];
228*1cb875aeSCathy Zhou } vrrp_cmd_delete_t;
229*1cb875aeSCathy Zhou 
230*1cb875aeSCathy Zhou typedef struct vrrp_ret_delete_s {
231*1cb875aeSCathy Zhou 	vrrp_err_t	vrd_err;
232*1cb875aeSCathy Zhou } vrrp_ret_delete_t;
233*1cb875aeSCathy Zhou 
234*1cb875aeSCathy Zhou typedef struct vrrp_cmd_enable_s {
235*1cb875aeSCathy Zhou 	uint32_t	vcs_cmd;
236*1cb875aeSCathy Zhou 	char		vcs_name[VRRP_NAME_MAX];
237*1cb875aeSCathy Zhou } vrrp_cmd_enable_t;
238*1cb875aeSCathy Zhou 
239*1cb875aeSCathy Zhou typedef struct vrrp_ret_enable_s {
240*1cb875aeSCathy Zhou 	vrrp_err_t	vrs_err;
241*1cb875aeSCathy Zhou } vrrp_ret_enable_t;
242*1cb875aeSCathy Zhou 
243*1cb875aeSCathy Zhou typedef struct vrrp_cmd_disable_s {
244*1cb875aeSCathy Zhou 	uint32_t	vcx_cmd;
245*1cb875aeSCathy Zhou 	char		vcx_name[VRRP_NAME_MAX];
246*1cb875aeSCathy Zhou } vrrp_cmd_disable_t;
247*1cb875aeSCathy Zhou 
248*1cb875aeSCathy Zhou typedef struct vrrp_ret_disable_s {
249*1cb875aeSCathy Zhou 	vrrp_err_t	vrx_err;
250*1cb875aeSCathy Zhou } vrrp_ret_disable_t;
251*1cb875aeSCathy Zhou 
252*1cb875aeSCathy Zhou typedef struct vrrp_cmd_modify_s {
253*1cb875aeSCathy Zhou 	uint32_t	vcm_cmd;
254*1cb875aeSCathy Zhou 	uint32_t	vcm_mask;
255*1cb875aeSCathy Zhou 	vrrp_vr_conf_t	vcm_conf;
256*1cb875aeSCathy Zhou } vrrp_cmd_modify_t;
257*1cb875aeSCathy Zhou 
258*1cb875aeSCathy Zhou typedef struct vrrp_ret_modify_s {
259*1cb875aeSCathy Zhou 	vrrp_err_t	vrm_err;
260*1cb875aeSCathy Zhou } vrrp_ret_modify_t;
261*1cb875aeSCathy Zhou 
262*1cb875aeSCathy Zhou typedef struct vrrp_cmd_list_s {
263*1cb875aeSCathy Zhou 	uint32_t	vcl_cmd;
264*1cb875aeSCathy Zhou 	vrid_t		vcl_vrid;
265*1cb875aeSCathy Zhou 	char		vcl_ifname[LIFNAMSIZ];
266*1cb875aeSCathy Zhou 	int		vcl_af;
267*1cb875aeSCathy Zhou } vrrp_cmd_list_t;
268*1cb875aeSCathy Zhou 
269*1cb875aeSCathy Zhou typedef struct vrrp_ret_list_s {
270*1cb875aeSCathy Zhou 	vrrp_err_t	vrl_err;
271*1cb875aeSCathy Zhou 	uint32_t	vrl_cnt;
272*1cb875aeSCathy Zhou 	/*
273*1cb875aeSCathy Zhou 	 * When vrl_cnt is non-zero, the return structure will be followed
274*1cb875aeSCathy Zhou 	 * by the list of router names, separated by '\0'. Its size will
275*1cb875aeSCathy Zhou 	 * be vrl_cnt * VRRP_NAME_MAX.
276*1cb875aeSCathy Zhou 	 */
277*1cb875aeSCathy Zhou } vrrp_ret_list_t;
278*1cb875aeSCathy Zhou 
279*1cb875aeSCathy Zhou typedef struct vrrp_cmd_query_s {
280*1cb875aeSCathy Zhou 	uint32_t	vcq_cmd;
281*1cb875aeSCathy Zhou 	char		vcq_name[VRRP_NAME_MAX];
282*1cb875aeSCathy Zhou } vrrp_cmd_query_t;
283*1cb875aeSCathy Zhou 
284*1cb875aeSCathy Zhou typedef struct vrrp_ret_query_s {
285*1cb875aeSCathy Zhou 	vrrp_err_t		vrq_err;
286*1cb875aeSCathy Zhou 	vrrp_queryinfo_t	vrq_qinfo;
287*1cb875aeSCathy Zhou } vrrp_ret_query_t;
288*1cb875aeSCathy Zhou 
289*1cb875aeSCathy Zhou /*
290*1cb875aeSCathy Zhou  * Union of all VRRP commands
291*1cb875aeSCathy Zhou  */
292*1cb875aeSCathy Zhou typedef union vrrp_cmd_s {
293*1cb875aeSCathy Zhou 	uint32_t		vc_cmd;
294*1cb875aeSCathy Zhou 	vrrp_cmd_create_t	vc_cmd_create;
295*1cb875aeSCathy Zhou 	vrrp_cmd_delete_t	vc_cmd_delete;
296*1cb875aeSCathy Zhou 	vrrp_cmd_enable_t	vc_cmd_enable;
297*1cb875aeSCathy Zhou 	vrrp_cmd_disable_t	vc_cmd_disable;
298*1cb875aeSCathy Zhou 	vrrp_cmd_modify_t	vc_cmd_modify;
299*1cb875aeSCathy Zhou 	vrrp_cmd_list_t		vc_cmd_list;
300*1cb875aeSCathy Zhou } vrrp_cmd_t;
301*1cb875aeSCathy Zhou 
302*1cb875aeSCathy Zhou /*
303*1cb875aeSCathy Zhou  * Union of all VRRP replies of the VRRP commands
304*1cb875aeSCathy Zhou  */
305*1cb875aeSCathy Zhou typedef union vrrp_ret_s {
306*1cb875aeSCathy Zhou 	vrrp_err_t		vr_err;
307*1cb875aeSCathy Zhou 	vrrp_ret_create_t	vr_ret_create;
308*1cb875aeSCathy Zhou 	vrrp_ret_delete_t	vr_ret_delete;
309*1cb875aeSCathy Zhou 	vrrp_ret_enable_t	vr_ret_enable;
310*1cb875aeSCathy Zhou 	vrrp_ret_disable_t	vr_ret_disable;
311*1cb875aeSCathy Zhou 	vrrp_ret_modify_t	vr_ret_modify;
312*1cb875aeSCathy Zhou 	vrrp_ret_list_t		vr_ret_list;
313*1cb875aeSCathy Zhou 	vrrp_ret_query_t	vr_ret_query;
314*1cb875aeSCathy Zhou } vrrp_ret_t;
315*1cb875aeSCathy Zhou 
316*1cb875aeSCathy Zhou /*
317*1cb875aeSCathy Zhou  * Public APIs
318*1cb875aeSCathy Zhou  */
319*1cb875aeSCathy Zhou struct vrrp_handle {
320*1cb875aeSCathy Zhou 	dladm_handle_t	vh_dh;
321*1cb875aeSCathy Zhou };
322*1cb875aeSCathy Zhou typedef struct vrrp_handle *vrrp_handle_t;
323*1cb875aeSCathy Zhou 
324*1cb875aeSCathy Zhou const char	*vrrp_err2str(vrrp_err_t);
325*1cb875aeSCathy Zhou const char	*vrrp_state2str(vrrp_state_t);
326*1cb875aeSCathy Zhou 
327*1cb875aeSCathy Zhou vrrp_err_t	vrrp_open(vrrp_handle_t *);
328*1cb875aeSCathy Zhou void		vrrp_close(vrrp_handle_t);
329*1cb875aeSCathy Zhou 
330*1cb875aeSCathy Zhou boolean_t	vrrp_valid_name(const char *);
331*1cb875aeSCathy Zhou 
332*1cb875aeSCathy Zhou vrrp_err_t	vrrp_create(vrrp_handle_t, vrrp_vr_conf_t *);
333*1cb875aeSCathy Zhou vrrp_err_t	vrrp_delete(vrrp_handle_t, const char *);
334*1cb875aeSCathy Zhou 
335*1cb875aeSCathy Zhou vrrp_err_t	vrrp_enable(vrrp_handle_t, const char *);
336*1cb875aeSCathy Zhou vrrp_err_t	vrrp_disable(vrrp_handle_t, const char *);
337*1cb875aeSCathy Zhou 
338*1cb875aeSCathy Zhou vrrp_err_t	vrrp_modify(vrrp_handle_t, vrrp_vr_conf_t *, uint32_t);
339*1cb875aeSCathy Zhou 
340*1cb875aeSCathy Zhou vrrp_err_t	vrrp_query(vrrp_handle_t, const char *, vrrp_queryinfo_t **);
341*1cb875aeSCathy Zhou 
342*1cb875aeSCathy Zhou vrrp_err_t	vrrp_list(vrrp_handle_t, vrid_t, const char *, int,
343*1cb875aeSCathy Zhou 		    uint32_t *, char *);
344*1cb875aeSCathy Zhou 
345*1cb875aeSCathy Zhou boolean_t	vrrp_is_vrrp_vnic(vrrp_handle_t, datalink_id_t,
346*1cb875aeSCathy Zhou 		    datalink_id_t *, uint16_t *, vrid_t *, int *);
347*1cb875aeSCathy Zhou 
348*1cb875aeSCathy Zhou vrrp_err_t	vrrp_get_vnicname(vrrp_handle_t, vrid_t, int, char *,
349*1cb875aeSCathy Zhou 		    datalink_id_t *, uint16_t *, char *, size_t);
350*1cb875aeSCathy Zhou 
351*1cb875aeSCathy Zhou #ifdef __cplusplus
352*1cb875aeSCathy Zhou }
353*1cb875aeSCathy Zhou #endif
354*1cb875aeSCathy Zhou 
355*1cb875aeSCathy Zhou #endif	/* _LIBVRRPADM_H */
356