1*10946SSangeeta.Misra@Sun.COM /* 2*10946SSangeeta.Misra@Sun.COM * CDDL HEADER START 3*10946SSangeeta.Misra@Sun.COM * 4*10946SSangeeta.Misra@Sun.COM * The contents of this file are subject to the terms of the 5*10946SSangeeta.Misra@Sun.COM * Common Development and Distribution License (the "License"). 6*10946SSangeeta.Misra@Sun.COM * You may not use this file except in compliance with the License. 7*10946SSangeeta.Misra@Sun.COM * 8*10946SSangeeta.Misra@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*10946SSangeeta.Misra@Sun.COM * or http://www.opensolaris.org/os/licensing. 10*10946SSangeeta.Misra@Sun.COM * See the License for the specific language governing permissions 11*10946SSangeeta.Misra@Sun.COM * and limitations under the License. 12*10946SSangeeta.Misra@Sun.COM * 13*10946SSangeeta.Misra@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 14*10946SSangeeta.Misra@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*10946SSangeeta.Misra@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 16*10946SSangeeta.Misra@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 17*10946SSangeeta.Misra@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 18*10946SSangeeta.Misra@Sun.COM * 19*10946SSangeeta.Misra@Sun.COM * CDDL HEADER END 20*10946SSangeeta.Misra@Sun.COM */ 21*10946SSangeeta.Misra@Sun.COM /* 22*10946SSangeeta.Misra@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23*10946SSangeeta.Misra@Sun.COM * Use is subject to license terms. 24*10946SSangeeta.Misra@Sun.COM */ 25*10946SSangeeta.Misra@Sun.COM 26*10946SSangeeta.Misra@Sun.COM #ifndef _ILBADM_H 27*10946SSangeeta.Misra@Sun.COM #define _ILBADM_H 28*10946SSangeeta.Misra@Sun.COM 29*10946SSangeeta.Misra@Sun.COM #ifdef __cplusplus 30*10946SSangeeta.Misra@Sun.COM extern "C" { 31*10946SSangeeta.Misra@Sun.COM #endif 32*10946SSangeeta.Misra@Sun.COM 33*10946SSangeeta.Misra@Sun.COM #include <stdio.h> 34*10946SSangeeta.Misra@Sun.COM #include <sys/list.h> 35*10946SSangeeta.Misra@Sun.COM #include <net/if.h> 36*10946SSangeeta.Misra@Sun.COM #include <stdarg.h> 37*10946SSangeeta.Misra@Sun.COM #include <inttypes.h> 38*10946SSangeeta.Misra@Sun.COM #include <libilb.h> 39*10946SSangeeta.Misra@Sun.COM #include <libintl.h> 40*10946SSangeeta.Misra@Sun.COM #include <locale.h> 41*10946SSangeeta.Misra@Sun.COM 42*10946SSangeeta.Misra@Sun.COM #define ILBADM_VERSION "1.0" 43*10946SSangeeta.Misra@Sun.COM #define ILBADM_COPYRIGHT \ 44*10946SSangeeta.Misra@Sun.COM "Copyright 2009 Sun Microsystems, Inc. All rights reserved.\n" \ 45*10946SSangeeta.Misra@Sun.COM "Use is subject to license terms.\n" 46*10946SSangeeta.Misra@Sun.COM 47*10946SSangeeta.Misra@Sun.COM /* 48*10946SSangeeta.Misra@Sun.COM * flag values 49*10946SSangeeta.Misra@Sun.COM */ 50*10946SSangeeta.Misra@Sun.COM #define OPT_VALUE_LIST 0x0001 51*10946SSangeeta.Misra@Sun.COM #define OPT_IP_RANGE 0x0002 52*10946SSangeeta.Misra@Sun.COM #define OPT_PORTS 0x0004 53*10946SSangeeta.Misra@Sun.COM #define OPT_PORTS_ONLY 0x0008 54*10946SSangeeta.Misra@Sun.COM #define OPT_NAT 0x0010 55*10946SSangeeta.Misra@Sun.COM #define OPT_NUMERIC_ONLY 0x0020 56*10946SSangeeta.Misra@Sun.COM 57*10946SSangeeta.Misra@Sun.COM #define ILBD_BAD_VAL (-1) 58*10946SSangeeta.Misra@Sun.COM 59*10946SSangeeta.Misra@Sun.COM #define ILBADM_LIST_FULL 0x0001 60*10946SSangeeta.Misra@Sun.COM #define ILBADM_LIST_PARSE 0x0002 61*10946SSangeeta.Misra@Sun.COM #define ILBADM_LIST_ENABLED 0x0004 62*10946SSangeeta.Misra@Sun.COM #define ILBADM_LIST_NOENABLED (~ILBADM_LIST_ENABLED) 63*10946SSangeeta.Misra@Sun.COM #define ILBADM_LIST_DISABLED 0x0008 64*10946SSangeeta.Misra@Sun.COM #define ILBADM_LIST_NODISABLED (~ILBADM_LIST_DISABLED) 65*10946SSangeeta.Misra@Sun.COM 66*10946SSangeeta.Misra@Sun.COM #define ILBADM_IMPORT_PRESERVE 0x1000 67*10946SSangeeta.Misra@Sun.COM 68*10946SSangeeta.Misra@Sun.COM #define V6_ADDRONLY 0x1 /* don't print surrounding "[]"s */ 69*10946SSangeeta.Misra@Sun.COM 70*10946SSangeeta.Misra@Sun.COM #define ILB_SRVID_SZ (ILB_NAMESZ - 5) 71*10946SSangeeta.Misra@Sun.COM #define ILBD_NAMESZ ILB_NAMESZ 72*10946SSangeeta.Misra@Sun.COM 73*10946SSangeeta.Misra@Sun.COM #define ILB_MAX_PORT UINT16_MAX 74*10946SSangeeta.Misra@Sun.COM 75*10946SSangeeta.Misra@Sun.COM typedef enum { 76*10946SSangeeta.Misra@Sun.COM ILBADM_OK = 0, 77*10946SSangeeta.Misra@Sun.COM ILBADM_ASSIGNREQ, /* assignment '=' required */ 78*10946SSangeeta.Misra@Sun.COM ILBADM_EINVAL, /* invalid value */ 79*10946SSangeeta.Misra@Sun.COM ILBADM_ENOMEM, /* malloc failed */ 80*10946SSangeeta.Misra@Sun.COM ILBADM_ENOOPTION, /* mandatory option missing */ 81*10946SSangeeta.Misra@Sun.COM ILBADM_ENOPROTO, /* protocol not found in database */ 82*10946SSangeeta.Misra@Sun.COM ILBADM_ENOPROXY, /* proxy-src is missing */ 83*10946SSangeeta.Misra@Sun.COM ILBADM_ENOSERVICE, /* servicename not found in database */ 84*10946SSangeeta.Misra@Sun.COM ILBADM_ENOSGNAME, /* servergroup name missing */ 85*10946SSangeeta.Misra@Sun.COM ILBADM_ENORULE, /* rulename missing or no such rule */ 86*10946SSangeeta.Misra@Sun.COM ILBADM_ENOSERVER, /* rulename missing or no such rule */ 87*10946SSangeeta.Misra@Sun.COM ILBADM_EXPORTFAIL, /* too little space to do export servergroup */ 88*10946SSangeeta.Misra@Sun.COM ILBADM_FAIL, /* processing of command failed */ 89*10946SSangeeta.Misra@Sun.COM ILBADM_HCPRINT, /* failed to print healthcheck */ 90*10946SSangeeta.Misra@Sun.COM ILBADM_INVAL_ADDR, /* invalid address */ 91*10946SSangeeta.Misra@Sun.COM ILBADM_INVAL_AF, /* invalid address family */ 92*10946SSangeeta.Misra@Sun.COM ILBADM_INVAL_ALG, /* LB algorithm failure */ 93*10946SSangeeta.Misra@Sun.COM ILBADM_INVAL_ARGS, /* invalid arguments to command */ 94*10946SSangeeta.Misra@Sun.COM ILBADM_INVAL_COMMAND, /* invalid command */ 95*10946SSangeeta.Misra@Sun.COM ILBADM_INVAL_KEYWORD, /* invalid keyword */ 96*10946SSangeeta.Misra@Sun.COM ILBADM_INVAL_OPER, /* invalid operation type */ 97*10946SSangeeta.Misra@Sun.COM ILBADM_INVAL_PORT, /* invalid value specified for port */ 98*10946SSangeeta.Misra@Sun.COM ILBADM_INVAL_PROXY, /* proxy-src not allowed */ 99*10946SSangeeta.Misra@Sun.COM ILBADM_INVAL_SYNTAX, /* syntax error */ 100*10946SSangeeta.Misra@Sun.COM ILBADM_INVAL_SRVID, /* server id is invalid (missing "_" ?) */ 101*10946SSangeeta.Misra@Sun.COM ILBADM_LIBERR, /* translation of libilb errors. We also */ 102*10946SSangeeta.Misra@Sun.COM /* set it in ilbadm fuctions to indicate */ 103*10946SSangeeta.Misra@Sun.COM /* printing of non-generic error messages */ 104*10946SSangeeta.Misra@Sun.COM ILBADM_NORECURSIVE, /* recursive import not allowed */ 105*10946SSangeeta.Misra@Sun.COM ILBADM_TOOMANYIPADDR, /* too many addresses */ 106*10946SSangeeta.Misra@Sun.COM ILBADM_NOKEYWORD_VAL /* no value specified for a keyword */ 107*10946SSangeeta.Misra@Sun.COM } ilbadm_status_t; 108*10946SSangeeta.Misra@Sun.COM 109*10946SSangeeta.Misra@Sun.COM 110*10946SSangeeta.Misra@Sun.COM typedef enum { 111*10946SSangeeta.Misra@Sun.COM ILB_KEY_BAD = -1, 112*10946SSangeeta.Misra@Sun.COM ILB_KEY_SERVER, 113*10946SSangeeta.Misra@Sun.COM ILB_KEY_SERVRANGE, /* pseudo-key for SG creation */ 114*10946SSangeeta.Misra@Sun.COM ILB_KEY_SERVERID, 115*10946SSangeeta.Misra@Sun.COM ILB_KEY_VIP, 116*10946SSangeeta.Misra@Sun.COM ILB_KEY_PORT, 117*10946SSangeeta.Misra@Sun.COM ILB_KEY_PROTOCOL, 118*10946SSangeeta.Misra@Sun.COM ILB_KEY_IPVERSION, 119*10946SSangeeta.Misra@Sun.COM ILB_KEY_ALGORITHM, 120*10946SSangeeta.Misra@Sun.COM ILB_KEY_TYPE, 121*10946SSangeeta.Misra@Sun.COM ILB_KEY_SERVERGROUP, 122*10946SSangeeta.Misra@Sun.COM ILB_KEY_HEALTHCHECK, 123*10946SSangeeta.Misra@Sun.COM ILB_KEY_HCPORT, 124*10946SSangeeta.Misra@Sun.COM ILB_KEY_SRC, 125*10946SSangeeta.Misra@Sun.COM ILB_KEY_STICKY, 126*10946SSangeeta.Misra@Sun.COM ILB_KEY_CONNDRAIN, /* otional timers ... */ 127*10946SSangeeta.Misra@Sun.COM ILB_KEY_NAT_TO, 128*10946SSangeeta.Misra@Sun.COM ILB_KEY_STICKY_TO, 129*10946SSangeeta.Misra@Sun.COM ILB_KEY_HC_TEST, 130*10946SSangeeta.Misra@Sun.COM ILB_KEY_HC_COUNT, 131*10946SSangeeta.Misra@Sun.COM ILB_KEY_HC_INTERVAL, 132*10946SSangeeta.Misra@Sun.COM ILB_KEY_HC_TIMEOUT 133*10946SSangeeta.Misra@Sun.COM } ilbadm_key_code_t; 134*10946SSangeeta.Misra@Sun.COM 135*10946SSangeeta.Misra@Sun.COM /* 136*10946SSangeeta.Misra@Sun.COM * we need a few codes for commands, can't use libilb ones 137*10946SSangeeta.Misra@Sun.COM */ 138*10946SSangeeta.Misra@Sun.COM typedef enum { 139*10946SSangeeta.Misra@Sun.COM cmd_create_sg, 140*10946SSangeeta.Misra@Sun.COM cmd_add_srv, 141*10946SSangeeta.Misra@Sun.COM cmd_rem_srv, 142*10946SSangeeta.Misra@Sun.COM cmd_enable_rule, 143*10946SSangeeta.Misra@Sun.COM cmd_disable_rule, 144*10946SSangeeta.Misra@Sun.COM cmd_enable_server, 145*10946SSangeeta.Misra@Sun.COM cmd_disable_server 146*10946SSangeeta.Misra@Sun.COM } ilbadm_cmd_t; 147*10946SSangeeta.Misra@Sun.COM 148*10946SSangeeta.Misra@Sun.COM /* filched from snoop_ether.c */ 149*10946SSangeeta.Misra@Sun.COM typedef struct val_type { 150*10946SSangeeta.Misra@Sun.COM int v_type; 151*10946SSangeeta.Misra@Sun.COM char v_name[20]; 152*10946SSangeeta.Misra@Sun.COM char v_alias[8]; /* undocumented */ 153*10946SSangeeta.Misra@Sun.COM } ilbadm_val_type_t; 154*10946SSangeeta.Misra@Sun.COM 155*10946SSangeeta.Misra@Sun.COM typedef struct key_names { 156*10946SSangeeta.Misra@Sun.COM ilbadm_key_code_t k_key; 157*10946SSangeeta.Misra@Sun.COM char k_name[20]; 158*10946SSangeeta.Misra@Sun.COM char k_alias[12]; /* undocumented */ 159*10946SSangeeta.Misra@Sun.COM } ilbadm_key_name_t; 160*10946SSangeeta.Misra@Sun.COM 161*10946SSangeeta.Misra@Sun.COM typedef struct servnode { 162*10946SSangeeta.Misra@Sun.COM list_node_t s_link; 163*10946SSangeeta.Misra@Sun.COM ilb_server_data_t s_spec; 164*10946SSangeeta.Misra@Sun.COM } ilbadm_servnode_t; 165*10946SSangeeta.Misra@Sun.COM 166*10946SSangeeta.Misra@Sun.COM typedef struct sgroup { 167*10946SSangeeta.Misra@Sun.COM list_t sg_serv_list; /* list of servnode_t elements */ 168*10946SSangeeta.Misra@Sun.COM int sg_count; 169*10946SSangeeta.Misra@Sun.COM char *sg_name; 170*10946SSangeeta.Misra@Sun.COM } ilbadm_sgroup_t; 171*10946SSangeeta.Misra@Sun.COM 172*10946SSangeeta.Misra@Sun.COM typedef struct cmd_hlp { 173*10946SSangeeta.Misra@Sun.COM char *h_help; 174*10946SSangeeta.Misra@Sun.COM } ilbadm_cmd_help_t; 175*10946SSangeeta.Misra@Sun.COM 176*10946SSangeeta.Misra@Sun.COM typedef ilbadm_status_t (* cmdfunc_t)(int, char **); 177*10946SSangeeta.Misra@Sun.COM 178*10946SSangeeta.Misra@Sun.COM typedef struct cmd_names { 179*10946SSangeeta.Misra@Sun.COM char c_name[25]; 180*10946SSangeeta.Misra@Sun.COM char c_alias[20]; /* undocumented */ 181*10946SSangeeta.Misra@Sun.COM cmdfunc_t c_action; 182*10946SSangeeta.Misra@Sun.COM ilbadm_cmd_help_t *c_help; /* for "usage" */ 183*10946SSangeeta.Misra@Sun.COM } ilbadm_cmd_desc_t; 184*10946SSangeeta.Misra@Sun.COM 185*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_add_server_to_group(int, char **); 186*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_create_servergroup(int, char **); 187*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_destroy_servergroup(int, char **); 188*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_rem_server_from_group(int, char **); 189*10946SSangeeta.Misra@Sun.COM 190*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_create_rule(int, char **); 191*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_destroy_rule(int, char **); 192*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_enable_rule(int, char **); 193*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_disable_rule(int, char **); 194*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_show_server(int, char **); 195*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_enable_server(int, char **); 196*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_disable_server(int, char **); 197*10946SSangeeta.Misra@Sun.COM 198*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_show_servergroups(int, char **); 199*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_show_rules(int, char **); 200*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_show_stats(int, char **); 201*10946SSangeeta.Misra@Sun.COM 202*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_create_hc(int, char **); 203*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_destroy_hc(int, char **); 204*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_show_hc(int, char **); 205*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_show_hc_result(int, char **); 206*10946SSangeeta.Misra@Sun.COM 207*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_noimport(int, char **); 208*10946SSangeeta.Misra@Sun.COM 209*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_show_nat(int, char **); 210*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_show_persist(int, char **); 211*10946SSangeeta.Misra@Sun.COM 212*10946SSangeeta.Misra@Sun.COM ilbadm_status_t i_parse_optstring(char *, void *, ilbadm_key_name_t *, 213*10946SSangeeta.Misra@Sun.COM int, int *); 214*10946SSangeeta.Misra@Sun.COM ilbadm_servnode_t *i_new_sg_elem(ilbadm_sgroup_t *); 215*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_import(int, int, char *[], int); 216*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_export(int, char *[]); 217*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_export_servergroups(ilb_handle_t h, FILE *); 218*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_export_hc(ilb_handle_t h, FILE *); 219*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_export_rules(ilb_handle_t h, FILE *); 220*10946SSangeeta.Misra@Sun.COM 221*10946SSangeeta.Misra@Sun.COM ilbadm_status_t i_check_rule_spec(ilb_rule_data_t *); 222*10946SSangeeta.Misra@Sun.COM ilbadm_status_t ilbadm_set_netmask(char *, ilb_ip_addr_t *, int); 223*10946SSangeeta.Misra@Sun.COM int ilbadm_mask_to_prefixlen(ilb_ip_addr_t *); 224*10946SSangeeta.Misra@Sun.COM 225*10946SSangeeta.Misra@Sun.COM void print_cmdlist_short(char *, FILE *); 226*10946SSangeeta.Misra@Sun.COM extern int ilb_cmp_ipaddr(ilb_ip_addr_t *, ilb_ip_addr_t *, 227*10946SSangeeta.Misra@Sun.COM longlong_t *); 228*10946SSangeeta.Misra@Sun.COM 229*10946SSangeeta.Misra@Sun.COM void ip2str(ilb_ip_addr_t *, char *, size_t, int); 230*10946SSangeeta.Misra@Sun.COM char *i_str_from_val(int, ilbadm_val_type_t *); 231*10946SSangeeta.Misra@Sun.COM char *ilbadm_key_to_opt(ilbadm_key_code_t); 232*10946SSangeeta.Misra@Sun.COM 233*10946SSangeeta.Misra@Sun.COM void Usage(char *); 234*10946SSangeeta.Misra@Sun.COM void unknown_opt(char **, int); 235*10946SSangeeta.Misra@Sun.COM const char *ilbadm_errstr(ilbadm_status_t); 236*10946SSangeeta.Misra@Sun.COM void ilbadm_err(const char *format, ...); 237*10946SSangeeta.Misra@Sun.COM 238*10946SSangeeta.Misra@Sun.COM #ifdef __cplusplus 239*10946SSangeeta.Misra@Sun.COM } 240*10946SSangeeta.Misra@Sun.COM #endif 241*10946SSangeeta.Misra@Sun.COM 242*10946SSangeeta.Misra@Sun.COM #endif /* _ILBADM_H */ 243