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