xref: /onnv-gate/usr/src/cmd/cmd-inet/usr.sbin/ilbadm/ilbadm.h (revision 10946:324bab2b3370)
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