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