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