xref: /onnv-gate/usr/src/cmd/cmd-inet/usr.lib/ilbd/ilbd.h (revision 13141:bb6d135b32d1)
110946SSangeeta.Misra@Sun.COM /*
210946SSangeeta.Misra@Sun.COM  * CDDL HEADER START
310946SSangeeta.Misra@Sun.COM  *
410946SSangeeta.Misra@Sun.COM  * The contents of this file are subject to the terms of the
510946SSangeeta.Misra@Sun.COM  * Common Development and Distribution License (the "License").
610946SSangeeta.Misra@Sun.COM  * You may not use this file except in compliance with the License.
710946SSangeeta.Misra@Sun.COM  *
810946SSangeeta.Misra@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
910946SSangeeta.Misra@Sun.COM  * or http://www.opensolaris.org/os/licensing.
1010946SSangeeta.Misra@Sun.COM  * See the License for the specific language governing permissions
1110946SSangeeta.Misra@Sun.COM  * and limitations under the License.
1210946SSangeeta.Misra@Sun.COM  *
1310946SSangeeta.Misra@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
1410946SSangeeta.Misra@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1510946SSangeeta.Misra@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
1610946SSangeeta.Misra@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
1710946SSangeeta.Misra@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
1810946SSangeeta.Misra@Sun.COM  *
1910946SSangeeta.Misra@Sun.COM  * CDDL HEADER END
2010946SSangeeta.Misra@Sun.COM  */
2110946SSangeeta.Misra@Sun.COM 
2210946SSangeeta.Misra@Sun.COM /*
23*13141SSangeeta.Misra@Sun.COM  * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
2410946SSangeeta.Misra@Sun.COM  */
2510946SSangeeta.Misra@Sun.COM #ifndef _ILBD_H
2610946SSangeeta.Misra@Sun.COM #define	_ILBD_H
2710946SSangeeta.Misra@Sun.COM 
2810946SSangeeta.Misra@Sun.COM #ifdef __cplusplus
2910946SSangeeta.Misra@Sun.COM extern "C" {
3010946SSangeeta.Misra@Sun.COM #endif
3110946SSangeeta.Misra@Sun.COM 
3210946SSangeeta.Misra@Sun.COM #include <stdio.h>
3310946SSangeeta.Misra@Sun.COM #include <ucred.h>
3410946SSangeeta.Misra@Sun.COM #include <pwd.h>
3510946SSangeeta.Misra@Sun.COM #include <priv.h>
3610946SSangeeta.Misra@Sun.COM #include <stdarg.h>
3710946SSangeeta.Misra@Sun.COM #include <syslog.h>
3810946SSangeeta.Misra@Sun.COM #include <sys/list.h>
3910946SSangeeta.Misra@Sun.COM #include <libscf.h>
4010946SSangeeta.Misra@Sun.COM #include <libintl.h>
4110946SSangeeta.Misra@Sun.COM #include <locale.h>
4210946SSangeeta.Misra@Sun.COM #include <libinetutil.h>
4310946SSangeeta.Misra@Sun.COM #include <auth_list.h>
4410946SSangeeta.Misra@Sun.COM #include <bsm/adt.h>
4510946SSangeeta.Misra@Sun.COM #include <bsm/adt_event.h>
4610946SSangeeta.Misra@Sun.COM 
4710946SSangeeta.Misra@Sun.COM #define	SGNAME_SZ	80
4810946SSangeeta.Misra@Sun.COM #define	ILB_FMRI	"svc:/network/loadbalancer/ilb:default"
4910946SSangeeta.Misra@Sun.COM 
5010946SSangeeta.Misra@Sun.COM #define	HC_ACTION		ILB_SRV_DISABLED_HC
5110946SSangeeta.Misra@Sun.COM #define	ADMIN_ACTION		ILB_SRV_DISABLED_ADMIN
5210946SSangeeta.Misra@Sun.COM 
5310946SSangeeta.Misra@Sun.COM /* Max name and value length for scf properties */
5410946SSangeeta.Misra@Sun.COM #define	ILBD_MAX_NAME_LEN	ilbd_scf_limit(SCF_LIMIT_MAX_NAME_LENGTH)
5510946SSangeeta.Misra@Sun.COM #define	ILBD_MAX_VALUE_LEN	ilbd_scf_limit(SCF_LIMIT_MAX_VALUE_LENGTH)
5610946SSangeeta.Misra@Sun.COM 
5710946SSangeeta.Misra@Sun.COM /* Different events ILBD is interested in. */
5810946SSangeeta.Misra@Sun.COM typedef enum {
5910946SSangeeta.Misra@Sun.COM 	ILBD_EVENT_NEW_REQ,	/* New client request */
6010946SSangeeta.Misra@Sun.COM 	ILBD_EVENT_REQ,		/* Client request comes in */
6110946SSangeeta.Misra@Sun.COM 	ILBD_EVENT_REP_OK,	/* Reply channel to client is writeable */
6210946SSangeeta.Misra@Sun.COM 	ILBD_EVENT_PROBE,	/* A HC returns some result */
6310946SSangeeta.Misra@Sun.COM 	ILBD_EVENT_TIMER	/* ilbd_timer_q fired */
6410946SSangeeta.Misra@Sun.COM } ilbd_event_t;
6510946SSangeeta.Misra@Sun.COM 
6610946SSangeeta.Misra@Sun.COM typedef enum {
6710946SSangeeta.Misra@Sun.COM 	ILBD_SCF_RULE,	/* prop group for rules */
6810946SSangeeta.Misra@Sun.COM 	ILBD_SCF_SG,	/* prop group for servergroups */
6910946SSangeeta.Misra@Sun.COM 	ILBD_SCF_HC	/* prop group for healthchecks */
7010946SSangeeta.Misra@Sun.COM } ilbd_scf_pg_type_t;
7110946SSangeeta.Misra@Sun.COM 
7210946SSangeeta.Misra@Sun.COM typedef enum {
7310946SSangeeta.Misra@Sun.COM 	ILBD_SCF_CREATE,
7410946SSangeeta.Misra@Sun.COM 	ILBD_SCF_DESTROY,
7510946SSangeeta.Misra@Sun.COM 	ILBD_SCF_ENABLE_DISABLE
7610946SSangeeta.Misra@Sun.COM } ilbd_scf_cmd_t;
7710946SSangeeta.Misra@Sun.COM 
7810946SSangeeta.Misra@Sun.COM typedef enum {
7910946SSangeeta.Misra@Sun.COM 	ILBD_STRING,	/* string */
8010946SSangeeta.Misra@Sun.COM 	ILBD_INT,	/* int */
8110946SSangeeta.Misra@Sun.COM 	ILBD_ADDR_V4,	/* ipv4 addr */
8210946SSangeeta.Misra@Sun.COM 	ILBD_ADDR_V6	/* ipv6 addr */
8310946SSangeeta.Misra@Sun.COM } ilbd_scf_data_type_t;
8410946SSangeeta.Misra@Sun.COM 
8510946SSangeeta.Misra@Sun.COM typedef enum {
8610946SSangeeta.Misra@Sun.COM 	stat_enable_server,
8710946SSangeeta.Misra@Sun.COM 	stat_disable_server,
8810946SSangeeta.Misra@Sun.COM 	stat_declare_srv_dead,
8910946SSangeeta.Misra@Sun.COM 	stat_declare_srv_alive
9010946SSangeeta.Misra@Sun.COM } ilbd_srv_status_ind_t;
9110946SSangeeta.Misra@Sun.COM 
9210946SSangeeta.Misra@Sun.COM /*
9310946SSangeeta.Misra@Sun.COM  * All user struct pointer passed to port_associate() should have the first
9410946SSangeeta.Misra@Sun.COM  * field as ilbd_event_t.  The following struct can be used to find the
9510946SSangeeta.Misra@Sun.COM  * event.
9610946SSangeeta.Misra@Sun.COM  */
9710946SSangeeta.Misra@Sun.COM typedef struct {
9810946SSangeeta.Misra@Sun.COM 	ilbd_event_t	ev;
9910946SSangeeta.Misra@Sun.COM } ilbd_event_obj_t;
10010946SSangeeta.Misra@Sun.COM 
10110946SSangeeta.Misra@Sun.COM typedef struct {
10210946SSangeeta.Misra@Sun.COM 	ilbd_event_t	ev;
10310946SSangeeta.Misra@Sun.COM 	timer_t		timerid;
10410946SSangeeta.Misra@Sun.COM } ilbd_timer_event_obj_t;
10510946SSangeeta.Misra@Sun.COM 
10610946SSangeeta.Misra@Sun.COM typedef struct ilbd_srv {
10710946SSangeeta.Misra@Sun.COM 	list_node_t	isv_srv_link;
10810946SSangeeta.Misra@Sun.COM 	ilb_sg_srv_t	isv_srv;
10910946SSangeeta.Misra@Sun.COM #define	isv_addr	isv_srv.sgs_addr
11010946SSangeeta.Misra@Sun.COM #define	isv_minport	isv_srv.sgs_minport
11110946SSangeeta.Misra@Sun.COM #define	isv_maxport	isv_srv.sgs_maxport
11210946SSangeeta.Misra@Sun.COM #define	isv_flags	isv_srv.sgs_flags
11310946SSangeeta.Misra@Sun.COM #define	isv_id		isv_srv.sgs_id
11410946SSangeeta.Misra@Sun.COM #define	isv_srvID	isv_srv.sgs_srvID
11510946SSangeeta.Misra@Sun.COM } ilbd_srv_t;
11610946SSangeeta.Misra@Sun.COM 
11710946SSangeeta.Misra@Sun.COM #define	MAX_SRVCOUNT	1000
11810946SSangeeta.Misra@Sun.COM #define	MAX_SRVID	(MAX_SRVCOUNT - 1)
11910946SSangeeta.Misra@Sun.COM #define	BAD_SRVID	(-1)
12010946SSangeeta.Misra@Sun.COM 
12110946SSangeeta.Misra@Sun.COM typedef struct ilbd_sg {
12210946SSangeeta.Misra@Sun.COM 	list_t		isg_srvlist;	/* list of ilbd_srv_t */
12310946SSangeeta.Misra@Sun.COM 	char		isg_name[ILB_SGNAME_SZ];
12410946SSangeeta.Misra@Sun.COM 	int32_t		isg_srvcount;
12510946SSangeeta.Misra@Sun.COM 	int32_t		isg_max_id;
12610946SSangeeta.Misra@Sun.COM 	list_t		isg_rulelist;	/* list of ilbd_rule_t */
12710946SSangeeta.Misra@Sun.COM 	char		isg_id_arr[MAX_SRVCOUNT]; /* for server ID allocation */
12810946SSangeeta.Misra@Sun.COM 
12910946SSangeeta.Misra@Sun.COM 	list_node_t	isg_link;	/* linkage for sg list */
13010946SSangeeta.Misra@Sun.COM } ilbd_sg_t;
13110946SSangeeta.Misra@Sun.COM 
13210946SSangeeta.Misra@Sun.COM typedef struct ilbd_rule {
13310946SSangeeta.Misra@Sun.COM 	list_node_t		irl_link;
13410946SSangeeta.Misra@Sun.COM 	list_node_t		irl_sglink;
13510946SSangeeta.Misra@Sun.COM 	ilbd_sg_t		*irl_sg;
13610946SSangeeta.Misra@Sun.COM 	ilb_rule_info_t		irl_info;
13710946SSangeeta.Misra@Sun.COM #define	irl_flags	irl_info.rl_flags
13810946SSangeeta.Misra@Sun.COM #define	irl_name	irl_info.rl_name
13910946SSangeeta.Misra@Sun.COM #define	irl_vip		irl_info.rl_vip
14010946SSangeeta.Misra@Sun.COM #define	irl_proto	irl_info.rl_proto
14110946SSangeeta.Misra@Sun.COM #define	irl_ipversion	irl_info.rl_ipversion
14210946SSangeeta.Misra@Sun.COM #define	irl_minport	irl_info.rl_minport
14310946SSangeeta.Misra@Sun.COM #define	irl_maxport	irl_info.rl_maxport
14410946SSangeeta.Misra@Sun.COM #define	irl_algo	irl_info.rl_algo
14510946SSangeeta.Misra@Sun.COM #define	irl_topo	irl_info.rl_topo
14610946SSangeeta.Misra@Sun.COM #define	irl_nat_src_start	irl_info.rl_nat_src_start
14710946SSangeeta.Misra@Sun.COM #define	irl_nat_src_end	irl_info.rl_nat_src_end
14810946SSangeeta.Misra@Sun.COM #define	irl_stickymask	irl_info.rl_stickymask
14910946SSangeeta.Misra@Sun.COM #define	irl_conndrain	irl_info.rl_conndrain
15010946SSangeeta.Misra@Sun.COM #define	irl_nat_timeout	irl_info.rl_nat_timeout
15110946SSangeeta.Misra@Sun.COM #define	irl_sticky_timeout	irl_info.rl_sticky_timeout
15210946SSangeeta.Misra@Sun.COM #define	irl_hcport	irl_info.rl_hcport
15310946SSangeeta.Misra@Sun.COM #define	irl_hcpflag	irl_info.rl_hcpflag
15410946SSangeeta.Misra@Sun.COM #define	irl_sgname	irl_info.rl_sgname
15510946SSangeeta.Misra@Sun.COM #define	irl_hcname	irl_info.rl_hcname
15610946SSangeeta.Misra@Sun.COM } ilbd_rule_t;
15710946SSangeeta.Misra@Sun.COM 
15810946SSangeeta.Misra@Sun.COM /*
15910946SSangeeta.Misra@Sun.COM  * Health check related definitions
16010946SSangeeta.Misra@Sun.COM  */
16110946SSangeeta.Misra@Sun.COM 
16210946SSangeeta.Misra@Sun.COM /* Default health check probe program provided */
16310946SSangeeta.Misra@Sun.COM #define	ILB_PROBE_PROTO	"/usr/lib/inet/ilb/ilb_probe"
16410946SSangeeta.Misra@Sun.COM 
16510946SSangeeta.Misra@Sun.COM /* Command name (argv[0]) passed to ilb_probe to indicate a ping test */
16610946SSangeeta.Misra@Sun.COM #define	ILB_PROBE_PING	"ilb_ping"
16710946SSangeeta.Misra@Sun.COM 
16810946SSangeeta.Misra@Sun.COM /* Use the first character of the rule's hcname to decide if rule has HC. */
16910946SSangeeta.Misra@Sun.COM #define	RULE_HAS_HC(irl)	((irl)->irl_info.rl_hcname[0] != '\0')
17010946SSangeeta.Misra@Sun.COM 
17110946SSangeeta.Misra@Sun.COM /* Type of probe test */
17210946SSangeeta.Misra@Sun.COM typedef enum {
17310946SSangeeta.Misra@Sun.COM 	ILBD_HC_PING = 1,	/* ICMP Echo probe */
17410946SSangeeta.Misra@Sun.COM 	ILBD_HC_TCP,		/* TCP connect probe */
17510946SSangeeta.Misra@Sun.COM 	ILBD_HC_UDP,		/* UDP packet probe */
17610946SSangeeta.Misra@Sun.COM 	ILBD_HC_USER		/* User supplied probe */
17710946SSangeeta.Misra@Sun.COM } ilbd_hc_test_t;
17810946SSangeeta.Misra@Sun.COM 
17910946SSangeeta.Misra@Sun.COM /* Struct representing a hc object in ilbd */
18010946SSangeeta.Misra@Sun.COM typedef struct {
18110946SSangeeta.Misra@Sun.COM 	list_node_t	ihc_link;	/* List linkage */
18210946SSangeeta.Misra@Sun.COM 
18310946SSangeeta.Misra@Sun.COM 	ilb_hc_info_t	ihc_info;
18410946SSangeeta.Misra@Sun.COM /* Short hand for the fields inside ilb_hc_info_t */
18510946SSangeeta.Misra@Sun.COM #define	ihc_name	ihc_info.hci_name
18610946SSangeeta.Misra@Sun.COM #define	ihc_test	ihc_info.hci_test
18710946SSangeeta.Misra@Sun.COM #define	ihc_timeout	ihc_info.hci_timeout
18810946SSangeeta.Misra@Sun.COM #define	ihc_count	ihc_info.hci_count
18910946SSangeeta.Misra@Sun.COM #define	ihc_interval	ihc_info.hci_interval
19010946SSangeeta.Misra@Sun.COM #define	ihc_def_ping	ihc_info.hci_def_ping
19110946SSangeeta.Misra@Sun.COM 
19210946SSangeeta.Misra@Sun.COM 	ilbd_hc_test_t	ihc_test_type;	/* Type of probe test */
19310946SSangeeta.Misra@Sun.COM 	int		ihc_rule_cnt;	/* Num of rules associated with hc */
19410946SSangeeta.Misra@Sun.COM 	list_t		ihc_rules;	/* Rules associated with this hc */
19510946SSangeeta.Misra@Sun.COM } ilbd_hc_t;
19610946SSangeeta.Misra@Sun.COM 
19710946SSangeeta.Misra@Sun.COM struct ilbd_hc_srv_s;
19810946SSangeeta.Misra@Sun.COM 
19910946SSangeeta.Misra@Sun.COM /*
20010946SSangeeta.Misra@Sun.COM  * Struct representing a hc rule object
20110946SSangeeta.Misra@Sun.COM  *
20210946SSangeeta.Misra@Sun.COM  * hcr_link: list linkage
20310946SSangeeta.Misra@Sun.COM  * hcr_rule: pointer to the ilbd rule object
20410946SSangeeta.Misra@Sun.COM  * hcr_servers: list of servers of this rule
20510946SSangeeta.Misra@Sun.COM  */
20610946SSangeeta.Misra@Sun.COM typedef struct {
20710946SSangeeta.Misra@Sun.COM 	list_node_t		hcr_link;
20810946SSangeeta.Misra@Sun.COM 	ilbd_rule_t const 	*hcr_rule;
20910946SSangeeta.Misra@Sun.COM 	list_t			hcr_servers;
21010946SSangeeta.Misra@Sun.COM } ilbd_hc_rule_t;
21110946SSangeeta.Misra@Sun.COM 
21210946SSangeeta.Misra@Sun.COM struct ilbd_hc_srv_s;
21310946SSangeeta.Misra@Sun.COM 
21410946SSangeeta.Misra@Sun.COM /*
21510946SSangeeta.Misra@Sun.COM  * Struct representing a event of the probe process
21610946SSangeeta.Misra@Sun.COM  *
21710946SSangeeta.Misra@Sun.COM  * ihp_ev: the event type, which is ILBD_EVENT_PROBE
21810946SSangeeta.Misra@Sun.COM  * ihp_srv: pointer to the hc server object
21910946SSangeeta.Misra@Sun.COM  * ihp_pid: pid of the probe process
22010946SSangeeta.Misra@Sun.COM  * ihp_done: is ilbd done reading the output of the probe process
22110946SSangeeta.Misra@Sun.COM  */
22210946SSangeeta.Misra@Sun.COM typedef struct {
22310946SSangeeta.Misra@Sun.COM 	ilbd_event_t		ihp_ev;
22410946SSangeeta.Misra@Sun.COM 	struct ilbd_hc_srv_s	*ihp_srv;
22510946SSangeeta.Misra@Sun.COM 	pid_t			ihp_pid;
22610946SSangeeta.Misra@Sun.COM 	boolean_t		ihp_done;
22710946SSangeeta.Misra@Sun.COM } ilbd_hc_probe_event_t;
22810946SSangeeta.Misra@Sun.COM 
22910946SSangeeta.Misra@Sun.COM /*
23010946SSangeeta.Misra@Sun.COM  * ilbd_hc_srv_t state
23110946SSangeeta.Misra@Sun.COM  *
23210946SSangeeta.Misra@Sun.COM  * ihd_hc_def_pinging: the default ping should be run
23310946SSangeeta.Misra@Sun.COM  * ihd-hc_probing: the probe process should be started
23410946SSangeeta.Misra@Sun.COM  */
23510946SSangeeta.Misra@Sun.COM enum ilbd_hc_state {
23610946SSangeeta.Misra@Sun.COM 	ilbd_hc_def_pinging,
23710946SSangeeta.Misra@Sun.COM 	ilbd_hc_probing
23810946SSangeeta.Misra@Sun.COM };
23910946SSangeeta.Misra@Sun.COM 
24010946SSangeeta.Misra@Sun.COM /*
24110946SSangeeta.Misra@Sun.COM  * Struct representing a server associated with a hc object
24210946SSangeeta.Misra@Sun.COM  *
24310946SSangeeta.Misra@Sun.COM  * shc_srv_link: list linkage
24410946SSangeeta.Misra@Sun.COM  * shc_hc: pointer to the hc object
24510946SSangeeta.Misra@Sun.COM  * shc_hc_rule: pointer to the hc rule object
24610946SSangeeta.Misra@Sun.COM  * shc_sg_srv: pointer to the server group object
24710946SSangeeta.Misra@Sun.COM  * shc_tid: timeout ID
24810946SSangeeta.Misra@Sun.COM  * shc_cur_cnt: number of times the hc probe has been run
24910946SSangeeta.Misra@Sun.COM  * shc_fail_cnt: number of consecutive probe failure
25010946SSangeeta.Misra@Sun.COM  * shc_status: health status
25110946SSangeeta.Misra@Sun.COM  * shc_rtt: rtt (in micro sec) to the backend server
25210946SSangeeta.Misra@Sun.COM  * shc_lasttimer: last time a probe sequence is executed
25310946SSangeeta.Misra@Sun.COM  * shc_nexttime: next time a probe sequence is executed
25410946SSangeeta.Misra@Sun.COM  * shc_state: hc probe state
25510946SSangeeta.Misra@Sun.COM  * shc_child_pid: pid of the probe process
25610946SSangeeta.Misra@Sun.COM  * shc_child_fd: fd to the output of the probe process
25710946SSangeeta.Misra@Sun.COM  * shc_ev: event object of the probe process
25810946SSangeeta.Misra@Sun.COM  * shc_ev_port: event port of the event object
25910946SSangeeta.Misra@Sun.COM  */
26010946SSangeeta.Misra@Sun.COM typedef struct ilbd_hc_srv_s {
26110946SSangeeta.Misra@Sun.COM 	list_node_t		shc_srv_link;
26210946SSangeeta.Misra@Sun.COM 	ilbd_hc_t		*shc_hc;
26310946SSangeeta.Misra@Sun.COM 	ilbd_hc_rule_t		*shc_hc_rule;
26410946SSangeeta.Misra@Sun.COM 	ilb_sg_srv_t const	*shc_sg_srv;
26510946SSangeeta.Misra@Sun.COM 
26610946SSangeeta.Misra@Sun.COM 	iu_timer_id_t		shc_tid;
26710946SSangeeta.Misra@Sun.COM 	uint_t			shc_cur_cnt;
26810946SSangeeta.Misra@Sun.COM 	uint_t			shc_fail_cnt;
26910946SSangeeta.Misra@Sun.COM 	ilb_hc_srv_status_t	shc_status;
27010946SSangeeta.Misra@Sun.COM 	uint32_t		shc_rtt;
27110946SSangeeta.Misra@Sun.COM 	time_t			shc_lasttime;
27210946SSangeeta.Misra@Sun.COM 	time_t			shc_nexttime;
27310946SSangeeta.Misra@Sun.COM 
27410946SSangeeta.Misra@Sun.COM 	enum ilbd_hc_state	shc_state;
27510946SSangeeta.Misra@Sun.COM 	pid_t			shc_child_pid;
27610946SSangeeta.Misra@Sun.COM 	int			shc_child_fd;
27710946SSangeeta.Misra@Sun.COM 	ilbd_hc_probe_event_t	*shc_ev;
27810946SSangeeta.Misra@Sun.COM 	int			shc_ev_port;
27910946SSangeeta.Misra@Sun.COM } ilbd_hc_srv_t;
28010946SSangeeta.Misra@Sun.COM 
28110946SSangeeta.Misra@Sun.COM /*
28210946SSangeeta.Misra@Sun.COM  * Structure for holding audit server and servergroup event
28310946SSangeeta.Misra@Sun.COM  * data. Not all events use all members of the structure.
28410946SSangeeta.Misra@Sun.COM  */
28510946SSangeeta.Misra@Sun.COM typedef struct audit_sg_event_data {
286*13141SSangeeta.Misra@Sun.COM 	int32_t	ed_ipaddr_type;	/* ADT_IPv4 or ADT_IPv6 */
287*13141SSangeeta.Misra@Sun.COM 	uint32_t ed_server_address[4];  /* server's IP address */
28810946SSangeeta.Misra@Sun.COM 	char	*ed_serverid;   /* serverid. */
28910946SSangeeta.Misra@Sun.COM 	uint16_t	ed_minport;	/* server's minport */
29010946SSangeeta.Misra@Sun.COM 	uint16_t	ed_maxport;	/* server's maxport */
29110946SSangeeta.Misra@Sun.COM 	char		*ed_sgroup;	/* servergroup */
29210946SSangeeta.Misra@Sun.COM } audit_sg_event_data_t;
29310946SSangeeta.Misra@Sun.COM 
29410946SSangeeta.Misra@Sun.COM /* Struct to store client info */
29510946SSangeeta.Misra@Sun.COM typedef struct {
29610946SSangeeta.Misra@Sun.COM 	ilbd_event_t	cli_ev;
29710946SSangeeta.Misra@Sun.COM 	int	cli_sd;
29810946SSangeeta.Misra@Sun.COM 	struct passwd	cli_pw;
29910946SSangeeta.Misra@Sun.COM 	size_t		cli_pw_bufsz;
30010946SSangeeta.Misra@Sun.COM 	char		*cli_pw_buf;
30110946SSangeeta.Misra@Sun.COM 	ilbd_cmd_t	cli_cmd;
30210946SSangeeta.Misra@Sun.COM 	ilb_comm_t	*cli_saved_reply;
30310946SSangeeta.Misra@Sun.COM 	size_t		cli_saved_size;
30410946SSangeeta.Misra@Sun.COM 	ucred_t		*cli_peer_ucredp; /* needed for auditing */
30510946SSangeeta.Misra@Sun.COM } ilbd_client_t;
30610946SSangeeta.Misra@Sun.COM 
30710946SSangeeta.Misra@Sun.COM void		ilbd_reply_ok(uint32_t *, size_t *);
30810946SSangeeta.Misra@Sun.COM void		ilbd_reply_err(uint32_t *, size_t *, ilb_status_t);
30910946SSangeeta.Misra@Sun.COM 
31010946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_check_client_config_auth(const struct passwd *);
31110946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_check_client_enable_auth(const struct passwd *);
31210946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_retrieve_names(ilbd_cmd_t, uint32_t *, size_t *);
31310946SSangeeta.Misra@Sun.COM void		i_setup_sg_hlist(void);
31410946SSangeeta.Misra@Sun.COM void		i_setup_rule_hlist(void);
31510946SSangeeta.Misra@Sun.COM void		logperror(const char *);
31610946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_add_server_to_group(ilb_sg_info_t *, int,
31710946SSangeeta.Misra@Sun.COM 	const struct passwd *, ucred_t *);
31810946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_rem_server_from_group(ilb_sg_info_t *, int,
31910946SSangeeta.Misra@Sun.COM 	const struct passwd *, ucred_t *);
32010946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_create_sg(ilb_sg_info_t *, int,
32110946SSangeeta.Misra@Sun.COM 	const struct passwd *, ucred_t *);
32210946SSangeeta.Misra@Sun.COM 
32310946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_destroy_sg(const char *, const struct passwd *,
32410946SSangeeta.Misra@Sun.COM 		ucred_t *);
32510946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_retrieve_sg_hosts(const char *, uint32_t *, size_t *);
32610946SSangeeta.Misra@Sun.COM 
32710946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_enable_server(ilb_sg_info_t *, const struct passwd *,
32810946SSangeeta.Misra@Sun.COM 		ucred_t *);
32910946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_disable_server(ilb_sg_info_t *, const struct passwd *,
33010946SSangeeta.Misra@Sun.COM 		ucred_t *);
33110946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_k_Xable_server(const struct in6_addr *, const char *,
33210946SSangeeta.Misra@Sun.COM 		    ilbd_srv_status_ind_t);
33310946SSangeeta.Misra@Sun.COM 
33410946SSangeeta.Misra@Sun.COM ilb_status_t	i_add_srv2krules(list_t *, ilb_sg_srv_t *, int);
33510946SSangeeta.Misra@Sun.COM ilb_status_t	i_rem_srv_frm_krules(list_t *, ilb_sg_srv_t *, int);
33610946SSangeeta.Misra@Sun.COM int		ilbd_get_num_krules(void);
33710946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_get_krule_names(ilbd_namelist_t **, int);
33810946SSangeeta.Misra@Sun.COM ilb_status_t	ilb_get_krule_servers(ilb_sg_info_t *);
33910946SSangeeta.Misra@Sun.COM ilbd_sg_t	*i_find_sg_byname(const char *);
34010946SSangeeta.Misra@Sun.COM ilb_status_t	i_check_srv2rules(list_t *, ilb_sg_srv_t *);
34110946SSangeeta.Misra@Sun.COM 
34210946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_address_to_srvID(ilb_sg_info_t *, uint32_t *, size_t *);
34310946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_srvID_to_address(ilb_sg_info_t *, uint32_t *, size_t *);
34410946SSangeeta.Misra@Sun.COM 
34510946SSangeeta.Misra@Sun.COM ilb_status_t	do_ioctl(void *, ssize_t);
34610946SSangeeta.Misra@Sun.COM 
34710946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_create_rule(ilb_rule_info_t *, int, const struct passwd *,
34810946SSangeeta.Misra@Sun.COM 		ucred_t *);
34910946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_retrieve_rule(ilbd_name_t, uint32_t *, size_t *);
35010946SSangeeta.Misra@Sun.COM 
35110946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_destroy_rule(ilbd_name_t, const struct passwd *,
35210946SSangeeta.Misra@Sun.COM 		ucred_t *);
35310946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_enable_rule(ilbd_name_t, const struct passwd *, ucred_t *);
35410946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_disable_rule(ilbd_name_t, const struct passwd *,
35510946SSangeeta.Misra@Sun.COM 		ucred_t *);
35610946SSangeeta.Misra@Sun.COM 
35710946SSangeeta.Misra@Sun.COM boolean_t	is_debugging_on(void);
35810946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_sg_check_rule_port(ilbd_sg_t *, ilb_rule_info_t *);
35910946SSangeeta.Misra@Sun.COM 
36010946SSangeeta.Misra@Sun.COM void		ilbd_enable_debug(void);
36110946SSangeeta.Misra@Sun.COM ilb_status_t	ilb_map_errno2ilbstat(int);
36210946SSangeeta.Misra@Sun.COM 
36310946SSangeeta.Misra@Sun.COM ilb_status_t	i_attach_rule2sg(ilbd_sg_t *, ilbd_rule_t *);
36410946SSangeeta.Misra@Sun.COM 
36510946SSangeeta.Misra@Sun.COM /* Logging routine and macros */
36610946SSangeeta.Misra@Sun.COM void		ilbd_log(int, const char *, ...);
36710946SSangeeta.Misra@Sun.COM #define	logerr(...)	ilbd_log(LOG_ERR, __VA_ARGS__)
36810946SSangeeta.Misra@Sun.COM #define	logdebug(...)	ilbd_log(LOG_DEBUG, __VA_ARGS__)
36910946SSangeeta.Misra@Sun.COM 
37010946SSangeeta.Misra@Sun.COM /* Health check manipulation routines */
37110946SSangeeta.Misra@Sun.COM void		i_ilbd_setup_hc_list(void);
37210946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_create_hc(const ilb_hc_info_t *, int,
37310946SSangeeta.Misra@Sun.COM 		    const struct passwd *, ucred_t *);
37410946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_destroy_hc(const char *, const struct passwd *, ucred_t *);
37510946SSangeeta.Misra@Sun.COM ilbd_hc_t	*ilbd_get_hc(const char *);
37610946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_get_hc_info(const char *, uint32_t *, size_t *);
37710946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_get_hc_srvs(const char *, uint32_t *, size_t *);
37810946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_hc_associate_rule(const ilbd_rule_t *, int);
37910946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_hc_dissociate_rule(const ilbd_rule_t *);
38010946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_hc_add_server(const ilbd_rule_t *, const ilb_sg_srv_t *,
38110946SSangeeta.Misra@Sun.COM 		    int);
38210946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_hc_del_server(const ilbd_rule_t *, const ilb_sg_srv_t *);
38310946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_hc_enable_rule(const ilbd_rule_t *);
38410946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_hc_disable_rule(const ilbd_rule_t *);
38510946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_hc_enable_server(const ilbd_rule_t *,
38610946SSangeeta.Misra@Sun.COM 		    const ilb_sg_srv_t *);
38710946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_hc_disable_server(const ilbd_rule_t *,
38810946SSangeeta.Misra@Sun.COM 		    const ilb_sg_srv_t *);
38910946SSangeeta.Misra@Sun.COM 
39010946SSangeeta.Misra@Sun.COM /* Health check timer routines */
39110946SSangeeta.Misra@Sun.COM void		ilbd_hc_probe_return(int, int, int, ilbd_hc_probe_event_t *);
39210946SSangeeta.Misra@Sun.COM void		ilbd_hc_timer_init(int, ilbd_timer_event_obj_t *);
39310946SSangeeta.Misra@Sun.COM void		ilbd_hc_timeout(void);
39410946SSangeeta.Misra@Sun.COM void		ilbd_hc_timer_update(ilbd_timer_event_obj_t *);
39510946SSangeeta.Misra@Sun.COM 
39610946SSangeeta.Misra@Sun.COM /* Show NAT info routines */
39710946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_show_nat(void *, const ilb_comm_t *, uint32_t *,
39810946SSangeeta.Misra@Sun.COM 		    size_t *);
39910946SSangeeta.Misra@Sun.COM void		ilbd_show_nat_cleanup(void);
40010946SSangeeta.Misra@Sun.COM 
40110946SSangeeta.Misra@Sun.COM 
40210946SSangeeta.Misra@Sun.COM /* Show sticky info routines */
40310946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_show_sticky(void *, const ilb_comm_t *, uint32_t *,
40410946SSangeeta.Misra@Sun.COM 		    size_t *);
40510946SSangeeta.Misra@Sun.COM void		ilbd_show_sticky_cleanup(void);
40610946SSangeeta.Misra@Sun.COM 
40710946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_create_pg(ilbd_scf_pg_type_t, void *);
40810946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_destroy_pg(ilbd_scf_pg_type_t, const char *);
40910946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_change_prop(ilbd_scf_pg_type_t, const char *,
41010946SSangeeta.Misra@Sun.COM 		    const char *, void *);
41110946SSangeeta.Misra@Sun.COM void		ilbd_scf_str_to_ip(int, char *, struct in6_addr *);
41210946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_scf_ip_to_str(uint16_t, struct in6_addr *, scf_type_t *,
41310946SSangeeta.Misra@Sun.COM 		    char *);
41410946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_scf_add_srv(ilbd_sg_t *, ilbd_srv_t *);
41510946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_scf_del_srv(ilbd_sg_t *, ilbd_srv_t *);
41610946SSangeeta.Misra@Sun.COM int		ilbd_scf_limit(int);
41710946SSangeeta.Misra@Sun.COM 
41810946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_walk_rule_pgs(ilb_status_t (*)(ilb_rule_info_t *, int,
41910946SSangeeta.Misra@Sun.COM 		    const struct passwd *, ucred_t *), void *, void *);
42010946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_walk_sg_pgs(ilb_status_t (*)(ilb_sg_info_t *, int,
42110946SSangeeta.Misra@Sun.COM 		    const struct passwd *, ucred_t *), void *, void *);
42210946SSangeeta.Misra@Sun.COM ilb_status_t	ilbd_walk_hc_pgs(ilb_status_t (*)(const ilb_hc_info_t *, int,
42310946SSangeeta.Misra@Sun.COM 		    const struct passwd *, ucred_t *), void *, void *);
42410946SSangeeta.Misra@Sun.COM void		ilbd_algo_to_str(ilb_algo_t, char *);
42510946SSangeeta.Misra@Sun.COM void		ilbd_topo_to_str(ilb_topo_t, char *);
42610946SSangeeta.Misra@Sun.COM void		ilbd_ip_to_str(uint16_t, struct in6_addr *, char *);
427*13141SSangeeta.Misra@Sun.COM void		cvt_addr(uint32_t *, int32_t, struct in6_addr);
42810946SSangeeta.Misra@Sun.COM int		ilberror2auditerror(ilb_status_t);
42910946SSangeeta.Misra@Sun.COM 
43010946SSangeeta.Misra@Sun.COM #ifdef __cplusplus
43110946SSangeeta.Misra@Sun.COM }
43210946SSangeeta.Misra@Sun.COM #endif
43310946SSangeeta.Misra@Sun.COM 
43410946SSangeeta.Misra@Sun.COM #endif /* _ILBD_H */
435