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