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