dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * CDDL HEADER START
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * The contents of this file are subject to the terms of the
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Common Development and Distribution License (the "License").
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * You may not use this file except in compliance with the License.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * or http://www.opensolaris.org/os/licensing.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * See the License for the specific language governing permissions
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * and limitations under the License.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * When distributing Covered Code, include this CDDL HEADER in each
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * If applicable, add the following below this CDDL HEADER, with the
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * fields enclosed by brackets "[]" replaced with your own identifying
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * information: Portions Copyright [yyyy] [name of copyright owner]
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * CDDL HEADER END
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Use is subject to license terms.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#ifndef _LIBILB_H
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define _LIBILB_H
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#ifdef __cplusplus
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraextern "C" {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#endif
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <sys/types.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <netinet/in.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <net/if.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* make sure these values stay in sync with definitions in ilb.h! */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_FLAGS_RULE_ENABLED 0x01
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_FLAGS_RULE_STICKY 0x02
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_FLAGS_RULE_ALLRULES 0x04
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_FLAGS_RESERVED 0x08 /* in use by kernel, don't overlay */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * information whether we're interested in names or numerical information
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_FLAGS_SRV_HOSTNAME 0x01 /* a servers hostname was given */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_FLAGS_SRV_PORTNAME 0x02 /* a port was spec'd by name */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * server status information
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_FLAGS_SRV_ENABLED 0x10
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * macros to determine, and for some cases, set status of server
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_IS_SRV_ENABLED(f) \
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ((f & ILB_FLAGS_SRV_ENABLED) == ILB_FLAGS_SRV_ENABLED)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_IS_SRV_DISABLED(f) ((f & ILB_FLAGS_SRV_ENABLED) == 0)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_SET_ENABLED(f) (f |= ILB_FLAGS_SRV_ENABLED)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_SET_DISABLED(f) (f &= ~ILB_FLAGS_SRV_ENABLED)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define MAX_IP_SPREAD 0xff /* largest ip addr. range */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_HC_STR_UDP "udp"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_HC_STR_TCP "tcp"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_HC_STR_PING "ping"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_NAMESZ 20 /* keep in sync with kernel definition */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_SGNAME_SZ (ILB_NAMESZ - 5) /* 3 numeric digits, "." and "_" */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_SRVID_PREFIX '_' /* a valid serverID starts with this */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* producers of these statuses are libilb and ilbd functions */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef enum {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_OK = 0,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_INTERNAL, /* an error internal to the library */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_EINVAL, /* invalid argument(s) */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_ENOMEM, /* not enough memory for operation */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_ENOENT, /* no such/no more element(s) */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_SOCKET, /* socket related failure */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_READ, /* read related failure */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_WRITE, /* write related failure */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_TIMER, /* healthcheck timer error */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_INUSE, /* item in use, cannot delete */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_EEXIST, /* scf item exist */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_PERMIT, /* no scf permit */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_CALLBACK, /* scf callback error */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_EWOULDBLOCK, /* operation is blocked - no error string */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_INPROGRESS, /* operation already in progress */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_SEND, /* send related failure */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_GENERIC, /* generic failure - no error string */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_ENOHCINFO, /* missing healthcheck info */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_INVAL_HCTESTTYPE, /* invalid health check */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_INVAL_CMD, /* unknown command */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_DUP_RULE, /* rule name exists */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_ENORULE, /* rule does not exist */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_MISMATCHSG, /* addr family mismatch with sgroup */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_MISMATCHH, /* addr family mismatch with hosts/rule */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_SGUNAVAIL, /* cannot find sgroup in sggroup list */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_SGINUSE, /* server is un use, cannot remove */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_SGEXISTS, /* server exists */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_SGFULL, /* cannot add any more servers */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_SGEMPTY, /* sgroup is empty */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_NAMETOOLONG, /* a name is longer than allowed */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_CFGAUTH, /* config authoriz denied -no error string */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_CFGUPDATE, /* failed to update config! */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_BADSG, /* rules port range size does not match */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* that of the servers */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_INVAL_SRVR, /* server port is incompatible with */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* rule port */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_INVAL_ENBSRVR, /* server cannot be enabled since it's */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* not being used by a rule */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_BADPORT, /* rules port value does not match */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* server's */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_SRVUNAVAIL, /* cannot find specified server */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_RULE_NO_HC, /* rule does not have hc info */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_RULE_HC_MISMATCH, /* rule and hc object mismatch */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_STATUS_HANDLE_CLOSING /* library handle is being closed */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} ilb_status_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef struct {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int32_t ia_af; /* AF_INET or AF_INET6 */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra union {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra struct in_addr v4; /* network byte order */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra struct in6_addr v6; /* network byte order */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra } _au;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ia_v4 _au.v4
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ia_v6 _au.v6
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} ilb_ip_addr_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* Supported load balancing algorithm type */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef enum {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_ALG_ROUNDROBIN = 1,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_ALG_HASH_IP,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_ALG_HASH_IP_SPORT,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_ALG_HASH_IP_VIP
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} ilb_algo_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* Supported load balancing method */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef enum {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_TOPO_DSR = 1,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_TOPO_NAT,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_TOPO_HALF_NAT
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} ilb_topo_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILB_INVALID_HANDLE ((void *) NULL)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * note: pointer to a non-existant struct
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef struct ilb_handle *ilb_handle_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Health check related information
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* HC state of a server */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef enum {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_HCS_UNINIT = -1, /* Uninitialized */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_HCS_UNREACH = 0, /* Unreachable, ping fails */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_HCS_ALIVE, /* Probe succeeds */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_HCS_DEAD, /* Probe fails */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_HCS_DISABLED /* Server is disabled */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} ilb_hc_srv_status_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Struct representing a server in a hc object
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hcs_rule_name: rule using this server
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hcs_ID: server ID
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hcs_hc_name: hc object this server is associated with
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hcs_IP: IP address of the server
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hcs_fail_cnt: number of fail hc probe
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hcs_status: hc status of the server
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hcs_rtt: (in microsec) smoothed average RTT to the server
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hcs_lasttime: last time hc test was done (as returned by time(2))
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hcs_nexttime: next time hc test will be done (as returned by (time(2))
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef struct {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char hcs_rule_name[ILB_NAMESZ];
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char hcs_ID[ILB_NAMESZ];
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char hcs_hc_name[ILB_NAMESZ];
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra struct in6_addr hcs_IP;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra uint32_t hcs_fail_cnt;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_hc_srv_status_t hcs_status;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra uint32_t hcs_rtt;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra time_t hcs_lasttime;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra time_t hcs_nexttime;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} ilb_hc_srv_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* Probe flags to be used in r_hcpflag in struct rule data. */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef enum {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_HCI_PROBE_ANY = 0, /* Probe any port in the server port range */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILB_HCI_PROBE_FIX /* Probe a fixed port */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} ilb_hcp_flags_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Struct representing a hc object
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hci_name: name of the hc object
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hci_test: hc test to be done, TCP, UDP, or user supplied path name
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hci_timeout: (in sec) test time out
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hci_interval: (in sec) test execution interval
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * hci_def_ping: true if default ping is done; false otherwise
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef struct {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char hci_name[ILB_NAMESZ];
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char hci_test[MAXPATHLEN];
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int32_t hci_timeout;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int32_t hci_count;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int32_t hci_interval;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra boolean_t hci_def_ping;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} ilb_hc_info_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef struct rule_data {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char r_name[ILB_NAMESZ]; /* name of this rule */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int32_t r_flags; /* opt: ILB_FLAGS_RULE_ENABLED etc. */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_ip_addr_t r_vip; /* vip, required for rule creation */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra uint16_t r_proto; /* protocol (tcp, udp) */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in_port_t r_minport; /* port this rule refers to */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in_port_t r_maxport; /* if != 0, defines port range */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_algo_t r_algo; /* round-robin, hash-ip, etc. */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_topo_t r_topo; /* dsr, NAT, etc */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_ip_addr_t r_nat_src_start; /* required for NAT */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_ip_addr_t r_nat_src_end; /* required for NAT */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_ip_addr_t r_stickymask; /* netmask for persistence */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra uint32_t r_conndrain; /* opt: time for conn. draining (s) */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra uint32_t r_nat_timeout; /* opt: timeout for nat connections */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra uint32_t r_sticky_timeout; /* opt: timeout for persistence */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_hcp_flags_t r_hcpflag; /* HC port flag */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in_port_t r_hcport; /* opt with HC */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char r_sgname[ILB_SGNAME_SZ]; /* this rule's server grp. */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char r_hcname[ILB_NAMESZ]; /* HC name: optional */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} ilb_rule_data_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* not all fields are valid in all calls where this is used */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef struct server_data {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_ip_addr_t sd_addr; /* a server's ip address */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in_port_t sd_minport; /* port information */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in_port_t sd_maxport; /* ... if != 0, defines a port range */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra uint32_t sd_flags; /* enabled, dis- */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char sd_srvID[ILB_NAMESZ]; /* "name" for server */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* assigned by system, not user */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} ilb_server_data_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Struct to represent a server group.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * sgd_name: server group name
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * sgd_flags: flags
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * sgd_srvcount: number of servers in the group (not used in sever group
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * creation); filled in when used by call back function for
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * ilb_walk_servergroups().
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef struct sg_data {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char sgd_name[ILB_SGNAME_SZ];
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int32_t sgd_flags;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int32_t sgd_srvcount;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} ilb_sg_data_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Struct to represent a NAT entry in kernel.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * nat_proto: transport protocol used in this NAT entry
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * nat_out_global: IP address of client's request
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * nat_out_global_port: port number of client's request
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * nat_in_global: VIP of a rule for the NAT entry
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * nat_in_global_port: port of a rule for the NAT entry
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * nat_out_local: half NAT: IP address of client's request
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * full NAT: NAT'ed IP addres of client' request
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * nat_out_local_port: half NAT: port number of client's request
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * full NAT: NAT'ed port number of client's request
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * nat_in_local: IP address of back end server handling this request
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * nat_in_local_port: port number in back end server handling thi request
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * (*) IPv4 address is represented as IPv4 mapped IPv6 address.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef struct {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra uint32_t nat_proto;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in6_addr_t nat_in_local;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in6_addr_t nat_in_global;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in6_addr_t nat_out_local;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in6_addr_t nat_out_global;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in_port_t nat_in_local_port;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in_port_t nat_in_global_port;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in_port_t nat_out_local_port;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in_port_t nat_out_global_port;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} ilb_nat_info_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Struct to represet a persistent entry in kernel.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * rule_name: the name of rule for a persistent entry
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * req_addr: the client's IP address (*)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * srv_addr: the server's IP address (*) handling the client's request
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * (*) IPv4 address is represented as IPv4 mapped IPv6 address.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef struct {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char persist_rule_name[ILB_NAMESZ];
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in6_addr_t persist_req_addr;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra in6_addr_t persist_srv_addr;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} ilb_persist_info_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Function prototype of the call back function of those walker functions.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Note: the storage of the data item parameter (ilb_sg_data_t/
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * ilb_server_data_/ilb_rule_data_t/ilb_hc_info_t/ilb_hc_srv_t) will be
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * freed after calling the call back function. If the call back function
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * needs to keep a copy of the data, it must copy the data content.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef ilb_status_t (* sg_walkerfunc_t)(ilb_handle_t, ilb_sg_data_t *,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra void *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef ilb_status_t (* srv_walkerfunc_t)(ilb_handle_t, ilb_server_data_t *,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra const char *, void *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef ilb_status_t (* rule_walkerfunc_t)(ilb_handle_t, ilb_rule_data_t *,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra void *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef ilb_status_t (* hc_walkerfunc_t)(ilb_handle_t, ilb_hc_info_t *,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra void *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef ilb_status_t (* hc_srvwalkerfunc_t)(ilb_handle_t, ilb_hc_srv_t *,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra void *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * ilb_open creates a session handle that every caller into
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * libilb needs to use
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_open(ilb_handle_t *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * relinquish the session handle
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_close(ilb_handle_t);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* support and general functions */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_reset_config(ilb_handle_t);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraconst char *ilb_errstr(ilb_status_t);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* rule-related functions */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_create_rule(ilb_handle_t, const ilb_rule_data_t *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_destroy_rule(ilb_handle_t, const char *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_disable_rule(ilb_handle_t, const char *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_enable_rule(ilb_handle_t, const char *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_walk_rules(ilb_handle_t, rule_walkerfunc_t, const char *,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra void *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* servergroup functionality */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_create_servergroup(ilb_handle_t, const char *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_destroy_servergroup(ilb_handle_t, const char *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_add_server_to_group(ilb_handle_t, const char *,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_server_data_t *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_rem_server_from_group(ilb_handle_t, const char *,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_server_data_t *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_walk_servergroups(ilb_handle_t, sg_walkerfunc_t,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra const char *, void *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_walk_servers(ilb_handle_t, srv_walkerfunc_t,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra const char *, void *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* functions for individual servers */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_enable_server(ilb_handle_t, ilb_server_data_t *, void *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_disable_server(ilb_handle_t, ilb_server_data_t *, void *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_srvID_to_address(ilb_handle_t, ilb_server_data_t *,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra const char *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_address_to_srvID(ilb_handle_t, ilb_server_data_t *,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra const char *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* health check-related functions */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_create_hc(ilb_handle_t, const ilb_hc_info_t *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_destroy_hc(ilb_handle_t, const char *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_get_hc_info(ilb_handle_t, const char *, ilb_hc_info_t *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_walk_hc(ilb_handle_t, hc_walkerfunc_t, void *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_walk_hc_srvs(ilb_handle_t, hc_srvwalkerfunc_t,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra const char *, void *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* To show NAT table entries of ILB */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_show_nat(ilb_handle_t, ilb_nat_info_t[], size_t *,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra boolean_t *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* To show persistent table entries of ILB */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t ilb_show_persist(ilb_handle_t, ilb_persist_info_t[], size_t *,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra boolean_t *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* PRIVATE */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraint ilb_cmp_ipaddr(ilb_ip_addr_t *, ilb_ip_addr_t *, int64_t *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraint ilb_cmp_in6_addr(struct in6_addr *, struct in6_addr *, int64_t *);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#ifdef __cplusplus
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#endif
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#endif /* _LIBILB_H */