xref: /onnv-gate/usr/src/lib/libdladm/common/libdladm.h (revision 12824:66c93397e15b)
10Sstevel@tonic-gate /*
20Sstevel@tonic-gate  * CDDL HEADER START
30Sstevel@tonic-gate  *
40Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
52311Sseb  * Common Development and Distribution License (the "License").
62311Sseb  * You may not use this file except in compliance with the License.
70Sstevel@tonic-gate  *
80Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
90Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
100Sstevel@tonic-gate  * See the License for the specific language governing permissions
110Sstevel@tonic-gate  * and limitations under the License.
120Sstevel@tonic-gate  *
130Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
140Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
150Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
160Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
170Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
180Sstevel@tonic-gate  *
190Sstevel@tonic-gate  * CDDL HEADER END
200Sstevel@tonic-gate  */
210Sstevel@tonic-gate /*
2212062SRajagopal.Kunhappan@Sun.COM  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
230Sstevel@tonic-gate  */
240Sstevel@tonic-gate 
250Sstevel@tonic-gate #ifndef _LIBDLADM_H
260Sstevel@tonic-gate #define	_LIBDLADM_H
270Sstevel@tonic-gate 
288275SEric Cheng #include <sys/dls_mgmt.h>
2910734SEric Cheng #include <sys/dld.h>
305895Syz147064 #include <sys/dlpi.h>
31*12824SCathy.Zhou@Sun.COM #include <libnvpair.h>
325895Syz147064 
333871Syz147064 /*
343871Syz147064  * This file includes structures, macros and common routines shared by all
353871Syz147064  * data-link administration, and routines which do not directly administrate
363871Syz147064  * links. For example, dladm_status2str().
373871Syz147064  */
380Sstevel@tonic-gate 
390Sstevel@tonic-gate #ifdef	__cplusplus
400Sstevel@tonic-gate extern "C" {
410Sstevel@tonic-gate #endif
420Sstevel@tonic-gate 
435895Syz147064 #define	LINKID_STR_WIDTH	10
443147Sxc151355 #define	DLADM_STRSIZE		256
455895Syz147064 
465895Syz147064 /*
475895Syz147064  * option flags taken by the libdladm functions
485895Syz147064  *
495895Syz147064  *  - DLADM_OPT_ACTIVE:
505895Syz147064  *    The function requests to bringup some configuration that only take
515895Syz147064  *    effect on active system (not persistent).
525895Syz147064  *
535895Syz147064  *  - DLADM_OPT_PERSIST:
545895Syz147064  *    The function requests to persist some configuration.
555895Syz147064  *
565895Syz147064  *  - DLADM_OPT_CREATE:
575895Syz147064  *    Today, only used by dladm_set_secobj() - requests to create a secobj.
585895Syz147064  *
595895Syz147064  *  - DLADM_OPT_FORCE:
605895Syz147064  *    The function requests to execute a specific operation forcefully.
615895Syz147064  *
625895Syz147064  *  - DLADM_OPT_PREFIX:
635895Syz147064  *    The function requests to generate a link name using the specified prefix.
648275SEric Cheng  *
658275SEric Cheng  *  - DLADM_OPT_VLAN:
668275SEric Cheng  *    Signifies VLAN creation code path
678275SEric Cheng  *
6810491SRishi.Srivatsavai@Sun.COM  *  - DLADM_OPT_NOREFRESH:
6910491SRishi.Srivatsavai@Sun.COM  *    Do not refresh the daemon after setting parameter (used by STP mcheck).
7011878SVenu.Iyer@Sun.COM  *
7111878SVenu.Iyer@Sun.COM  *  - DLADM_OPT_BOOT:
7211878SVenu.Iyer@Sun.COM  *    Bypass check functions during boot (used by pool property since pools
7311878SVenu.Iyer@Sun.COM  *    can come up after link properties are set)
745895Syz147064  */
755895Syz147064 #define	DLADM_OPT_ACTIVE	0x00000001
765895Syz147064 #define	DLADM_OPT_PERSIST	0x00000002
775895Syz147064 #define	DLADM_OPT_CREATE	0x00000004
785895Syz147064 #define	DLADM_OPT_FORCE		0x00000008
795895Syz147064 #define	DLADM_OPT_PREFIX	0x00000010
808275SEric Cheng #define	DLADM_OPT_ANCHOR	0x00000020
818275SEric Cheng #define	DLADM_OPT_VLAN		0x00000040
8211878SVenu.Iyer@Sun.COM #define	DLADM_OPT_NOREFRESH	0x00000080
8311878SVenu.Iyer@Sun.COM #define	DLADM_OPT_BOOT		0x00000100
845895Syz147064 
855895Syz147064 #define	DLADM_WALK_TERMINATE	0
865895Syz147064 #define	DLADM_WALK_CONTINUE	-1
873147Sxc151355 
888275SEric Cheng #define	DLADM_MAX_ARG_CNT	32
8912062SRajagopal.Kunhappan@Sun.COM #define	DLADM_MAX_ARG_VALS	64
908275SEric Cheng 
913147Sxc151355 typedef enum {
923147Sxc151355 	DLADM_STATUS_OK = 0,
933147Sxc151355 	DLADM_STATUS_BADARG,
943147Sxc151355 	DLADM_STATUS_FAILED,
953147Sxc151355 	DLADM_STATUS_TOOSMALL,
963147Sxc151355 	DLADM_STATUS_NOTSUP,
973147Sxc151355 	DLADM_STATUS_NOTFOUND,
983147Sxc151355 	DLADM_STATUS_BADVAL,
993147Sxc151355 	DLADM_STATUS_NOMEM,
1003147Sxc151355 	DLADM_STATUS_EXIST,
1013147Sxc151355 	DLADM_STATUS_LINKINVAL,
1023147Sxc151355 	DLADM_STATUS_PROPRDONLY,
1033147Sxc151355 	DLADM_STATUS_BADVALCNT,
1043147Sxc151355 	DLADM_STATUS_DBNOTFOUND,
1053147Sxc151355 	DLADM_STATUS_DENIED,
1063448Sdh155122 	DLADM_STATUS_IOERR,
1073871Syz147064 	DLADM_STATUS_TEMPONLY,
1083871Syz147064 	DLADM_STATUS_TIMEDOUT,
1093871Syz147064 	DLADM_STATUS_ISCONN,
1103871Syz147064 	DLADM_STATUS_NOTCONN,
1113871Syz147064 	DLADM_STATUS_REPOSITORYINVAL,
1123871Syz147064 	DLADM_STATUS_MACADDRINVAL,
1135084Sjohnlev 	DLADM_STATUS_KEYINVAL,
1145084Sjohnlev 	DLADM_STATUS_INVALIDMACADDRLEN,
1155084Sjohnlev 	DLADM_STATUS_INVALIDMACADDRTYPE,
1165895Syz147064 	DLADM_STATUS_LINKBUSY,
1175895Syz147064 	DLADM_STATUS_VIDINVAL,
1185895Syz147064 	DLADM_STATUS_NONOTIF,
1197776SSowmini.Varadhan@Sun.COM 	DLADM_STATUS_TRYAGAIN,
12010616SSebastien.Roy@Sun.COM 	DLADM_STATUS_IPTUNTYPE,
12110616SSebastien.Roy@Sun.COM 	DLADM_STATUS_IPTUNTYPEREQD,
12210616SSebastien.Roy@Sun.COM 	DLADM_STATUS_BADIPTUNLADDR,
12310616SSebastien.Roy@Sun.COM 	DLADM_STATUS_BADIPTUNRADDR,
12410616SSebastien.Roy@Sun.COM 	DLADM_STATUS_ADDRINUSE,
1258275SEric Cheng 	DLADM_STATUS_BADTIMEVAL,
1268275SEric Cheng 	DLADM_STATUS_INVALIDMACADDR,
1278275SEric Cheng 	DLADM_STATUS_INVALIDMACADDRNIC,
1288275SEric Cheng 	DLADM_STATUS_INVALIDMACADDRINUSE,
1298275SEric Cheng 	DLADM_STATUS_MACFACTORYSLOTINVALID,
1308275SEric Cheng 	DLADM_STATUS_MACFACTORYSLOTUSED,
1318275SEric Cheng 	DLADM_STATUS_MACFACTORYSLOTALLUSED,
1328275SEric Cheng 	DLADM_STATUS_MACFACTORYNOTSUP,
1338275SEric Cheng 	DLADM_STATUS_INVALIDMACPREFIX,
1348275SEric Cheng 	DLADM_STATUS_INVALIDMACPREFIXLEN,
13512742Smichael.l.lim@oracle.com 	DLADM_STATUS_BADCPUID,
1368275SEric Cheng 	DLADM_STATUS_CPUERR,
1378275SEric Cheng 	DLADM_STATUS_CPUNOTONLINE,
13812742Smichael.l.lim@oracle.com 	DLADM_STATUS_BADRANGE,
13912742Smichael.l.lim@oracle.com 	DLADM_STATUS_TOOMANYELEMENTS,
1408275SEric Cheng 	DLADM_STATUS_DB_NOTFOUND,
1418275SEric Cheng 	DLADM_STATUS_DB_PARSE_ERR,
1428275SEric Cheng 	DLADM_STATUS_PROP_PARSE_ERR,
1438275SEric Cheng 	DLADM_STATUS_ATTR_PARSE_ERR,
1448275SEric Cheng 	DLADM_STATUS_FLOW_DB_ERR,
1458275SEric Cheng 	DLADM_STATUS_FLOW_DB_OPEN_ERR,
1468275SEric Cheng 	DLADM_STATUS_FLOW_DB_PARSE_ERR,
1478275SEric Cheng 	DLADM_STATUS_FLOWPROP_DB_PARSE_ERR,
1488275SEric Cheng 	DLADM_STATUS_FLOW_ADD_ERR,
1498275SEric Cheng 	DLADM_STATUS_FLOW_WALK_ERR,
1508275SEric Cheng 	DLADM_STATUS_FLOW_IDENTICAL,
1518275SEric Cheng 	DLADM_STATUS_FLOW_INCOMPATIBLE,
1528275SEric Cheng 	DLADM_STATUS_FLOW_EXISTS,
1538275SEric Cheng 	DLADM_STATUS_PERSIST_FLOW_EXISTS,
1548275SEric Cheng 	DLADM_STATUS_INVALID_IP,
1558275SEric Cheng 	DLADM_STATUS_INVALID_PREFIXLEN,
1568275SEric Cheng 	DLADM_STATUS_INVALID_PROTOCOL,
1578275SEric Cheng 	DLADM_STATUS_INVALID_PORT,
1588275SEric Cheng 	DLADM_STATUS_INVALID_DSF,
1598275SEric Cheng 	DLADM_STATUS_INVALID_DSFMASK,
1608275SEric Cheng 	DLADM_STATUS_INVALID_MACMARGIN,
1618275SEric Cheng 	DLADM_STATUS_NOTDEFINED,
1628275SEric Cheng 	DLADM_STATUS_BADPROP,
1638275SEric Cheng 	DLADM_STATUS_MINMAXBW,
16410491SRishi.Srivatsavai@Sun.COM 	DLADM_STATUS_NO_HWRINGS,
16510491SRishi.Srivatsavai@Sun.COM 	DLADM_STATUS_PERMONLY,
16611878SVenu.Iyer@Sun.COM 	DLADM_STATUS_OPTMISSING,
16712163SRamaswamy.Tummala@Sun.COM 	DLADM_STATUS_POOLCPU,
16812163SRamaswamy.Tummala@Sun.COM 	DLADM_STATUS_INVALID_PORT_INSTANCE,
16912163SRamaswamy.Tummala@Sun.COM 	DLADM_STATUS_PORT_IS_DOWN,
17012163SRamaswamy.Tummala@Sun.COM 	DLADM_STATUS_PKEY_NOT_PRESENT,
17112163SRamaswamy.Tummala@Sun.COM 	DLADM_STATUS_PARTITION_EXISTS,
17212163SRamaswamy.Tummala@Sun.COM 	DLADM_STATUS_INVALID_PKEY,
17312163SRamaswamy.Tummala@Sun.COM 	DLADM_STATUS_NO_IB_HW_RESOURCE,
17412309SMichael.Lim@Sun.COM 	DLADM_STATUS_INVALID_PKEY_TBL_SIZE,
17512309SMichael.Lim@Sun.COM 	DLADM_STATUS_PORT_NOPROTO
1763147Sxc151355 } dladm_status_t;
1770Sstevel@tonic-gate 
1783147Sxc151355 typedef enum {
1795895Syz147064 	DLADM_TYPE_STR,
1805895Syz147064 	DLADM_TYPE_BOOLEAN,
1815895Syz147064 	DLADM_TYPE_UINT64
1825895Syz147064 } dladm_datatype_t;
1835895Syz147064 
184*12824SCathy.Zhou@Sun.COM typedef struct {
185*12824SCathy.Zhou@Sun.COM 	boolean_t	ds_readonly;
186*12824SCathy.Zhou@Sun.COM 	union {
187*12824SCathy.Zhou@Sun.COM 		int	dsu_confid;
188*12824SCathy.Zhou@Sun.COM 		nvlist_t *dsu_nvl;
189*12824SCathy.Zhou@Sun.COM 	} ds_u;
190*12824SCathy.Zhou@Sun.COM } dladm_conf_t;
191*12824SCathy.Zhou@Sun.COM 
192*12824SCathy.Zhou@Sun.COM #define	ds_confid	ds_u.dsu_confid
193*12824SCathy.Zhou@Sun.COM #define	ds_nvl		ds_u.dsu_nvl
194*12824SCathy.Zhou@Sun.COM 
1955895Syz147064 #define	DLADM_INVALID_CONF	0
1963147Sxc151355 
1978453SAnurag.Maskey@Sun.COM /* opaque dladm handle to libdladm functions */
1988453SAnurag.Maskey@Sun.COM struct dladm_handle;
1998453SAnurag.Maskey@Sun.COM typedef struct dladm_handle *dladm_handle_t;
2008453SAnurag.Maskey@Sun.COM 
2018453SAnurag.Maskey@Sun.COM /* open/close handle */
2028453SAnurag.Maskey@Sun.COM extern dladm_status_t	dladm_open(dladm_handle_t *);
2038453SAnurag.Maskey@Sun.COM extern void		dladm_close(dladm_handle_t);
2048453SAnurag.Maskey@Sun.COM 
2058453SAnurag.Maskey@Sun.COM /*
2068453SAnurag.Maskey@Sun.COM  * retrieve the dld file descriptor from handle, only libdladm and
2078453SAnurag.Maskey@Sun.COM  * dlmgmtd are given access to the door file descriptor.
2088453SAnurag.Maskey@Sun.COM  */
2098453SAnurag.Maskey@Sun.COM extern int	dladm_dld_fd(dladm_handle_t);
2108453SAnurag.Maskey@Sun.COM 
2118275SEric Cheng typedef struct dladm_arg_info {
2128275SEric Cheng 	const char	*ai_name;
2138275SEric Cheng 	char		*ai_val[DLADM_MAX_ARG_VALS];
2148275SEric Cheng 	uint_t		ai_count;
2158275SEric Cheng } dladm_arg_info_t;
2168275SEric Cheng 
2178275SEric Cheng typedef struct dladm_arg_list {
2188275SEric Cheng 	dladm_arg_info_t	al_info[DLADM_MAX_ARG_CNT];
2198275SEric Cheng 	uint_t			al_count;
2208275SEric Cheng 	char			*al_buf;
2218275SEric Cheng } dladm_arg_list_t;
2228275SEric Cheng 
2238275SEric Cheng typedef enum {
2248275SEric Cheng 	DLADM_LOGTYPE_LINK = 1,
2258275SEric Cheng 	DLADM_LOGTYPE_FLOW
2268275SEric Cheng } dladm_logtype_t;
2278275SEric Cheng 
2288275SEric Cheng typedef struct dladm_usage {
2298275SEric Cheng 	char		du_name[MAXLINKNAMELEN];
2308275SEric Cheng 	uint64_t	du_duration;
2318275SEric Cheng 	uint64_t	du_stime;
2328275SEric Cheng 	uint64_t	du_etime;
2338275SEric Cheng 	uint64_t	du_ipackets;
2348275SEric Cheng 	uint64_t	du_rbytes;
2358275SEric Cheng 	uint64_t	du_opackets;
2368275SEric Cheng 	uint64_t	du_obytes;
2378275SEric Cheng 	uint64_t	du_bandwidth;
2388275SEric Cheng 	boolean_t	du_last;
2398275SEric Cheng } dladm_usage_t;
2408275SEric Cheng 
2413147Sxc151355 extern const char	*dladm_status2str(dladm_status_t, char *);
2423871Syz147064 extern dladm_status_t	dladm_set_rootdir(const char *);
2435895Syz147064 extern const char	*dladm_class2str(datalink_class_t, char *);
2445895Syz147064 extern const char	*dladm_media2str(uint32_t, char *);
2459815SRishi.Srivatsavai@Sun.COM extern uint32_t		dladm_str2media(const char *);
2465895Syz147064 extern boolean_t	dladm_valid_linkname(const char *);
2479055SMichael.Lim@Sun.COM extern boolean_t	dladm_str2interval(char *, uint32_t *);
2488275SEric Cheng extern dladm_status_t	dladm_str2bw(char *, uint64_t *);
2498275SEric Cheng extern const char	*dladm_bw2str(int64_t, char *);
25010734SEric Cheng extern dladm_status_t	dladm_str2pri(char *, mac_priority_level_t *);
25110734SEric Cheng extern const char	*dladm_pri2str(mac_priority_level_t, char *);
25210734SEric Cheng extern dladm_status_t	dladm_str2protect(char *, uint32_t *);
25310734SEric Cheng extern const char	*dladm_protect2str(uint32_t, char *);
25410734SEric Cheng extern dladm_status_t	dladm_str2ipv4addr(char *, void *);
25510734SEric Cheng extern const char	*dladm_ipv4addr2str(void *, char *);
25611878SVenu.Iyer@Sun.COM extern dladm_status_t	dladm_str2ipv6addr(char *, void *);
25711878SVenu.Iyer@Sun.COM extern const char	*dladm_ipv6addr2str(void *, char *);
2588275SEric Cheng 
2598275SEric Cheng extern dladm_status_t	dladm_parse_flow_props(char *, dladm_arg_list_t **,
2608275SEric Cheng 			    boolean_t);
2618275SEric Cheng extern dladm_status_t	dladm_parse_link_props(char *, dladm_arg_list_t **,
2628275SEric Cheng 			    boolean_t);
2638275SEric Cheng extern void		dladm_free_props(dladm_arg_list_t *);
2648275SEric Cheng extern dladm_status_t	dladm_parse_flow_attrs(char *, dladm_arg_list_t **,
2658275SEric Cheng 			    boolean_t);
2668275SEric Cheng extern void		dladm_free_attrs(dladm_arg_list_t *);
2678275SEric Cheng 
2688453SAnurag.Maskey@Sun.COM extern dladm_status_t	dladm_start_usagelog(dladm_handle_t, dladm_logtype_t,
2698453SAnurag.Maskey@Sun.COM 			    uint_t);
2708453SAnurag.Maskey@Sun.COM extern dladm_status_t	dladm_stop_usagelog(dladm_handle_t, dladm_logtype_t);
2718275SEric Cheng extern dladm_status_t	dladm_walk_usage_res(int (*)(dladm_usage_t *, void *),
2728275SEric Cheng 			    int, char *, char *, char *, char *, void *);
2738275SEric Cheng extern dladm_status_t	dladm_walk_usage_time(int (*)(dladm_usage_t *, void *),
2748275SEric Cheng 			    int, char *, char *, char *, void *);
2758275SEric Cheng extern dladm_status_t	dladm_usage_summary(int (*)(dladm_usage_t *, void *),
2768275SEric Cheng 			    int, char *, void *);
2778275SEric Cheng extern dladm_status_t	dladm_usage_dates(int (*)(dladm_usage_t *, void *),
2788275SEric Cheng 			    int, char *, char *, void *);
27910616SSebastien.Roy@Sun.COM extern dladm_status_t	dladm_zone_boot(dladm_handle_t, zoneid_t);
28010616SSebastien.Roy@Sun.COM extern dladm_status_t	dladm_zone_halt(dladm_handle_t, zoneid_t);
2813147Sxc151355 
28212742Smichael.l.lim@oracle.com extern dladm_status_t	dladm_strs2range(char **, uint_t, mac_propval_type_t,
28312742Smichael.l.lim@oracle.com 			    mac_propval_range_t **);
28412742Smichael.l.lim@oracle.com extern dladm_status_t	dladm_range2list(mac_propval_range_t *, void*,
28512742Smichael.l.lim@oracle.com 			    uint_t *);
28612742Smichael.l.lim@oracle.com extern int		dladm_range2strs(mac_propval_range_t *, char **);
28712742Smichael.l.lim@oracle.com extern dladm_status_t	dladm_list2range(void *, uint_t, mac_propval_type_t,
28812742Smichael.l.lim@oracle.com 			    mac_propval_range_t **);
28912742Smichael.l.lim@oracle.com 
2900Sstevel@tonic-gate #ifdef	__cplusplus
2910Sstevel@tonic-gate }
2920Sstevel@tonic-gate #endif
2930Sstevel@tonic-gate 
2940Sstevel@tonic-gate #endif	/* _LIBDLADM_H */
295