summaryrefslogtreecommitdiff
path: root/usr
diff options
context:
space:
mode:
Diffstat (limited to 'usr')
-rw-r--r--usr/src/cmd/acctadm/aconf.c6
-rw-r--r--usr/src/cmd/acctadm/main.c43
-rw-r--r--usr/src/cmd/acctadm/utils.c5
-rw-r--r--usr/src/cmd/acctadm/utils.h6
-rw-r--r--usr/src/cmd/cmd-inet/lib/nwamd/interface.c4
-rw-r--r--usr/src/cmd/cmd-inet/lib/nwamd/main.c8
-rw-r--r--usr/src/cmd/cmd-inet/lib/nwamd/variables.h6
-rw-r--r--usr/src/cmd/cmd-inet/lib/nwamd/wireless.c81
-rw-r--r--usr/src/cmd/cmd-inet/usr.lib/wpad/driver.h20
-rw-r--r--usr/src/cmd/cmd-inet/usr.lib/wpad/driver_wifi.c65
-rw-r--r--usr/src/cmd/cmd-inet/usr.lib/wpad/wpa.c23
-rw-r--r--usr/src/cmd/cmd-inet/usr.lib/wpad/wpa_impl.h5
-rw-r--r--usr/src/cmd/cmd-inet/usr.lib/wpad/wpa_supplicant.c50
-rw-r--r--usr/src/cmd/cmd-inet/usr.sbin/ifconfig/ifconfig.c8
-rw-r--r--usr/src/cmd/cmd-inet/usr.sbin/ndd.c24
-rw-r--r--usr/src/cmd/dladm/dladm.c534
-rw-r--r--usr/src/cmd/dlmgmtd/dlmgmt_door.c3
-rw-r--r--usr/src/cmd/dlmgmtd/dlmgmt_impl.h3
-rw-r--r--usr/src/cmd/dlmgmtd/dlmgmt_main.c40
-rw-r--r--usr/src/cmd/flowadm/flowadm.c126
-rw-r--r--usr/src/cmd/rcm_daemon/common/aggr_rcm.c55
-rw-r--r--usr/src/cmd/rcm_daemon/common/ip_rcm.c18
-rw-r--r--usr/src/cmd/rcm_daemon/common/network_rcm.c18
-rw-r--r--usr/src/cmd/rcm_daemon/common/vlan_rcm.c41
-rw-r--r--usr/src/cmd/rcm_daemon/common/vnic_rcm.c43
-rw-r--r--usr/src/cmd/vna/vna.c79
-rw-r--r--usr/src/cmd/zoneadmd/vplat.c4
-rw-r--r--usr/src/cmd/zoneadmd/zoneadmd.c12
-rw-r--r--usr/src/cmd/zoneadmd/zoneadmd.h3
-rw-r--r--usr/src/lib/libdladm/common/flowprop.c102
-rw-r--r--usr/src/lib/libdladm/common/libdladm.c74
-rw-r--r--usr/src/lib/libdladm/common/libdladm.h19
-rw-r--r--usr/src/lib/libdladm/common/libdladm_impl.h27
-rw-r--r--usr/src/lib/libdladm/common/libdlaggr.c318
-rw-r--r--usr/src/lib/libdladm/common/libdlaggr.h35
-rw-r--r--usr/src/lib/libdladm/common/libdlether.c27
-rw-r--r--usr/src/lib/libdladm/common/libdlether.h3
-rw-r--r--usr/src/lib/libdladm/common/libdlflow.c63
-rw-r--r--usr/src/lib/libdladm/common/libdlflow.h24
-rw-r--r--usr/src/lib/libdladm/common/libdlflow_impl.h56
-rw-r--r--usr/src/lib/libdladm/common/libdllink.c279
-rw-r--r--usr/src/lib/libdladm/common/libdllink.h128
-rw-r--r--usr/src/lib/libdladm/common/libdlmgmt.c134
-rw-r--r--usr/src/lib/libdladm/common/libdlstat.c56
-rw-r--r--usr/src/lib/libdladm/common/libdlstat.h7
-rw-r--r--usr/src/lib/libdladm/common/libdlvlan.c24
-rw-r--r--usr/src/lib/libdladm/common/libdlvlan.h13
-rw-r--r--usr/src/lib/libdladm/common/libdlvnic.c179
-rw-r--r--usr/src/lib/libdladm/common/libdlvnic.h13
-rw-r--r--usr/src/lib/libdladm/common/libdlwlan.c382
-rw-r--r--usr/src/lib/libdladm/common/libdlwlan.h30
-rw-r--r--usr/src/lib/libdladm/common/libdlwlan_impl.h9
-rw-r--r--usr/src/lib/libdladm/common/linkprop.c542
-rw-r--r--usr/src/lib/libdladm/common/mapfile-vers4
-rw-r--r--usr/src/lib/libdladm/common/propfuncs.c41
-rw-r--r--usr/src/lib/libdladm/common/secobj.c134
-rw-r--r--usr/src/lib/libdlpi/common/libdlpi.c30
57 files changed, 2256 insertions, 1830 deletions
diff --git a/usr/src/cmd/acctadm/aconf.c b/usr/src/cmd/acctadm/aconf.c
index 8453a4fa8f..cfb4a2e54a 100644
--- a/usr/src/cmd/acctadm/aconf.c
+++ b/usr/src/cmd/acctadm/aconf.c
@@ -218,9 +218,9 @@ aconf_setup(const char *fmri)
*/
(void) priv_set(PRIV_ON, PRIV_EFFECTIVE, PRIV_SYS_DL_CONFIG,
NULL);
- (void) dladm_start_usagelog(strncmp(tracked, "basic",
- strlen("basic")) == 0 ? DLADM_LOGTYPE_LINK :
- DLADM_LOGTYPE_FLOW, 20);
+ (void) dladm_start_usagelog(dld_handle,
+ strncmp(tracked, "basic", strlen("basic")) == 0 ?
+ DLADM_LOGTYPE_LINK : DLADM_LOGTYPE_FLOW, 20);
(void) priv_set(PRIV_OFF, PRIV_EFFECTIVE, PRIV_SYS_DL_CONFIG,
NULL);
}
diff --git a/usr/src/cmd/acctadm/main.c b/usr/src/cmd/acctadm/main.c
index 484caf8988..580012ccc8 100644
--- a/usr/src/cmd/acctadm/main.c
+++ b/usr/src/cmd/acctadm/main.c
@@ -52,6 +52,8 @@ Usage:\n\
static const char OPTS[] = "rsxf:e:d:ED";
+dladm_handle_t dld_handle = NULL;
+
static void
usage()
{
@@ -256,16 +258,22 @@ main(int argc, char *argv[])
return (E_SUCCESS);
}
+ /* Open the libdladm handle */
+ if (dladm_open(&dld_handle) != DLADM_STATUS_OK)
+ die(gettext("failed to open dladm handle\n"));
+
/*
* smf(5) start method. The FMRI to operate on is retrieved from the
* SMF_FMRI environment variable that the restarter provides.
*/
if (sflg) {
- if ((fmri = getenv("SMF_FMRI")) != NULL)
- return (aconf_setup(fmri));
+ if ((fmri = getenv("SMF_FMRI")) != NULL) {
+ int ret = aconf_setup(fmri);
+ dladm_close(dld_handle);
+ return (ret);
+ }
- warn(gettext("-s option should only be invoked by smf(5)\n"));
- return (E_ERROR);
+ die(gettext("-s option should only be invoked by smf(5)\n"));
}
assert(type == AC_PROC || type == AC_TASK || type == AC_FLOW ||
@@ -301,7 +309,8 @@ main(int argc, char *argv[])
if (type & AC_NET) {
(void) priv_set(PRIV_ON, PRIV_EFFECTIVE,
PRIV_SYS_DL_CONFIG, NULL);
- (void) dladm_stop_usagelog(DLADM_LOGTYPE_FLOW);
+ (void) dladm_stop_usagelog(dld_handle,
+ DLADM_LOGTYPE_FLOW);
(void) priv_set(PRIV_OFF, PRIV_EFFECTIVE,
PRIV_SYS_DL_CONFIG, NULL);
}
@@ -347,9 +356,10 @@ main(int argc, char *argv[])
if (type & AC_NET) {
(void) priv_set(PRIV_ON, PRIV_EFFECTIVE,
PRIV_SYS_DL_CONFIG, NULL);
- (void) dladm_stop_usagelog(strncmp(disabled,
- "basic", strlen("basic")) == 0 ?
- DLADM_LOGTYPE_LINK : DLADM_LOGTYPE_FLOW);
+ (void) dladm_stop_usagelog(dld_handle,
+ strncmp(disabled, "basic", strlen("basic"))
+ == 0 ? DLADM_LOGTYPE_LINK :
+ DLADM_LOGTYPE_FLOW);
(void) priv_set(PRIV_OFF, PRIV_EFFECTIVE,
PRIV_SYS_DL_CONFIG, NULL);
}
@@ -386,9 +396,9 @@ main(int argc, char *argv[])
*/
(void) priv_set(PRIV_ON, PRIV_EFFECTIVE,
PRIV_SYS_DL_CONFIG, NULL);
- (void) dladm_start_usagelog(strncmp(enabled, "basic",
- strlen("basic")) == 0 ? DLADM_LOGTYPE_LINK :
- DLADM_LOGTYPE_FLOW, 20);
+ (void) dladm_start_usagelog(dld_handle,
+ strncmp(enabled, "basic", strlen("basic")) == 0 ?
+ DLADM_LOGTYPE_LINK : DLADM_LOGTYPE_FLOW, 20);
(void) priv_set(PRIV_OFF, PRIV_EFFECTIVE,
PRIV_SYS_DL_CONFIG, NULL);
}
@@ -403,8 +413,10 @@ main(int argc, char *argv[])
* Open new accounting file
*/
(void) priv_set(PRIV_ON, PRIV_EFFECTIVE, PRIV_SYS_ACCT, NULL);
- if (open_exacct_file(file, type) == -1)
+ if (open_exacct_file(file, type) == -1) {
+ dladm_close(dld_handle);
exit(E_ERROR);
+ }
if (aconf_set_string(AC_PROP_FILE, file) == -1)
die(gettext("cannot update %s property\n"),
AC_PROP_FILE);
@@ -433,7 +445,8 @@ main(int argc, char *argv[])
if (type & AC_NET) {
(void) priv_set(PRIV_ON, PRIV_EFFECTIVE,
PRIV_SYS_DL_CONFIG, NULL);
- (void) dladm_stop_usagelog(DLADM_LOGTYPE_FLOW);
+ (void) dladm_stop_usagelog(dld_handle,
+ DLADM_LOGTYPE_FLOW);
(void) priv_set(PRIV_OFF, PRIV_EFFECTIVE,
PRIV_SYS_DL_CONFIG, NULL);
}
@@ -474,7 +487,8 @@ main(int argc, char *argv[])
*/
(void) priv_set(PRIV_ON, PRIV_EFFECTIVE,
PRIV_SYS_DL_CONFIG, NULL);
- (void) dladm_start_usagelog(DLADM_LOGTYPE_FLOW, 20);
+ (void) dladm_start_usagelog(dld_handle,
+ DLADM_LOGTYPE_FLOW, 20);
(void) priv_set(PRIV_OFF, PRIV_EFFECTIVE,
PRIV_SYS_DL_CONFIG, NULL);
}
@@ -513,5 +527,6 @@ main(int argc, char *argv[])
free(smf_state);
}
aconf_scf_fini();
+ dladm_close(dld_handle);
return (E_SUCCESS);
}
diff --git a/usr/src/cmd/acctadm/utils.c b/usr/src/cmd/acctadm/utils.c
index bbee653eeb..53afbce282 100644
--- a/usr/src/cmd/acctadm/utils.c
+++ b/usr/src/cmd/acctadm/utils.c
@@ -76,6 +76,11 @@ die(char *format, ...)
va_end(alist);
if (strchr(format, '\n') == NULL)
(void) fprintf(stderr, gettext(ERRNO_FMT), strerror(err));
+
+ /* close the libdladm handle if it was opened */
+ if (dld_handle != NULL)
+ dladm_close(dld_handle);
+
exit(E_ERROR);
}
diff --git a/usr/src/cmd/acctadm/utils.h b/usr/src/cmd/acctadm/utils.h
index acf93b808d..66a1aab6a1 100644
--- a/usr/src/cmd/acctadm/utils.h
+++ b/usr/src/cmd/acctadm/utils.h
@@ -26,9 +26,8 @@
#ifndef _UTILS_H
#define _UTILS_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <libintl.h>
+#include <libdllink.h>
#ifdef __cplusplus
extern "C" {
@@ -38,6 +37,9 @@ extern "C" {
#define E_ERROR 1 /* Exit status for error */
#define E_USAGE 2 /* Exit status for usage error */
+/* handle for libdladm calls */
+extern dladm_handle_t dld_handle;
+
extern void warn(const char *, ...);
extern void die(char *, ...);
extern char *setprogname(char *);
diff --git a/usr/src/cmd/cmd-inet/lib/nwamd/interface.c b/usr/src/cmd/cmd-inet/lib/nwamd/interface.c
index 877a07b1e0..4f9c78e784 100644
--- a/usr/src/cmd/cmd-inet/lib/nwamd/interface.c
+++ b/usr/src/cmd/cmd-inet/lib/nwamd/interface.c
@@ -1108,7 +1108,7 @@ initialize_interfaces(void)
wait_time = NWAM_IF_WAIT_DELTA_MAX;
}
- (void) dladm_init_linkprop(DATALINK_ALL_LINKID, B_FALSE);
+ (void) dladm_init_linkprop(dld_handle, DATALINK_ALL_LINKID, B_FALSE);
(void) icfg_iterate_if(AF_INET, ICFG_PLUMBED, NULL, do_add_interface);
@@ -1203,7 +1203,7 @@ find_if_type(const char *name)
}
type = IF_WIRED;
- if (dladm_name2info(name, NULL, NULL, NULL, &media) !=
+ if (dladm_name2info(dld_handle, name, NULL, NULL, NULL, &media) !=
DLADM_STATUS_OK) {
if (strncmp(name, "ip.tun", 6) == 0 ||
strncmp(name, "ip6.tun", 7) == 0 ||
diff --git a/usr/src/cmd/cmd-inet/lib/nwamd/main.c b/usr/src/cmd/cmd-inet/lib/nwamd/main.c
index ccc110ce09..dc4dfc1b35 100644
--- a/usr/src/cmd/cmd-inet/lib/nwamd/main.c
+++ b/usr/src/cmd/cmd-inet/lib/nwamd/main.c
@@ -61,6 +61,7 @@ boolean_t shutting_down;
sigset_t original_sigmask;
char zonename[ZONENAME_MAX];
pthread_mutex_t machine_lock = PTHREAD_MUTEX_INITIALIZER;
+dladm_handle_t dld_handle = NULL;
/*
* nwamd
@@ -424,6 +425,12 @@ main(int argc, char *argv[])
init_machine_mutex();
+ /* open the dladm handle */
+ if (dladm_open(&dld_handle) != DLADM_STATUS_OK) {
+ syslog(LOG_ERR, "failed to open dladm handle");
+ exit(EXIT_FAILURE);
+ }
+
initialize_interfaces();
llp_parse_config();
@@ -455,6 +462,7 @@ main(int argc, char *argv[])
(void) pthread_cancel(scan);
(void) pthread_join(scan, NULL);
}
+ dladm_close(dld_handle);
syslog(LOG_INFO, "nwamd shutting down");
return (EXIT_SUCCESS);
}
diff --git a/usr/src/cmd/cmd-inet/lib/nwamd/variables.h b/usr/src/cmd/cmd-inet/lib/nwamd/variables.h
index 6e3d3a366f..dfb2427830 100644
--- a/usr/src/cmd/cmd-inet/lib/nwamd/variables.h
+++ b/usr/src/cmd/cmd-inet/lib/nwamd/variables.h
@@ -59,4 +59,10 @@ extern boolean_t debug;
extern char zonename[ZONENAME_MAX];
+/*
+ * This dladm handle is opened before interfaces are initialized and
+ * closed only when nwamd shuts down.
+ */
+extern dladm_handle_t dld_handle;
+
#endif /* _VARIABLES_H */
diff --git a/usr/src/cmd/cmd-inet/lib/nwamd/wireless.c b/usr/src/cmd/cmd-inet/lib/nwamd/wireless.c
index 1072f43dce..2438c9d67a 100644
--- a/usr/src/cmd/cmd-inet/lib/nwamd/wireless.c
+++ b/usr/src/cmd/cmd-inet/lib/nwamd/wireless.c
@@ -198,8 +198,8 @@ add_wireless_if(const char *ifname)
if ((wip = calloc(1, sizeof (*wip))) != NULL) {
(void) strlcpy(wip->wi_name, ifname, sizeof (wip->wi_name));
- (void) dladm_name2info(ifname, &wip->wi_linkid, NULL, NULL,
- NULL);
+ (void) dladm_name2info(dld_handle, ifname, &wip->wi_linkid,
+ NULL, NULL, NULL);
if (pthread_mutex_lock(&wifi_mutex) == 0) {
insque(&wip->wi_links, wi_list.q_back);
wi_link_count++;
@@ -409,7 +409,7 @@ check_wlan(const wireless_if_t *wip, const char *exp_essid,
char cur_bssid[DLADM_STRSIZE];
char errmsg[DLADM_STRSIZE];
- status = dladm_wlan_get_linkattr(wip->wi_linkid, &attr);
+ status = dladm_wlan_get_linkattr(dld_handle, wip->wi_linkid, &attr);
if (status != DLADM_STATUS_OK) {
dprintf("check_wlan: dladm_wlan_get_linkattr() for %s "
"failed: %s", wip->wi_name,
@@ -444,7 +444,7 @@ unexpected:
if (sendevent) {
/* If not, then shut the interface down normally */
(void) np_queue_add_event(EV_TAKEDOWN, wip->wi_name);
- (void) dladm_wlan_disconnect(wip->wi_linkid);
+ (void) dladm_wlan_disconnect(dld_handle, wip->wi_linkid);
}
return (B_FALSE);
}
@@ -464,7 +464,8 @@ update_connected_wlan(wireless_if_t *wip, struct wireless_lan *exp_wlan)
char bssid[DLADM_STRSIZE];
boolean_t connected, wasconn;
- if (dladm_wlan_get_linkattr(wip->wi_linkid, &attr) != DLADM_STATUS_OK)
+ if (dladm_wlan_get_linkattr(dld_handle, wip->wi_linkid, &attr) !=
+ DLADM_STATUS_OK)
attr.la_status = DLADM_WLAN_LINK_DISCONNECTED;
if (attr.la_status == DLADM_WLAN_LINK_CONNECTED) {
(void) dladm_wlan_essid2str(&attr.la_wlan_attr.wa_essid, essid);
@@ -491,7 +492,8 @@ update_connected_wlan(wireless_if_t *wip, struct wireless_lan *exp_wlan)
dprintf("update: wrong AP on %s; expected %s %s",
exp_wlan->wl_if_name, exp_wlan->essid,
exp_wlan->bssid);
- (void) dladm_wlan_disconnect(wip->wi_linkid);
+ (void) dladm_wlan_disconnect(dld_handle,
+ wip->wi_linkid);
connected = B_FALSE;
}
/* If we're not in the expected state, then report disconnect */
@@ -500,7 +502,8 @@ update_connected_wlan(wireless_if_t *wip, struct wireless_lan *exp_wlan)
if (connected) {
dprintf("update: unexpected connection to %s "
"%s; clearing", essid, bssid);
- (void) dladm_wlan_disconnect(wip->wi_linkid);
+ (void) dladm_wlan_disconnect(dld_handle,
+ wip->wi_linkid);
} else {
dprintf("update: not connected to %s %s as "
"expected", exp_wlan->essid,
@@ -668,7 +671,8 @@ scan_wireless_nets(const char *ifname)
wlans[i].scanned = B_FALSE;
new_ap_found = B_FALSE;
dprintf("starting scan on %s", ifname);
- status = dladm_wlan_scan(linkid, (char *)ifname, get_scan_results);
+ status = dladm_wlan_scan(dld_handle, linkid, (char *)ifname,
+ get_scan_results);
if (status == DLADM_STATUS_OK) {
dropped = clear_unscanned_entries(ifname);
} else {
@@ -705,8 +709,8 @@ scan_end:
* make sure it's really down.
*/
while (retries++ < 4) {
- if (dladm_wlan_get_linkattr(wip->wi_linkid,
- &attr) != DLADM_STATUS_OK)
+ if (dladm_wlan_get_linkattr(dld_handle,
+ wip->wi_linkid, &attr) != DLADM_STATUS_OK)
attr.la_status =
DLADM_WLAN_LINK_DISCONNECTED;
else if (attr.la_status ==
@@ -740,7 +744,7 @@ scan_end:
*/
if (!connected || !wlan->connected)
(void) dladm_wlan_disconnect(
- linkid);
+ dld_handle, linkid);
break;
}
}
@@ -957,9 +961,10 @@ wireless_verify(const char *ifname)
/*
* If these calls fail, it means that the wireless link is down.
*/
- if (dladm_name2info(ifname, &linkid, NULL, NULL, NULL) !=
+ if (dladm_name2info(dld_handle, ifname, &linkid, NULL, NULL, NULL) !=
DLADM_STATUS_OK ||
- dladm_wlan_get_linkattr(linkid, &attr) != DLADM_STATUS_OK) {
+ dladm_wlan_get_linkattr(dld_handle, linkid, &attr) !=
+ DLADM_STATUS_OK) {
attr.la_status = DLADM_WLAN_LINK_DISCONNECTED;
}
@@ -1002,7 +1007,7 @@ wireless_verify(const char *ifname)
}
if (is_failure) {
dprintf("wireless check indicates disconnect");
- (void) dladm_wlan_disconnect(linkid);
+ (void) dladm_wlan_disconnect(dld_handle, linkid);
(void) np_queue_add_event(EV_LINKDISC, ifname);
}
}
@@ -1067,10 +1072,10 @@ periodic_wireless_scan(void *arg)
* If these things fail, it means that our wireless
* link isn't viable. Proceed in that way.
*/
- if (dladm_name2info(ifname, &linkid, NULL, NULL,
- NULL) != DLADM_STATUS_OK ||
- dladm_wlan_get_linkattr(linkid, &attr) !=
- DLADM_STATUS_OK) {
+ if (dladm_name2info(dld_handle, ifname, &linkid, NULL,
+ NULL, NULL) != DLADM_STATUS_OK ||
+ dladm_wlan_get_linkattr(dld_handle, linkid,
+ &attr) != DLADM_STATUS_OK) {
attr.la_status = DLADM_WLAN_LINK_DISCONNECTED;
attr.la_wlan_attr.wa_strength = 0;
}
@@ -1138,7 +1143,7 @@ periodic_wireless_scan(void *arg)
* says we're disconnected, then tell it to disconnect
* for sure.
*/
- (void) dladm_wlan_disconnect(linkid);
+ (void) dladm_wlan_disconnect(dld_handle, linkid);
/*
* Tell the state machine that we've lost this link so
@@ -1303,7 +1308,7 @@ store_key(struct wireless_lan *wlan)
}
/* we've validated the new key, so remove the old one */
- status = dladm_unset_secobj(obj_name,
+ status = dladm_unset_secobj(dld_handle, obj_name,
DLADM_OPT_ACTIVE | DLADM_OPT_PERSIST);
if (status != DLADM_STATUS_OK && status != DLADM_STATUS_NOTFOUND) {
syslog(LOG_ERR, "store_key: could not remove old secure object "
@@ -1316,7 +1321,7 @@ store_key(struct wireless_lan *wlan)
if (wlan->raw_key[0] == '\0')
return (0);
- status = dladm_set_secobj(obj_name, class,
+ status = dladm_set_secobj(dld_handle, obj_name, class,
obj_val, obj_len,
DLADM_OPT_CREATE | DLADM_OPT_PERSIST | DLADM_OPT_ACTIVE);
if (status != DLADM_STATUS_OK) {
@@ -1374,14 +1379,14 @@ retrieve_key(const char *essid, const char *bssid, dladm_secobj_class_t req)
cooked_key->wk_idx = 1;
/* Try the kernel first, then fall back to persistent storage. */
- status = dladm_get_secobj(cooked_key->wk_name, &class,
+ status = dladm_get_secobj(dld_handle, cooked_key->wk_name, &class,
cooked_key->wk_val, &cooked_key->wk_len,
DLADM_OPT_ACTIVE);
if (status != DLADM_STATUS_OK) {
dprintf("retrieve_key: dladm_get_secobj(TEMP) failed: %s",
dladm_status2str(status, errmsg));
- status = dladm_get_secobj(cooked_key->wk_name, &class,
- cooked_key->wk_val, &cooked_key->wk_len,
+ status = dladm_get_secobj(dld_handle, cooked_key->wk_name,
+ &class, cooked_key->wk_val, &cooked_key->wk_len,
DLADM_OPT_PERSIST);
}
@@ -1636,8 +1641,8 @@ extract_known_aps(FILE *fp, libnwam_known_ap_t *kap, char *sbuf, size_t *totstr)
sbuf += strlen(sbuf) + 1;
set_key_name(tok[ESSID], tok[BSSID], key, sizeof (key));
keylen = sizeof (keyval);
- if (dladm_get_secobj(key, &class, keyval, &keylen,
- DLADM_OPT_ACTIVE) == DLADM_STATUS_OK)
+ if (dladm_get_secobj(dld_handle, key, &class, keyval,
+ &keylen, DLADM_OPT_ACTIVE) == DLADM_STATUS_OK)
kap->ka_haskey = B_TRUE;
else
kap->ka_haskey = B_FALSE;
@@ -1756,8 +1761,8 @@ delete_known_ap(const char *essid, const char *bssid)
if (wip != NULL) {
wip->wi_wireless_done = B_FALSE;
wip->wi_need_key = B_FALSE;
- (void) dladm_wlan_disconnect(wip->
- wi_linkid);
+ (void) dladm_wlan_disconnect(dld_handle,
+ wip->wi_linkid);
}
(void) np_queue_add_event(EV_RESELECT,
wlan->wl_if_name);
@@ -1842,8 +1847,8 @@ connect_chosen_lan(struct wireless_lan *reqlan, wireless_if_t *wip)
* try a second time with just the ESSID.
*/
- status = dladm_wlan_connect(wip->wi_linkid, &attr, timeout, key,
- keycount, flags);
+ status = dladm_wlan_connect(dld_handle, wip->wi_linkid, &attr, timeout,
+ key, keycount, flags);
dprintf("connect_chosen_lan: dladm_wlan_connect returned %s",
dladm_status2str(status, errmsg));
/*
@@ -1856,8 +1861,8 @@ connect_chosen_lan(struct wireless_lan *reqlan, wireless_if_t *wip)
reqlan->essid, reqlan->bssid, reqlan->essid);
attr.wa_valid &= ~DLADM_WLAN_ATTR_BSSID;
flags = 0;
- status = dladm_wlan_connect(wip->wi_linkid, &attr, timeout,
- key, keycount, flags);
+ status = dladm_wlan_connect(dld_handle, wip->wi_linkid, &attr,
+ timeout, key, keycount, flags);
}
#endif /* CR6772510_FIXED */
if (status == DLADM_STATUS_OK) {
@@ -1954,7 +1959,8 @@ connect_thread(void *arg)
* the actual BSSID we connect to is arbitrary. Nothing we can
* do about that; just get the new value and live with it.
*/
- status = dladm_wlan_get_linkattr(wip->wi_linkid, &attr);
+ status = dladm_wlan_get_linkattr(dld_handle, wip->wi_linkid,
+ &attr);
if (status != DLADM_STATUS_OK) {
dprintf("failed to get linkattr on %s after connecting "
"to %s: %s", wlan->wl_if_name, wlan->essid,
@@ -2013,7 +2019,7 @@ failure:
if (wip != NULL) {
wip->wi_need_key = B_FALSE;
wip->wi_wireless_done = B_FALSE;
- (void) dladm_wlan_disconnect(wip->wi_linkid);
+ (void) dladm_wlan_disconnect(dld_handle, wip->wi_linkid);
}
if (wlan != NULL)
wlan->rescan = B_TRUE;
@@ -2167,7 +2173,7 @@ wlan_autoconf(const wireless_if_t *wip)
* to cycle through WLANs detected in priority order, attempting
* to connect.
*/
- status = dladm_wlan_connect(wip->wi_linkid, NULL,
+ status = dladm_wlan_connect(dld_handle, wip->wi_linkid, NULL,
DLADM_WLAN_CONNECT_TIMEOUT_DEFAULT, NULL, 0, 0);
if (status != DLADM_STATUS_OK) {
char errmsg[DLADM_STRSIZE];
@@ -2277,7 +2283,7 @@ handle_wireless_lan(const char *ifname)
} else if (cur_wlan->attrs.wa_strength >
most_recent->attrs.wa_strength) {
if (most_recent->connected) {
- (void) dladm_wlan_disconnect(
+ (void) dladm_wlan_disconnect(dld_handle,
wip->wi_linkid);
most_recent->connected = B_FALSE;
report_wlan_disconnect(most_recent);
@@ -2351,7 +2357,8 @@ disconnect_wlan(const char *ifname)
if ((wip = find_wireless_if(ifname)) != NULL) {
wip->wi_wireless_done = B_FALSE;
wip->wi_need_key = B_FALSE;
- (void) dladm_wlan_disconnect(wip->wi_linkid);
+ (void) dladm_wlan_disconnect(dld_handle,
+ wip->wi_linkid);
}
for (wlan = wlans; wlan < wlans + wireless_lan_used; wlan++) {
if (strcmp(ifname, wlan->wl_if_name) == 0 &&
diff --git a/usr/src/cmd/cmd-inet/usr.lib/wpad/driver.h b/usr/src/cmd/cmd-inet/usr.lib/wpad/driver.h
index 1169c82263..50fa90b867 100644
--- a/usr/src/cmd/cmd-inet/usr.lib/wpad/driver.h
+++ b/usr/src/cmd/cmd-inet/usr.lib/wpad/driver.h
@@ -11,8 +11,6 @@
#ifndef __DRIVER_H
#define __DRIVER_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <libdlwlan.h>
#include <libdllink.h>
@@ -26,15 +24,17 @@ typedef enum { CIPHER_NONE, CIPHER_WEP40, CIPHER_TKIP, CIPHER_CCMP,
typedef enum { KEY_MGMT_802_1X, KEY_MGMT_PSK, KEY_MGMT_NONE } wpa_key_mgmt;
struct wpa_driver_ops {
- int (*get_bssid)(datalink_id_t, char *);
- int (*get_ssid)(datalink_id_t, char *);
- int (*set_wpa)(datalink_id_t, boolean_t);
- int (*set_key)(datalink_id_t, wpa_alg, uint8_t *,
+ int (*get_bssid)(dladm_handle_t, datalink_id_t, char *);
+ int (*get_ssid)(dladm_handle_t, datalink_id_t, char *);
+ int (*set_wpa)(dladm_handle_t, datalink_id_t, boolean_t);
+ int (*set_key)(dladm_handle_t, datalink_id_t, wpa_alg, uint8_t *,
int, boolean_t, uint8_t *, uint32_t, uint8_t *, uint32_t);
- int (*scan)(datalink_id_t);
- int (*get_scan_results)(datalink_id_t, dladm_wlan_ess_t *, uint32_t);
- int (*disassociate)(datalink_id_t, int);
- int (*associate)(datalink_id_t, const char *, uint8_t *, uint32_t);
+ int (*scan)(dladm_handle_t, datalink_id_t);
+ int (*get_scan_results)(dladm_handle_t, datalink_id_t,
+ dladm_wlan_ess_t *, uint32_t);
+ int (*disassociate)(dladm_handle_t, datalink_id_t, int);
+ int (*associate)(dladm_handle_t, datalink_id_t, const char *, uint8_t *,
+ uint32_t);
};
#ifdef __cplusplus
diff --git a/usr/src/cmd/cmd-inet/usr.lib/wpad/driver_wifi.c b/usr/src/cmd/cmd-inet/usr.lib/wpad/driver_wifi.c
index 15eaa19374..a7722fcb3a 100644
--- a/usr/src/cmd/cmd-inet/usr.lib/wpad/driver_wifi.c
+++ b/usr/src/cmd/cmd-inet/usr.lib/wpad/driver_wifi.c
@@ -9,8 +9,6 @@
* See README for more details.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
@@ -38,13 +36,14 @@
* associated.
*/
int
-wpa_driver_wifi_get_bssid(datalink_id_t linkid, char *bssid)
+wpa_driver_wifi_get_bssid(dladm_handle_t handle, datalink_id_t linkid,
+ char *bssid)
{
dladm_status_t status;
dladm_wlan_linkattr_t attr;
dladm_wlan_attr_t *wl_attrp;
- status = dladm_wlan_get_linkattr(linkid, &attr);
+ status = dladm_wlan_get_linkattr(handle, linkid, &attr);
if (status != DLADM_STATUS_OK)
return (-1);
@@ -72,14 +71,15 @@ wpa_driver_wifi_get_bssid(datalink_id_t linkid, char *bssid)
* Returning zero is recommended if the STA is not associated.
*/
int
-wpa_driver_wifi_get_ssid(datalink_id_t linkid, char *ssid)
+wpa_driver_wifi_get_ssid(dladm_handle_t handle, datalink_id_t linkid,
+ char *ssid)
{
int ret;
dladm_status_t status;
dladm_wlan_linkattr_t attr;
dladm_wlan_attr_t *wl_attrp;
- status = dladm_wlan_get_linkattr(linkid, &attr);
+ status = dladm_wlan_get_linkattr(handle, linkid, &attr);
if (status != DLADM_STATUS_OK)
return (-1);
@@ -98,13 +98,13 @@ wpa_driver_wifi_get_ssid(datalink_id_t linkid, char *ssid)
}
static int
-wpa_driver_wifi_set_wpa_ie(datalink_id_t linkid, uint8_t *wpa_ie,
- uint32_t wpa_ie_len)
+wpa_driver_wifi_set_wpa_ie(dladm_handle_t handle, datalink_id_t linkid,
+ uint8_t *wpa_ie, uint32_t wpa_ie_len)
{
dladm_status_t status;
wpa_printf(MSG_DEBUG, "%s", "wpa_driver_wifi_set_wpa_ie");
- status = dladm_wlan_wpa_set_ie(linkid, wpa_ie, wpa_ie_len);
+ status = dladm_wlan_wpa_set_ie(handle, linkid, wpa_ie, wpa_ie_len);
return (WPA_STATUS(status));
}
@@ -123,22 +123,24 @@ wpa_driver_wifi_set_wpa_ie(datalink_id_t linkid, uint8_t *wpa_ie,
* allow wpa_supplicant to control roaming).
*/
static int
-wpa_driver_wifi_set_wpa(datalink_id_t linkid, boolean_t enabled)
+wpa_driver_wifi_set_wpa(dladm_handle_t handle, datalink_id_t linkid,
+ boolean_t enabled)
{
dladm_status_t status;
wpa_printf(MSG_DEBUG, "wpa_driver_wifi_set_wpa: enable=%d", enabled);
- if (!enabled && wpa_driver_wifi_set_wpa_ie(linkid, NULL, 0) < 0)
+ if (!enabled && wpa_driver_wifi_set_wpa_ie(handle, linkid, NULL, 0) < 0)
return (-1);
- status = dladm_wlan_wpa_set_wpa(linkid, enabled);
+ status = dladm_wlan_wpa_set_wpa(handle, linkid, enabled);
return (WPA_STATUS(status));
}
static int
-wpa_driver_wifi_del_key(datalink_id_t linkid, int key_idx, unsigned char *addr)
+wpa_driver_wifi_del_key(dladm_handle_t handle, datalink_id_t linkid,
+ int key_idx, unsigned char *addr)
{
dladm_status_t status;
dladm_wlan_bssid_t bss;
@@ -147,7 +149,7 @@ wpa_driver_wifi_del_key(datalink_id_t linkid, int key_idx, unsigned char *addr)
key_idx);
(void) memcpy(bss.wb_bytes, addr, DLADM_WLAN_BSSID_LEN);
- status = dladm_wlan_wpa_del_key(linkid, key_idx, &bss);
+ status = dladm_wlan_wpa_del_key(handle, linkid, key_idx, &bss);
return (WPA_STATUS(status));
}
@@ -186,9 +188,9 @@ wpa_driver_wifi_del_key(datalink_id_t linkid, int key_idx, unsigned char *addr)
* configuration.
*/
static int
-wpa_driver_wifi_set_key(datalink_id_t linkid, wpa_alg alg,
- unsigned char *addr, int key_idx, boolean_t set_tx, uint8_t *seq,
- uint32_t seq_len, uint8_t *key, uint32_t key_len)
+wpa_driver_wifi_set_key(dladm_handle_t handle, datalink_id_t linkid,
+ wpa_alg alg, unsigned char *addr, int key_idx, boolean_t set_tx,
+ uint8_t *seq, uint32_t seq_len, uint8_t *key, uint32_t key_len)
{
char *alg_name;
dladm_wlan_cipher_t cipher;
@@ -197,7 +199,7 @@ wpa_driver_wifi_set_key(datalink_id_t linkid, wpa_alg alg,
wpa_printf(MSG_DEBUG, "%s", "wpa_driver_wifi_set_key");
if (alg == WPA_ALG_NONE)
- return (wpa_driver_wifi_del_key(linkid, key_idx, addr));
+ return (wpa_driver_wifi_del_key(handle, linkid, key_idx, addr));
switch (alg) {
case WPA_ALG_WEP:
@@ -230,7 +232,7 @@ wpa_driver_wifi_set_key(datalink_id_t linkid, wpa_alg alg,
}
(void) memcpy(bss.wb_bytes, addr, DLADM_WLAN_BSSID_LEN);
- status = dladm_wlan_wpa_set_key(linkid, cipher, &bss, set_tx,
+ status = dladm_wlan_wpa_set_key(handle, linkid, cipher, &bss, set_tx,
*(uint64_t *)(uintptr_t)seq, key_idx, key, key_len);
return (WPA_STATUS(status));
@@ -245,14 +247,15 @@ wpa_driver_wifi_set_key(datalink_id_t linkid, wpa_alg alg,
* Return: 0 on success, -1 on failure
*/
static int
-wpa_driver_wifi_disassociate(datalink_id_t linkid, int reason_code)
+wpa_driver_wifi_disassociate(dladm_handle_t handle, datalink_id_t linkid,
+ int reason_code)
{
dladm_status_t status;
wpa_printf(MSG_DEBUG, "wpa_driver_wifi_disassociate");
- status = dladm_wlan_wpa_set_mlme(linkid, DLADM_WLAN_MLME_DISASSOC,
- reason_code, NULL);
+ status = dladm_wlan_wpa_set_mlme(handle, linkid,
+ DLADM_WLAN_MLME_DISASSOC, reason_code, NULL);
return (WPA_STATUS(status));
}
@@ -277,8 +280,8 @@ wpa_driver_wifi_disassociate(datalink_id_t linkid, int reason_code)
* Return: 0 on success, -1 on failure
*/
static int
-wpa_driver_wifi_associate(datalink_id_t linkid, const char *bssid,
- uint8_t *wpa_ie, uint32_t wpa_ie_len)
+wpa_driver_wifi_associate(dladm_handle_t handle, datalink_id_t linkid,
+ const char *bssid, uint8_t *wpa_ie, uint32_t wpa_ie_len)
{
dladm_status_t status;
dladm_wlan_bssid_t bss;
@@ -291,11 +294,11 @@ wpa_driver_wifi_associate(datalink_id_t linkid, const char *bssid,
* this is implied by the bssid which is used to locate
* the scanned node state which holds it.
*/
- if (wpa_driver_wifi_set_wpa_ie(linkid, wpa_ie, wpa_ie_len) < 0)
+ if (wpa_driver_wifi_set_wpa_ie(handle, linkid, wpa_ie, wpa_ie_len) < 0)
return (-1);
(void) memcpy(bss.wb_bytes, bssid, DLADM_WLAN_BSSID_LEN);
- status = dladm_wlan_wpa_set_mlme(linkid, DLADM_WLAN_MLME_ASSOC,
+ status = dladm_wlan_wpa_set_mlme(handle, linkid, DLADM_WLAN_MLME_ASSOC,
0, &bss);
return (WPA_STATUS(status));
@@ -312,7 +315,7 @@ wpa_driver_wifi_associate(datalink_id_t linkid, const char *bssid,
* results with wpa_driver_get_scan_results().
*/
static int
-wpa_driver_wifi_scan(datalink_id_t linkid)
+wpa_driver_wifi_scan(dladm_handle_t handle, datalink_id_t linkid)
{
dladm_status_t status;
@@ -322,10 +325,10 @@ wpa_driver_wifi_scan(datalink_id_t linkid)
* to get ieee80211_begin_scan called. We really want to scan w/o
* altering the current state but that's not possible right now.
*/
- (void) wpa_driver_wifi_disassociate(linkid,
+ (void) wpa_driver_wifi_disassociate(handle, linkid,
DLADM_WLAN_REASON_DISASSOC_LEAVING);
- status = dladm_wlan_scan(linkid, NULL, NULL);
+ status = dladm_wlan_scan(handle, linkid, NULL, NULL);
wpa_printf(MSG_DEBUG, "%s: return", "wpa_driver_wifi_scan");
return (WPA_STATUS(status));
@@ -344,7 +347,7 @@ wpa_driver_wifi_scan(datalink_id_t linkid)
* buffer.
*/
int
-wpa_driver_wifi_get_scan_results(datalink_id_t linkid,
+wpa_driver_wifi_get_scan_results(dladm_handle_t handle, datalink_id_t linkid,
dladm_wlan_ess_t *results, uint32_t max_size)
{
uint_t ret;
@@ -352,7 +355,7 @@ wpa_driver_wifi_get_scan_results(datalink_id_t linkid,
wpa_printf(MSG_DEBUG, "%s: max size=%d\n",
"wpa_driver_wifi_get_scan_results", max_size);
- if (dladm_wlan_wpa_get_sr(linkid, results, max_size, &ret)
+ if (dladm_wlan_wpa_get_sr(handle, linkid, results, max_size, &ret)
!= DLADM_STATUS_OK) {
return (-1);
}
diff --git a/usr/src/cmd/cmd-inet/usr.lib/wpad/wpa.c b/usr/src/cmd/cmd-inet/usr.lib/wpad/wpa.c
index 75fff828e2..917faf51a8 100644
--- a/usr/src/cmd/cmd-inet/usr.lib/wpad/wpa.c
+++ b/usr/src/cmd/cmd-inet/usr.lib/wpad/wpa.c
@@ -9,8 +9,6 @@
* See README for more details.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -759,13 +757,15 @@ wpa_supplicant_get_ssid(struct wpa_supplicant *wpa_s)
uint8_t bssid[IEEE80211_ADDR_LEN];
(void) memset(ssid, 0, MAX_ESSID_LENGTH);
- ssid_len = wpa_s->driver->get_ssid(wpa_s->linkid, (char *)ssid);
+ ssid_len = wpa_s->driver->get_ssid(wpa_s->handle, wpa_s->linkid,
+ (char *)ssid);
if (ssid_len < 0) {
wpa_printf(MSG_WARNING, "Could not read SSID from driver.");
return (NULL);
}
- if (wpa_s->driver->get_bssid(wpa_s->linkid, (char *)bssid) < 0) {
+ if (wpa_s->driver->get_bssid(wpa_s->handle, wpa_s->linkid,
+ (char *)bssid) < 0) {
wpa_printf(MSG_WARNING, "Could not read BSSID from driver.");
return (NULL);
}
@@ -813,7 +813,8 @@ wpa_supplicant_key_request(struct wpa_supplicant *wpa_s,
else
ver = WPA_KEY_INFO_TYPE_HMAC_MD5_RC4;
- if (wpa_s->driver->get_bssid(wpa_s->linkid, (char *)bssid) < 0) {
+ if (wpa_s->driver->get_bssid(wpa_s->handle, wpa_s->linkid,
+ (char *)bssid) < 0) {
wpa_printf(MSG_WARNING, "Failed to read BSSID for EAPOL-Key "
"request");
return;
@@ -1078,13 +1079,13 @@ wpa_supplicant_process_3_of_4_gtk(struct wpa_supplicant *wpa_s,
(void) memcpy(gtk + 24, tmpbuf, 8);
}
if (wpa_s->pairwise_cipher == WPA_CIPHER_NONE) {
- if (wpa_s->driver->set_key(wpa_s->linkid, alg,
+ if (wpa_s->driver->set_key(wpa_s->handle, wpa_s->linkid, alg,
(uint8_t *)"\xff\xff\xff\xff\xff\xff",
keyidx, 1, key->key_rsc,
key_rsc_len, gtk, gtk_len) < 0)
wpa_printf(MSG_WARNING, "WPA: Failed to set "
"GTK to the driver (Group only).");
- } else if (wpa_s->driver->set_key(wpa_s->linkid, alg,
+ } else if (wpa_s->driver->set_key(wpa_s->handle, wpa_s->linkid, alg,
(uint8_t *)"\xff\xff\xff\xff\xff\xff", keyidx, tx,
key->key_rsc, key_rsc_len, gtk, gtk_len) < 0) {
wpa_printf(MSG_WARNING, "WPA: Failed to set GTK to "
@@ -1274,8 +1275,8 @@ wpa_supplicant_process_3_of_4(struct wpa_supplicant *wpa_s,
wpa_hexdump(MSG_DEBUG, "WPA: RSC", key_rsc, rsclen);
}
- if (wpa_s->driver->set_key(wpa_s->linkid, alg, src_addr,
- 0, 1, key_rsc, rsclen,
+ if (wpa_s->driver->set_key(wpa_s->handle, wpa_s->linkid, alg,
+ src_addr, 0, 1, key_rsc, rsclen,
(uint8_t *)&wpa_s->ptk.tk1, keylen) < 0) {
wpa_printf(MSG_WARNING, "WPA: Failed to set PTK to the"
" driver.");
@@ -1465,13 +1466,13 @@ wpa_supplicant_process_1_of_2(struct wpa_supplicant *wpa_s,
(void) memcpy(gtk + 24, tmpbuf, 8);
}
if (wpa_s->pairwise_cipher == WPA_CIPHER_NONE) {
- if (wpa_s->driver->set_key(wpa_s->linkid, alg,
+ if (wpa_s->driver->set_key(wpa_s->handle, wpa_s->linkid, alg,
(uint8_t *)"\xff\xff\xff\xff\xff\xff",
keyidx, 1, key->key_rsc,
key_rsc_len, gtk, keylen) < 0)
wpa_printf(MSG_WARNING, "WPA: Failed to set GTK to the"
" driver (Group only).");
- } else if (wpa_s->driver->set_key(wpa_s->linkid, alg,
+ } else if (wpa_s->driver->set_key(wpa_s->handle, wpa_s->linkid, alg,
(uint8_t *)"\xff\xff\xff\xff\xff\xff",
keyidx, tx,
key->key_rsc, key_rsc_len,
diff --git a/usr/src/cmd/cmd-inet/usr.lib/wpad/wpa_impl.h b/usr/src/cmd/cmd-inet/usr.lib/wpad/wpa_impl.h
index 2e043e6a37..4e82817c7c 100644
--- a/usr/src/cmd/cmd-inet/usr.lib/wpad/wpa_impl.h
+++ b/usr/src/cmd/cmd-inet/usr.lib/wpad/wpa_impl.h
@@ -11,8 +11,6 @@
#ifndef __WPA_IMPL_H
#define __WPA_IMPL_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <net/wpa.h>
#include <libdladm.h>
#include <libdllink.h>
@@ -166,6 +164,9 @@ struct wpa_supplicant {
struct l2_packet_data *l2;
unsigned char own_addr[IEEE80211_ADDR_LEN];
+ /* The handle required for libdladm calls */
+ dladm_handle_t handle;
+
datalink_id_t linkid;
char kname[DLADM_SECOBJ_NAME_MAX];
diff --git a/usr/src/cmd/cmd-inet/usr.lib/wpad/wpa_supplicant.c b/usr/src/cmd/cmd-inet/usr.lib/wpad/wpa_supplicant.c
index 8995fe7f92..4e3071debd 100644
--- a/usr/src/cmd/cmd-inet/usr.lib/wpad/wpa_supplicant.c
+++ b/usr/src/cmd/cmd-inet/usr.lib/wpad/wpa_supplicant.c
@@ -137,7 +137,7 @@ wpa_supplicant_scan(void *eloop_ctx, void *timeout_ctx)
wpa_printf(MSG_DEBUG, "Scan SSID: %s", ssid->ssid);
}
- if (wpa_s->driver->scan(wpa_s->linkid)) {
+ if (wpa_s->driver->scan(wpa_s->handle, wpa_s->linkid)) {
wpa_printf(MSG_WARNING, "Failed to initiate AP scan.");
}
}
@@ -201,6 +201,7 @@ wpa_supplicant_cleanup(struct wpa_supplicant *wpa_s)
wpa_s->conf = NULL;
}
+ dladm_close(wpa_s->handle);
free(wpa_s->ap_wpa_ie);
pmksa_candidate_free(wpa_s);
pmksa_cache_free(wpa_s);
@@ -209,17 +210,17 @@ wpa_supplicant_cleanup(struct wpa_supplicant *wpa_s)
static void
wpa_clear_keys(struct wpa_supplicant *wpa_s, uint8_t *addr)
{
- wpa_s->driver->set_key(wpa_s->linkid, WPA_ALG_NONE,
+ wpa_s->driver->set_key(wpa_s->handle, wpa_s->linkid, WPA_ALG_NONE,
(uint8_t *)"\xff\xff\xff\xff\xff\xff", 0, 0, NULL, 0, NULL, 0);
- wpa_s->driver->set_key(wpa_s->linkid, WPA_ALG_NONE,
+ wpa_s->driver->set_key(wpa_s->handle, wpa_s->linkid, WPA_ALG_NONE,
(uint8_t *)"\xff\xff\xff\xff\xff\xff", 1, 0, NULL, 0, NULL, 0);
- wpa_s->driver->set_key(wpa_s->linkid, WPA_ALG_NONE,
+ wpa_s->driver->set_key(wpa_s->handle, wpa_s->linkid, WPA_ALG_NONE,
(uint8_t *)"\xff\xff\xff\xff\xff\xff", 2, 0, NULL, 0, NULL, 0);
- wpa_s->driver->set_key(wpa_s->linkid, WPA_ALG_NONE,
+ wpa_s->driver->set_key(wpa_s->handle, wpa_s->linkid, WPA_ALG_NONE,
(uint8_t *)"\xff\xff\xff\xff\xff\xff", 3, 0, NULL, 0, NULL, 0);
if (addr) {
- wpa_s->driver->set_key(wpa_s->linkid, WPA_ALG_NONE, addr,
- 0, 0, NULL, 0, NULL, 0);
+ wpa_s->driver->set_key(wpa_s->handle, wpa_s->linkid,
+ WPA_ALG_NONE, addr, 0, 0, NULL, 0, NULL, 0);
}
}
@@ -353,7 +354,7 @@ static void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
wpa_clear_keys(wpa_s, bss->we_bssid.wb_bytes);
wpa_s->wpa_state = WPA_ASSOCIATING;
- wpa_s->driver->associate(wpa_s->linkid,
+ wpa_s->driver->associate(wpa_s->handle, wpa_s->linkid,
(const char *)bss->we_bssid.wb_bytes, wpa_ie, wpa_ie_len);
/* Timeout for IEEE 802.11 authentication and association */
@@ -367,7 +368,8 @@ wpa_supplicant_disassociate(struct wpa_supplicant *wpa_s, int reason_code)
wpa_s->wpa_state = WPA_DISCONNECTED;
if (memcmp(wpa_s->bssid, "\x00\x00\x00\x00\x00\x00",
IEEE80211_ADDR_LEN) != 0) {
- wpa_s->driver->disassociate(wpa_s->linkid, reason_code);
+ wpa_s->driver->disassociate(wpa_s->handle, wpa_s->linkid,
+ reason_code);
addr = wpa_s->bssid;
}
wpa_clear_keys(wpa_s, addr);
@@ -449,8 +451,8 @@ wpa_supplicant_scan_results(struct wpa_supplicant *wpa_s)
struct wpa_ssid *ssid;
(void) memset(results, 0, sizeof (dladm_wlan_ess_t) * MAX_SCANRESULTS);
- num = wpa_s->driver->get_scan_results(wpa_s->linkid, results,
- MAX_SCANRESULTS);
+ num = wpa_s->driver->get_scan_results(wpa_s->handle, wpa_s->linkid,
+ results, MAX_SCANRESULTS);
wpa_printf(MSG_DEBUG, "Scan results: %d", num);
if (num < 0)
return;
@@ -550,7 +552,7 @@ wpa_supplicant_driver_init(const char *link, struct wpa_supplicant *wpa_s)
return (-1);
}
- if (wpa_s->driver->set_wpa(wpa_s->linkid, 1) < 0) {
+ if (wpa_s->driver->set_wpa(wpa_s->handle, wpa_s->linkid, 1) < 0) {
wpa_printf(MSG_ERROR, "Failed to enable WPA in the driver.");
return (-1);
}
@@ -693,13 +695,13 @@ wpa_config_read_network(struct wpa_supplicant *wpa_s)
ssid->key_mgmt = WPA_KEY_MGMT_PSK; /* | WPA_KEY_MGMT_IEEE8021X; */
(void) memset(buf, 0, MAX_ESSID_LENGTH + 1);
- wpa_s->driver->get_ssid(wpa_s->linkid, (char *)buf);
+ wpa_s->driver->get_ssid(wpa_s->handle, wpa_s->linkid, (char *)buf);
(void) wpa_config_parse_ssid(ssid, 0, buf);
key_len = sizeof (psk);
- (void) dladm_get_secobj((const char *)wpa_s->kname, &cl, psk, &key_len,
- DLADM_OPT_ACTIVE);
+ (void) dladm_get_secobj(wpa_s->handle, (const char *)wpa_s->kname, &cl,
+ psk, &key_len, DLADM_OPT_ACTIVE);
psk[key_len] = '\0';
ssid->passphrase = strdup((const char *)psk);
@@ -812,6 +814,7 @@ main(int argc, char *argv[])
int c;
int exitcode;
char door_file[MAXPATHLEN];
+ dladm_handle_t handle;
if (!is_smf_context()) {
(void) fprintf(stderr,
@@ -862,9 +865,17 @@ main(int argc, char *argv[])
return (-1);
}
- if (dladm_name2info(link, &linkid, NULL, NULL, NULL) !=
+ /* This handle is stored in wpa_s when that struct is filled. */
+ if (dladm_open(&handle) != DLADM_STATUS_OK) {
+ wpa_printf(MSG_ERROR, "Failed to open dladm handle");
+ dlpi_close(dh);
+ return (-1);
+ }
+
+ if (dladm_name2info(handle, link, &linkid, NULL, NULL, NULL) !=
DLADM_STATUS_OK) {
wpa_printf(MSG_ERROR, "Invalid link name '%s'.", link);
+ dladm_close(handle);
dlpi_close(dh);
return (-1);
}
@@ -874,10 +885,11 @@ main(int argc, char *argv[])
* file name used to communicate with the driver. Note that different
* links use different doors.
*/
- if (dladm_phys_info(linkid, &dpa, DLADM_OPT_ACTIVE) !=
+ if (dladm_phys_info(handle, linkid, &dpa, DLADM_OPT_ACTIVE) !=
DLADM_STATUS_OK) {
wpa_printf(MSG_ERROR,
"Failed to get device name of link '%s'.", link);
+ dladm_close(handle);
dlpi_close(dh);
return (-1);
}
@@ -885,6 +897,7 @@ main(int argc, char *argv[])
(void) memset(&wpa_s, 0, sizeof (wpa_s));
wpa_s.driver = &wpa_driver_wifi_ops;
+ wpa_s.handle = handle;
wpa_s.linkid = linkid;
(void) strlcpy(wpa_s.kname, key, sizeof (wpa_s.kname));
eloop_init(&wpa_s);
@@ -935,12 +948,13 @@ main(int argc, char *argv[])
wpa_printf(MSG_DEBUG, "<= eloop_run()");
wpa_supplicant_disassociate(&wpa_s, REASON_DEAUTH_LEAVING);
- if (wpa_s.driver->set_wpa(wpa_s.linkid, 0) < 0) {
+ if (wpa_s.driver->set_wpa(wpa_s.handle, wpa_s.linkid, 0) < 0) {
wpa_printf(MSG_ERROR, "Failed to disable WPA in the driver.\n");
}
cleanup:
wpa_supplicant_door_destroy(door_file);
+ /* The libdladm handle is closed in the following method */
wpa_supplicant_cleanup(&wpa_s);
eloop_destroy();
diff --git a/usr/src/cmd/cmd-inet/usr.sbin/ifconfig/ifconfig.c b/usr/src/cmd/cmd-inet/usr.sbin/ifconfig/ifconfig.c
index 79e2991164..f49fca249c 100644
--- a/usr/src/cmd/cmd-inet/usr.sbin/ifconfig/ifconfig.c
+++ b/usr/src/cmd/cmd-inet/usr.sbin/ifconfig/ifconfig.c
@@ -4500,9 +4500,15 @@ static boolean_t
ni_entry(const char *linkname, void *arg)
{
dlpi_handle_t dh;
+ dladm_handle_t dld_handle;
datalink_class_t class;
- (void) dladm_name2info(linkname, NULL, NULL, &class, NULL);
+ if (dladm_open(&dld_handle) != DLADM_STATUS_OK)
+ return (_B_FALSE);
+
+ (void) dladm_name2info(dld_handle, linkname, NULL, NULL, &class, NULL);
+ dladm_close(dld_handle);
+
if (class == DATALINK_CLASS_ETHERSTUB)
return (_B_FALSE);
if (dlpi_open(linkname, &dh, 0) != DLPI_SUCCESS)
diff --git a/usr/src/cmd/cmd-inet/usr.sbin/ndd.c b/usr/src/cmd/cmd-inet/usr.sbin/ndd.c
index 0d1af3281e..b8b5089505 100644
--- a/usr/src/cmd/cmd-inet/usr.sbin/ndd.c
+++ b/usr/src/cmd/cmd-inet/usr.sbin/ndd.c
@@ -46,7 +46,7 @@ static boolean_t do_getset(int fd, int cmd, char *buf, int buf_len);
static int get_value(char *msg, char *buf, int buf_len);
static void name_print(char *buf);
static void getset_interactive(int fd);
-static int open_device(void);
+static int open_device(dladm_handle_t);
static char *errmsg(int err);
static void fatal(char *fmt, ...);
static void printe(boolean_t print_errno, char *fmt, ...);
@@ -62,7 +62,7 @@ static char usage_str[] = "usage: ndd -set device_name name value\n"
* to test for support of the flowctrl property.
*/
static void
-gldv3_warning(char *module)
+gldv3_warning(dladm_handle_t handle, char *module)
{
datalink_id_t linkid;
dladm_status_t status;
@@ -73,12 +73,12 @@ gldv3_warning(char *module)
link = strrchr(module, '/');
if (link == NULL)
return;
- status = dladm_name2info(++link, &linkid, NULL, NULL, NULL);
+ status = dladm_name2info(handle, ++link, &linkid, NULL, NULL, NULL);
if (status != DLADM_STATUS_OK)
return;
cp = buf;
- status = dladm_get_linkprop(linkid, DLADM_PROP_VAL_CURRENT, "flowctrl",
- &cp, &cnt);
+ status = dladm_get_linkprop(handle, linkid, DLADM_PROP_VAL_CURRENT,
+ "flowctrl", &cp, &cnt);
if (status != DLADM_STATUS_OK)
return;
(void) fprintf(stderr, gettext(
@@ -94,10 +94,14 @@ main(int argc, char **argv)
char *cp, *value;
int cmd;
int fd;
+ dladm_handle_t handle;
+ if (dladm_open(&handle) != DLADM_STATUS_OK)
+ fatal("failed to open dladm handle");
if (!(cp = *++argv)) {
- while ((fd = open_device()) != -1) {
+ /* open_device() calls gldv3_warning() which needs handle */
+ while ((fd = open_device(handle)) != -1) {
getset_interactive(fd);
(void) close(fd);
}
@@ -113,7 +117,9 @@ main(int argc, char **argv)
if (!(cp = *++argv))
fatal(usage_str);
}
- gldv3_warning(cp);
+ gldv3_warning(handle, cp);
+ dladm_close(handle);
+
if ((fd = open(cp, O_RDWR)) == -1)
fatal("open of %s failed: %s", cp, errmsg(errno));
@@ -287,7 +293,7 @@ printe(boolean_t print_errno, char *fmt, ...)
static int
-open_device(void)
+open_device(dladm_handle_t handle)
{
char name[80];
int fd, len;
@@ -303,7 +309,7 @@ open_device(void)
continue;
}
- gldv3_warning(name);
+ gldv3_warning(handle, name);
if (isastream(fd))
return (fd);
diff --git a/usr/src/cmd/dladm/dladm.c b/usr/src/cmd/dladm/dladm.c
index 5d2aea069a..211a64a980 100644
--- a/usr/src/cmd/dladm/dladm.c
+++ b/usr/src/cmd/dladm/dladm.c
@@ -192,7 +192,7 @@ static void dladm_print_output(print_state_t *, boolean_t,
/*
* helper function that, when invoked as dladm_print_field(pf, buf)
- * prints string which is offset by pf->pf_offset within buf
+ * prints string which is offset by pf->pf_offset within buf.
*/
static char *dladm_print_field(print_field_t *, void *);
@@ -276,7 +276,7 @@ static cmdfunc_t do_show_usage;
static void do_up_vnic_common(int, char **, const char *, boolean_t);
static void altroot_cmd(char *, int, char **);
-static int show_linkprop_onelink(datalink_id_t, void *);
+static int show_linkprop_onelink(dladm_handle_t, datalink_id_t, void *);
static void link_stats(datalink_id_t, uint_t, char *, show_state_t *);
static void aggr_stats(datalink_id_t, show_grp_state_t *, uint_t);
@@ -290,7 +290,7 @@ static uint64_t get_ifspeed(const char *, boolean_t);
static const char *get_linkstate(const char *, boolean_t, char *);
static const char *get_linkduplex(const char *, boolean_t, char *);
-static int show_etherprop(datalink_id_t, void *);
+static int show_etherprop(dladm_handle_t, datalink_id_t, void *);
static void show_ether_xprop(void *, dladm_ether_info_t *);
static boolean_t link_is_ether(const char *, datalink_id_t *);
@@ -368,7 +368,7 @@ static cmd_t cmds[] = {
{ "delete-phys", do_delete_phys,
"\tdelete-phys\t<link>" },
{ "show-phys", do_show_phys,
- "\tshow-phys\t[-pP] [-o <field>,..] [-H] [<link>]" },
+ "\tshow-phys\t[-pP] [-o <field>,..] [-H] [<link>]" },
{ "init-phys", do_init_phys, NULL },
{ "show-linkmap", do_show_linkmap, NULL },
{ "create-vnic", do_create_vnic,
@@ -381,7 +381,7 @@ static cmd_t cmds[] = {
{ "delete-vnic", do_delete_vnic,
"\tdelete-vnic [-t] [-R <root-dir>] <vnic-link>\n" },
{ "show-vnic", do_show_vnic,
- "\tshow-vnic [-pP] [-l <link>] [-s [-i <interval>]]" },
+ "\tshow-vnic [-pP] [-l <link>] [-s [-i <interval>]]" },
{ "up-vnic", do_up_vnic, NULL },
{ "create-etherstub", do_create_etherstub,
"\tcreate-etherstub [-t] [-R <root-dir>] <link>\n" },
@@ -1000,6 +1000,12 @@ static print_field_t usage_l_fields[] = {
static char *progname;
static sig_atomic_t signalled;
+/*
+ * Handle to libdladm. Opened in main() before the sub-command
+ * specific function is called.
+ */
+static dladm_handle_t handle = NULL;
+
#define DLADM_ETHERSTUB_NAME "etherstub"
#define DLADM_IS_ETHERSTUB(id) (id == DATALINK_INVALID_LINKID)
@@ -1015,6 +1021,11 @@ usage(void)
if (cmdp->c_usage != NULL)
(void) fprintf(stderr, "%s\n", gettext(cmdp->c_usage));
}
+
+ /* close dladm handle if it was opened */
+ if (handle != NULL)
+ dladm_close(handle);
+
exit(1);
}
@@ -1023,6 +1034,7 @@ main(int argc, char *argv[])
{
int i;
cmd_t *cmdp;
+ dladm_status_t status;
(void) setlocale(LC_ALL, "");
#if !defined(TEXT_DOMAIN)
@@ -1038,7 +1050,15 @@ main(int argc, char *argv[])
for (i = 0; i < sizeof (cmds) / sizeof (cmds[0]); i++) {
cmdp = &cmds[i];
if (strcmp(argv[1], cmdp->c_name) == 0) {
+ /* Open the libdladm handle */
+ if ((status = dladm_open(&handle)) != DLADM_STATUS_OK) {
+ die_dlerr(status,
+ "could not open /dev/dld");
+ }
+
cmdp->c_fn(argc - 1, &argv[1], cmdp->c_usage);
+
+ dladm_close(handle);
exit(0);
}
}
@@ -1424,21 +1444,22 @@ do_create_aggr(int argc, char *argv[], const char *use)
altroot_cmd(altroot, argc, argv);
for (n = 0; n < ndev; n++) {
- if (dladm_dev2linkid(devs[n], &port[n].lp_linkid) !=
- DLADM_STATUS_OK) {
- die("invalid dev name '%s'", devs[n]);
+ if ((status = dladm_dev2linkid(handle, devs[n],
+ &port[n].lp_linkid)) != DLADM_STATUS_OK) {
+ die_dlerr(status, "invalid dev name '%s'", devs[n]);
}
}
for (n = 0; n < nlink; n++) {
- if (dladm_name2info(links[n], &port[ndev + n].lp_linkid,
- NULL, NULL, NULL) != DLADM_STATUS_OK) {
- die("invalid link name '%s'", links[n]);
+ if ((status = dladm_name2info(handle, links[n],
+ &port[ndev + n].lp_linkid, NULL, NULL, NULL)) !=
+ DLADM_STATUS_OK) {
+ die_dlerr(status, "invalid link name '%s'", links[n]);
}
}
- status = dladm_aggr_create(name, key, ndev + nlink, port, policy,
- mac_addr_fixed, (const uchar_t *)mac_addr, lacp_mode,
+ status = dladm_aggr_create(handle, name, key, ndev + nlink, port,
+ policy, mac_addr_fixed, (const uchar_t *)mac_addr, lacp_mode,
lacp_timer, flags);
if (status != DLADM_STATUS_OK)
goto done;
@@ -1446,14 +1467,14 @@ do_create_aggr(int argc, char *argv[], const char *use)
if (proplist == NULL)
return;
- status = dladm_name2info(name, &linkid, NULL, NULL, NULL);
+ status = dladm_name2info(handle, name, &linkid, NULL, NULL, NULL);
if (status != DLADM_STATUS_OK)
goto done;
for (i = 0; i < proplist->al_count; i++) {
dladm_arg_info_t *aip = &proplist->al_info[i];
- pstatus = dladm_set_linkprop(linkid, aip->ai_name,
+ pstatus = dladm_set_linkprop(handle, linkid, aip->ai_name,
aip->ai_val, aip->ai_count, flags);
if (pstatus != DLADM_STATUS_OK) {
@@ -1496,9 +1517,10 @@ i_dladm_aggr_get_linkid(const char *altroot, const char *arg,
return (DLADM_STATUS_OK);
if (aggr != NULL) {
- status = dladm_name2info(aggr, linkidp, NULL, NULL, NULL);
+ status = dladm_name2info(handle, aggr, linkidp, NULL, NULL,
+ NULL);
} else {
- status = dladm_key2linkid(key, linkidp, flags);
+ status = dladm_key2linkid(handle, key, linkidp, flags);
}
return (status);
@@ -1539,7 +1561,7 @@ do_delete_aggr(int argc, char *argv[], const char *use)
if (altroot != NULL)
altroot_cmd(altroot, argc, argv);
- status = dladm_aggr_delete(linkid, flags);
+ status = dladm_aggr_delete(handle, linkid, flags);
done:
if (status != DLADM_STATUS_OK)
die_dlerr(status, "delete operation failed");
@@ -1606,20 +1628,21 @@ do_add_aggr(int argc, char *argv[], const char *use)
altroot_cmd(altroot, argc, argv);
for (n = 0; n < ndev; n++) {
- if (dladm_dev2linkid(devs[n], &(port[n].lp_linkid)) !=
- DLADM_STATUS_OK) {
- die("invalid <dev> '%s'", devs[n]);
+ if ((status = dladm_dev2linkid(handle, devs[n],
+ &(port[n].lp_linkid))) != DLADM_STATUS_OK) {
+ die_dlerr(status, "invalid <dev> '%s'", devs[n]);
}
}
for (n = 0; n < nlink; n++) {
- if (dladm_name2info(links[n], &port[n + ndev].lp_linkid,
- NULL, NULL, NULL) != DLADM_STATUS_OK) {
- die("invalid <link> '%s'", links[n]);
+ if ((status = dladm_name2info(handle, links[n],
+ &port[n + ndev].lp_linkid, NULL, NULL, NULL)) !=
+ DLADM_STATUS_OK) {
+ die_dlerr(status, "invalid <link> '%s'", links[n]);
}
}
- status = dladm_aggr_add(linkid, ndev + nlink, port, flags);
+ status = dladm_aggr_add(handle, linkid, ndev + nlink, port, flags);
done:
if (status != DLADM_STATUS_OK) {
/*
@@ -1631,6 +1654,7 @@ done:
gettext("%s: add operation failed: %s\n"),
progname,
gettext("link capabilities don't match"));
+ dladm_close(handle);
exit(ENOTSUP);
} else if (status == DLADM_STATUS_NONOTIF) {
die_dlerr(status, "not all links have link up/down "
@@ -1698,20 +1722,21 @@ do_remove_aggr(int argc, char *argv[], const char *use)
altroot_cmd(altroot, argc, argv);
for (n = 0; n < ndev; n++) {
- if (dladm_dev2linkid(devs[n], &(port[n].lp_linkid)) !=
- DLADM_STATUS_OK) {
- die("invalid <dev> '%s'", devs[n]);
+ if ((status = dladm_dev2linkid(handle, devs[n],
+ &(port[n].lp_linkid))) != DLADM_STATUS_OK) {
+ die_dlerr(status, "invalid <dev> '%s'", devs[n]);
}
}
for (n = 0; n < nlink; n++) {
- if (dladm_name2info(links[n], &port[n + ndev].lp_linkid,
- NULL, NULL, NULL) != DLADM_STATUS_OK) {
- die("invalid <link> '%s'", links[n]);
+ if ((status = dladm_name2info(handle, links[n],
+ &port[n + ndev].lp_linkid, NULL, NULL, NULL)) !=
+ DLADM_STATUS_OK) {
+ die_dlerr(status, "invalid <link> '%s'", links[n]);
}
}
- status = dladm_aggr_remove(linkid, ndev + nlink, port, flags);
+ status = dladm_aggr_remove(handle, linkid, ndev + nlink, port, flags);
done:
if (status != DLADM_STATUS_OK)
die_dlerr(status, "remove operation failed");
@@ -1800,8 +1825,9 @@ do_modify_aggr(int argc, char *argv[], const char *use)
if (altroot != NULL)
altroot_cmd(altroot, argc, argv);
- status = dladm_aggr_modify(linkid, modify_mask, policy, mac_addr_fixed,
- (const uchar_t *)mac_addr, lacp_mode, lacp_timer, flags);
+ status = dladm_aggr_modify(handle, linkid, modify_mask, policy,
+ mac_addr_fixed, (const uchar_t *)mac_addr, lacp_mode, lacp_timer,
+ flags);
done:
if (status != DLADM_STATUS_OK)
@@ -1820,14 +1846,13 @@ do_up_aggr(int argc, char *argv[], const char *use)
*/
if (argc == 2) {
if ((status = i_dladm_aggr_get_linkid(NULL, argv[1], &linkid,
- DLADM_OPT_PERSIST)) != DLADM_STATUS_OK) {
+ DLADM_OPT_PERSIST)) != DLADM_STATUS_OK)
goto done;
- }
} else if (argc > 2) {
usage();
}
- status = dladm_aggr_up(linkid);
+ status = dladm_aggr_up(handle, linkid);
done:
if (status != DLADM_STATUS_OK) {
if (argc == 2) {
@@ -1915,13 +1940,13 @@ do_create_vlan(int argc, char *argv[], const char *use)
if (altroot != NULL)
altroot_cmd(altroot, argc, argv);
- if (dladm_name2info(link, &dev_linkid, NULL, NULL, NULL) !=
+ if (dladm_name2info(handle, link, &dev_linkid, NULL, NULL, NULL) !=
DLADM_STATUS_OK) {
die("invalid link name '%s'", link);
}
- if ((status = dladm_vlan_create(vlan, dev_linkid, vid, proplist, flags,
- &linkid)) != DLADM_STATUS_OK) {
+ if ((status = dladm_vlan_create(handle, vlan, dev_linkid, vid, proplist,
+ flags, &linkid)) != DLADM_STATUS_OK) {
die_dlerr(status, "create operation over %s failed", link);
}
}
@@ -1957,11 +1982,12 @@ do_delete_vlan(int argc, char *argv[], const char *use)
if (altroot != NULL)
altroot_cmd(altroot, argc, argv);
- status = dladm_name2info(argv[optind], &linkid, NULL, NULL, NULL);
+ status = dladm_name2info(handle, argv[optind], &linkid, NULL, NULL,
+ NULL);
if (status != DLADM_STATUS_OK)
goto done;
- status = dladm_vlan_delete(linkid, flags);
+ status = dladm_vlan_delete(handle, linkid, flags);
done:
if (status != DLADM_STATUS_OK)
die_dlerr(status, "delete operation failed");
@@ -2003,7 +2029,8 @@ do_rename_link(int argc, char *argv[], const char *use)
link1 = argv[optind++];
link2 = argv[optind];
- if ((status = dladm_rename_link(link1, link2)) != DLADM_STATUS_OK)
+ if ((status = dladm_rename_link(handle, link1, link2)) !=
+ DLADM_STATUS_OK)
die_dlerr(status, "rename operation failed");
}
@@ -2019,12 +2046,12 @@ do_delete_phys(int argc, char *argv[], const char *use)
usage();
if (argc == 2) {
- status = dladm_name2info(argv[1], &linkid, NULL, NULL, NULL);
- if (status != DLADM_STATUS_OK)
+ if ((status = dladm_name2info(handle, argv[1], &linkid, NULL,
+ NULL, NULL)) != DLADM_STATUS_OK)
die_dlerr(status, "cannot delete '%s'", argv[1]);
}
- if ((status = dladm_phys_delete(linkid)) != DLADM_STATUS_OK) {
+ if ((status = dladm_phys_delete(handle, linkid)) != DLADM_STATUS_OK) {
if (argc == 2)
die_dlerr(status, "cannot delete '%s'", argv[1]);
else
@@ -2034,7 +2061,7 @@ do_delete_phys(int argc, char *argv[], const char *use)
/*ARGSUSED*/
static int
-i_dladm_walk_linkmap(datalink_id_t linkid, void *arg)
+i_dladm_walk_linkmap(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
char name[MAXLINKNAMELEN];
char mediabuf[DLADM_STRSIZE];
@@ -2043,7 +2070,7 @@ i_dladm_walk_linkmap(datalink_id_t linkid, void *arg)
uint32_t media;
uint32_t flags;
- if (dladm_datalink_id2info(linkid, &flags, &class, &media, name,
+ if (dladm_datalink_id2info(dh, linkid, &flags, &class, &media, name,
MAXLINKNAMELEN) == DLADM_STATUS_OK) {
(void) dladm_class2str(class, classbuf);
(void) dladm_media2str(media, mediabuf);
@@ -2062,7 +2089,8 @@ do_show_linkmap(int argc, char *argv[], const char *use)
(void) printf("%-12s%8s %-12s%-20s %6s\n", "NAME", "LINKID",
"CLASS", "MEDIA", "FLAGS");
- (void) dladm_walk_datalink_id(i_dladm_walk_linkmap, NULL,
+
+ (void) dladm_walk_datalink_id(i_dladm_walk_linkmap, handle, NULL,
DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE,
DLADM_OPT_ACTIVE | DLADM_OPT_PERSIST);
}
@@ -2072,18 +2100,18 @@ do_show_linkmap(int argc, char *argv[], const char *use)
*/
/*ARGSUSED*/
static int
-purge_phys(datalink_id_t linkid, void *arg)
+purge_phys(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
datalink_class_t class;
uint32_t flags;
- if (dladm_datalink_id2info(linkid, &flags, &class, NULL,
- NULL, 0) != DLADM_STATUS_OK) {
+ if (dladm_datalink_id2info(dh, linkid, &flags, &class, NULL, NULL, 0)
+ != DLADM_STATUS_OK) {
return (DLADM_WALK_CONTINUE);
}
if (class == DATALINK_CLASS_PHYS && !(flags & DLADM_OPT_ACTIVE))
- (void) dladm_phys_delete(linkid);
+ (void) dladm_phys_delete(dh, linkid);
return (DLADM_WALK_CONTINUE);
}
@@ -2092,7 +2120,7 @@ purge_phys(datalink_id_t linkid, void *arg)
static void
do_init_phys(int argc, char *argv[], const char *use)
{
- di_node_t devtree;
+ di_node_t devtree;
if (argc > 1)
usage();
@@ -2104,7 +2132,7 @@ do_init_phys(int argc, char *argv[], const char *use)
if ((devtree = di_init("/", DINFOFORCE | DINFOSUBTREE)) != DI_NODE_NIL)
di_fini(devtree);
- (void) dladm_walk_datalink_id(purge_phys, NULL,
+ (void) dladm_walk_datalink_id(purge_phys, handle, NULL,
DATALINK_CLASS_PHYS, DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
}
@@ -2128,11 +2156,11 @@ print_link_topology(show_state_t *state, datalink_id_t linkid,
if (class == DATALINK_CLASS_VLAN) {
dladm_vlan_attr_t vinfo;
- status = dladm_vlan_info(linkid, &vinfo, flags);
+ status = dladm_vlan_info(handle, linkid, &vinfo, flags);
if (status != DLADM_STATUS_OK)
goto done;
- status = dladm_datalink_id2info(vinfo.dv_linkid, NULL, NULL,
- NULL, lbuf->link_over, sizeof (lbuf->link_over));
+ status = dladm_datalink_id2info(handle, vinfo.dv_linkid, NULL,
+ NULL, NULL, lbuf->link_over, sizeof (lbuf->link_over));
if (status != DLADM_STATUS_OK)
goto done;
} else if (class == DATALINK_CLASS_AGGR) {
@@ -2141,7 +2169,7 @@ print_link_topology(show_state_t *state, datalink_id_t linkid,
(void) sprintf(lbuf->link_over, "");
- status = dladm_aggr_info(linkid, &ginfo, flags);
+ status = dladm_aggr_info(handle, linkid, &ginfo, flags);
if (status != DLADM_STATUS_OK)
goto done;
@@ -2150,7 +2178,7 @@ print_link_topology(show_state_t *state, datalink_id_t linkid,
goto done;
}
for (i = 0; i < ginfo.lg_nports; i++) {
- status = dladm_datalink_id2info(
+ status = dladm_datalink_id2info(handle,
ginfo.lg_ports[i].lp_linkid, NULL, NULL, NULL,
tmpbuf, sizeof (tmpbuf));
if (status != DLADM_STATUS_OK) {
@@ -2168,9 +2196,10 @@ print_link_topology(show_state_t *state, datalink_id_t linkid,
} else if (class == DATALINK_CLASS_VNIC) {
dladm_vnic_attr_t vinfo;
- if ((status = dladm_vnic_info(linkid, &vinfo, flags)) !=
- DLADM_STATUS_OK || (status = dladm_datalink_id2info(
- vinfo.va_link_id, NULL, NULL, NULL, lbuf->link_over,
+ if ((status = dladm_vnic_info(handle, linkid, &vinfo, flags)) !=
+ DLADM_STATUS_OK ||
+ (status = dladm_datalink_id2info(handle, vinfo.va_link_id,
+ NULL, NULL, NULL, lbuf->link_over,
sizeof (lbuf->link_over)) != DLADM_STATUS_OK)) {
goto done;
}
@@ -2188,8 +2217,8 @@ print_link(show_state_t *state, datalink_id_t linkid, link_fields_buf_t *lbuf)
uint32_t flags;
dladm_status_t status;
- if ((status = dladm_datalink_id2info(linkid, &flags, &class, NULL,
- link, sizeof (link))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(handle, linkid, &flags, &class,
+ NULL, link, sizeof (link))) != DLADM_STATUS_OK) {
goto done;
}
@@ -2206,7 +2235,7 @@ print_link(show_state_t *state, datalink_id_t linkid, link_fields_buf_t *lbuf)
dlpi_handle_t dh;
dlpi_info_t dlinfo;
- if ((status = dladm_phys_info(linkid, &dpa,
+ if ((status = dladm_phys_info(handle, linkid, &dpa,
DLADM_OPT_ACTIVE)) != DLADM_STATUS_OK) {
goto done;
}
@@ -2234,7 +2263,7 @@ print_link(show_state_t *state, datalink_id_t linkid, link_fields_buf_t *lbuf)
mtu = dlinfo.di_max_sdu;
} else {
link_mtu:
- status = dladm_info(linkid, &dlattr);
+ status = dladm_info(handle, linkid, &dlattr);
if (status != DLADM_STATUS_OK)
goto done;
mtu = dlattr.da_max_sdu;
@@ -2258,8 +2287,9 @@ done:
return (status);
}
+/* ARGSUSED */
static int
-show_link(datalink_id_t linkid, void *arg)
+show_link(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
show_state_t *state = (show_state_t *)arg;
dladm_status_t status;
@@ -2288,7 +2318,7 @@ done:
}
static int
-show_link_stats(datalink_id_t linkid, void *arg)
+show_link_stats(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
char link[DLPI_LINKNAME_MAX];
datalink_class_t class;
@@ -2304,13 +2334,13 @@ show_link_stats(datalink_id_t linkid, void *arg)
bzero(&state->ls_prevstats, sizeof (state->ls_prevstats));
}
- if (dladm_datalink_id2info(linkid, NULL, &class, NULL, link,
+ if (dladm_datalink_id2info(dh, linkid, NULL, &class, NULL, link,
DLPI_LINKNAME_MAX) != DLADM_STATUS_OK) {
return (DLADM_WALK_CONTINUE);
}
if (class == DATALINK_CLASS_PHYS) {
- if (dladm_phys_info(linkid, &dpa, DLADM_OPT_ACTIVE) !=
+ if (dladm_phys_info(dh, linkid, &dpa, DLADM_OPT_ACTIVE) !=
DLADM_STATUS_OK) {
return (DLADM_WALK_CONTINUE);
}
@@ -2394,13 +2424,14 @@ print_xaggr_callback(print_field_t *pf, void *arg)
if (is_port) {
portnum = l->laggr_lport;
portp = &(l->laggr_ginfop->lg_ports[portnum]);
- if ((status = dladm_datalink_id2info(portp->lp_linkid,
- NULL, NULL, NULL, buf, sizeof (buf))) !=
+ if ((status = dladm_datalink_id2info(handle,
+ portp->lp_linkid, NULL, NULL, NULL, buf, sizeof (buf))) !=
DLADM_STATUS_OK) {
goto err;
}
- if ((status = dladm_phys_info(portp->lp_linkid, &dpa,
- DLADM_OPT_ACTIVE)) != DLADM_STATUS_OK) {
+
+ if ((status = dladm_phys_info(handle, portp->lp_linkid,
+ &dpa, DLADM_OPT_ACTIVE)) != DLADM_STATUS_OK) {
goto err;
}
}
@@ -2520,7 +2551,8 @@ print_lacp_callback(print_field_t *pf, void *arg)
portnum = l->laggr_lport;
portp = &(l->laggr_ginfop->lg_ports[portnum]);
- if ((status = dladm_datalink_id2info(portp->lp_linkid,
+
+ if ((status = dladm_datalink_id2info(handle, portp->lp_linkid,
NULL, NULL, NULL, buf, sizeof (buf))) != DLADM_STATUS_OK) {
goto err;
}
@@ -2623,15 +2655,16 @@ print_aggr_stats_callback(print_field_t *pf, void *arg)
if (is_port) {
portnum = l->laggr_lport;
portp = &(l->laggr_ginfop->lg_ports[portnum]);
- if ((status = dladm_phys_info(portp->lp_linkid, &dpa,
- DLADM_OPT_ACTIVE)) != DLADM_STATUS_OK) {
+ if ((status = dladm_phys_info(handle, portp->lp_linkid,
+ &dpa, DLADM_OPT_ACTIVE)) != DLADM_STATUS_OK) {
goto err;
}
get_mac_stats(dpa.dp_dev, &port_stat);
- if ((status = dladm_datalink_id2info(portp->lp_linkid, NULL,
- NULL, NULL, buf, sizeof (buf))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(handle,
+ portp->lp_linkid, NULL, NULL, NULL, buf, sizeof (buf))) !=
+ DLADM_STATUS_OK) {
goto err;
}
@@ -2685,7 +2718,6 @@ print_aggr_stats_callback(print_field_t *pf, void *arg)
} else {
(void) snprintf(buf, sizeof (buf), "%llu",
l->laggr_pktsumtot->obytes);
-
}
break;
@@ -2733,7 +2765,7 @@ print_aggr_stats(show_grp_state_t *state, const char *link,
for (i = 0; i < ginfop->lg_nports; i++) {
portp = &(ginfop->lg_ports[i]);
- if ((status = dladm_phys_info(portp->lp_linkid, &dpa,
+ if ((status = dladm_phys_info(handle, portp->lp_linkid, &dpa,
DLADM_OPT_ACTIVE)) != DLADM_STATUS_OK) {
goto done;
}
@@ -2783,15 +2815,15 @@ print_aggr(show_grp_state_t *state, datalink_id_t linkid)
dladm_status_t status;
bzero(&ginfo, sizeof (dladm_aggr_grp_attr_t));
- if ((status = dladm_datalink_id2info(linkid, &flags, NULL, NULL, link,
- MAXLINKNAMELEN)) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(handle, linkid, &flags, NULL,
+ NULL, link, MAXLINKNAMELEN)) != DLADM_STATUS_OK) {
return (status);
}
if (!(state->gs_flags & flags))
return (DLADM_STATUS_NOTFOUND);
- status = dladm_aggr_info(linkid, &ginfo, state->gs_flags);
+ status = dladm_aggr_info(handle, linkid, &ginfo, state->gs_flags);
if (status != DLADM_STATUS_OK)
return (status);
@@ -2801,23 +2833,22 @@ print_aggr(show_grp_state_t *state, datalink_id_t linkid)
status = print_aggr_extended(state, link, &ginfo);
else if (state->gs_stats)
status = print_aggr_stats(state, link, &ginfo);
- else {
+ else
status = print_aggr_info(state, link, &ginfo);
- }
done:
free(ginfo.lg_ports);
return (status);
}
+/* ARGSUSED */
static int
-show_aggr(datalink_id_t linkid, void *arg)
+show_aggr(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
show_grp_state_t *state = arg;
dladm_status_t status;
- status = print_aggr(state, linkid);
- if (status != DLADM_STATUS_OK)
+ if ((status = print_aggr(state, linkid)) != DLADM_STATUS_OK)
goto done;
done:
@@ -2917,9 +2948,10 @@ do_show_link(int argc, char *argv[], const char *use)
(void) fprintf(stderr,
gettext("%s: link name too long\n"),
progname);
+ dladm_close(handle);
exit(1);
}
- if ((status = dladm_name2info(linkname, &linkid, &f,
+ if ((status = dladm_name2info(handle, linkname, &linkid, &f,
NULL, NULL)) != DLADM_STATUS_OK) {
die_dlerr(status, "link %s is not valid", linkname);
}
@@ -2937,7 +2969,7 @@ do_show_link(int argc, char *argv[], const char *use)
die("-p requires -o");
if (S_arg) {
- dladm_continuous(linkid, NULL, interval, LINK_REPORT);
+ dladm_continuous(handle, linkid, NULL, interval, LINK_REPORT);
return;
}
@@ -2972,10 +3004,10 @@ do_show_link(int argc, char *argv[], const char *use)
state.ls_print.ps_nfields = nfields;
if (linkid == DATALINK_ALL_LINKID) {
- (void) dladm_walk_datalink_id(show_link, &state,
+ (void) dladm_walk_datalink_id(show_link, handle, &state,
DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE, flags);
} else {
- (void) show_link(linkid, &state);
+ (void) show_link(handle, linkid, &state);
if (state.ls_status != DLADM_STATUS_OK) {
die_dlerr(state.ls_status, "failed to show link %s",
argv[optind]);
@@ -3090,10 +3122,10 @@ do_show_aggr(int argc, char *argv[], const char *use)
/* get aggregation key or aggrname (optional last argument) */
if (optind == (argc-1)) {
if (!str2int(argv[optind], &key)) {
- status = dladm_name2info(argv[optind], &linkid, NULL,
- NULL, NULL);
+ status = dladm_name2info(handle, argv[optind],
+ &linkid, NULL, NULL, NULL);
} else {
- status = dladm_key2linkid((uint16_t)key,
+ status = dladm_key2linkid(handle, (uint16_t)key,
&linkid, DLADM_OPT_ACTIVE);
}
@@ -3152,10 +3184,10 @@ do_show_aggr(int argc, char *argv[], const char *use)
}
if (linkid == DATALINK_ALL_LINKID) {
- (void) dladm_walk_datalink_id(show_aggr, &state,
+ (void) dladm_walk_datalink_id(show_aggr, handle, &state,
DATALINK_CLASS_AGGR, DATALINK_ANY_MEDIATYPE, flags);
} else {
- (void) show_aggr(linkid, &state);
+ (void) show_aggr(handle, linkid, &state);
if (state.gs_status != DLADM_STATUS_OK) {
die_dlerr(state.gs_status, "failed to show aggr %s",
argv[optind]);
@@ -3171,7 +3203,7 @@ print_phys_default(show_state_t *state, datalink_id_t linkid,
dladm_status_t status;
link_fields_buf_t pattr;
- status = dladm_phys_info(linkid, &dpa, state->ls_flags);
+ status = dladm_phys_info(handle, linkid, &dpa, state->ls_flags);
if (status != DLADM_STATUS_OK)
goto done;
@@ -3337,7 +3369,7 @@ print_phys_mac(show_state_t *state, datalink_id_t linkid, char *link)
mac_state.ms_state = state;
mac_state.ms_link = link;
- return (dladm_walk_macaddr(linkid, &mac_state,
+ return (dladm_walk_macaddr(handle, linkid, &mac_state,
print_phys_mac_callback));
}
@@ -3367,7 +3399,7 @@ print_phys_hwgrp(show_state_t *state, datalink_id_t linkid, char *link)
hwgrp_state.hs_state = state;
hwgrp_state.hs_link = link;
- return (dladm_walk_hwgrp(linkid, &hwgrp_state,
+ return (dladm_walk_hwgrp(handle, linkid, &hwgrp_state,
print_phys_hwgrp_callback));
}
@@ -3380,8 +3412,8 @@ print_phys(show_state_t *state, datalink_id_t linkid)
datalink_class_t class;
uint32_t media;
- if ((status = dladm_datalink_id2info(linkid, &flags, &class, &media,
- link, MAXLINKNAMELEN)) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(handle, linkid, &flags, &class,
+ &media, link, MAXLINKNAMELEN)) != DLADM_STATUS_OK) {
goto done;
}
@@ -3406,8 +3438,9 @@ done:
return (status);
}
+/* ARGSUSED */
static int
-show_phys(datalink_id_t linkid, void *arg)
+show_phys(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
show_state_t *state = arg;
@@ -3425,7 +3458,7 @@ print_vlan(show_state_t *state, datalink_id_t linkid, link_fields_buf_t *l)
uint32_t flags;
dladm_status_t status;
- if ((status = dladm_datalink_id2info(linkid, &flags, NULL, NULL,
+ if ((status = dladm_datalink_id2info(handle, linkid, &flags, NULL, NULL,
l->link_name, sizeof (l->link_name))) != DLADM_STATUS_OK) {
goto done;
}
@@ -3435,10 +3468,11 @@ print_vlan(show_state_t *state, datalink_id_t linkid, link_fields_buf_t *l)
goto done;
}
- if ((status = dladm_vlan_info(linkid, &vinfo, state->ls_flags)) !=
- DLADM_STATUS_OK || (status = dladm_datalink_id2info(
- vinfo.dv_linkid, NULL, NULL, NULL, l->link_over,
- sizeof (l->link_over))) != DLADM_STATUS_OK) {
+ if ((status = dladm_vlan_info(handle, linkid, &vinfo,
+ state->ls_flags)) != DLADM_STATUS_OK ||
+ (status = dladm_datalink_id2info(handle, vinfo.dv_linkid, NULL,
+ NULL, NULL, l->link_over, sizeof (l->link_over))) !=
+ DLADM_STATUS_OK) {
goto done;
}
@@ -3451,8 +3485,9 @@ done:
return (status);
}
+/* ARGSUSED */
static int
-show_vlan(datalink_id_t linkid, void *arg)
+show_vlan(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
show_state_t *state = arg;
dladm_status_t status;
@@ -3544,8 +3579,8 @@ do_show_phys(int argc, char *argv[], const char *use)
/* get link name (optional last argument) */
if (optind == (argc-1)) {
- if ((status = dladm_name2info(argv[optind], &linkid, NULL,
- NULL, NULL)) != DLADM_STATUS_OK) {
+ if ((status = dladm_name2info(handle, argv[optind], &linkid,
+ NULL, NULL, NULL)) != DLADM_STATUS_OK) {
die_dlerr(status, "link %s is not valid", argv[optind]);
}
} else if (optind != argc) {
@@ -3601,10 +3636,10 @@ do_show_phys(int argc, char *argv[], const char *use)
state.ls_print.ps_nfields = nfields;
if (linkid == DATALINK_ALL_LINKID) {
- (void) dladm_walk_datalink_id(show_phys, &state,
+ (void) dladm_walk_datalink_id(show_phys, handle, &state,
DATALINK_CLASS_PHYS, DATALINK_ANY_MEDIATYPE, flags);
} else {
- (void) show_phys(linkid, &state);
+ (void) show_phys(handle, linkid, &state);
if (state.ls_status != DLADM_STATUS_OK) {
die_dlerr(state.ls_status,
"failed to show physical link %s", argv[optind]);
@@ -3663,8 +3698,8 @@ do_show_vlan(int argc, char *argv[], const char *use)
/* get link name (optional last argument) */
if (optind == (argc-1)) {
- if ((status = dladm_name2info(argv[optind], &linkid, NULL,
- NULL, NULL)) != DLADM_STATUS_OK) {
+ if ((status = dladm_name2info(handle, argv[optind], &linkid,
+ NULL, NULL, NULL)) != DLADM_STATUS_OK) {
die_dlerr(status, "link %s is not valid", argv[optind]);
}
} else if (optind != argc) {
@@ -3689,10 +3724,10 @@ do_show_vlan(int argc, char *argv[], const char *use)
state.ls_print.ps_nfields = nfields;
if (linkid == DATALINK_ALL_LINKID) {
- (void) dladm_walk_datalink_id(show_vlan, &state,
+ (void) dladm_walk_datalink_id(show_vlan, handle, &state,
DATALINK_CLASS_VLAN, DATALINK_ANY_MEDIATYPE, flags);
} else {
- (void) show_vlan(linkid, &state);
+ (void) show_vlan(handle, linkid, &state);
if (state.ls_status != DLADM_STATUS_OK) {
die_dlerr(state.ls_status, "failed to show vlan %s",
argv[optind]);
@@ -3752,7 +3787,6 @@ do_create_vnic(int argc, char *argv[], const char *use)
die("invalid MAC address");
else
die("out of memory");
- exit(1);
}
}
break;
@@ -3774,7 +3808,6 @@ do_create_vnic(int argc, char *argv[], const char *use)
die("invalid MAC address");
else
die("out of memory");
- exit(1);
}
break;
case 'v':
@@ -3824,12 +3857,13 @@ do_create_vnic(int argc, char *argv[], const char *use)
if (altroot != NULL)
altroot_cmd(altroot, argc, argv);
- if (dladm_name2info(devname, &dev_linkid, NULL, NULL, NULL) !=
+ if (dladm_name2info(handle, devname, &dev_linkid, NULL, NULL, NULL) !=
DLADM_STATUS_OK)
die("invalid link name '%s'", devname);
- status = dladm_vnic_create(name, dev_linkid, mac_addr_type, mac_addr,
- maclen, &mac_slot, mac_prefix_len, vid, &linkid, proplist, flags);
+ status = dladm_vnic_create(handle, name, dev_linkid, mac_addr_type,
+ mac_addr, maclen, &mac_slot, mac_prefix_len, vid, &linkid, proplist,
+ flags);
if (status != DLADM_STATUS_OK)
die_dlerr(status, "vnic creation over %s failed", devname);
@@ -3843,7 +3877,7 @@ do_etherstub_check(const char *name, datalink_id_t linkid, boolean_t etherstub,
boolean_t is_etherstub;
dladm_vnic_attr_t attr;
- if (dladm_vnic_info(linkid, &attr, flags) != DLADM_STATUS_OK) {
+ if (dladm_vnic_info(handle, linkid, &attr, flags) != DLADM_STATUS_OK) {
/*
* Let the delete continue anyway.
*/
@@ -3888,7 +3922,8 @@ do_delete_vnic_common(int argc, char *argv[], const char *use,
if (altroot != NULL)
altroot_cmd(altroot, argc, argv);
- status = dladm_name2info(argv[optind], &linkid, NULL, NULL, NULL);
+ status = dladm_name2info(handle, argv[optind], &linkid, NULL, NULL,
+ NULL);
if (status != DLADM_STATUS_OK)
die("invalid link name '%s'", argv[optind]);
@@ -3901,7 +3936,7 @@ do_delete_vnic_common(int argc, char *argv[], const char *use,
DLADM_OPT_PERSIST);
}
- status = dladm_vnic_delete(linkid, flags);
+ status = dladm_vnic_delete(handle, linkid, flags);
if (status != DLADM_STATUS_OK)
die_dlerr(status, "vnic deletion failed");
}
@@ -3926,7 +3961,8 @@ do_up_vnic_common(int argc, char *argv[], const char *use, boolean_t vlan)
* get the id or the name of the vnic/vlan (optional last argument)
*/
if (argc == 2) {
- status = dladm_name2info(argv[1], &linkid, NULL, NULL, NULL);
+ status = dladm_name2info(handle, argv[1], &linkid, NULL, NULL,
+ NULL);
if (status != DLADM_STATUS_OK)
goto done;
@@ -3935,9 +3971,9 @@ do_up_vnic_common(int argc, char *argv[], const char *use, boolean_t vlan)
}
if (vlan)
- status = dladm_vlan_up(linkid);
+ status = dladm_vlan_up(handle, linkid);
else
- status = dladm_vnic_up(linkid, 0);
+ status = dladm_vnic_up(handle, linkid, 0);
done:
if (status != DLADM_STATUS_OK) {
@@ -4020,7 +4056,7 @@ print_vnic(show_vnic_state_t *state, datalink_id_t linkid)
char mstr[MAXMACADDRLEN * 3];
vnic_fields_buf_t vbuf;
- if ((status = dladm_vnic_info(linkid, vnic, state->vs_flags)) !=
+ if ((status = dladm_vnic_info(handle, linkid, vnic, state->vs_flags)) !=
DLADM_STATUS_OK)
return (status);
@@ -4038,13 +4074,13 @@ print_vnic(show_vnic_state_t *state, datalink_id_t linkid)
return (DLADM_STATUS_OK);
}
- if (dladm_datalink_id2info(linkid, NULL, NULL,
+ if (dladm_datalink_id2info(handle, linkid, NULL, NULL,
NULL, vnic_name, sizeof (vnic_name)) != DLADM_STATUS_OK)
return (DLADM_STATUS_BADARG);
bzero(devname, sizeof (devname));
if (!is_etherstub &&
- dladm_datalink_id2info(vnic->va_link_id, NULL, NULL,
+ dladm_datalink_id2info(handle, vnic->va_link_id, NULL, NULL,
NULL, devname, sizeof (devname)) != DLADM_STATUS_OK)
return (DLADM_STATUS_BADARG);
@@ -4130,8 +4166,9 @@ print_vnic(show_vnic_state_t *state, datalink_id_t linkid)
}
}
+/* ARGSUSED */
static int
-show_vnic(datalink_id_t linkid, void *arg)
+show_vnic(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
show_vnic_state_t *state = arg;
@@ -4216,7 +4253,7 @@ do_show_vnic_common(int argc, char *argv[], const char *use,
/* get vnic ID (optional last argument) */
if (optind == (argc - 1)) {
- status = dladm_name2info(argv[optind], &linkid, NULL,
+ status = dladm_name2info(handle, argv[optind], &linkid, NULL,
NULL, NULL);
if (status != DLADM_STATUS_OK) {
die_dlerr(status, "invalid vnic name '%s'",
@@ -4228,8 +4265,8 @@ do_show_vnic_common(int argc, char *argv[], const char *use,
}
if (l_arg) {
- status = dladm_name2info(state.vs_link, &dev_linkid, NULL,
- NULL, NULL);
+ status = dladm_name2info(handle, state.vs_link, &dev_linkid,
+ NULL, NULL, NULL);
if (status != DLADM_STATUS_OK) {
die_dlerr(status, "invalid link name '%s'",
state.vs_link);
@@ -4273,11 +4310,11 @@ do_show_vnic_common(int argc, char *argv[], const char *use,
state.vs_donefirst = B_FALSE;
if (linkid == DATALINK_ALL_LINKID) {
- (void) dladm_walk_datalink_id(show_vnic, &state,
+ (void) dladm_walk_datalink_id(show_vnic, handle, &state,
DATALINK_CLASS_VNIC | DATALINK_CLASS_ETHERSTUB,
DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
} else {
- (void) show_vnic(linkid, &state);
+ (void) show_vnic(handle, linkid, &state);
if (state.vs_status != DLADM_STATUS_OK) {
die_dlerr(state.vs_status, "failed to show vnic '%s'",
state.vs_vnic);
@@ -4333,7 +4370,7 @@ do_create_etherstub(int argc, char *argv[], const char *use)
if (altroot != NULL)
altroot_cmd(altroot, argc, argv);
- status = dladm_vnic_create(name, DATALINK_INVALID_LINKID,
+ status = dladm_vnic_create(handle, name, DATALINK_INVALID_LINKID,
VNIC_MAC_ADDR_TYPE_AUTO, mac_addr, ETHERADDRL, NULL, 0, 0, NULL,
NULL, flags);
if (status != DLADM_STATUS_OK)
@@ -4383,11 +4420,11 @@ link_stats(datalink_id_t linkid, uint_t interval, char *fields_str,
for (;;) {
state->ls_donefirst = B_FALSE;
if (linkid == DATALINK_ALL_LINKID) {
- (void) dladm_walk_datalink_id(show_link_stats, state,
- DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE,
+ (void) dladm_walk_datalink_id(show_link_stats, handle,
+ state, DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE,
DLADM_OPT_ACTIVE);
} else {
- (void) show_link_stats(linkid, state);
+ (void) show_link_stats(handle, linkid, state);
}
if (interval == 0)
@@ -4409,11 +4446,11 @@ aggr_stats(datalink_id_t linkid, show_grp_state_t *state, uint_t interval)
for (;;) {
state->gs_donefirst = B_FALSE;
if (linkid == DATALINK_ALL_LINKID)
- (void) dladm_walk_datalink_id(show_aggr, state,
+ (void) dladm_walk_datalink_id(show_aggr, handle, state,
DATALINK_CLASS_AGGR, DATALINK_ANY_MEDIATYPE,
DLADM_OPT_ACTIVE);
else
- (void) show_aggr(linkid, state);
+ (void) show_aggr(handle, linkid, state);
if (interval == 0)
break;
@@ -4452,11 +4489,11 @@ vnic_stats(show_vnic_state_t *sp, uint32_t interval)
state.vs_flags = DLADM_OPT_ACTIVE;
if (!specific_link) {
- (void) dladm_walk_datalink_id(show_vnic, &state,
+ (void) dladm_walk_datalink_id(show_vnic, handle, &state,
DATALINK_CLASS_VNIC, DATALINK_ANY_MEDIATYPE,
DLADM_OPT_ACTIVE);
} else {
- (void) show_vnic(sp->vs_vnic_id, &state);
+ (void) show_vnic(handle, sp->vs_vnic_id, &state);
if (state.vs_status != DLADM_STATUS_OK) {
die_dlerr(state.vs_status,
"failed to show vnic '%s'", sp->vs_vnic);
@@ -4486,11 +4523,11 @@ vnic_stats(show_vnic_state_t *sp, uint32_t interval)
state.vs_printstats = B_TRUE;
if (!specific_link) {
- (void) dladm_walk_datalink_id(show_vnic, &state,
+ (void) dladm_walk_datalink_id(show_vnic, handle, &state,
DATALINK_CLASS_VNIC, DATALINK_ANY_MEDIATYPE,
DLADM_OPT_ACTIVE);
} else {
- (void) show_vnic(sp->vs_vnic_id, &state);
+ (void) show_vnic(handle, sp->vs_vnic_id, &state);
if (state.vs_status != DLADM_STATUS_OK) {
die_dlerr(state.vs_status,
"failed to show vnic '%s'", sp->vs_vnic);
@@ -4893,19 +4930,19 @@ print_scan_results(void *arg, dladm_wlan_attr_t *attrp)
}
static int
-scan_wifi(datalink_id_t linkid, void *arg)
+scan_wifi(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
print_wifi_state_t *statep = arg;
dladm_status_t status;
char link[MAXLINKNAMELEN];
- if ((status = dladm_datalink_id2info(linkid, NULL, NULL, NULL, link,
+ if ((status = dladm_datalink_id2info(dh, linkid, NULL, NULL, NULL, link,
sizeof (link))) != DLADM_STATUS_OK) {
return (DLADM_WALK_CONTINUE);
}
statep->ws_link = link;
- status = dladm_wlan_scan(linkid, statep, print_scan_results);
+ status = dladm_wlan_scan(dh, linkid, statep, print_scan_results);
if (status != DLADM_STATUS_OK)
die_dlerr(status, "cannot scan link '%s'", statep->ws_link);
@@ -4936,7 +4973,7 @@ print_link_attr(print_field_t *wfp, void *warg)
}
static int
-show_wifi(datalink_id_t linkid, void *arg)
+show_wifi(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
print_wifi_state_t *statep = arg;
dladm_wlan_linkattr_t attr;
@@ -4944,13 +4981,13 @@ show_wifi(datalink_id_t linkid, void *arg)
char link[MAXLINKNAMELEN];
wlan_scan_args_t warg;
- if ((status = dladm_datalink_id2info(linkid, NULL, NULL, NULL, link,
+ if ((status = dladm_datalink_id2info(dh, linkid, NULL, NULL, NULL, link,
sizeof (link))) != DLADM_STATUS_OK) {
return (DLADM_WALK_CONTINUE);
}
/* dladm_wlan_get_linkattr() memsets attr with 0 */
- status = dladm_wlan_get_linkattr(linkid, &attr);
+ status = dladm_wlan_get_linkattr(dh, linkid, &attr);
if (status != DLADM_STATUS_OK)
die_dlerr(status, "cannot get link attributes for %s", link);
@@ -4977,7 +5014,7 @@ do_display_wifi(int argc, char **argv, int cmd, const char *use)
int option;
char *fields_str = NULL;
print_field_t **fields;
- int (*callback)(datalink_id_t, void *);
+ int (*callback)(dladm_handle_t, datalink_id_t, void *);
uint_t nfields;
print_wifi_state_t state;
datalink_id_t linkid = DATALINK_ALL_LINKID;
@@ -5014,8 +5051,8 @@ do_display_wifi(int argc, char **argv, int cmd, const char *use)
die("\"-o all\" is invalid with -p");
if (optind == (argc - 1)) {
- if ((status = dladm_name2info(argv[optind], &linkid, NULL,
- NULL, NULL)) != DLADM_STATUS_OK) {
+ if ((status = dladm_name2info(handle, argv[optind], &linkid,
+ NULL, NULL, NULL)) != DLADM_STATUS_OK) {
die_dlerr(status, "link %s is not valid", argv[optind]);
}
} else if (optind != argc) {
@@ -5030,10 +5067,10 @@ do_display_wifi(int argc, char **argv, int cmd, const char *use)
state.ws_print_state.ps_nfields = nfields;
if (linkid == DATALINK_ALL_LINKID) {
- (void) dladm_walk_datalink_id(callback, &state,
+ (void) dladm_walk_datalink_id(callback, handle, &state,
DATALINK_CLASS_PHYS, DL_WIFI, DLADM_OPT_ACTIVE);
} else {
- (void) (*callback)(linkid, &state);
+ (void) (*callback)(handle, linkid, &state);
}
free(fields);
}
@@ -5055,8 +5092,9 @@ typedef struct wlan_count_attr {
datalink_id_t wc_linkid;
} wlan_count_attr_t;
+/* ARGSUSED */
static int
-do_count_wlan(datalink_id_t linkid, void *arg)
+do_count_wlan(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
wlan_count_attr_t *cp = arg;
@@ -5099,11 +5137,11 @@ parse_wlan_keys(char *str, dladm_wlan_key_t **keys, uint_t *key_countp)
}
wk[i].wk_len = DLADM_WLAN_MAX_KEY_LEN;
- status = dladm_get_secobj(wk[i].wk_name, &class,
+ status = dladm_get_secobj(handle, wk[i].wk_name, &class,
wk[i].wk_val, &wk[i].wk_len, 0);
if (status != DLADM_STATUS_OK) {
if (status == DLADM_STATUS_NOTFOUND) {
- status = dladm_get_secobj(wk[i].wk_name,
+ status = dladm_get_secobj(handle, wk[i].wk_name,
&class, wk[i].wk_val, &wk[i].wk_len,
DLADM_OPT_PERSIST);
}
@@ -5230,8 +5268,8 @@ do_connect_wifi(int argc, char **argv, const char *use)
}
if (optind == (argc - 1)) {
- if ((status = dladm_name2info(argv[optind], &linkid, NULL,
- NULL, NULL)) != DLADM_STATUS_OK) {
+ if ((status = dladm_name2info(handle, argv[optind], &linkid,
+ NULL, NULL, NULL)) != DLADM_STATUS_OK) {
die_dlerr(status, "link %s is not valid", argv[optind]);
}
} else if (optind != argc) {
@@ -5243,7 +5281,7 @@ do_connect_wifi(int argc, char **argv, const char *use)
wcattr.wc_linkid = DATALINK_INVALID_LINKID;
wcattr.wc_count = 0;
- (void) dladm_walk_datalink_id(do_count_wlan, &wcattr,
+ (void) dladm_walk_datalink_id(do_count_wlan, handle, &wcattr,
DATALINK_CLASS_PHYS, DL_WIFI, DLADM_OPT_ACTIVE);
if (wcattr.wc_count == 0) {
die("no wifi links are available");
@@ -5255,7 +5293,7 @@ do_connect_wifi(int argc, char **argv, const char *use)
}
attrp = (attr.wa_valid == 0) ? NULL : &attr;
again:
- if ((status = dladm_wlan_connect(linkid, attrp, timeout, keys,
+ if ((status = dladm_wlan_connect(handle, linkid, attrp, timeout, keys,
key_count, flags)) != DLADM_STATUS_OK) {
if ((flags & DLADM_WLAN_CONNECT_NOSCAN) != 0) {
/*
@@ -5280,11 +5318,11 @@ again:
/* ARGSUSED */
static int
-do_all_disconnect_wifi(datalink_id_t linkid, void *arg)
+do_all_disconnect_wifi(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
dladm_status_t status;
- status = dladm_wlan_disconnect(linkid);
+ status = dladm_wlan_disconnect(dh, linkid);
if (status != DLADM_STATUS_OK)
warn_dlerr(status, "cannot disconnect link");
@@ -5314,8 +5352,8 @@ do_disconnect_wifi(int argc, char **argv, const char *use)
}
if (optind == (argc - 1)) {
- if ((status = dladm_name2info(argv[optind], &linkid, NULL,
- NULL, NULL)) != DLADM_STATUS_OK) {
+ if ((status = dladm_name2info(handle, argv[optind], &linkid,
+ NULL, NULL, NULL)) != DLADM_STATUS_OK) {
die_dlerr(status, "link %s is not valid", argv[optind]);
}
} else if (optind != argc) {
@@ -5326,8 +5364,9 @@ do_disconnect_wifi(int argc, char **argv, const char *use)
if (!all_links) {
wcattr.wc_linkid = linkid;
wcattr.wc_count = 0;
- (void) dladm_walk_datalink_id(do_count_wlan, &wcattr,
- DATALINK_CLASS_PHYS, DL_WIFI, DLADM_OPT_ACTIVE);
+ (void) dladm_walk_datalink_id(do_count_wlan, handle,
+ &wcattr, DATALINK_CLASS_PHYS, DL_WIFI,
+ DLADM_OPT_ACTIVE);
if (wcattr.wc_count == 0) {
die("no wifi links are available");
} else if (wcattr.wc_count > 1) {
@@ -5337,20 +5376,20 @@ do_disconnect_wifi(int argc, char **argv, const char *use)
linkid = wcattr.wc_linkid;
} else {
(void) dladm_walk_datalink_id(do_all_disconnect_wifi,
- NULL, DATALINK_CLASS_PHYS, DL_WIFI,
+ handle, NULL, DATALINK_CLASS_PHYS, DL_WIFI,
DLADM_OPT_ACTIVE);
return;
}
}
- status = dladm_wlan_disconnect(linkid);
+ status = dladm_wlan_disconnect(handle, linkid);
if (status != DLADM_STATUS_OK)
die_dlerr(status, "cannot disconnect");
}
static void
print_linkprop(datalink_id_t linkid, show_linkprop_state_t *statep,
- const char *propname, dladm_prop_type_t type,
- const char *format, char **pptr)
+ const char *propname, dladm_prop_type_t type, const char *format,
+ char **pptr)
{
int i;
char *ptr, *lim;
@@ -5360,7 +5399,8 @@ print_linkprop(datalink_id_t linkid, show_linkprop_state_t *statep,
uint_t valcnt = DLADM_MAX_PROP_VALCNT;
dladm_status_t status;
- status = dladm_get_linkprop(linkid, type, propname, propvals, &valcnt);
+ status = dladm_get_linkprop(handle, linkid, type, propname, propvals,
+ &valcnt);
if (status != DLADM_STATUS_OK) {
if (status == DLADM_STATUS_TEMPONLY) {
if (type == DLADM_PROP_VAL_MODIFIABLE &&
@@ -5493,7 +5533,7 @@ linkprop_is_supported(datalink_id_t linkid, const char *propname,
if (statep->ls_proplist != NULL)
return (B_TRUE);
- status = dladm_get_linkprop(linkid, DLADM_PROP_VAL_DEFAULT,
+ status = dladm_get_linkprop(handle, linkid, DLADM_PROP_VAL_DEFAULT,
propname, statep->ls_propvals, &valcnt);
if (status == DLADM_STATUS_OK)
@@ -5503,14 +5543,16 @@ linkprop_is_supported(datalink_id_t linkid, const char *propname,
* A system wide default value is not available for the
* property. Check if current value can be retrieved.
*/
- status = dladm_get_linkprop(linkid, DLADM_PROP_VAL_CURRENT,
+ status = dladm_get_linkprop(handle, linkid, DLADM_PROP_VAL_CURRENT,
propname, statep->ls_propvals, &valcnt);
return (status == DLADM_STATUS_OK);
}
+/* ARGSUSED */
static int
-show_linkprop(datalink_id_t linkid, const char *propname, void *arg)
+show_linkprop(dladm_handle_t dh, datalink_id_t linkid, const char *propname,
+ void *arg)
{
show_linkprop_state_t *statep = arg;
linkprop_args_t ls_arg;
@@ -5595,8 +5637,8 @@ do_show_linkprop(int argc, char **argv, const char *use)
die("\"-o all\" is invalid with -c");
if (optind == (argc - 1)) {
- if ((status = dladm_name2info(argv[optind], &linkid, NULL,
- NULL, NULL)) != DLADM_STATUS_OK) {
+ if ((status = dladm_name2info(handle, argv[optind], &linkid,
+ NULL, NULL, NULL)) != DLADM_STATUS_OK) {
die_dlerr(status, "link %s is not valid", argv[optind]);
}
} else if (optind != argc) {
@@ -5618,19 +5660,21 @@ do_show_linkprop(int argc, char **argv, const char *use)
state.ls_print.ps_fields = fields;
state.ls_print.ps_nfields = nfields;
if (linkid == DATALINK_ALL_LINKID) {
- (void) dladm_walk_datalink_id(show_linkprop_onelink, &state,
- DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE, flags);
+ (void) dladm_walk_datalink_id(show_linkprop_onelink, handle,
+ &state, DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE, flags);
} else {
- (void) show_linkprop_onelink(linkid, &state);
+ (void) show_linkprop_onelink(handle, linkid, &state);
}
dladm_free_props(proplist);
- if (state.ls_retstatus != DLADM_STATUS_OK)
+ if (state.ls_retstatus != DLADM_STATUS_OK) {
+ dladm_close(handle);
exit(EXIT_FAILURE);
+ }
}
static int
-show_linkprop_onelink(datalink_id_t linkid, void *arg)
+show_linkprop_onelink(dladm_handle_t hdl, datalink_id_t linkid, void *arg)
{
int i;
char *buf;
@@ -5641,8 +5685,8 @@ show_linkprop_onelink(datalink_id_t linkid, void *arg)
statep->ls_status = DLADM_STATUS_OK;
- if (dladm_datalink_id2info(linkid, &flags, NULL, NULL, statep->ls_link,
- MAXLINKNAMELEN) != DLADM_STATUS_OK) {
+ if (dladm_datalink_id2info(hdl, linkid, &flags, NULL, NULL,
+ statep->ls_link, MAXLINKNAMELEN) != DLADM_STATUS_OK) {
statep->ls_status = DLADM_STATUS_NOTFOUND;
return (DLADM_WALK_CONTINUE);
}
@@ -5685,11 +5729,12 @@ show_linkprop_onelink(datalink_id_t linkid, void *arg)
if (proplist != NULL) {
for (i = 0; i < proplist->al_count; i++) {
- (void) show_linkprop(linkid,
+ (void) show_linkprop(hdl, linkid,
proplist->al_info[i].ai_name, statep);
}
} else {
- (void) dladm_walk_linkprop(linkid, statep, show_linkprop);
+ (void) dladm_walk_linkprop(hdl, linkid, statep,
+ show_linkprop);
}
if (dh != NULL)
dlpi_close(dh);
@@ -5703,8 +5748,8 @@ set_linkprop_persist(datalink_id_t linkid, const char *prop_name,
{
dladm_status_t status;
- status = dladm_set_linkprop(linkid, prop_name, prop_val, val_cnt,
- DLADM_OPT_PERSIST);
+ status = dladm_set_linkprop(handle, linkid, prop_name, prop_val,
+ val_cnt, DLADM_OPT_PERSIST);
if (status != DLADM_STATUS_OK) {
warn_dlerr(status, "cannot persistently %s link property '%s'",
@@ -5714,12 +5759,13 @@ set_linkprop_persist(datalink_id_t linkid, const char *prop_name,
}
static int
-reset_one_linkprop(datalink_id_t linkid, const char *propname, void *arg)
+reset_one_linkprop(dladm_handle_t dh, datalink_id_t linkid,
+ const char *propname, void *arg)
{
set_linkprop_state_t *statep = arg;
dladm_status_t status;
- status = dladm_set_linkprop(linkid, propname, NULL, 0,
+ status = dladm_set_linkprop(dh, linkid, propname, NULL, 0,
DLADM_OPT_ACTIVE);
if (status != DLADM_STATUS_OK) {
warn_dlerr(status, "cannot reset link property '%s' on '%s'",
@@ -5784,7 +5830,8 @@ set_linkprop(int argc, char **argv, boolean_t reset, const char *use)
altroot_cmd(altroot, argc, argv);
}
- status = dladm_name2info(argv[optind], &linkid, NULL, NULL, NULL);
+ status = dladm_name2info(handle, argv[optind], &linkid, NULL, NULL,
+ NULL);
if (status != DLADM_STATUS_OK)
die_dlerr(status, "link %s is not valid", argv[optind]);
@@ -5796,7 +5843,8 @@ set_linkprop(int argc, char **argv, boolean_t reset, const char *use)
state.ls_temp = temp;
state.ls_status = DLADM_STATUS_OK;
- (void) dladm_walk_linkprop(linkid, &state, reset_one_linkprop);
+ (void) dladm_walk_linkprop(handle, linkid, &state,
+ reset_one_linkprop);
status = state.ls_status;
goto done;
@@ -5821,7 +5869,7 @@ set_linkprop(int argc, char **argv, boolean_t reset, const char *use)
continue;
}
}
- s = dladm_set_linkprop(linkid, aip->ai_name, val, count,
+ s = dladm_set_linkprop(handle, linkid, aip->ai_name, val, count,
DLADM_OPT_ACTIVE);
if (s == DLADM_STATUS_OK) {
if (!temp) {
@@ -5856,7 +5904,7 @@ set_linkprop(int argc, char **argv, boolean_t reset, const char *use)
DLADM_MAX_PROP_VALCNT +
j * DLADM_PROP_VAL_MAX;
}
- s = dladm_get_linkprop(linkid,
+ s = dladm_get_linkprop(handle, linkid,
DLADM_PROP_VAL_MODIFIABLE, aip->ai_name, propvals,
&valcnt);
@@ -5898,8 +5946,10 @@ set_linkprop(int argc, char **argv, boolean_t reset, const char *use)
}
done:
dladm_free_props(proplist);
- if (status != DLADM_STATUS_OK)
+ if (status != DLADM_STATUS_OK) {
+ dladm_close(handle);
exit(1);
+ }
}
static void
@@ -5955,7 +6005,6 @@ convert_secobj(char *buf, uint_t len, uint8_t *obj_val, uint_t *obj_lenp,
return (ENOENT);
}
-/* ARGSUSED */
static void
defersig(int sig)
{
@@ -6209,7 +6258,7 @@ do_create_secobj(int argc, char **argv, const char *use)
}
}
- status = dladm_set_secobj(obj_name, class, obj_val, obj_len,
+ status = dladm_set_secobj(handle, obj_name, class, obj_val, obj_len,
DLADM_OPT_CREATE | DLADM_OPT_ACTIVE);
if (status != DLADM_STATUS_OK) {
die_dlerr(status, "could not create secure object '%s'",
@@ -6218,7 +6267,7 @@ do_create_secobj(int argc, char **argv, const char *use)
if (temp)
return;
- status = dladm_set_secobj(obj_name, class, obj_val, obj_len,
+ status = dladm_set_secobj(handle, obj_name, class, obj_val, obj_len,
DLADM_OPT_PERSIST);
if (status != DLADM_STATUS_OK) {
warn_dlerr(status, "could not persistently create secure "
@@ -6274,9 +6323,10 @@ do_delete_secobj(int argc, char **argv, const char *use)
die("authorization '%s' is required", LINK_SEC_AUTH);
for (i = 0; i < sp->s_nfields; i++) {
- status = dladm_unset_secobj(sp->s_fields[i], DLADM_OPT_ACTIVE);
+ status = dladm_unset_secobj(handle, sp->s_fields[i],
+ DLADM_OPT_ACTIVE);
if (!temp) {
- pstatus = dladm_unset_secobj(sp->s_fields[i],
+ pstatus = dladm_unset_secobj(handle, sp->s_fields[i],
DLADM_OPT_PERSIST);
} else {
pstatus = DLADM_STATUS_OK;
@@ -6291,8 +6341,11 @@ do_delete_secobj(int argc, char **argv, const char *use)
"secure object '%s'", sp->s_fields[i]);
}
}
- if (status != DLADM_STATUS_OK || pstatus != DLADM_STATUS_OK)
+
+ if (status != DLADM_STATUS_OK || pstatus != DLADM_STATUS_OK) {
+ dladm_close(handle);
exit(1);
+ }
}
typedef struct show_secobj_state {
@@ -6304,7 +6357,7 @@ typedef struct show_secobj_state {
static boolean_t
-show_secobj(void *arg, const char *obj_name)
+show_secobj(dladm_handle_t dh, void *arg, const char *obj_name)
{
uint_t obj_len = DLADM_SECOBJ_VAL_MAX;
uint8_t obj_val[DLADM_SECOBJ_VAL_MAX];
@@ -6319,7 +6372,8 @@ show_secobj(void *arg, const char *obj_name)
if (statep->ss_persist)
flags |= DLADM_OPT_PERSIST;
- status = dladm_get_secobj(obj_name, &class, obj_val, &obj_len, flags);
+ status = dladm_get_secobj(dh, obj_name, &class, obj_val, &obj_len,
+ flags);
if (status != DLADM_STATUS_OK)
die_dlerr(status, "cannot get secure object '%s'", obj_name);
@@ -6408,6 +6462,7 @@ do_show_secobj(int argc, char **argv, const char *use)
state.ss_print.ps_nfields = nfields;
flags = state.ss_persist ? DLADM_OPT_PERSIST : 0;
+
if (optind == (argc - 1)) {
sp = split(argv[optind], MAX_SECOBJS, MAX_SECOBJ_NAMELEN);
if (sp == NULL) {
@@ -6415,7 +6470,7 @@ do_show_secobj(int argc, char **argv, const char *use)
argv[optind]);
}
for (i = 0; i < sp->s_nfields; i++) {
- if (!show_secobj(&state, sp->s_fields[i]))
+ if (!show_secobj(handle, &state, sp->s_fields[i]))
break;
}
splitfree(sp);
@@ -6423,16 +6478,17 @@ do_show_secobj(int argc, char **argv, const char *use)
} else if (optind != argc)
usage();
- status = dladm_walk_secobj(&state, show_secobj, flags);
+ status = dladm_walk_secobj(handle, &state, show_secobj, flags);
+
if (status != DLADM_STATUS_OK)
die_dlerr(status, "show-secobj");
}
/*ARGSUSED*/
static int
-i_dladm_init_linkprop(datalink_id_t linkid, void *arg)
+i_dladm_init_linkprop(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
- (void) dladm_init_linkprop(linkid, B_TRUE);
+ (void) dladm_init_linkprop(dh, linkid, B_TRUE);
return (DLADM_WALK_CONTINUE);
}
@@ -6464,8 +6520,8 @@ do_init_linkprop(int argc, char **argv, const char *use)
}
if (optind == (argc - 1)) {
- if ((status = dladm_name2info(argv[optind], &linkid, NULL, NULL,
- NULL)) != DLADM_STATUS_OK)
+ if ((status = dladm_name2info(handle, argv[optind], &linkid,
+ NULL, NULL, NULL)) != DLADM_STATUS_OK)
die_dlerr(status, "link %s is not valid", argv[optind]);
} else if (optind != argc) {
usage();
@@ -6476,14 +6532,13 @@ do_init_linkprop(int argc, char **argv, const char *use)
* linkprops of links of other classes have been initialized as
* part of the dladm up-xxx operation.
*/
- (void) dladm_walk_datalink_id(i_dladm_init_linkprop, NULL,
- DATALINK_CLASS_PHYS, media, DLADM_OPT_PERSIST);
+ (void) dladm_walk_datalink_id(i_dladm_init_linkprop, handle,
+ NULL, DATALINK_CLASS_PHYS, media, DLADM_OPT_PERSIST);
} else {
- (void) dladm_init_linkprop(linkid, any_media);
+ (void) dladm_init_linkprop(handle, linkid, any_media);
}
}
-/* ARGSUSED */
static void
do_show_ether(int argc, char **argv, const char *use)
{
@@ -6538,26 +6593,22 @@ do_show_ether(int argc, char **argv, const char *use)
fields = parse_output_fields(fields_str, ether_fields,
ETHER_MAX_FIELDS, CMD_TYPE_ANY, &nfields);
- if (fields == NULL) {
+ if (fields == NULL)
die("invalid field(s) specified");
- exit(EXIT_FAILURE);
- }
+
state.es_print.ps_fields = fields;
state.es_print.ps_nfields = nfields;
+
if (state.es_link == NULL) {
- (void) dladm_walk_datalink_id(show_etherprop, &state,
+ (void) dladm_walk_datalink_id(show_etherprop, handle, &state,
DATALINK_CLASS_PHYS, DL_ETHER,
DLADM_OPT_ACTIVE | DLADM_OPT_PERSIST);
} else {
- if (!link_is_ether(state.es_link, &linkid)) {
+ if (!link_is_ether(state.es_link, &linkid))
die("invalid link specified");
- }
- (void) show_etherprop(linkid, &state);
+ (void) show_etherprop(handle, linkid, &state);
}
-
- exit(DLADM_STATUS_OK);
-
}
static char *
@@ -6570,7 +6621,7 @@ dladm_print_field(print_field_t *pf, void *arg)
}
static int
-show_etherprop(datalink_id_t linkid, void *arg)
+show_etherprop(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
print_ether_state_t *statep = arg;
ether_fields_buf_t ebuf;
@@ -6578,7 +6629,7 @@ show_etherprop(datalink_id_t linkid, void *arg)
dladm_status_t status;
bzero(&ebuf, sizeof (ether_fields_buf_t));
- if (dladm_datalink_id2info(linkid, NULL, NULL, NULL,
+ if (dladm_datalink_id2info(dh, linkid, NULL, NULL, NULL,
ebuf.eth_link, sizeof (ebuf.eth_link)) != DLADM_STATUS_OK) {
return (DLADM_WALK_CONTINUE);
}
@@ -6588,7 +6639,7 @@ show_etherprop(datalink_id_t linkid, void *arg)
statep->es_header = B_TRUE;
}
- status = dladm_ether_info(linkid, &eattr);
+ status = dladm_ether_info(dh, linkid, &eattr);
if (status != DLADM_STATUS_OK)
goto cleanup;
@@ -6622,9 +6673,9 @@ cleanup:
static void
do_init_secobj(int argc, char **argv, const char *use)
{
- dladm_status_t status;
+ dladm_status_t status;
- status = dladm_init_secobj();
+ status = dladm_init_secobj(handle);
if (status != DLADM_STATUS_OK)
die_dlerr(status, "secure object initialization failed");
}
@@ -6686,6 +6737,7 @@ altroot_cmd(char *altroot, int argc, char *argv[])
}
(void) fprintf(fp, "%s\n", SMF_DLADM_UPGRADE_MSG);
(void) fclose(fp);
+ dladm_close(handle);
exit(0);
}
@@ -6740,6 +6792,9 @@ warn_dlerr(dladm_status_t err, const char *format, ...)
(void) fprintf(stderr, ": %s\n", dladm_status2str(err, errmsg));
}
+/*
+ * Also closes the dladm handle if it is not NULL.
+ */
/* PRINTFLIKE2 */
static void
die_dlerr(dladm_status_t err, const char *format, ...)
@@ -6755,6 +6810,10 @@ die_dlerr(dladm_status_t err, const char *format, ...)
va_end(alist);
(void) fprintf(stderr, ": %s\n", dladm_status2str(err, errmsg));
+ /* close dladm handle if it was opened */
+ if (handle != NULL)
+ dladm_close(handle);
+
exit(EXIT_FAILURE);
}
@@ -6772,6 +6831,11 @@ die(const char *format, ...)
va_end(alist);
(void) putchar('\n');
+
+ /* close dladm handle if it was opened */
+ if (handle != NULL)
+ dladm_close(handle);
+
exit(EXIT_FAILURE);
}
@@ -6861,7 +6925,7 @@ link_is_ether(const char *link, datalink_id_t *linkid)
uint32_t media;
datalink_class_t class;
- if (dladm_name2info(link, linkid, NULL, &class, &media) ==
+ if (dladm_name2info(handle, link, linkid, NULL, &class, &media) ==
DLADM_STATUS_OK) {
if (class == DATALINK_CLASS_PHYS && media == DL_ETHER)
return (B_TRUE);
diff --git a/usr/src/cmd/dlmgmtd/dlmgmt_door.c b/usr/src/cmd/dlmgmtd/dlmgmt_door.c
index aa32d7cee5..532260ac4f 100644
--- a/usr/src/cmd/dlmgmtd/dlmgmt_door.c
+++ b/usr/src/cmd/dlmgmtd/dlmgmt_door.c
@@ -951,7 +951,8 @@ dlmgmt_upcall_linkprop_init(void *argp, void *retp)
dlmgmt_table_unlock();
if (do_linkprop)
- retvalp->lr_err = dladm_init_linkprop(lip->ld_linkid, B_TRUE);
+ retvalp->lr_err = dladm_init_linkprop(dld_handle,
+ lip->ld_linkid, B_TRUE);
}
static dlmgmt_door_info_t i_dlmgmt_door_info_tbl[] = {
diff --git a/usr/src/cmd/dlmgmtd/dlmgmt_impl.h b/usr/src/cmd/dlmgmtd/dlmgmt_impl.h
index b8a9258102..09dcf2b1b4 100644
--- a/usr/src/cmd/dlmgmtd/dlmgmt_impl.h
+++ b/usr/src/cmd/dlmgmtd/dlmgmt_impl.h
@@ -24,8 +24,6 @@
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Functions to maintain a table of datalink configuration information.
*/
@@ -83,6 +81,7 @@ typedef struct dlmgmt_dlconf_s {
extern boolean_t debug;
extern const char *progname;
+extern dladm_handle_t dld_handle;
extern avl_tree_t dlmgmt_name_avl;
extern avl_tree_t dlmgmt_id_avl;
diff --git a/usr/src/cmd/dlmgmtd/dlmgmt_main.c b/usr/src/cmd/dlmgmtd/dlmgmt_main.c
index e6d7581138..3eaac30ff8 100644
--- a/usr/src/cmd/dlmgmtd/dlmgmt_main.c
+++ b/usr/src/cmd/dlmgmtd/dlmgmt_main.c
@@ -51,14 +51,27 @@
#include <sys/param.h>
#include <sys/stat.h>
#include <unistd.h>
+#include <libdladm_impl.h>
#include <libdlmgmt.h>
#include "dlmgmt_impl.h"
const char *progname;
boolean_t debug;
static int pfds[2];
+/*
+ * This file descriptor to DLMGMT_DOOR cannot be in the libdladm
+ * handle because the door isn't created when the handle is created.
+ */
static int dlmgmt_door_fd = -1;
-static int dld_control_fd = -1;
+
+/*
+ * This libdladm handle is global so that dlmgmt_upcall_linkprop_init()
+ * can pass to libdladm. The handle is opened during dlmgmt_init_privileges()
+ * with "ALL" privileges. It is not able to open DLMGMT_DOOR at that time as
+ * it hasn't been created yet. This door in the handle is opened in the first
+ * call to dladm_door_fd().
+ */
+dladm_handle_t dld_handle = NULL;
static void dlmgmtd_exit(int);
static int dlmgmt_init();
@@ -72,11 +85,11 @@ dlmgmt_set_doorfd(boolean_t start)
dld_ioc_door_t did;
int err = 0;
- assert(dld_control_fd != -1);
+ assert(dld_handle != NULL);
did.did_start_door = start;
- if (ioctl(dld_control_fd, DLDIOC_DOORSERVER, &did) == -1)
+ if (ioctl(dladm_dld_fd(dld_handle), DLDIOC_DOORSERVER, &did) == -1)
err = errno;
return (err);
@@ -144,7 +157,7 @@ dlmgmt_door_fini()
static int
dlmgmt_init()
{
- int err;
+ int err;
if (signal(SIGTERM, dlmgmtd_exit) == SIG_ERR ||
signal(SIGINT, dlmgmtd_exit) == SIG_ERR) {
@@ -237,10 +250,12 @@ dlmgmt_init_privileges()
/*
* When dlmgmtd is started at boot, "ALL" privilege is required
- * to open the dld control node.
+ * to open the dld control node. The door isn't created yet.
*/
- if ((dld_control_fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (errno);
+ if (dladm_open(&dld_handle) != DLADM_STATUS_OK) {
+ dlmgmt_log(LOG_ERR, "dladm_open() failed");
+ return (EPERM);
+ }
/*
* We need PRIV_SYS_DL_CONFIG for the DLDIOC_DOORSERVER ioctl,
@@ -248,20 +263,21 @@ dlmgmt_init_privileges()
*/
if (__init_daemon_priv(PU_RESETGROUPS|PU_CLEARLIMITSET, UID_DLADM,
GID_SYS, PRIV_SYS_DL_CONFIG, PRIV_SYS_CONFIG, NULL) == -1) {
- (void) close(dld_control_fd);
- dld_control_fd = -1;
+ dladm_close(dld_handle);
+ dld_handle = NULL;
return (EPERM);
}
+
return (0);
}
static void
dlmgmt_fini_privileges()
{
- if (dld_control_fd != -1) {
- (void) close(dld_control_fd);
- dld_control_fd = -1;
+ if (dld_handle != NULL) {
+ dladm_close(dld_handle);
+ dld_handle = NULL;
}
}
diff --git a/usr/src/cmd/flowadm/flowadm.c b/usr/src/cmd/flowadm/flowadm.c
index f4c3859172..5c6fef48c2 100644
--- a/usr/src/cmd/flowadm/flowadm.c
+++ b/usr/src/cmd/flowadm/flowadm.c
@@ -112,18 +112,18 @@ static cmdfunc_t do_show_flowprop, do_set_flowprop, do_reset_flowprop;
static cmdfunc_t do_show_usage;
static int show_flow(dladm_flow_attr_t *, void *);
-static int show_flows_onelink(datalink_id_t, void *);
+static int show_flows_onelink(dladm_handle_t, datalink_id_t, void *);
static void flow_stats(const char *, datalink_id_t, uint_t);
static void get_flow_stats(const char *, pktsum_t *);
static int show_flow_stats(dladm_flow_attr_t *, void *);
-static int show_link_flow_stats(datalink_id_t, void *);
+static int show_link_flow_stats(dladm_handle_t, datalink_id_t, void *);
static int remove_flow(dladm_flow_attr_t *, void *);
static int show_flowprop(dladm_flow_attr_t *, void *);
static void show_flowprop_one_flow(void *, const char *);
-static int show_flowprop_onelink(datalink_id_t, void *);
+static int show_flowprop_onelink(dladm_handle_t, datalink_id_t, void *);
static void die(const char *, ...);
static void die_optdup(int);
@@ -367,6 +367,12 @@ static char *progname;
boolean_t t_arg = B_FALSE; /* changes are persistent */
char *altroot = NULL;
+/*
+ * Handle to libdladm. Opened in main() before the sub-command
+ * specific function is called.
+ */
+static dladm_handle_t handle = NULL;
+
static const char *attr_table[] =
{"local_ip", "remote_ip", "transport", "local_port", "dsfield"};
@@ -389,6 +395,11 @@ usage(void)
"\tshow-flow [-p] [-s [-i <interval>]] [-l <link>] [flow-name]\n"
"\tshow-usage [-d|-p -F <format>] [-s <DD/MM/YYYY,HH:MM:SS>]\n"
"\t\t[-e <DD/MM/YYYY,HH:MM:SS>]] -f <logfile> [<name>]\n"));
+
+ /* close dladm handle if it was opened */
+ if (handle != NULL)
+ dladm_close(handle);
+
exit(1);
}
@@ -397,6 +408,7 @@ main(int argc, char *argv[])
{
int i, arglen, cmdlen;
cmd_t *cmdp;
+ dladm_status_t status;
(void) setlocale(LC_ALL, "");
#if !defined(TEXT_DOMAIN)
@@ -415,7 +427,15 @@ main(int argc, char *argv[])
cmdlen = strlen(cmdp->c_name);
if ((arglen == cmdlen) && (strncmp(argv[1], cmdp->c_name,
cmdlen) == 0)) {
+ /* Open the libdladm handle */
+ if ((status = dladm_open(&handle)) != DLADM_STATUS_OK) {
+ die_dlerr(status,
+ "could not open /dev/dld");
+ }
+
cmdp->c_fn(argc - 1, &argv[1]);
+
+ dladm_close(handle);
exit(0);
}
}
@@ -447,7 +467,7 @@ do_init_flow(int argc, char *argv[])
{
dladm_status_t status;
- status = dladm_flow_init();
+ status = dladm_flow_init(handle);
if (status != DLADM_STATUS_OK)
die_dlerr(status, "flows initialization failed");
}
@@ -726,7 +746,7 @@ do_add_flow(int argc, char *argv[])
MAXNAMELEN) >= MAXNAMELEN) {
die("link name too long");
}
- if (dladm_name2info(devname, &linkid, NULL,
+ if (dladm_name2info(handle, devname, &linkid, NULL,
NULL, NULL) != DLADM_STATUS_OK)
die("invalid link '%s'", devname);
l_arg = B_TRUE;
@@ -761,7 +781,7 @@ do_add_flow(int argc, char *argv[])
name = argv[index];
}
- status = dladm_flow_add(linkid, attrlist, proplist, name,
+ status = dladm_flow_add(handle, linkid, attrlist, proplist, name,
t_arg, altroot);
if (status != DLADM_STATUS_OK)
die_dlerr(status, "add flow failed");
@@ -798,7 +818,7 @@ do_remove_flow(int argc, char *argv[])
MAXLINKNAMELEN) >= MAXLINKNAMELEN) {
die("link name too long");
}
- if (dladm_name2info(linkname, &linkid, NULL,
+ if (dladm_name2info(handle, linkname, &linkid, NULL,
NULL, NULL) != DLADM_STATUS_OK) {
die("invalid link '%s'", linkname);
}
@@ -819,7 +839,7 @@ do_remove_flow(int argc, char *argv[])
die("flow name too long");
flowname = argv[optind];
}
- status = dladm_flow_remove(flowname, t_arg, altroot);
+ status = dladm_flow_remove(handle, flowname, t_arg, altroot);
} else {
/* if link is specified then flow name should not be there */
if (optind == argc-1)
@@ -828,7 +848,8 @@ do_remove_flow(int argc, char *argv[])
state.fs_tempop = t_arg;
state.fs_altroot = altroot;
state.fs_status = DLADM_STATUS_OK;
- status = dladm_walk_flow(remove_flow, linkid, &state, B_FALSE);
+ status = dladm_walk_flow(remove_flow, handle, linkid, &state,
+ B_FALSE);
/*
* check if dladm_walk_flow terminated early and see if the
* walker function as any status for us
@@ -849,7 +870,7 @@ remove_flow(dladm_flow_attr_t *attr, void *arg)
{
remove_flow_state_t *state = (remove_flow_state_t *)arg;
- state->fs_status = dladm_flow_remove(attr->fa_flowname,
+ state->fs_status = dladm_flow_remove(handle, attr->fa_flowname,
state->fs_tempop, state->fs_altroot);
if (state->fs_status == DLADM_STATUS_OK)
@@ -875,8 +896,8 @@ print_flow(show_flow_state_t *state, dladm_flow_attr_t *attr,
char link[MAXLINKNAMELEN];
dladm_status_t status;
- if ((status = dladm_datalink_id2info(attr->fa_linkid, NULL, NULL,
- NULL, link, sizeof (link))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(handle, attr->fa_linkid, NULL,
+ NULL, NULL, link, sizeof (link))) != DLADM_STATUS_OK) {
return (status);
}
@@ -933,12 +954,11 @@ static void
show_one_flow(void *arg, const char *name)
{
dladm_flow_attr_t attr;
- dladm_status_t status;
- if (dladm_flow_info(name, &attr) != DLADM_STATUS_OK)
+ if (dladm_flow_info(handle, name, &attr) != DLADM_STATUS_OK)
die("invalid flow: '%s'", name);
else
- show_flow(&attr, arg);
+ (void) show_flow(&attr, arg);
}
/*
@@ -947,11 +967,11 @@ show_one_flow(void *arg, const char *name)
* all flows on all links.
*/
static int
-show_flows_onelink(datalink_id_t linkid, void *arg)
+show_flows_onelink(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
show_flow_state_t *state = arg;
- (void) dladm_walk_flow(show_flow, linkid, arg, state->fs_persist);
+ (void) dladm_walk_flow(show_flow, dh, linkid, arg, state->fs_persist);
return (DLADM_WALK_CONTINUE);
}
@@ -1015,9 +1035,9 @@ show_flow_stats(dladm_flow_attr_t *attr, void *arg)
* all flows on all links.
*/
static int
-show_link_flow_stats(datalink_id_t linkid, void * arg)
+show_link_flow_stats(dladm_handle_t dh, datalink_id_t linkid, void * arg)
{
- if (dladm_walk_flow(show_flow_stats, linkid, arg, B_FALSE)
+ if (dladm_walk_flow(show_flow_stats, dh, linkid, arg, B_FALSE)
== DLADM_STATUS_OK)
return (DLADM_WALK_CONTINUE);
else
@@ -1031,7 +1051,8 @@ flow_stats(const char *flow, datalink_id_t linkid, uint_t interval)
show_flow_state_t state;
dladm_flow_attr_t attr;
- if (flow != NULL && dladm_flow_info(flow, &attr) != DLADM_STATUS_OK)
+ if (flow != NULL &&
+ dladm_flow_info(handle, flow, &attr) != DLADM_STATUS_OK)
die("invalid flow %s", flow);
bzero(&state, sizeof (state));
@@ -1057,14 +1078,14 @@ flow_stats(const char *flow, datalink_id_t linkid, uint_t interval)
/* Show all stats on a link */
} else if (linkid != DATALINK_INVALID_LINKID) {
- (void) dladm_walk_flow(show_flow_stats, linkid, &state,
- B_FALSE);
+ (void) dladm_walk_flow(show_flow_stats, handle, linkid,
+ &state, B_FALSE);
/* Show all stats by datalink */
} else {
(void) dladm_walk_datalink_id(show_link_flow_stats,
- &state, DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE,
- DLADM_OPT_ACTIVE);
+ handle, &state, DATALINK_CLASS_ALL,
+ DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
}
if (interval == 0)
@@ -1094,7 +1115,6 @@ do_show_flow(int argc, char *argv[])
uint_t nfields;
char *all_fields =
"flow,link,ipaddr,transport,port,dsfield";
- dladm_status_t status;
bzero(&state, sizeof (state));
@@ -1143,7 +1163,7 @@ do_show_flow(int argc, char *argv[])
if (strlcpy(linkname, optarg, MAXLINKNAMELEN)
>= MAXLINKNAMELEN)
die("link name too long\n");
- if (dladm_name2info(linkname, &linkid, NULL,
+ if (dladm_name2info(handle, linkname, &linkid, NULL,
NULL, NULL) != DLADM_STATUS_OK)
die("invalid link '%s'", linkname);
l_arg = B_TRUE;
@@ -1173,7 +1193,8 @@ do_show_flow(int argc, char *argv[])
}
if (S_arg) {
- dladm_continuous(linkid, state.fs_flow, interval, FLOW_REPORT);
+ dladm_continuous(handle, linkid, state.fs_flow, interval,
+ FLOW_REPORT);
return;
}
@@ -1197,12 +1218,12 @@ do_show_flow(int argc, char *argv[])
/* Show attributes of flows on one link */
} else if (l_arg) {
- (void) show_flows_onelink(linkid, &state);
+ (void) show_flows_onelink(handle, linkid, &state);
/* Show attributes of all flows on all links */
} else {
- (void) dladm_walk_datalink_id(show_flows_onelink, &state,
- DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE,
+ (void) dladm_walk_datalink_id(show_flows_onelink, handle,
+ &state, DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE,
DLADM_OPT_ACTIVE);
}
}
@@ -1214,7 +1235,7 @@ set_flowprop_persist(const char *flow, const char *prop_name, char **prop_val,
dladm_status_t status;
char *errprop;
- status = dladm_set_flowprop(flow, prop_name, prop_val, val_cnt,
+ status = dladm_set_flowprop(handle, flow, prop_name, prop_val, val_cnt,
DLADM_OPT_PERSIST, &errprop);
if (status != DLADM_STATUS_OK) {
@@ -1276,7 +1297,7 @@ set_flowprop(int argc, char **argv, boolean_t reset)
if (!reset)
die("flow property must be specified");
- status = dladm_set_flowprop(flow, NULL, NULL, 0,
+ status = dladm_set_flowprop(handle, flow, NULL, NULL, 0,
DLADM_OPT_ACTIVE, &errprop);
if (status != DLADM_STATUS_OK) {
warn_dlerr(status, "cannot reset flow property '%s' "
@@ -1311,7 +1332,7 @@ set_flowprop(int argc, char **argv, boolean_t reset)
continue;
}
}
- s = dladm_set_flowprop(flow, aip->ai_name, val, count,
+ s = dladm_set_flowprop(handle, flow, aip->ai_name, val, count,
DLADM_OPT_ACTIVE, NULL);
if (s == DLADM_STATUS_OK) {
if (!temp) {
@@ -1346,8 +1367,9 @@ set_flowprop(int argc, char **argv, boolean_t reset)
DLADM_MAX_PROP_VALCNT +
j * DLADM_PROP_VAL_MAX;
}
- s = dladm_get_flowprop(flow, DLADM_PROP_VAL_MODIFIABLE,
- aip->ai_name, propvals, &valcnt);
+ s = dladm_get_flowprop(handle, flow,
+ DLADM_PROP_VAL_MODIFIABLE, aip->ai_name, propvals,
+ &valcnt);
ptr = errmsg;
lim = ptr + DLADM_STRSIZE;
@@ -1381,8 +1403,10 @@ set_flowprop(int argc, char **argv, boolean_t reset)
}
done:
dladm_free_props(proplist);
- if (status != DLADM_STATUS_OK)
+ if (status != DLADM_STATUS_OK) {
+ dladm_close(handle);
exit(1);
+ }
}
static void
@@ -1442,6 +1466,11 @@ die(const char *format, ...)
va_end(alist);
(void) putchar('\n');
+
+ /* close dladm handle if it was opened */
+ if (handle != NULL)
+ dladm_close(handle);
+
exit(EXIT_FAILURE);
}
@@ -1480,6 +1509,10 @@ die_dlerr(dladm_status_t err, const char *format, ...)
va_end(alist);
(void) fprintf(stderr, ": %s\n", dladm_status2str(err, errmsg));
+ /* close dladm handle if it was opened */
+ if (handle != NULL)
+ dladm_close(handle);
+
exit(EXIT_FAILURE);
}
@@ -1496,7 +1529,7 @@ print_flowprop(const char *flowname, show_flowprop_state_t *statep,
uint_t valcnt = DLADM_MAX_PROP_VALCNT;
dladm_status_t status;
- status = dladm_get_flowprop(flowname, type, propname, propvals,
+ status = dladm_get_flowprop(handle, flowname, type, propname, propvals,
&valcnt);
if (status != DLADM_STATUS_OK) {
if (status == DLADM_STATUS_TEMPONLY) {
@@ -1642,15 +1675,15 @@ show_flowprop(dladm_flow_attr_t *attr, void *arg)
* usable to dladm_walk_datalink_id()
*/
static int
-show_flowprop_onelink(datalink_id_t linkid, void *arg)
+show_flowprop_onelink(dladm_handle_t dh, datalink_id_t linkid, void *arg)
{
char name[MAXLINKNAMELEN];
- if (dladm_datalink_id2info(linkid, NULL, NULL, NULL,
- name, sizeof (name)) != DLADM_STATUS_OK)
+ if (dladm_datalink_id2info(dh, linkid, NULL, NULL, NULL, name,
+ sizeof (name)) != DLADM_STATUS_OK)
return (DLADM_WALK_TERMINATE);
- (void) dladm_walk_flow(show_flowprop, linkid, arg, B_FALSE);
+ (void) dladm_walk_flow(show_flowprop, dh, linkid, arg, B_FALSE);
return (DLADM_WALK_CONTINUE);
}
@@ -1693,7 +1726,7 @@ do_show_flowprop(int argc, char **argv)
state.fs_persist = B_TRUE;
break;
case 'l':
- if (dladm_name2info(optarg, &state.fs_linkid,
+ if (dladm_name2info(handle, optarg, &state.fs_linkid,
NULL, NULL, NULL) != DLADM_STATUS_OK)
die("invalid link '%s'", optarg);
break;
@@ -1737,12 +1770,12 @@ do_show_flowprop(int argc, char **argv)
/* Show properties for all flows on one link */
} else if (state.fs_linkid != DATALINK_INVALID_LINKID) {
- (void) show_flowprop_onelink(state.fs_linkid, &state);
+ (void) show_flowprop_onelink(handle, state.fs_linkid, &state);
/* Show properties for all flows on all links */
} else {
- (void) dladm_walk_datalink_id(show_flowprop_onelink, &state,
- DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE,
+ (void) dladm_walk_datalink_id(show_flowprop_onelink, handle,
+ &state, DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE,
DLADM_OPT_ACTIVE);
}
@@ -1763,7 +1796,8 @@ show_flowprop_one_flow(void *arg, const char *flow)
/*
* Do not print flow props for invalid flows.
*/
- if ((status = dladm_flow_info(flow, &attr)) != DLADM_STATUS_OK) {
+ if ((status = dladm_flow_info(handle, flow, &attr)) !=
+ DLADM_STATUS_OK) {
die("invalid flow: '%s'", flow);
}
diff --git a/usr/src/cmd/rcm_daemon/common/aggr_rcm.c b/usr/src/cmd/rcm_daemon/common/aggr_rcm.c
index afb08c7a58..70e99932b1 100644
--- a/usr/src/cmd/rcm_daemon/common/aggr_rcm.c
+++ b/usr/src/cmd/rcm_daemon/common/aggr_rcm.c
@@ -23,8 +23,6 @@
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* This RCM module adds support to the RCM framework for AGGR links
*/
@@ -103,6 +101,8 @@ static dl_aggr_t aggr_tail;
static mutex_t aggr_list_lock;
static int events_registered = 0;
+static dladm_handle_t dld_handle = NULL;
+
/*
* RCM module interface prototypes
*/
@@ -181,6 +181,8 @@ rcm_mod_init(void)
aggr_tail.da_next = NULL;
(void) mutex_init(&aggr_list_lock, NULL, NULL);
+ (void) dladm_open(&dld_handle);
+
/* Return the ops vectors */
return (&aggr_ops);
}
@@ -225,6 +227,7 @@ rcm_mod_fini(void)
aggr_list_free();
(void) mutex_destroy(&aggr_list_lock);
+ dladm_close(dld_handle);
return (RCM_SUCCESS);
}
@@ -491,14 +494,15 @@ aggr_offline_port(link_cache_t *node, cache_node_state_t state)
if (aggr->da_lastport == node->vc_linkid) {
rcm_log_message(RCM_TRACE2, "AGGR: delete aggregation %u\n",
aggr->da_aggrid);
- status = dladm_aggr_delete(aggr->da_aggrid, DLADM_OPT_ACTIVE);
+ status = dladm_aggr_delete(dld_handle, aggr->da_aggrid,
+ DLADM_OPT_ACTIVE);
} else {
rcm_log_message(RCM_TRACE2,
"AGGR: remove port (%s) from aggregation %u\n",
node->vc_resource, aggr->da_aggrid);
port.lp_linkid = node->vc_linkid;
- status = dladm_aggr_remove(aggr->da_aggrid, 1, &port,
- DLADM_OPT_ACTIVE);
+ status = dladm_aggr_remove(dld_handle, aggr->da_aggrid, 1,
+ &port, DLADM_OPT_ACTIVE);
}
if (status != DLADM_STATUS_OK) {
rcm_log_message(RCM_WARNING,
@@ -537,14 +541,14 @@ aggr_online_port(link_cache_t *node, boolean_t *up)
if (aggr->da_lastport == node->vc_linkid) {
rcm_log_message(RCM_TRACE2, "AGGR: delete aggregation %u\n",
aggr->da_aggrid);
- status = dladm_aggr_up(aggr->da_aggrid);
+ status = dladm_aggr_up(dld_handle, aggr->da_aggrid);
*up = B_TRUE;
} else {
rcm_log_message(RCM_TRACE2,
"AGGR: add port (%s) to aggregation %u\n",
node->vc_resource, aggr->da_aggrid);
port.lp_linkid = node->vc_linkid;
- status = dladm_aggr_add(aggr->da_aggrid, 1, &port,
+ status = dladm_aggr_add(dld_handle, aggr->da_aggrid, 1, &port,
DLADM_OPT_ACTIVE);
}
if (status != DLADM_STATUS_OK) {
@@ -766,8 +770,8 @@ aggr_usage(link_cache_t *node)
else
fmt = _("%s is part of AGGR ");
- if ((status = dladm_datalink_id2info(node->vc_linkid, NULL, NULL,
- NULL, name, sizeof (name))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(dld_handle, node->vc_linkid, NULL,
+ NULL, NULL, name, sizeof (name))) != DLADM_STATUS_OK) {
rcm_log_message(RCM_ERROR,
_("AGGR: usage(%s) get port name failure(%s)\n"),
node->vc_resource, dladm_status2str(status, errmsg));
@@ -791,8 +795,9 @@ aggr_usage(link_cache_t *node)
return (buf);
}
- if ((status = dladm_datalink_id2info(node->vc_aggr->da_aggrid, NULL,
- NULL, NULL, name, sizeof (name))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(dld_handle,
+ node->vc_aggr->da_aggrid, NULL, NULL, NULL, name,
+ sizeof (name))) != DLADM_STATUS_OK) {
rcm_log_message(RCM_ERROR,
_("AGGR: usage(%s) get aggr %u name failure(%s)\n"),
node->vc_resource, node->vc_aggr->da_aggrid,
@@ -959,7 +964,7 @@ typedef struct aggr_update_arg_s {
* aggr_update() - Update physical interface properties
*/
static int
-aggr_update(datalink_id_t aggrid, void *arg)
+aggr_update(dladm_handle_t handle, datalink_id_t aggrid, void *arg)
{
aggr_update_arg_t *aggr_update_argp = arg;
rcm_handle_t *hd = aggr_update_argp->hd;
@@ -974,7 +979,8 @@ aggr_update(datalink_id_t aggrid, void *arg)
rcm_log_message(RCM_TRACE1, "AGGR: aggr_update(%u)\n", aggrid);
assert(MUTEX_HELD(&aggr_list_lock));
- status = dladm_aggr_info(aggrid, &aggr_attr, DLADM_OPT_ACTIVE);
+ status = dladm_aggr_info(handle, aggrid, &aggr_attr,
+ DLADM_OPT_ACTIVE);
if (status != DLADM_STATUS_OK) {
rcm_log_message(RCM_TRACE1,
"AGGR: cannot get aggr information for %u error(%s)\n",
@@ -1041,8 +1047,8 @@ aggr_update_all(rcm_handle_t *hd)
assert(MUTEX_HELD(&cache_lock));
arg.hd = hd;
- (void) dladm_walk_datalink_id(aggr_update, &arg, DATALINK_CLASS_AGGR,
- DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
+ (void) dladm_walk_datalink_id(aggr_update, dld_handle, &arg,
+ DATALINK_CLASS_AGGR, DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
return (arg.retval);
}
@@ -1147,8 +1153,8 @@ aggr_log_err(datalink_id_t linkid, char **errorp, char *errmsg)
rcm_log_message(RCM_ERROR, _("AGGR: %s(%s)\n"), errmsg, rsrc);
- if ((status = dladm_datalink_id2info(linkid, NULL, NULL,
- NULL, link, sizeof (link))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(dld_handle, linkid, NULL,
+ NULL, NULL, link, sizeof (link))) != DLADM_STATUS_OK) {
rcm_log_message(RCM_WARNING,
_("AGGR: cannot get link name of (%s) %s\n"),
rsrc, dladm_status2str(status, errstr));
@@ -1349,7 +1355,7 @@ typedef struct aggr_configure_arg {
} aggr_configure_arg_t;
static int
-aggr_configure(datalink_id_t aggrid, void *arg)
+aggr_configure(dladm_handle_t handle, datalink_id_t aggrid, void *arg)
{
aggr_configure_arg_t *aggr_configure_argp = arg;
datalink_id_t portid;
@@ -1360,11 +1366,12 @@ aggr_configure(datalink_id_t aggrid, void *arg)
char errmsg[DLADM_STRSIZE];
int i;
- status = dladm_datalink_id2info(aggrid, &flags, NULL, NULL, NULL, 0);
+ status = dladm_datalink_id2info(handle, aggrid, &flags, NULL, NULL,
+ NULL, 0);
if (status != DLADM_STATUS_OK)
return (DLADM_WALK_CONTINUE);
- status = dladm_aggr_info(aggrid, &aggr_attr, DLADM_OPT_PERSIST);
+ status = dladm_aggr_info(handle, aggrid, &aggr_attr, DLADM_OPT_PERSIST);
if (status != DLADM_STATUS_OK)
return (DLADM_WALK_CONTINUE);
@@ -1390,12 +1397,12 @@ aggr_configure(datalink_id_t aggrid, void *arg)
"AGGR: aggr_configure dladm_aggr_add port %u (%u)\n",
portid, aggrid);
port_attr.lp_linkid = portid;
- status = dladm_aggr_add(aggrid, 1, &port_attr,
+ status = dladm_aggr_add(handle, aggrid, 1, &port_attr,
DLADM_OPT_ACTIVE);
} else {
rcm_log_message(RCM_TRACE3,
"AGGR: aggr_configure dladm_aggr_up (%u)\n", aggrid);
- status = dladm_aggr_up(aggrid);
+ status = dladm_aggr_up(handle, aggrid);
}
if (status != DLADM_STATUS_OK) {
@@ -1443,8 +1450,8 @@ aggr_configure_all(rcm_handle_t *hd, datalink_id_t linkid, boolean_t *up)
(void) mutex_unlock(&cache_lock);
arg.portid = linkid;
- (void) dladm_walk_datalink_id(aggr_configure, &arg, DATALINK_CLASS_AGGR,
- DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
+ (void) dladm_walk_datalink_id(aggr_configure, dld_handle, &arg,
+ DATALINK_CLASS_AGGR, DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
if (arg.retval == 0) {
*up = arg.up;
diff --git a/usr/src/cmd/rcm_daemon/common/ip_rcm.c b/usr/src/cmd/rcm_daemon/common/ip_rcm.c
index 9801c2b18c..f62b3dfc19 100644
--- a/usr/src/cmd/rcm_daemon/common/ip_rcm.c
+++ b/usr/src/cmd/rcm_daemon/common/ip_rcm.c
@@ -23,8 +23,6 @@
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* This RCM module adds support to the RCM framework for IP managed
* interfaces.
@@ -210,6 +208,8 @@ static ip_cache_t cache_tail;
static mutex_t cache_lock;
static int events_registered = 0;
+static dladm_handle_t dld_handle = NULL;
+
/*
* RCM module interface prototypes
*/
@@ -303,6 +303,8 @@ rcm_mod_init(void)
cache_tail.ip_next = NULL;
(void) mutex_init(&cache_lock, NULL, NULL);
+ (void) dladm_open(&dld_handle);
+
/* Return the ops vectors */
return (&ip_ops);
}
@@ -328,6 +330,8 @@ rcm_mod_fini(void)
free_cache();
(void) mutex_destroy(&cache_lock);
+
+ dladm_close(dld_handle);
return (RCM_SUCCESS);
}
@@ -889,8 +893,8 @@ ip_usage(ip_cache_t *node)
return (NULL);
}
- if ((status = dladm_datalink_id2info(linkid, NULL, NULL, NULL, link,
- sizeof (link))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(dld_handle, linkid, NULL, NULL,
+ NULL, link, sizeof (link))) != DLADM_STATUS_OK) {
rcm_log_message(RCM_ERROR,
_("IP: usage(%s) get link name failure(%s)\n"),
node->ip_resource, dladm_status2str(status, errmsg));
@@ -1942,8 +1946,8 @@ get_link_resource(const char *link)
char *resource;
dladm_status_t status;
- if ((status = dladm_name2info(link, &linkid, &flags, NULL, NULL))
- != DLADM_STATUS_OK) {
+ if ((status = dladm_name2info(dld_handle, link, &linkid, &flags, NULL,
+ NULL)) != DLADM_STATUS_OK) {
goto fail;
}
@@ -2652,7 +2656,7 @@ if_configure(datalink_id_t linkid)
}
(void) mutex_unlock(&cache_lock);
- if (dladm_datalink_id2info(linkid, NULL, NULL, NULL, ifinst,
+ if (dladm_datalink_id2info(dld_handle, linkid, NULL, NULL, NULL, ifinst,
sizeof (ifinst)) != DLADM_STATUS_OK) {
rcm_log_message(RCM_ERROR,
_("IP: get %u link name failed\n"), linkid);
diff --git a/usr/src/cmd/rcm_daemon/common/network_rcm.c b/usr/src/cmd/rcm_daemon/common/network_rcm.c
index b3199ed936..e09969fde6 100644
--- a/usr/src/cmd/rcm_daemon/common/network_rcm.c
+++ b/usr/src/cmd/rcm_daemon/common/network_rcm.c
@@ -75,6 +75,8 @@ static net_cache_t cache_tail;
static mutex_t cache_lock;
static int events_registered = 0;
+static dladm_handle_t dld_handle = NULL;
+
/* module interface routines */
static int net_register(rcm_handle_t *);
static int net_unregister(rcm_handle_t *);
@@ -138,6 +140,8 @@ rcm_mod_init(void)
cache_tail.next = NULL;
(void) mutex_init(&cache_lock, NULL, NULL);
+ dladm_open(&dld_handle);
+
/* Return the ops vectors */
return (&net_ops);
}
@@ -163,6 +167,8 @@ rcm_mod_fini(void)
{
free_cache();
(void) mutex_destroy(&cache_lock);
+
+ dladm_close(dld_handle);
return (RCM_SUCCESS);
}
@@ -319,9 +325,9 @@ net_passthru(rcm_handle_t *hd, int op, const char *rsrc, uint_t flag,
* Delete active linkprop before this active link
* is deleted.
*/
- (void) dladm_set_linkprop(linkid, NULL, NULL, 0,
- DLADM_OPT_ACTIVE);
- (void) dladm_destroy_datalink_id(linkid,
+ (void) dladm_set_linkprop(dld_handle, linkid, NULL,
+ NULL, 0, DLADM_OPT_ACTIVE);
+ (void) dladm_destroy_datalink_id(dld_handle, linkid,
DLADM_OPT_ACTIVE);
}
break;
@@ -431,8 +437,8 @@ net_getinfo(rcm_handle_t *hd, char *rsrc, id_t id, uint_t flag,
}
len = strlen(info_fmt) + MAXLINKNAMELEN + 1;
- if ((status = dladm_datalink_id2info(node->linkid, NULL, NULL, NULL,
- link, sizeof (link))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(dld_handle, node->linkid, NULL,
+ NULL, NULL, link, sizeof (link))) != DLADM_STATUS_OK) {
rcm_log_message(RCM_ERROR,
_("NET: usage(%s) get link name failure(%s)\n"),
node->resource, dladm_status2str(status, errmsg));
@@ -666,7 +672,7 @@ devfs_entry(di_node_t node, di_minor_t minor, void *arg)
di_devfs_path_free(devfspath);
(void) snprintf(dev, sizeof (dev), "%s%d", drv, di_instance(node));
- if (dladm_dev2linkid(dev, &linkid) != DLADM_STATUS_OK) {
+ if (dladm_dev2linkid(dld_handle, dev, &linkid) != DLADM_STATUS_OK) {
rcm_log_message(RCM_DEBUG,
_("NET: failed to find the linkid for %s\n"), dev);
return (DI_WALK_CONTINUE);
diff --git a/usr/src/cmd/rcm_daemon/common/vlan_rcm.c b/usr/src/cmd/rcm_daemon/common/vlan_rcm.c
index a657baa2d4..16e06614bd 100644
--- a/usr/src/cmd/rcm_daemon/common/vlan_rcm.c
+++ b/usr/src/cmd/rcm_daemon/common/vlan_rcm.c
@@ -98,6 +98,8 @@ static link_cache_t cache_tail;
static mutex_t cache_lock;
static int events_registered = 0;
+static dladm_handle_t dld_handle = NULL;
+
/*
* RCM module interface prototypes
*/
@@ -169,6 +171,8 @@ rcm_mod_init(void)
cache_tail.vc_next = NULL;
(void) mutex_init(&cache_lock, 0, NULL);
+ dladm_open(&dld_handle);
+
/* Return the ops vectors */
return (&vlan_ops);
}
@@ -200,6 +204,8 @@ rcm_mod_fini(void)
*/
cache_free();
(void) mutex_destroy(&cache_lock);
+
+ dladm_close(dld_handle);
return (RCM_SUCCESS);
}
@@ -396,7 +402,7 @@ vlan_online_vlan(link_cache_t *node)
if (!(vlan->dv_flags & VLAN_OFFLINED))
continue;
- if ((status = dladm_vlan_up(vlan->dv_vlanid)) !=
+ if ((status = dladm_vlan_up(dld_handle, vlan->dv_vlanid)) !=
DLADM_STATUS_OK) {
/*
* Print a warning message and continue to online
@@ -425,7 +431,7 @@ vlan_offline_vlan(link_cache_t *node, uint32_t flags, cache_node_state_t state)
* Try to delete all explicit created VLAN
*/
for (vlan = node->vc_vlan; vlan != NULL; vlan = vlan->dv_next) {
- if ((status = dladm_vlan_delete(vlan->dv_vlanid,
+ if ((status = dladm_vlan_delete(dld_handle, vlan->dv_vlanid,
DLADM_OPT_ACTIVE)) != DLADM_STATUS_OK) {
rcm_log_message(RCM_WARNING,
_("VLAN: VLAN offline failed (%u): %s\n"),
@@ -669,8 +675,8 @@ vlan_usage(link_cache_t *node)
rcm_log_message(RCM_TRACE2, "VLAN: usage(%s)\n", node->vc_resource);
assert(MUTEX_HELD(&cache_lock));
- if ((status = dladm_datalink_id2info(node->vc_linkid, NULL, NULL, NULL,
- name, sizeof (name))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(dld_handle, node->vc_linkid, NULL,
+ NULL, NULL, name, sizeof (name))) != DLADM_STATUS_OK) {
rcm_log_message(RCM_ERROR,
_("VLAN: usage(%s) get link name failure(%s)\n"),
node->vc_resource, dladm_status2str(status, errmsg));
@@ -710,8 +716,9 @@ vlan_usage(link_cache_t *node)
for (vlan = node->vc_vlan; vlan != NULL; vlan = vlan->dv_next) {
rcm_log_message(RCM_DEBUG, "VLAN:= %u\n", vlan->dv_vlanid);
- if ((status = dladm_datalink_id2info(vlan->dv_vlanid, NULL,
- NULL, NULL, name, sizeof (name))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(dld_handle,
+ vlan->dv_vlanid, NULL, NULL, NULL, name,
+ sizeof (name))) != DLADM_STATUS_OK) {
rcm_log_message(RCM_ERROR,
_("VLAN: usage(%s) get vlan %u name failure(%s)\n"),
node->vc_resource, vlan->dv_vlanid,
@@ -827,7 +834,7 @@ typedef struct vlan_update_arg_s {
* vlan_update() - Update physical interface properties
*/
static int
-vlan_update(datalink_id_t vlanid, void *arg)
+vlan_update(dladm_handle_t handle, datalink_id_t vlanid, void *arg)
{
vlan_update_arg_t *vlan_update_argp = arg;
rcm_handle_t *hd = vlan_update_argp->hd;
@@ -843,7 +850,7 @@ vlan_update(datalink_id_t vlanid, void *arg)
rcm_log_message(RCM_TRACE2, "VLAN: vlan_update(%u)\n", vlanid);
assert(MUTEX_HELD(&cache_lock));
- status = dladm_vlan_info(vlanid, &vlan_attr, DLADM_OPT_ACTIVE);
+ status = dladm_vlan_info(handle, vlanid, &vlan_attr, DLADM_OPT_ACTIVE);
if (status != DLADM_STATUS_OK) {
rcm_log_message(RCM_TRACE1,
"VLAN: vlan_update() cannot get vlan information for "
@@ -935,8 +942,8 @@ vlan_update_all(rcm_handle_t *hd)
assert(MUTEX_HELD(&cache_lock));
arg.hd = hd;
- (void) dladm_walk_datalink_id(vlan_update, &arg, DATALINK_CLASS_VLAN,
- DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
+ (void) dladm_walk_datalink_id(vlan_update, dld_handle, &arg,
+ DATALINK_CLASS_VLAN, DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
return (arg.retval);
}
@@ -1061,8 +1068,8 @@ vlan_log_err(datalink_id_t linkid, char **errorp, char *errmsg)
RCM_LINK_PREFIX, linkid);
rcm_log_message(RCM_ERROR, _("VLAN: %s(%s)\n"), errmsg, rsrc);
- if ((status = dladm_datalink_id2info(linkid, NULL, NULL,
- NULL, link, sizeof (link))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(dld_handle, linkid, NULL,
+ NULL, NULL, link, sizeof (link))) != DLADM_STATUS_OK) {
rcm_log_message(RCM_WARNING,
_("VLAN: cannot get link name for (%s) %s\n"),
rsrc, dladm_status2str(status, errstr));
@@ -1247,14 +1254,14 @@ typedef struct vlan_up_arg_s {
} vlan_up_arg_t;
static int
-vlan_up(datalink_id_t vlanid, void *arg)
+vlan_up(dladm_handle_t handle, datalink_id_t vlanid, void *arg)
{
vlan_up_arg_t *vlan_up_argp = arg;
dladm_status_t status;
dladm_vlan_attr_t vlan_attr;
char errmsg[DLADM_STRSIZE];
- status = dladm_vlan_info(vlanid, &vlan_attr, DLADM_OPT_PERSIST);
+ status = dladm_vlan_info(handle, vlanid, &vlan_attr, DLADM_OPT_PERSIST);
if (status != DLADM_STATUS_OK) {
rcm_log_message(RCM_TRACE1,
"VLAN: vlan_up(): cannot get information for VLAN %u "
@@ -1266,7 +1273,7 @@ vlan_up(datalink_id_t vlanid, void *arg)
return (DLADM_WALK_CONTINUE);
rcm_log_message(RCM_TRACE3, "VLAN: vlan_up(%u)\n", vlanid);
- if ((status = dladm_vlan_up(vlanid)) == DLADM_STATUS_OK)
+ if ((status = dladm_vlan_up(handle, vlanid)) == DLADM_STATUS_OK)
return (DLADM_WALK_CONTINUE);
/*
@@ -1307,8 +1314,8 @@ vlan_configure(rcm_handle_t *hd, datalink_id_t linkid)
(void) mutex_unlock(&cache_lock);
arg.linkid = linkid;
- (void) dladm_walk_datalink_id(vlan_up, &arg, DATALINK_CLASS_VLAN,
- DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
+ (void) dladm_walk_datalink_id(vlan_up, dld_handle, &arg,
+ DATALINK_CLASS_VLAN, DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
if (arg.retval == 0) {
rcm_log_message(RCM_TRACE2,
diff --git a/usr/src/cmd/rcm_daemon/common/vnic_rcm.c b/usr/src/cmd/rcm_daemon/common/vnic_rcm.c
index 178d3b44a8..9472cbe61c 100644
--- a/usr/src/cmd/rcm_daemon/common/vnic_rcm.c
+++ b/usr/src/cmd/rcm_daemon/common/vnic_rcm.c
@@ -98,6 +98,8 @@ static link_cache_t cache_tail;
static mutex_t cache_lock;
static int events_registered = 0;
+static dladm_handle_t dld_handle = NULL;
+
/*
* RCM module interface prototypes
*/
@@ -169,6 +171,8 @@ rcm_mod_init(void)
cache_tail.vc_next = NULL;
(void) mutex_init(&cache_lock, 0, NULL);
+ dladm_open(&dld_handle);
+
/* Return the ops vectors */
return (&vnic_ops);
}
@@ -200,6 +204,8 @@ rcm_mod_fini(void)
*/
cache_free();
(void) mutex_destroy(&cache_lock);
+
+ dladm_close(dld_handle);
return (RCM_SUCCESS);
}
@@ -396,8 +402,8 @@ vnic_online_vnic(link_cache_t *node)
if (!(vnic->dlv_flags & VNIC_OFFLINED))
continue;
- if ((status = dladm_vnic_up(vnic->dlv_vnic_id, 0)) !=
- DLADM_STATUS_OK) {
+ if ((status = dladm_vnic_up(dld_handle, vnic->dlv_vnic_id, 0))
+ != DLADM_STATUS_OK) {
/*
* Print a warning message and continue to online
* other VNICs.
@@ -427,7 +433,7 @@ vnic_offline_vnic(link_cache_t *node, uint32_t flags, cache_node_state_t state)
*/
for (vnic = node->vc_vnic; vnic != NULL; vnic = vnic->dlv_next) {
- if ((status = dladm_vnic_delete(vnic->dlv_vnic_id,
+ if ((status = dladm_vnic_delete(dld_handle, vnic->dlv_vnic_id,
DLADM_OPT_ACTIVE)) != DLADM_STATUS_OK) {
rcm_log_message(RCM_WARNING,
_("VNIC: VNIC offline failed (%u): %s\n"),
@@ -672,8 +678,8 @@ vnic_usage(link_cache_t *node)
rcm_log_message(RCM_TRACE2, "VNIC: usage(%s)\n", node->vc_resource);
assert(MUTEX_HELD(&cache_lock));
- if ((status = dladm_datalink_id2info(node->vc_linkid, NULL, NULL, NULL,
- name, sizeof (name))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(dld_handle, node->vc_linkid, NULL,
+ NULL, NULL, name, sizeof (name))) != DLADM_STATUS_OK) {
rcm_log_message(RCM_ERROR,
_("VNIC: usage(%s) get link name failure(%s)\n"),
node->vc_resource, dladm_status2str(status, errmsg));
@@ -713,8 +719,9 @@ vnic_usage(link_cache_t *node)
for (vnic = node->vc_vnic; vnic != NULL; vnic = vnic->dlv_next) {
rcm_log_message(RCM_DEBUG, "VNIC:= %u\n", vnic->dlv_vnic_id);
- if ((status = dladm_datalink_id2info(vnic->dlv_vnic_id, NULL,
- NULL, NULL, name, sizeof (name))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(dld_handle,
+ vnic->dlv_vnic_id, NULL, NULL, NULL, name, sizeof (name)))
+ != DLADM_STATUS_OK) {
rcm_log_message(RCM_ERROR,
_("VNIC: usage(%s) get vnic %u name failure(%s)\n"),
node->vc_resource, vnic->dlv_vnic_id,
@@ -830,7 +837,7 @@ typedef struct vnic_update_arg_s {
* vnic_update() - Update physical interface properties
*/
static int
-vnic_update(datalink_id_t vnicid, void *arg)
+vnic_update(dladm_handle_t handle, datalink_id_t vnicid, void *arg)
{
vnic_update_arg_t *vnic_update_argp = arg;
rcm_handle_t *hd = vnic_update_argp->hd;
@@ -846,7 +853,7 @@ vnic_update(datalink_id_t vnicid, void *arg)
rcm_log_message(RCM_TRACE2, "VNIC: vnic_update(%u)\n", vnicid);
assert(MUTEX_HELD(&cache_lock));
- status = dladm_vnic_info(vnicid, &vnic_attr, DLADM_OPT_ACTIVE);
+ status = dladm_vnic_info(handle, vnicid, &vnic_attr, DLADM_OPT_ACTIVE);
if (status != DLADM_STATUS_OK) {
rcm_log_message(RCM_TRACE1,
"VNIC: vnic_update() cannot get vnic information for "
@@ -947,8 +954,8 @@ vnic_update_all(rcm_handle_t *hd)
assert(MUTEX_HELD(&cache_lock));
arg.hd = hd;
- (void) dladm_walk_datalink_id(vnic_update, &arg, DATALINK_CLASS_VNIC,
- DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
+ (void) dladm_walk_datalink_id(vnic_update, dld_handle, &arg,
+ DATALINK_CLASS_VNIC, DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
return (arg.retval);
}
@@ -1073,8 +1080,8 @@ vnic_log_err(datalink_id_t linkid, char **errorp, char *errmsg)
RCM_LINK_PREFIX, linkid);
rcm_log_message(RCM_ERROR, _("VNIC: %s(%s)\n"), errmsg, rsrc);
- if ((status = dladm_datalink_id2info(linkid, NULL, NULL,
- NULL, link, sizeof (link))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(dld_handle, linkid, NULL,
+ NULL, NULL, link, sizeof (link))) != DLADM_STATUS_OK) {
rcm_log_message(RCM_WARNING,
_("VNIC: cannot get link name for (%s) %s\n"),
rsrc, dladm_status2str(status, errstr));
@@ -1258,14 +1265,14 @@ typedef struct vnic_up_arg_s {
} vnic_up_arg_t;
static int
-vnic_up(datalink_id_t vnicid, void *arg)
+vnic_up(dladm_handle_t handle, datalink_id_t vnicid, void *arg)
{
vnic_up_arg_t *vnic_up_argp = arg;
dladm_status_t status;
dladm_vnic_attr_t vnic_attr;
char errmsg[DLADM_STRSIZE];
- status = dladm_vnic_info(vnicid, &vnic_attr, DLADM_OPT_PERSIST);
+ status = dladm_vnic_info(handle, vnicid, &vnic_attr, DLADM_OPT_PERSIST);
if (status != DLADM_STATUS_OK) {
rcm_log_message(RCM_TRACE1,
"VNIC: vnic_up(): cannot get information for VNIC %u "
@@ -1277,7 +1284,7 @@ vnic_up(datalink_id_t vnicid, void *arg)
return (DLADM_WALK_CONTINUE);
rcm_log_message(RCM_TRACE3, "VNIC: vnic_up(%u)\n", vnicid);
- if ((status = dladm_vnic_up(vnicid, 0)) == DLADM_STATUS_OK)
+ if ((status = dladm_vnic_up(handle, vnicid, 0)) == DLADM_STATUS_OK)
return (DLADM_WALK_CONTINUE);
/*
@@ -1318,8 +1325,8 @@ vnic_configure(rcm_handle_t *hd, datalink_id_t linkid)
(void) mutex_unlock(&cache_lock);
arg.linkid = linkid;
- (void) dladm_walk_datalink_id(vnic_up, &arg, DATALINK_CLASS_VNIC,
- DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
+ (void) dladm_walk_datalink_id(vnic_up, dld_handle, &arg,
+ DATALINK_CLASS_VNIC, DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
if (arg.retval == 0) {
rcm_log_message(RCM_TRACE2,
diff --git a/usr/src/cmd/vna/vna.c b/usr/src/cmd/vna/vna.c
index 6a05cf1777..6dcec3e172 100644
--- a/usr/src/cmd/vna/vna.c
+++ b/usr/src/cmd/vna/vna.c
@@ -44,13 +44,13 @@ typedef struct vnic_attr {
/*ARGSUSED*/
static int
-v_print(datalink_id_t vnic_id, void *arg)
+v_print(dladm_handle_t handle, datalink_id_t vnic_id, void *arg)
{
dladm_vnic_attr_t attr;
char vnic[MAXLINKNAMELEN];
char link[MAXLINKNAMELEN];
- if (dladm_vnic_info(vnic_id, &attr, DLADM_OPT_ACTIVE) !=
+ if (dladm_vnic_info(handle, vnic_id, &attr, DLADM_OPT_ACTIVE) !=
DLADM_STATUS_OK) {
return (DLADM_WALK_CONTINUE);
}
@@ -58,13 +58,13 @@ v_print(datalink_id_t vnic_id, void *arg)
if (attr.va_mac_len != ETHERADDRL)
return (DLADM_WALK_CONTINUE);
- if (dladm_datalink_id2info(vnic_id, NULL, NULL, NULL, vnic,
+ if (dladm_datalink_id2info(handle, vnic_id, NULL, NULL, NULL, vnic,
sizeof (vnic)) != DLADM_STATUS_OK) {
return (DLADM_WALK_CONTINUE);
}
- if (dladm_datalink_id2info(attr.va_link_id, NULL, NULL, NULL, link,
- sizeof (link)) != DLADM_STATUS_OK) {
+ if (dladm_datalink_id2info(handle, attr.va_link_id, NULL, NULL, NULL,
+ link, sizeof (link)) != DLADM_STATUS_OK) {
return (DLADM_WALK_CONTINUE);
}
@@ -75,21 +75,21 @@ v_print(datalink_id_t vnic_id, void *arg)
}
static void
-v_list(void)
+v_list(dladm_handle_t handle)
{
- (void) dladm_walk_datalink_id(v_print, NULL, DATALINK_CLASS_VNIC,
- DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
+ (void) dladm_walk_datalink_id(v_print, handle, NULL,
+ DATALINK_CLASS_VNIC, DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
}
static int
-v_find(datalink_id_t vnic_id, void *arg)
+v_find(dladm_handle_t handle, datalink_id_t vnic_id, void *arg)
{
vnic_attr_t *vattr = arg;
dladm_vnic_attr_t *specp = &vattr->attr;
dladm_vnic_attr_t attr;
char linkname[MAXLINKNAMELEN];
- if (dladm_vnic_info(vnic_id, &attr, DLADM_OPT_ACTIVE) !=
+ if (dladm_vnic_info(handle, vnic_id, &attr, DLADM_OPT_ACTIVE) !=
DLADM_STATUS_OK) {
return (DLADM_WALK_CONTINUE);
}
@@ -107,8 +107,8 @@ v_find(datalink_id_t vnic_id, void *arg)
if (vattr->name != NULL) {
/* Names must match. */
- if (dladm_datalink_id2info(vnic_id, NULL, NULL, NULL, linkname,
- sizeof (linkname)) != DLADM_STATUS_OK) {
+ if (dladm_datalink_id2info(handle, vnic_id, NULL, NULL, NULL,
+ linkname, sizeof (linkname)) != DLADM_STATUS_OK) {
return (DLADM_WALK_CONTINUE);
}
@@ -178,7 +178,7 @@ v_broadcast(char *link)
* Print out the link name of the VNIC.
*/
static int
-v_add(char *link, char *addr, char *name)
+v_add(dladm_handle_t handle, char *link, char *addr, char *name)
{
struct ether_addr *ea;
vnic_attr_t vattr;
@@ -194,7 +194,7 @@ v_add(char *link, char *addr, char *name)
return (-1);
}
- if (dladm_name2info(link, &linkid, NULL, NULL, NULL) !=
+ if (dladm_name2info(handle, link, &linkid, NULL, NULL, NULL) !=
DLADM_STATUS_OK) {
(void) fprintf(stderr, "Invalid link name: %s\n", link);
return (-1);
@@ -211,13 +211,13 @@ v_add(char *link, char *addr, char *name)
vattr.attr.va_mac_len);
vattr.name = name;
- (void) dladm_walk_datalink_id(v_find, &vattr, DATALINK_CLASS_VNIC,
- DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
+ (void) dladm_walk_datalink_id(v_find, handle, &vattr,
+ DATALINK_CLASS_VNIC, DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
if (vattr.attr.va_vnic_id == DATALINK_INVALID_LINKID) {
/*
* None found, so create.
*/
- status = dladm_vnic_create(name, linkid,
+ status = dladm_vnic_create(handle, name, linkid,
VNIC_MAC_ADDR_TYPE_FIXED, (uchar_t *)ea->ether_addr_octet,
ETHERADDRL, NULL, 0, 0, &vnic_id, NULL, DLADM_OPT_ACTIVE);
@@ -231,12 +231,13 @@ v_add(char *link, char *addr, char *name)
vnic_id = vattr.attr.va_vnic_id;
}
- if ((status = dladm_datalink_id2info(vnic_id, NULL, NULL, NULL, vnic,
- sizeof (vnic))) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(handle, vnic_id, NULL, NULL, NULL,
+ vnic, sizeof (vnic))) != DLADM_STATUS_OK) {
(void) fprintf(stderr, "dladm_datalink_id2info: %s\n",
dladm_status2str(status, buf));
if (vattr.attr.va_vnic_id == DATALINK_INVALID_LINKID)
- (void) dladm_vnic_delete(vnic_id, DLADM_OPT_ACTIVE);
+ (void) dladm_vnic_delete(handle, vnic_id,
+ DLADM_OPT_ACTIVE);
return (-1);
}
@@ -257,20 +258,20 @@ v_add(char *link, char *addr, char *name)
* v_remove() takes VNIC link name as the argument.
*/
static int
-v_remove(char *vnic)
+v_remove(dladm_handle_t handle, char *vnic)
{
datalink_id_t vnic_id;
dladm_status_t status;
char buf[DLADM_STRSIZE];
- if ((status = dladm_name2info(vnic, &vnic_id, NULL, NULL, NULL)) !=
- DLADM_STATUS_OK) {
+ if ((status = dladm_name2info(handle, vnic, &vnic_id, NULL, NULL,
+ NULL)) != DLADM_STATUS_OK) {
(void) fprintf(stderr, "dladm_name2info: %s\n",
dladm_status2str(status, buf));
return (-1);
}
- status = dladm_vnic_delete(vnic_id, DLADM_OPT_ACTIVE);
+ status = dladm_vnic_delete(handle, vnic_id, DLADM_OPT_ACTIVE);
if (status != DLADM_STATUS_OK) {
(void) fprintf(stderr, "dladm_vnic_delete: %s\n",
@@ -284,27 +285,37 @@ v_remove(char *vnic)
int
main(int argc, char *argv[])
{
+ dladm_handle_t handle;
+ int ret;
+
+ if (dladm_open(&handle) != DLADM_STATUS_OK) {
+ (void) fprintf(stderr, "Failed to open dladm handle\n");
+ return (-1);
+ }
+
switch (argc) {
case 1:
/* List operation. */
- v_list();
- return (0);
- /* NOTREACHED */
+ v_list(handle);
+ ret = 0;
+ break;
case 2:
/* Remove operation. */
- return (v_remove(argv[1]));
- /* NOTREACHED */
+ ret = v_remove(handle, argv[1]);
+ break;
case 3:
case 4:
/* Add operation. */
- return (v_add(argv[1], argv[2], (argc == 3 ? NULL : argv[3])));
- /* NOTREACHED */
+ ret = v_add(handle, argv[1], argv[2],
+ (argc == 3 ? NULL : argv[3]));
+ break;
default:
(void) fprintf(stderr, "Incorrect number of arguments - "
"must have 0, 1, 2 or 3.\n");
- return (-1);
- /* NOTREACHED */
+ ret = -1;
+ break;
}
- /* NOTREACHED */
+ dladm_close(handle);
+ return (ret);
}
diff --git a/usr/src/cmd/zoneadmd/vplat.c b/usr/src/cmd/zoneadmd/vplat.c
index 622a8b6787..72b6ce5c76 100644
--- a/usr/src/cmd/zoneadmd/vplat.c
+++ b/usr/src/cmd/zoneadmd/vplat.c
@@ -2526,7 +2526,7 @@ add_datalink(zlog_t *zlogp, char *zone_name, char *dlname)
}
/* Set zoneid of this link. */
- if (dladm_setzid(dlname, zone_name) != DLADM_STATUS_OK) {
+ if (dladm_setzid(dld_handle, dlname, zone_name) != DLADM_STATUS_OK) {
zerror(zlogp, B_TRUE, "WARNING: unable to add network "
"interface '%s'.", dlname);
return (-1);
@@ -2538,7 +2538,7 @@ add_datalink(zlog_t *zlogp, char *zone_name, char *dlname)
static int
remove_datalink(zlog_t *zlogp, char *dlname)
{
- if (dladm_setzid(dlname, GLOBAL_ZONENAME)
+ if (dladm_setzid(dld_handle, dlname, GLOBAL_ZONENAME)
!= DLADM_STATUS_OK) {
zerror(zlogp, B_TRUE, "unable to release network "
"interface '%s'", dlname);
diff --git a/usr/src/cmd/zoneadmd/zoneadmd.c b/usr/src/cmd/zoneadmd/zoneadmd.c
index f5646878a5..813369a773 100644
--- a/usr/src/cmd/zoneadmd/zoneadmd.c
+++ b/usr/src/cmd/zoneadmd/zoneadmd.c
@@ -107,6 +107,7 @@ char brand_name[MAXNAMELEN];
boolean_t zone_isnative;
boolean_t zone_iscluster;
static zoneid_t zone_id;
+dladm_handle_t dld_handle = NULL;
static char pre_statechg_hook[2 * MAXPATHLEN];
static char post_statechg_hook[2 * MAXPATHLEN];
@@ -1925,6 +1926,12 @@ main(int argc, char *argv[])
goto child_out;
}
+ /* open the dladm handle */
+ if (dladm_open(&dld_handle) != DLADM_STATUS_OK) {
+ zerror(zlogp, B_FALSE, "failed to open dladm handle");
+ goto child_out;
+ }
+
/*
* Note: door setup must occur *after* the console is setup.
* This is so that as zlogin tests the door to see if zoneadmd
@@ -1984,6 +1991,7 @@ main(int argc, char *argv[])
*/
assert(!MUTEX_HELD(&lock));
(void) fdetach(zone_door_path);
+
for (;;)
(void) pause();
@@ -2006,5 +2014,9 @@ child_out:
(void) door_revoke(zone_door);
(void) fdetach(zone_door_path);
}
+
+ if (dld_handle != NULL)
+ dladm_close(dld_handle);
+
return (1); /* return from main() forcibly exits an MT process */
}
diff --git a/usr/src/cmd/zoneadmd/zoneadmd.h b/usr/src/cmd/zoneadmd/zoneadmd.h
index 4b89eead78..97b5cc6d1e 100644
--- a/usr/src/cmd/zoneadmd/zoneadmd.h
+++ b/usr/src/cmd/zoneadmd/zoneadmd.h
@@ -31,6 +31,8 @@
extern "C" {
#endif
+#include <libdladm.h>
+
/*
* Multi-threaded programs should avoid MT-unsafe library calls (i.e., any-
* thing which could try to acquire a user-level lock unprotected by an atfork
@@ -87,6 +89,7 @@ extern char boot_args[BOOTARGS_MAX];
extern char bad_boot_arg[BOOTARGS_MAX];
extern boolean_t zone_isnative;
extern boolean_t zone_iscluster;
+extern dladm_handle_t dld_handle;
extern void zerror(zlog_t *, boolean_t, const char *, ...);
extern char *localize_msg(char *locale, const char *msg);
diff --git a/usr/src/lib/libdladm/common/flowprop.c b/usr/src/lib/libdladm/common/flowprop.c
index a2125a9d33..d61be6236b 100644
--- a/usr/src/lib/libdladm/common/flowprop.c
+++ b/usr/src/lib/libdladm/common/flowprop.c
@@ -46,10 +46,10 @@
*/
#define DLADM_PROP_VAL_MAX 32
-static dladm_status_t i_dladm_set_flowprop_db(const char *, const char *,
- char **, uint_t);
-static dladm_status_t i_dladm_get_flowprop_db(const char *, const char *,
- char **, uint_t *);
+static dladm_status_t i_dladm_set_flowprop_db(dladm_handle_t, const char *,
+ const char *, char **, uint_t);
+static dladm_status_t i_dladm_get_flowprop_db(dladm_handle_t, const char *,
+ const char *, char **, uint_t *);
static fpd_getf_t do_get_maxbw;
static fpd_setf_t do_set_maxbw;
@@ -85,8 +85,9 @@ static resource_prop_t rsrc_prop_table[] = {
static dladm_status_t flow_proplist_check(dladm_arg_list_t *);
dladm_status_t
-dladm_set_flowprop(const char *flow, const char *prop_name, char **prop_val,
- uint_t val_cnt, uint_t flags, char **errprop)
+dladm_set_flowprop(dladm_handle_t handle, const char *flow,
+ const char *prop_name, char **prop_val, uint_t val_cnt, uint_t flags,
+ char **errprop)
{
dladm_status_t status = DLADM_STATUS_BADARG;
@@ -95,8 +96,8 @@ dladm_set_flowprop(const char *flow, const char *prop_name, char **prop_val,
return (DLADM_STATUS_BADARG);
if ((flags & DLADM_OPT_ACTIVE) != 0) {
- status = i_dladm_set_prop_temp(flow, prop_name, prop_val,
- val_cnt, flags, errprop, &prop_tbl);
+ status = i_dladm_set_prop_temp(handle, flow, prop_name,
+ prop_val, val_cnt, flags, errprop, &prop_tbl);
if (status == DLADM_STATUS_TEMPONLY &&
(flags & DLADM_OPT_PERSIST) != 0)
return (DLADM_STATUS_TEMPONLY);
@@ -107,7 +108,7 @@ dladm_set_flowprop(const char *flow, const char *prop_name, char **prop_val,
if (i_dladm_is_prop_temponly(prop_name, errprop, &prop_tbl))
return (DLADM_STATUS_TEMPONLY);
- status = i_dladm_set_flowprop_db(flow, prop_name,
+ status = i_dladm_set_flowprop_db(handle, flow, prop_name,
prop_val, val_cnt);
}
return (status);
@@ -131,7 +132,7 @@ dladm_walk_flowprop(int (*func)(void *, const char *), const char *flow,
}
dladm_status_t
-dladm_get_flowprop(const char *flow, uint32_t type,
+dladm_get_flowprop(dladm_handle_t handle, const char *flow, uint32_t type,
const char *prop_name, char **prop_val, uint_t *val_cntp)
{
dladm_status_t status;
@@ -143,11 +144,11 @@ dladm_get_flowprop(const char *flow, uint32_t type,
if (type == DLADM_PROP_VAL_PERSISTENT) {
if (i_dladm_is_prop_temponly(prop_name, NULL, &prop_tbl))
return (DLADM_STATUS_TEMPONLY);
- return (i_dladm_get_flowprop_db(flow, prop_name,
+ return (i_dladm_get_flowprop_db(handle, flow, prop_name,
prop_val, val_cntp));
}
- status = i_dladm_get_prop_temp(flow, type, prop_name,
+ status = i_dladm_get_prop_temp(handle, flow, type, prop_name,
prop_val, val_cntp, &prop_tbl);
if (status != DLADM_STATUS_NOTFOUND)
return (status);
@@ -155,14 +156,14 @@ dladm_get_flowprop(const char *flow, uint32_t type,
return (DLADM_STATUS_BADARG);
}
-#define FLOWPROP_RW_DB(statep, writeop) \
- (i_dladm_rw_db("/etc/dladm/flowprop.conf", \
+#define FLOWPROP_RW_DB(handle, statep, writeop) \
+ (i_dladm_rw_db(handle, "/etc/dladm/flowprop.conf", \
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH, process_prop_db, \
(statep), (writeop)))
static dladm_status_t
-i_dladm_set_flowprop_db(const char *flow, const char *prop_name,
- char **prop_val, uint_t val_cnt)
+i_dladm_set_flowprop_db(dladm_handle_t handle, const char *flow,
+ const char *prop_name, char **prop_val, uint_t val_cnt)
{
prop_db_state_t state;
@@ -173,12 +174,12 @@ i_dladm_set_flowprop_db(const char *flow, const char *prop_name,
state.ls_valcntp = &val_cnt;
state.ls_initop = NULL;
- return (FLOWPROP_RW_DB(&state, B_TRUE));
+ return (FLOWPROP_RW_DB(handle, &state, B_TRUE));
}
static dladm_status_t
-i_dladm_get_flowprop_db(const char *flow, const char *prop_name,
- char **prop_val, uint_t *val_cntp)
+i_dladm_get_flowprop_db(dladm_handle_t handle, const char *flow,
+ const char *prop_name, char **prop_val, uint_t *val_cntp)
{
prop_db_state_t state;
@@ -189,11 +190,11 @@ i_dladm_get_flowprop_db(const char *flow, const char *prop_name,
state.ls_valcntp = val_cntp;
state.ls_initop = NULL;
- return (FLOWPROP_RW_DB(&state, B_FALSE));
+ return (FLOWPROP_RW_DB(handle, &state, B_FALSE));
}
dladm_status_t
-i_dladm_init_flowprop_db(void)
+i_dladm_init_flowprop_db(dladm_handle_t handle)
{
prop_db_state_t state;
@@ -204,34 +205,30 @@ i_dladm_init_flowprop_db(void)
state.ls_valcntp = NULL;
state.ls_initop = dladm_set_flowprop;
- return (FLOWPROP_RW_DB(&state, B_FALSE));
+ return (FLOWPROP_RW_DB(handle, &state, B_FALSE));
}
#define MIN_INFO_SIZE (4 * 1024)
dladm_status_t
-dladm_flow_info(const char *flow, dladm_flow_attr_t *attr)
+dladm_flow_info(dladm_handle_t handle, const char *flow,
+ dladm_flow_attr_t *attr)
{
dld_ioc_walkflow_t *ioc;
- int bufsize, fd;
+ int bufsize;
dld_flowinfo_t *flowinfo;
if ((flow == NULL) || (attr == NULL))
return (DLADM_STATUS_BADARG);
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (dladm_errno2status(errno));
-
bufsize = MIN_INFO_SIZE;
- if ((ioc = calloc(1, bufsize)) == NULL) {
- (void) close(fd);
+ if ((ioc = calloc(1, bufsize)) == NULL)
return (dladm_errno2status(errno));
- }
(void) strlcpy(ioc->wf_name, flow, sizeof (ioc->wf_name));
ioc->wf_len = bufsize - sizeof (*ioc);
- while (ioctl(fd, DLDIOC_WALKFLOW, ioc) < 0) {
+ while (ioctl(dladm_dld_fd(handle), DLDIOC_WALKFLOW, ioc) < 0) {
if (errno == ENOSPC) {
bufsize *= 2;
ioc = realloc(ioc, bufsize);
@@ -243,7 +240,6 @@ dladm_flow_info(const char *flow, dladm_flow_attr_t *attr)
}
}
free(ioc);
- (void) close(fd);
return (dladm_errno2status(errno));
}
@@ -260,20 +256,20 @@ dladm_flow_info(const char *flow, dladm_flow_attr_t *attr)
sizeof (attr->fa_resource_props));
free(ioc);
- (void) close(fd);
return (DLADM_STATUS_OK);
}
/* ARGSUSED */
static dladm_status_t
-do_get_maxbw(const char *flow, char **prop_val, uint_t *val_cnt)
+do_get_maxbw(dladm_handle_t handle, const char *flow, char **prop_val,
+ uint_t *val_cnt)
{
mac_resource_props_t *mrp;
char buf[DLADM_STRSIZE];
dladm_flow_attr_t fa;
dladm_status_t status;
- status = dladm_flow_info(flow, &fa);
+ status = dladm_flow_info(handle, flow, &fa);
if (status != DLADM_STATUS_OK)
return (status);
mrp = &(fa.fa_resource_props);
@@ -290,10 +286,10 @@ do_get_maxbw(const char *flow, char **prop_val, uint_t *val_cnt)
/* ARGSUSED */
static dladm_status_t
-do_set_maxbw(const char *flow, val_desc_t *vdp, uint_t val_cnt)
+do_set_maxbw(dladm_handle_t handle, const char *flow, val_desc_t *vdp,
+ uint_t val_cnt)
{
dld_ioc_modifyflow_t attr;
- int fd;
mac_resource_props_t mrp;
void *val;
@@ -313,16 +309,9 @@ do_set_maxbw(const char *flow, val_desc_t *vdp, uint_t val_cnt)
(void) strlcpy(attr.mf_name, flow, sizeof (attr.mf_name));
bcopy(&mrp, &attr.mf_resource_props, sizeof (mac_resource_props_t));
- fd = open(DLD_CONTROL_DEV, O_RDWR);
- if (fd < 0) {
+ if (ioctl(dladm_dld_fd(handle), DLDIOC_MODIFYFLOW, &attr) < 0)
return (dladm_errno2status(errno));
- }
- if (ioctl(fd, DLDIOC_MODIFYFLOW, &attr) < 0) {
- (void) close(fd);
- return (dladm_errno2status(errno));
- }
- (void) close(fd);
return (DLADM_STATUS_OK);
}
@@ -366,7 +355,8 @@ do_check_maxbw(fprop_desc_t *pdp, char **prop_val, uint_t val_cnt,
/* ARGSUSED */
static dladm_status_t
-do_get_priority(const char *flow, char **prop_val, uint_t *val_cnt)
+do_get_priority(dladm_handle_t handle, const char *flow, char **prop_val,
+ uint_t *val_cnt)
{
mac_resource_props_t *mrp;
char buf[DLADM_STRSIZE];
@@ -374,7 +364,7 @@ do_get_priority(const char *flow, char **prop_val, uint_t *val_cnt)
dladm_status_t status;
bzero(&fa, sizeof (dladm_flow_attr_t));
- status = dladm_flow_info(flow, &fa);
+ status = dladm_flow_info(handle, flow, &fa);
if (status != DLADM_STATUS_OK)
return (status);
mrp = &(fa.fa_resource_props);
@@ -391,10 +381,10 @@ do_get_priority(const char *flow, char **prop_val, uint_t *val_cnt)
/* ARGSUSED */
static dladm_status_t
-do_set_priority(const char *flow, val_desc_t *vdp, uint_t val_cnt)
+do_set_priority(dladm_handle_t handle, const char *flow, val_desc_t *vdp,
+ uint_t val_cnt)
{
dld_ioc_modifyflow_t attr;
- int fd;
mac_resource_props_t mrp;
void *val;
@@ -414,16 +404,9 @@ do_set_priority(const char *flow, val_desc_t *vdp, uint_t val_cnt)
(void) strlcpy(attr.mf_name, flow, sizeof (attr.mf_name));
bcopy(&mrp, &attr.mf_resource_props, sizeof (mac_resource_props_t));
- fd = open(DLD_CONTROL_DEV, O_RDWR);
- if (fd < 0) {
+ if (ioctl(dladm_dld_fd(handle), DLDIOC_MODIFYFLOW, &attr) < 0)
return (dladm_errno2status(errno));
- }
- if (ioctl(fd, DLDIOC_MODIFYFLOW, &attr) < 0) {
- (void) close(fd);
- return (dladm_errno2status(errno));
- }
- (void) close(fd);
return (DLADM_STATUS_OK);
}
@@ -594,7 +577,8 @@ dladm_flow_proplist_extract(dladm_arg_list_t *proplist,
}
dladm_status_t
-i_dladm_set_flow_proplist_db(char *flow, dladm_arg_list_t *proplist)
+i_dladm_set_flow_proplist_db(dladm_handle_t handle, char *flow,
+ dladm_arg_list_t *proplist)
{
dladm_status_t status, ssave = DLADM_STATUS_OK;
dladm_arg_info_t ai;
@@ -602,7 +586,7 @@ i_dladm_set_flow_proplist_db(char *flow, dladm_arg_list_t *proplist)
for (i = 0; i < proplist->al_count; i++) {
ai = proplist->al_info[i];
- status = i_dladm_set_flowprop_db(flow, ai.ai_name,
+ status = i_dladm_set_flowprop_db(handle, flow, ai.ai_name,
ai.ai_val, ai.ai_count);
if (status != DLADM_STATUS_OK)
ssave = status;
diff --git a/usr/src/lib/libdladm/common/libdladm.c b/usr/src/lib/libdladm/common/libdladm.c
index cc6bf542f7..7eeed7e91f 100644
--- a/usr/src/lib/libdladm/common/libdladm.c
+++ b/usr/src/lib/libdladm/common/libdladm.c
@@ -32,11 +32,77 @@
#include <stdlib.h>
#include <sys/param.h>
#include <sys/stat.h>
+#include <sys/dld.h>
#include <libdladm_impl.h>
#include <libintl.h>
#include <libdlpi.h>
-static char dladm_rootdir[MAXPATHLEN] = "/";
+static char dladm_rootdir[MAXPATHLEN] = "/";
+
+dladm_status_t
+dladm_open(dladm_handle_t *handle)
+{
+ int dld_fd;
+
+ if (handle == NULL)
+ return (DLADM_STATUS_BADARG);
+
+ if ((dld_fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
+ return (dladm_errno2status(errno));
+
+ /*
+ * Don't open DLMGMT_DOOR now. dlmgmtd(1M) is not able to
+ * open the door when the dladm handle is opened because the
+ * door hasn't been created yet at that time. Thus, we must
+ * open it on-demand in dladm_door_fd(). Move the open()
+ * to dladm_door_fd() for all cases.
+ */
+
+ if ((*handle = malloc(sizeof (struct dladm_handle))) == NULL) {
+ (void) close(dld_fd);
+ return (DLADM_STATUS_NOMEM);
+ }
+
+ (*handle)->dld_fd = dld_fd;
+ (*handle)->door_fd = -1;
+
+ return (DLADM_STATUS_OK);
+}
+
+void
+dladm_close(dladm_handle_t handle)
+{
+ if (handle != NULL) {
+ (void) close(handle->dld_fd);
+ if (handle->door_fd != -1)
+ (void) close(handle->door_fd);
+ free(handle);
+ }
+}
+
+int
+dladm_dld_fd(dladm_handle_t handle)
+{
+ return (handle->dld_fd);
+}
+
+/*
+ * If DLMGMT_DOOR hasn't been opened in the handle yet, open it.
+ */
+dladm_status_t
+dladm_door_fd(dladm_handle_t handle, int *door_fd)
+{
+ int fd;
+
+ if (handle->door_fd == -1) {
+ if ((fd = open(DLMGMT_DOOR, O_RDONLY)) < 0)
+ return (dladm_errno2status(errno));
+ handle->door_fd = fd;
+ }
+ *door_fd = handle->door_fd;
+
+ return (DLADM_STATUS_OK);
+}
const char *
dladm_status2str(dladm_status_t status, char *buf)
@@ -557,8 +623,8 @@ dladm_media2str(uint32_t media, char *buf)
}
dladm_status_t
-i_dladm_rw_db(const char *db_file, mode_t db_perms,
- dladm_status_t (*process_db)(void *, FILE *, FILE *),
+i_dladm_rw_db(dladm_handle_t handle, const char *db_file, mode_t db_perms,
+ dladm_status_t (*process_db)(dladm_handle_t, void *, FILE *, FILE *),
void *arg, boolean_t writeop)
{
dladm_status_t status = DLADM_STATUS_OK;
@@ -613,7 +679,7 @@ i_dladm_rw_db(const char *db_file, mode_t db_perms,
return (dladm_errno2status(errno));
}
}
- status = (*process_db)(arg, fp, nfp);
+ status = (*process_db)(handle, arg, fp, nfp);
if (!writeop || status != DLADM_STATUS_OK)
goto done;
diff --git a/usr/src/lib/libdladm/common/libdladm.h b/usr/src/lib/libdladm/common/libdladm.h
index a76245d478..c0725cf45f 100644
--- a/usr/src/lib/libdladm/common/libdladm.h
+++ b/usr/src/lib/libdladm/common/libdladm.h
@@ -160,6 +160,20 @@ typedef enum {
typedef int dladm_conf_t;
#define DLADM_INVALID_CONF 0
+/* opaque dladm handle to libdladm functions */
+struct dladm_handle;
+typedef struct dladm_handle *dladm_handle_t;
+
+/* open/close handle */
+extern dladm_status_t dladm_open(dladm_handle_t *);
+extern void dladm_close(dladm_handle_t);
+
+/*
+ * retrieve the dld file descriptor from handle, only libdladm and
+ * dlmgmtd are given access to the door file descriptor.
+ */
+extern int dladm_dld_fd(dladm_handle_t);
+
typedef struct dladm_arg_info {
const char *ai_name;
char *ai_val[DLADM_MAX_ARG_VALS];
@@ -207,8 +221,9 @@ extern dladm_status_t dladm_parse_flow_attrs(char *, dladm_arg_list_t **,
boolean_t);
extern void dladm_free_attrs(dladm_arg_list_t *);
-extern dladm_status_t dladm_start_usagelog(dladm_logtype_t, uint_t);
-extern dladm_status_t dladm_stop_usagelog(dladm_logtype_t);
+extern dladm_status_t dladm_start_usagelog(dladm_handle_t, dladm_logtype_t,
+ uint_t);
+extern dladm_status_t dladm_stop_usagelog(dladm_handle_t, dladm_logtype_t);
extern dladm_status_t dladm_walk_usage_res(int (*)(dladm_usage_t *, void *),
int, char *, char *, char *, char *, void *);
extern dladm_status_t dladm_walk_usage_time(int (*)(dladm_usage_t *, void *),
diff --git a/usr/src/lib/libdladm/common/libdladm_impl.h b/usr/src/lib/libdladm/common/libdladm_impl.h
index cf57e1d49e..eb631fef7d 100644
--- a/usr/src/lib/libdladm/common/libdladm_impl.h
+++ b/usr/src/lib/libdladm/common/libdladm_impl.h
@@ -36,11 +36,26 @@ extern "C" {
#define MAXLINELEN 1024
#define BUFLEN(lim, ptr) (((lim) > (ptr)) ? ((lim) - (ptr)) : 0)
+/*
+ * The handle contains file descriptors to DLD_CONTROL_DEV and
+ * DLMGMT_DOOR. Rather than opening the file descriptor each time
+ * it is required, the handle is opened by consumers of libdladm
+ * (e.g., dladm) and then passed to libdladm.
+ */
+struct dladm_handle {
+ int dld_fd; /* file descriptor to DLD_CONTROL_DEV */
+ int door_fd; /* file descriptor to DLMGMT_DOOR */
+};
+
+/* DLMGMT_DOOR can only be accessed by libdladm and dlmgmtd */
+extern dladm_status_t dladm_door_fd(dladm_handle_t, int *);
+
extern dladm_status_t dladm_errno2status(int);
-extern dladm_status_t i_dladm_rw_db(const char *, mode_t,
- dladm_status_t (*)(void *, FILE *, FILE *),
- void *, boolean_t);
-extern dladm_status_t i_dladm_get_state(datalink_id_t, link_state_t *);
+extern dladm_status_t i_dladm_rw_db(dladm_handle_t, const char *, mode_t,
+ dladm_status_t (*)(dladm_handle_t, void *, FILE *,
+ FILE *), void *, boolean_t);
+extern dladm_status_t i_dladm_get_state(dladm_handle_t, datalink_id_t,
+ link_state_t *);
extern const char *dladm_pri2str(mac_priority_level_t, char *);
extern dladm_status_t dladm_str2pri(char *, mac_priority_level_t *);
@@ -94,8 +109,8 @@ typedef struct val_desc {
#define VALCNT(vals) (sizeof ((vals)) / sizeof (val_desc_t))
-extern dladm_status_t dladm_link_proplist_extract(dladm_arg_list_t *,
- mac_resource_props_t *);
+extern dladm_status_t dladm_link_proplist_extract(dladm_handle_t,
+ dladm_arg_list_t *, mac_resource_props_t *);
extern dladm_status_t dladm_flow_proplist_extract(dladm_arg_list_t *,
mac_resource_props_t *);
diff --git a/usr/src/lib/libdladm/common/libdlaggr.c b/usr/src/lib/libdladm/common/libdlaggr.c
index 5a155fcad9..a1e58b469b 100644
--- a/usr/src/lib/libdladm/common/libdlaggr.c
+++ b/usr/src/lib/libdladm/common/libdlaggr.c
@@ -137,17 +137,9 @@ static dladm_aggr_port_state_t port_states[] = {
(sizeof (port_states) / sizeof (dladm_aggr_port_state_t))
static int
-i_dladm_aggr_ioctl(int cmd, void *ptr)
+i_dladm_aggr_ioctl(dladm_handle_t handle, int cmd, void *ptr)
{
- int err, fd;
-
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (-1);
-
- err = ioctl(fd, cmd, ptr);
- (void) close(fd);
-
- return (err);
+ return (ioctl(dladm_dld_fd(handle), cmd, ptr));
}
/*
@@ -207,7 +199,8 @@ fail:
* Caller must free attrp->la_ports.
*/
static dladm_status_t
-i_dladm_aggr_info_active(datalink_id_t linkid, dladm_aggr_grp_attr_t *attrp)
+i_dladm_aggr_info_active(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_aggr_grp_attr_t *attrp)
{
laioc_info_t *ioc;
int bufsize;
@@ -223,7 +216,7 @@ i_dladm_aggr_info_active(datalink_id_t linkid, dladm_aggr_grp_attr_t *attrp)
tryagain:
ioc->li_bufsize = bufsize;
- if (i_dladm_aggr_ioctl(LAIOC_INFO, ioc) != 0) {
+ if (i_dladm_aggr_ioctl(handle, LAIOC_INFO, ioc) != 0) {
if (errno == ENOSPC) {
/*
* The LAIOC_INFO call failed due to a short
@@ -261,7 +254,8 @@ bail:
* Caller must free attrp->la_ports.
*/
static dladm_status_t
-i_dladm_aggr_info_persist(datalink_id_t linkid, dladm_aggr_grp_attr_t *attrp)
+i_dladm_aggr_info_persist(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_aggr_grp_attr_t *attrp)
{
dladm_conf_t conf;
uint32_t nports, i;
@@ -272,29 +266,31 @@ i_dladm_aggr_info_persist(datalink_id_t linkid, dladm_aggr_grp_attr_t *attrp)
char macstr[ETHERADDRL * 3];
attrp->lg_linkid = linkid;
- if ((status = dladm_read_conf(linkid, &conf)) != DLADM_STATUS_OK)
+ if ((status = dladm_read_conf(handle, linkid, &conf)) !=
+ DLADM_STATUS_OK)
return (status);
- status = dladm_get_conf_field(conf, FKEY, &u64, sizeof (u64));
+ status = dladm_get_conf_field(handle, conf, FKEY, &u64, sizeof (u64));
if (status != DLADM_STATUS_OK)
goto done;
attrp->lg_key = (uint16_t)u64;
- status = dladm_get_conf_field(conf, FPOLICY, &u64, sizeof (u64));
+ status = dladm_get_conf_field(handle, conf, FPOLICY, &u64,
+ sizeof (u64));
if (status != DLADM_STATUS_OK)
goto done;
attrp->lg_policy = (uint32_t)u64;
- status = dladm_get_conf_field(conf, FFIXMACADDR, &attrp->lg_mac_fixed,
- sizeof (boolean_t));
+ status = dladm_get_conf_field(handle, conf, FFIXMACADDR,
+ &attrp->lg_mac_fixed, sizeof (boolean_t));
if (status != DLADM_STATUS_OK)
goto done;
if (attrp->lg_mac_fixed) {
boolean_t fixed;
- if ((status = dladm_get_conf_field(conf, FMACADDR, macstr,
- sizeof (macstr))) != DLADM_STATUS_OK) {
+ if ((status = dladm_get_conf_field(handle, conf, FMACADDR,
+ macstr, sizeof (macstr))) != DLADM_STATUS_OK) {
goto done;
}
if (!dladm_aggr_str2macaddr(macstr, &fixed, attrp->lg_mac)) {
@@ -303,22 +299,25 @@ i_dladm_aggr_info_persist(datalink_id_t linkid, dladm_aggr_grp_attr_t *attrp)
}
}
- status = dladm_get_conf_field(conf, FFORCE, &attrp->lg_force,
+ status = dladm_get_conf_field(handle, conf, FFORCE, &attrp->lg_force,
sizeof (boolean_t));
if (status != DLADM_STATUS_OK)
goto done;
- status = dladm_get_conf_field(conf, FLACPMODE, &u64, sizeof (u64));
+ status = dladm_get_conf_field(handle, conf, FLACPMODE, &u64,
+ sizeof (u64));
if (status != DLADM_STATUS_OK)
goto done;
attrp->lg_lacp_mode = (aggr_lacp_mode_t)u64;
- status = dladm_get_conf_field(conf, FLACPTIMER, &u64, sizeof (u64));
+ status = dladm_get_conf_field(handle, conf, FLACPTIMER, &u64,
+ sizeof (u64));
if (status != DLADM_STATUS_OK)
goto done;
attrp->lg_lacp_timer = (aggr_lacp_timer_t)u64;
- status = dladm_get_conf_field(conf, FNPORTS, &u64, sizeof (u64));
+ status = dladm_get_conf_field(handle, conf, FNPORTS, &u64,
+ sizeof (u64));
if (status != DLADM_STATUS_OK)
goto done;
nports = (uint32_t)u64;
@@ -330,7 +329,7 @@ i_dladm_aggr_info_persist(datalink_id_t linkid, dladm_aggr_grp_attr_t *attrp)
goto done;
}
- status = dladm_get_conf_field(conf, FPORTS, portstr, size);
+ status = dladm_get_conf_field(handle, conf, FPORTS, portstr, size);
if (status != DLADM_STATUS_OK) {
free(portstr);
goto done;
@@ -354,27 +353,27 @@ i_dladm_aggr_info_persist(datalink_id_t linkid, dladm_aggr_grp_attr_t *attrp)
free(portstr);
done:
- dladm_destroy_conf(conf);
+ dladm_destroy_conf(handle, conf);
return (status);
}
dladm_status_t
-dladm_aggr_info(datalink_id_t linkid, dladm_aggr_grp_attr_t *attrp,
- uint32_t flags)
+dladm_aggr_info(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_aggr_grp_attr_t *attrp, uint32_t flags)
{
assert(flags == DLADM_OPT_ACTIVE || flags == DLADM_OPT_PERSIST);
if (flags == DLADM_OPT_ACTIVE)
- return (i_dladm_aggr_info_active(linkid, attrp));
+ return (i_dladm_aggr_info_active(handle, linkid, attrp));
else
- return (i_dladm_aggr_info_persist(linkid, attrp));
+ return (i_dladm_aggr_info_persist(handle, linkid, attrp));
}
/*
* Add or remove one or more ports to/from an existing link aggregation.
*/
static dladm_status_t
-i_dladm_aggr_add_rmv(datalink_id_t linkid, uint32_t nports,
- dladm_aggr_port_attr_db_t *ports, uint32_t flags, int cmd)
+i_dladm_aggr_add_rmv(dladm_handle_t handle, datalink_id_t linkid,
+ uint32_t nports, dladm_aggr_port_attr_db_t *ports, uint32_t flags, int cmd)
{
char *orig_portstr = NULL, *portstr = NULL;
laioc_add_rem_t *iocp = NULL;
@@ -395,7 +394,7 @@ i_dladm_aggr_add_rmv(datalink_id_t linkid, uint32_t nports,
* physical links.
*/
for (i = 0; i < nports; i++) {
- if ((dladm_datalink_id2info(ports[i].lp_linkid, NULL,
+ if ((dladm_datalink_id2info(handle, ports[i].lp_linkid, NULL,
&class, &media, NULL, 0) != DLADM_STATUS_OK) ||
(class != DATALINK_CLASS_PHYS) || (media != DL_ETHER)) {
return (DLADM_STATUS_BADARG);
@@ -409,14 +408,14 @@ i_dladm_aggr_add_rmv(datalink_id_t linkid, uint32_t nports,
* PORT_DELIMITER ('.').
*/
if (flags & DLADM_OPT_PERSIST) {
- status = dladm_read_conf(linkid, &conf);
+ status = dladm_read_conf(handle, linkid, &conf);
if (status != DLADM_STATUS_OK)
return (status);
/*
* Get the original configuration of FNPORTS and FPORTS.
*/
- status = dladm_get_conf_field(conf, FNPORTS, &u64,
+ status = dladm_get_conf_field(handle, conf, FNPORTS, &u64,
sizeof (u64));
if (status != DLADM_STATUS_OK)
goto destroyconf;
@@ -436,7 +435,8 @@ i_dladm_aggr_add_rmv(datalink_id_t linkid, uint32_t nports,
goto destroyconf;
}
- status = dladm_get_conf_field(conf, FPORTS, orig_portstr, size);
+ status = dladm_get_conf_field(handle, conf, FPORTS,
+ orig_portstr, size);
if (status != DLADM_STATUS_OK)
goto destroyconf;
@@ -496,14 +496,14 @@ i_dladm_aggr_add_rmv(datalink_id_t linkid, uint32_t nports,
}
u64 = result_nports;
- if ((status = dladm_set_conf_field(conf, FNPORTS,
+ if ((status = dladm_set_conf_field(handle, conf, FNPORTS,
DLADM_TYPE_UINT64, &u64)) != DLADM_STATUS_OK) {
free(portstr);
goto destroyconf;
}
- status = dladm_set_conf_field(conf, FPORTS, DLADM_TYPE_STR,
- portstr);
+ status = dladm_set_conf_field(handle, conf, FPORTS,
+ DLADM_TYPE_STR, portstr);
free(portstr);
if (status != DLADM_STATUS_OK)
goto destroyconf;
@@ -511,10 +511,10 @@ i_dladm_aggr_add_rmv(datalink_id_t linkid, uint32_t nports,
/*
* Write the new configuration to the persistent repository.
*/
- status = dladm_write_conf(conf);
+ status = dladm_write_conf(handle, conf);
destroyconf:
- dladm_destroy_conf(conf);
+ dladm_destroy_conf(handle, conf);
if (status != DLADM_STATUS_OK) {
free(orig_portstr);
return (status);
@@ -546,7 +546,7 @@ destroyconf:
for (i = 0; i < nports; i++)
ioc_ports[i].lp_linkid = ports[i].lp_linkid;
- if (i_dladm_aggr_ioctl(cmd, iocp) < 0)
+ if (i_dladm_aggr_ioctl(handle, cmd, iocp) < 0)
status = dladm_errno2status(errno);
done:
@@ -557,15 +557,15 @@ done:
* persistent configuration if we've changed that.
*/
if ((status != DLADM_STATUS_OK) && (flags & DLADM_OPT_PERSIST)) {
- if (dladm_read_conf(linkid, &conf) == DLADM_STATUS_OK) {
+ if (dladm_read_conf(handle, linkid, &conf) == DLADM_STATUS_OK) {
u64 = orig_nports;
- if ((dladm_set_conf_field(conf, FNPORTS,
+ if ((dladm_set_conf_field(handle, conf, FNPORTS,
DLADM_TYPE_UINT64, &u64) == DLADM_STATUS_OK) &&
- (dladm_set_conf_field(conf, FPORTS, DLADM_TYPE_STR,
- orig_portstr) == DLADM_STATUS_OK)) {
- (void) dladm_write_conf(conf);
+ (dladm_set_conf_field(handle, conf, FPORTS,
+ DLADM_TYPE_STR, orig_portstr) == DLADM_STATUS_OK)) {
+ (void) dladm_write_conf(handle, conf);
}
- (void) dladm_destroy_conf(conf);
+ (void) dladm_destroy_conf(handle, conf);
}
}
free(orig_portstr);
@@ -576,8 +576,8 @@ done:
* Send a modify command to the link aggregation driver.
*/
static dladm_status_t
-i_dladm_aggr_modify_sys(datalink_id_t linkid, uint32_t mask,
- dladm_aggr_modify_attr_t *attr)
+i_dladm_aggr_modify_sys(dladm_handle_t handle, datalink_id_t linkid,
+ uint32_t mask, dladm_aggr_modify_attr_t *attr)
{
laioc_modify_t ioc;
@@ -599,7 +599,7 @@ i_dladm_aggr_modify_sys(datalink_id_t linkid, uint32_t mask,
ioc.lu_lacp_mode = attr->ld_lacp_mode;
ioc.lu_lacp_timer = attr->ld_lacp_timer;
- if (i_dladm_aggr_ioctl(LAIOC_MODIFY, &ioc) < 0) {
+ if (i_dladm_aggr_ioctl(handle, LAIOC_MODIFY, &ioc) < 0) {
if (errno == EINVAL)
return (DLADM_STATUS_MACADDRINVAL);
else
@@ -613,9 +613,9 @@ i_dladm_aggr_modify_sys(datalink_id_t linkid, uint32_t mask,
* Send a create command to the link aggregation driver.
*/
static dladm_status_t
-i_dladm_aggr_create_sys(datalink_id_t linkid, uint16_t key, uint32_t nports,
- dladm_aggr_port_attr_db_t *ports, uint32_t policy,
- boolean_t mac_addr_fixed, const uchar_t *mac_addr,
+i_dladm_aggr_create_sys(dladm_handle_t handle, datalink_id_t linkid,
+ uint16_t key, uint32_t nports, dladm_aggr_port_attr_db_t *ports,
+ uint32_t policy, boolean_t mac_addr_fixed, const uchar_t *mac_addr,
aggr_lacp_mode_t lacp_mode, aggr_lacp_timer_t lacp_timer, boolean_t force)
{
int i, len;
@@ -648,7 +648,7 @@ i_dladm_aggr_create_sys(datalink_id_t linkid, uint16_t key, uint32_t nports,
bcopy(mac_addr, iocp->lc_mac, ETHERADDRL);
iocp->lc_mac_fixed = mac_addr_fixed;
- if (i_dladm_aggr_ioctl(LAIOC_CREATE, iocp) < 0)
+ if (i_dladm_aggr_ioctl(handle, LAIOC_CREATE, iocp) < 0)
status = dladm_errno2status(errno);
done:
@@ -660,7 +660,7 @@ done:
* Invoked to bring up a link aggregation group.
*/
static int
-i_dladm_aggr_up(datalink_id_t linkid, void *arg)
+i_dladm_aggr_up(dladm_handle_t handle, datalink_id_t linkid, void *arg)
{
dladm_status_t *statusp = (dladm_status_t *)arg;
dladm_aggr_grp_attr_t attr;
@@ -669,7 +669,7 @@ i_dladm_aggr_up(datalink_id_t linkid, void *arg)
int i, j;
dladm_status_t status;
- status = dladm_aggr_info(linkid, &attr, DLADM_OPT_PERSIST);
+ status = dladm_aggr_info(handle, linkid, &attr, DLADM_OPT_PERSIST);
if (status != DLADM_STATUS_OK) {
*statusp = status;
return (DLADM_WALK_CONTINUE);
@@ -694,7 +694,8 @@ i_dladm_aggr_up(datalink_id_t linkid, void *arg)
uint32_t flags;
dladm_status_t s;
- s = dladm_datalink_id2info(portid, &flags, NULL, NULL, NULL, 0);
+ s = dladm_datalink_id2info(handle, portid, &flags, NULL, NULL,
+ NULL, 0);
if (s != DLADM_STATUS_OK || !(flags & DLADM_OPT_ACTIVE))
continue;
@@ -712,24 +713,25 @@ i_dladm_aggr_up(datalink_id_t linkid, void *arg)
/*
* Create active aggregation.
*/
- if ((status = i_dladm_aggr_create_sys(linkid,
+ if ((status = i_dladm_aggr_create_sys(handle, linkid,
key, j, ports, attr.lg_policy, attr.lg_mac_fixed,
(const uchar_t *)attr.lg_mac, attr.lg_lacp_mode,
attr.lg_lacp_timer, attr.lg_force)) != DLADM_STATUS_OK) {
goto done;
}
- if ((status = dladm_up_datalink_id(linkid)) != DLADM_STATUS_OK) {
+ if ((status = dladm_up_datalink_id(handle, linkid)) !=
+ DLADM_STATUS_OK) {
laioc_delete_t ioc;
ioc.ld_linkid = linkid;
- (void) i_dladm_aggr_ioctl(LAIOC_DELETE, &ioc);
+ (void) i_dladm_aggr_ioctl(handle, LAIOC_DELETE, &ioc);
goto done;
}
/*
* Reset the active linkprop of this specific link.
*/
- (void) dladm_init_linkprop(linkid, B_FALSE);
+ (void) dladm_init_linkprop(handle, linkid, B_FALSE);
done:
free(attr.lg_ports);
@@ -744,17 +746,17 @@ done:
* case, the walk may terminate early if bringup of an aggregation fails.
*/
dladm_status_t
-dladm_aggr_up(datalink_id_t linkid)
+dladm_aggr_up(dladm_handle_t handle, datalink_id_t linkid)
{
dladm_status_t status;
if (linkid == DATALINK_ALL_LINKID) {
- (void) dladm_walk_datalink_id(i_dladm_aggr_up, &status,
+ (void) dladm_walk_datalink_id(i_dladm_aggr_up, handle, &status,
DATALINK_CLASS_AGGR, DATALINK_ANY_MEDIATYPE,
DLADM_OPT_PERSIST);
return (DLADM_STATUS_OK);
} else {
- (void) i_dladm_aggr_up(linkid, &status);
+ (void) i_dladm_aggr_up(handle, linkid, &status);
return (status);
}
}
@@ -995,11 +997,11 @@ dladm_aggr_portstate2str(aggr_port_state_t state_id, char *buf)
}
static dladm_status_t
-dladm_aggr_persist_aggr_conf(const char *link, datalink_id_t linkid,
- uint16_t key, uint32_t nports, dladm_aggr_port_attr_db_t *ports,
- uint32_t policy, boolean_t mac_addr_fixed, const uchar_t *mac_addr,
- aggr_lacp_mode_t lacp_mode, aggr_lacp_timer_t lacp_timer,
- boolean_t force)
+dladm_aggr_persist_aggr_conf(dladm_handle_t handle, const char *link,
+ datalink_id_t linkid, uint16_t key, uint32_t nports,
+ dladm_aggr_port_attr_db_t *ports, uint32_t policy, boolean_t mac_addr_fixed,
+ const uchar_t *mac_addr, aggr_lacp_mode_t lacp_mode,
+ aggr_lacp_timer_t lacp_timer, boolean_t force)
{
dladm_conf_t conf = DLADM_INVALID_CONF;
char *portstr = NULL;
@@ -1008,18 +1010,20 @@ dladm_aggr_persist_aggr_conf(const char *link, datalink_id_t linkid,
int i, size;
uint64_t u64;
- if ((status = dladm_create_conf(link, linkid, DATALINK_CLASS_AGGR,
- DL_ETHER, &conf)) != DLADM_STATUS_OK) {
+ if ((status = dladm_create_conf(handle, link, linkid,
+ DATALINK_CLASS_AGGR, DL_ETHER, &conf)) != DLADM_STATUS_OK) {
return (status);
}
u64 = key;
- status = dladm_set_conf_field(conf, FKEY, DLADM_TYPE_UINT64, &u64);
+ status = dladm_set_conf_field(handle, conf, FKEY, DLADM_TYPE_UINT64,
+ &u64);
if (status != DLADM_STATUS_OK)
goto done;
u64 = nports;
- status = dladm_set_conf_field(conf, FNPORTS, DLADM_TYPE_UINT64, &u64);
+ status = dladm_set_conf_field(handle, conf, FNPORTS, DLADM_TYPE_UINT64,
+ &u64);
if (status != DLADM_STATUS_OK)
goto done;
@@ -1031,19 +1035,21 @@ dladm_aggr_persist_aggr_conf(const char *link, datalink_id_t linkid,
for (i = 0; i < nports; i++)
WRITE_PORT(portstr, ports[i].lp_linkid, size);
- status = dladm_set_conf_field(conf, FPORTS, DLADM_TYPE_STR, portstr);
+ status = dladm_set_conf_field(handle, conf, FPORTS, DLADM_TYPE_STR,
+ portstr);
free(portstr);
if (status != DLADM_STATUS_OK)
goto done;
u64 = policy;
- status = dladm_set_conf_field(conf, FPOLICY, DLADM_TYPE_UINT64, &u64);
+ status = dladm_set_conf_field(handle, conf, FPOLICY, DLADM_TYPE_UINT64,
+ &u64);
if (status != DLADM_STATUS_OK)
goto done;
- status = dladm_set_conf_field(conf, FFIXMACADDR, DLADM_TYPE_BOOLEAN,
- &mac_addr_fixed);
+ status = dladm_set_conf_field(handle, conf, FFIXMACADDR,
+ DLADM_TYPE_BOOLEAN, &mac_addr_fixed);
if (status != DLADM_STATUS_OK)
goto done;
@@ -1054,34 +1060,36 @@ dladm_aggr_persist_aggr_conf(const char *link, datalink_id_t linkid,
}
(void) dladm_aggr_macaddr2str(mac_addr, macstr);
- status = dladm_set_conf_field(conf, FMACADDR, DLADM_TYPE_STR,
- macstr);
+ status = dladm_set_conf_field(handle, conf, FMACADDR,
+ DLADM_TYPE_STR, macstr);
if (status != DLADM_STATUS_OK)
goto done;
}
- status = dladm_set_conf_field(conf, FFORCE, DLADM_TYPE_BOOLEAN, &force);
+ status = dladm_set_conf_field(handle, conf, FFORCE, DLADM_TYPE_BOOLEAN,
+ &force);
if (status != DLADM_STATUS_OK)
goto done;
u64 = lacp_mode;
- status = dladm_set_conf_field(conf, FLACPMODE, DLADM_TYPE_UINT64, &u64);
+ status = dladm_set_conf_field(handle, conf, FLACPMODE,
+ DLADM_TYPE_UINT64, &u64);
if (status != DLADM_STATUS_OK)
goto done;
u64 = lacp_timer;
- status = dladm_set_conf_field(conf, FLACPTIMER, DLADM_TYPE_UINT64,
- &u64);
+ status = dladm_set_conf_field(handle, conf, FLACPTIMER,
+ DLADM_TYPE_UINT64, &u64);
if (status != DLADM_STATUS_OK)
goto done;
/*
* Commit the link aggregation configuration.
*/
- status = dladm_write_conf(conf);
+ status = dladm_write_conf(handle, conf);
done:
- dladm_destroy_conf(conf);
+ dladm_destroy_conf(handle, conf);
return (status);
}
@@ -1090,10 +1098,10 @@ done:
* file and bring it up.
*/
dladm_status_t
-dladm_aggr_create(const char *name, uint16_t key, uint32_t nports,
- dladm_aggr_port_attr_db_t *ports, uint32_t policy, boolean_t mac_addr_fixed,
- const uchar_t *mac_addr, aggr_lacp_mode_t lacp_mode,
- aggr_lacp_timer_t lacp_timer, uint32_t flags)
+dladm_aggr_create(dladm_handle_t handle, const char *name, uint16_t key,
+ uint32_t nports, dladm_aggr_port_attr_db_t *ports, uint32_t policy,
+ boolean_t mac_addr_fixed, const uchar_t *mac_addr,
+ aggr_lacp_mode_t lacp_mode, aggr_lacp_timer_t lacp_timer, uint32_t flags)
{
datalink_id_t linkid = DATALINK_INVALID_LINKID;
uint32_t media;
@@ -1109,7 +1117,7 @@ dladm_aggr_create(const char *name, uint16_t key, uint32_t nports,
return (DLADM_STATUS_BADARG);
for (i = 0; i < nports; i++) {
- if ((dladm_datalink_id2info(ports[i].lp_linkid, NULL,
+ if ((dladm_datalink_id2info(handle, ports[i].lp_linkid, NULL,
&class, &media, NULL, 0) != DLADM_STATUS_OK) ||
!((class == DATALINK_CLASS_PHYS) && (media == DL_ETHER))) {
return (DLADM_STATUS_BADARG);
@@ -1117,27 +1125,28 @@ dladm_aggr_create(const char *name, uint16_t key, uint32_t nports,
}
flags &= (DLADM_OPT_ACTIVE | DLADM_OPT_PERSIST);
- if ((status = dladm_create_datalink_id(name, DATALINK_CLASS_AGGR,
- DL_ETHER, flags, &linkid)) != DLADM_STATUS_OK) {
+ if ((status = dladm_create_datalink_id(handle, name,
+ DATALINK_CLASS_AGGR, DL_ETHER, flags, &linkid)) !=
+ DLADM_STATUS_OK) {
goto fail;
}
if ((flags & DLADM_OPT_PERSIST) &&
- (status = dladm_aggr_persist_aggr_conf(name, linkid, key, nports,
- ports, policy, mac_addr_fixed, mac_addr, lacp_mode, lacp_timer,
- force)) != DLADM_STATUS_OK) {
+ (status = dladm_aggr_persist_aggr_conf(handle, name, linkid, key,
+ nports, ports, policy, mac_addr_fixed, mac_addr, lacp_mode,
+ lacp_timer, force)) != DLADM_STATUS_OK) {
goto fail;
}
if (!(flags & DLADM_OPT_ACTIVE))
return (DLADM_STATUS_OK);
- status = i_dladm_aggr_create_sys(linkid, key, nports, ports, policy,
- mac_addr_fixed, mac_addr, lacp_mode, lacp_timer, force);
+ status = i_dladm_aggr_create_sys(handle, linkid, key, nports, ports,
+ policy, mac_addr_fixed, mac_addr, lacp_mode, lacp_timer, force);
if (status != DLADM_STATUS_OK) {
if (flags & DLADM_OPT_PERSIST)
- (void) dladm_remove_conf(linkid);
+ (void) dladm_remove_conf(handle, linkid);
goto fail;
}
@@ -1145,21 +1154,21 @@ dladm_aggr_create(const char *name, uint16_t key, uint32_t nports,
fail:
if (linkid != DATALINK_INVALID_LINKID)
- (void) dladm_destroy_datalink_id(linkid, flags);
+ (void) dladm_destroy_datalink_id(handle, linkid, flags);
return (status);
}
static dladm_status_t
-i_dladm_aggr_get_aggr_attr(dladm_conf_t conf, uint32_t mask,
- dladm_aggr_modify_attr_t *attrp)
+i_dladm_aggr_get_aggr_attr(dladm_handle_t handle, dladm_conf_t conf,
+ uint32_t mask, dladm_aggr_modify_attr_t *attrp)
{
dladm_status_t status = DLADM_STATUS_OK;
char macstr[ETHERADDRL * 3];
uint64_t u64;
if (mask & DLADM_AGGR_MODIFY_POLICY) {
- status = dladm_get_conf_field(conf, FPOLICY, &u64,
+ status = dladm_get_conf_field(handle, conf, FPOLICY, &u64,
sizeof (u64));
if (status != DLADM_STATUS_OK)
return (status);
@@ -1167,7 +1176,7 @@ i_dladm_aggr_get_aggr_attr(dladm_conf_t conf, uint32_t mask,
}
if (mask & DLADM_AGGR_MODIFY_MAC) {
- status = dladm_get_conf_field(conf, FFIXMACADDR,
+ status = dladm_get_conf_field(handle, conf, FFIXMACADDR,
&attrp->ld_mac_fixed, sizeof (boolean_t));
if (status != DLADM_STATUS_OK)
return (status);
@@ -1175,7 +1184,7 @@ i_dladm_aggr_get_aggr_attr(dladm_conf_t conf, uint32_t mask,
if (attrp->ld_mac_fixed) {
boolean_t fixed;
- status = dladm_get_conf_field(conf, FMACADDR,
+ status = dladm_get_conf_field(handle, conf, FMACADDR,
macstr, sizeof (macstr));
if (status != DLADM_STATUS_OK)
return (status);
@@ -1188,7 +1197,7 @@ i_dladm_aggr_get_aggr_attr(dladm_conf_t conf, uint32_t mask,
}
if (mask & DLADM_AGGR_MODIFY_LACP_MODE) {
- status = dladm_get_conf_field(conf, FLACPMODE, &u64,
+ status = dladm_get_conf_field(handle, conf, FLACPMODE, &u64,
sizeof (u64));
if (status != DLADM_STATUS_OK)
return (status);
@@ -1196,7 +1205,7 @@ i_dladm_aggr_get_aggr_attr(dladm_conf_t conf, uint32_t mask,
}
if (mask & DLADM_AGGR_MODIFY_LACP_TIMER) {
- status = dladm_get_conf_field(conf, FLACPTIMER, &u64,
+ status = dladm_get_conf_field(handle, conf, FLACPTIMER, &u64,
sizeof (u64));
if (status != DLADM_STATUS_OK)
return (status);
@@ -1207,8 +1216,8 @@ i_dladm_aggr_get_aggr_attr(dladm_conf_t conf, uint32_t mask,
}
static dladm_status_t
-i_dladm_aggr_set_aggr_attr(dladm_conf_t conf, uint32_t mask,
- dladm_aggr_modify_attr_t *attrp)
+i_dladm_aggr_set_aggr_attr(dladm_handle_t handle, dladm_conf_t conf,
+ uint32_t mask, dladm_aggr_modify_attr_t *attrp)
{
dladm_status_t status = DLADM_STATUS_OK;
char macstr[ETHERADDRL * 3];
@@ -1216,21 +1225,21 @@ i_dladm_aggr_set_aggr_attr(dladm_conf_t conf, uint32_t mask,
if (mask & DLADM_AGGR_MODIFY_POLICY) {
u64 = attrp->ld_policy;
- status = dladm_set_conf_field(conf, FPOLICY, DLADM_TYPE_UINT64,
- &u64);
+ status = dladm_set_conf_field(handle, conf, FPOLICY,
+ DLADM_TYPE_UINT64, &u64);
if (status != DLADM_STATUS_OK)
return (status);
}
if (mask & DLADM_AGGR_MODIFY_MAC) {
- status = dladm_set_conf_field(conf, FFIXMACADDR,
+ status = dladm_set_conf_field(handle, conf, FFIXMACADDR,
DLADM_TYPE_BOOLEAN, &attrp->ld_mac_fixed);
if (status != DLADM_STATUS_OK)
return (status);
if (attrp->ld_mac_fixed) {
(void) dladm_aggr_macaddr2str(attrp->ld_mac, macstr);
- status = dladm_set_conf_field(conf, FMACADDR,
+ status = dladm_set_conf_field(handle, conf, FMACADDR,
DLADM_TYPE_STR, macstr);
if (status != DLADM_STATUS_OK)
return (status);
@@ -1239,7 +1248,7 @@ i_dladm_aggr_set_aggr_attr(dladm_conf_t conf, uint32_t mask,
if (mask & DLADM_AGGR_MODIFY_LACP_MODE) {
u64 = attrp->ld_lacp_mode;
- status = dladm_set_conf_field(conf, FLACPMODE,
+ status = dladm_set_conf_field(handle, conf, FLACPMODE,
DLADM_TYPE_UINT64, &u64);
if (status != DLADM_STATUS_OK)
return (status);
@@ -1247,7 +1256,7 @@ i_dladm_aggr_set_aggr_attr(dladm_conf_t conf, uint32_t mask,
if (mask & DLADM_AGGR_MODIFY_LACP_TIMER) {
u64 = attrp->ld_lacp_timer;
- status = dladm_set_conf_field(conf, FLACPTIMER,
+ status = dladm_set_conf_field(handle, conf, FLACPTIMER,
DLADM_TYPE_UINT64, &u64);
if (status != DLADM_STATUS_OK)
return (status);
@@ -1261,8 +1270,9 @@ i_dladm_aggr_set_aggr_attr(dladm_conf_t conf, uint32_t mask,
* the configuration file and pass the changes to the kernel.
*/
dladm_status_t
-dladm_aggr_modify(datalink_id_t linkid, uint32_t modify_mask, uint32_t policy,
- boolean_t mac_fixed, const uchar_t *mac_addr, aggr_lacp_mode_t lacp_mode,
+dladm_aggr_modify(dladm_handle_t handle, datalink_id_t linkid,
+ uint32_t modify_mask, uint32_t policy, boolean_t mac_fixed,
+ const uchar_t *mac_addr, aggr_lacp_mode_t lacp_mode,
aggr_lacp_timer_t lacp_timer, uint32_t flags)
{
dladm_aggr_modify_attr_t new_attr, old_attr;
@@ -1276,24 +1286,24 @@ dladm_aggr_modify(datalink_id_t linkid, uint32_t modify_mask, uint32_t policy,
bcopy(mac_addr, new_attr.ld_mac, ETHERADDRL);
if (flags & DLADM_OPT_PERSIST) {
- status = dladm_read_conf(linkid, &conf);
+ status = dladm_read_conf(handle, linkid, &conf);
if (status != DLADM_STATUS_OK)
return (status);
- if ((status = i_dladm_aggr_get_aggr_attr(conf, modify_mask,
- &old_attr)) != DLADM_STATUS_OK) {
+ if ((status = i_dladm_aggr_get_aggr_attr(handle, conf,
+ modify_mask, &old_attr)) != DLADM_STATUS_OK) {
goto done;
}
- if ((status = i_dladm_aggr_set_aggr_attr(conf, modify_mask,
- &new_attr)) != DLADM_STATUS_OK) {
+ if ((status = i_dladm_aggr_set_aggr_attr(handle, conf,
+ modify_mask, &new_attr)) != DLADM_STATUS_OK) {
goto done;
}
- status = dladm_write_conf(conf);
+ status = dladm_write_conf(handle, conf);
done:
- dladm_destroy_conf(conf);
+ dladm_destroy_conf(handle, conf);
if (status != DLADM_STATUS_OK)
return (status);
}
@@ -1301,14 +1311,15 @@ done:
if (!(flags & DLADM_OPT_ACTIVE))
return (DLADM_STATUS_OK);
- status = i_dladm_aggr_modify_sys(linkid, modify_mask, &new_attr);
+ status = i_dladm_aggr_modify_sys(handle, linkid, modify_mask,
+ &new_attr);
if ((status != DLADM_STATUS_OK) && (flags & DLADM_OPT_PERSIST)) {
- if (dladm_read_conf(linkid, &conf) == DLADM_STATUS_OK) {
- if (i_dladm_aggr_set_aggr_attr(conf, modify_mask,
- &old_attr) == DLADM_STATUS_OK) {
- (void) dladm_write_conf(conf);
+ if (dladm_read_conf(handle, linkid, &conf) == DLADM_STATUS_OK) {
+ if (i_dladm_aggr_set_aggr_attr(handle, conf,
+ modify_mask, &old_attr) == DLADM_STATUS_OK) {
+ (void) dladm_write_conf(handle, conf);
}
- dladm_destroy_conf(conf);
+ dladm_destroy_conf(handle, conf);
}
}
@@ -1321,12 +1332,13 @@ typedef struct aggr_held_arg_s {
} aggr_held_arg_t;
static int
-i_dladm_aggr_is_held(datalink_id_t linkid, void *arg)
+i_dladm_aggr_is_held(dladm_handle_t handle, datalink_id_t linkid, void *arg)
{
aggr_held_arg_t *aggr_held_arg = arg;
dladm_vlan_attr_t dva;
- if (dladm_vlan_info(linkid, &dva, DLADM_OPT_PERSIST) != DLADM_STATUS_OK)
+ if (dladm_vlan_info(handle, linkid, &dva, DLADM_OPT_PERSIST) !=
+ DLADM_STATUS_OK)
return (DLADM_WALK_CONTINUE);
if (dva.dv_linkid == aggr_held_arg->aggrid) {
@@ -1344,20 +1356,20 @@ i_dladm_aggr_is_held(datalink_id_t linkid, void *arg)
* or the "key" is specified.
*/
dladm_status_t
-dladm_aggr_delete(datalink_id_t linkid, uint32_t flags)
+dladm_aggr_delete(dladm_handle_t handle, datalink_id_t linkid, uint32_t flags)
{
laioc_delete_t ioc;
datalink_class_t class;
dladm_status_t status;
- if ((dladm_datalink_id2info(linkid, NULL, &class, NULL, NULL, 0) !=
- DLADM_STATUS_OK) || (class != DATALINK_CLASS_AGGR)) {
+ if ((dladm_datalink_id2info(handle, linkid, NULL, &class, NULL, NULL,
+ 0) != DLADM_STATUS_OK) || (class != DATALINK_CLASS_AGGR)) {
return (DLADM_STATUS_BADARG);
}
if (flags & DLADM_OPT_ACTIVE) {
ioc.ld_linkid = linkid;
- if ((i_dladm_aggr_ioctl(LAIOC_DELETE, &ioc) < 0) &&
+ if ((i_dladm_aggr_ioctl(handle, LAIOC_DELETE, &ioc) < 0) &&
((errno != ENOENT) || !(flags & DLADM_OPT_PERSIST))) {
status = dladm_errno2status(errno);
return (status);
@@ -1366,9 +1378,10 @@ dladm_aggr_delete(datalink_id_t linkid, uint32_t flags)
/*
* Delete ACTIVE linkprop first.
*/
- (void) dladm_set_linkprop(linkid, NULL, NULL, 0,
+ (void) dladm_set_linkprop(handle, linkid, NULL, NULL, 0,
+ DLADM_OPT_ACTIVE);
+ (void) dladm_destroy_datalink_id(handle, linkid,
DLADM_OPT_ACTIVE);
- (void) dladm_destroy_datalink_id(linkid, DLADM_OPT_ACTIVE);
}
/*
@@ -1383,14 +1396,15 @@ dladm_aggr_delete(datalink_id_t linkid, uint32_t flags)
arg.aggrid = linkid;
arg.isheld = B_FALSE;
- (void) dladm_walk_datalink_id(i_dladm_aggr_is_held,
+ (void) dladm_walk_datalink_id(i_dladm_aggr_is_held, handle,
&arg, DATALINK_CLASS_VLAN, DATALINK_ANY_MEDIATYPE,
DLADM_OPT_PERSIST);
if (arg.isheld)
return (DLADM_STATUS_LINKBUSY);
- (void) dladm_destroy_datalink_id(linkid, DLADM_OPT_PERSIST);
- (void) dladm_remove_conf(linkid);
+ (void) dladm_destroy_datalink_id(handle, linkid,
+ DLADM_OPT_PERSIST);
+ (void) dladm_remove_conf(handle, linkid);
}
return (DLADM_STATUS_OK);
@@ -1400,20 +1414,21 @@ dladm_aggr_delete(datalink_id_t linkid, uint32_t flags)
* Add one or more ports to an existing link aggregation.
*/
dladm_status_t
-dladm_aggr_add(datalink_id_t linkid, uint32_t nports,
+dladm_aggr_add(dladm_handle_t handle, datalink_id_t linkid, uint32_t nports,
dladm_aggr_port_attr_db_t *ports, uint32_t flags)
{
- return (i_dladm_aggr_add_rmv(linkid, nports, ports, flags, LAIOC_ADD));
+ return (i_dladm_aggr_add_rmv(handle, linkid, nports, ports, flags,
+ LAIOC_ADD));
}
/*
* Remove one or more ports from an existing link aggregation.
*/
dladm_status_t
-dladm_aggr_remove(datalink_id_t linkid, uint32_t nports,
+dladm_aggr_remove(dladm_handle_t handle, datalink_id_t linkid, uint32_t nports,
dladm_aggr_port_attr_db_t *ports, uint32_t flags)
{
- return (i_dladm_aggr_add_rmv(linkid, nports, ports, flags,
+ return (i_dladm_aggr_add_rmv(handle, linkid, nports, ports, flags,
LAIOC_REMOVE));
}
@@ -1424,7 +1439,7 @@ typedef struct i_walk_key_state_s {
} i_walk_key_state_t;
static int
-i_dladm_walk_key2linkid(datalink_id_t linkid, void *arg)
+i_dladm_walk_key2linkid(dladm_handle_t handle, datalink_id_t linkid, void *arg)
{
dladm_conf_t conf;
uint16_t key;
@@ -1432,12 +1447,12 @@ i_dladm_walk_key2linkid(datalink_id_t linkid, void *arg)
i_walk_key_state_t *statep = (i_walk_key_state_t *)arg;
uint64_t u64;
- if (dladm_read_conf(linkid, &conf) != 0)
+ if (dladm_read_conf(handle, linkid, &conf) != 0)
return (DLADM_WALK_CONTINUE);
- status = dladm_get_conf_field(conf, FKEY, &u64, sizeof (u64));
+ status = dladm_get_conf_field(handle, conf, FKEY, &u64, sizeof (u64));
key = (uint16_t)u64;
- dladm_destroy_conf(conf);
+ dladm_destroy_conf(handle, conf);
if ((status == DLADM_STATUS_OK) && (key == statep->key)) {
statep->found = B_TRUE;
@@ -1449,7 +1464,8 @@ i_dladm_walk_key2linkid(datalink_id_t linkid, void *arg)
}
dladm_status_t
-dladm_key2linkid(uint16_t key, datalink_id_t *linkidp, uint32_t flags)
+dladm_key2linkid(dladm_handle_t handle, uint16_t key, datalink_id_t *linkidp,
+ uint32_t flags)
{
i_walk_key_state_t state;
@@ -1459,7 +1475,7 @@ dladm_key2linkid(uint16_t key, datalink_id_t *linkidp, uint32_t flags)
state.found = B_FALSE;
state.key = key;
- (void) dladm_walk_datalink_id(i_dladm_walk_key2linkid, &state,
+ (void) dladm_walk_datalink_id(i_dladm_walk_key2linkid, handle, &state,
DATALINK_CLASS_AGGR, DATALINK_ANY_MEDIATYPE, flags);
if (state.found == B_TRUE) {
*linkidp = state.linkid;
diff --git a/usr/src/lib/libdladm/common/libdlaggr.h b/usr/src/lib/libdladm/common/libdlaggr.h
index 1b5df523c4..7d9cd8fc8b 100644
--- a/usr/src/lib/libdladm/common/libdlaggr.h
+++ b/usr/src/lib/libdladm/common/libdlaggr.h
@@ -26,8 +26,6 @@
#ifndef _LIBDLAGGR_H
#define _LIBDLAGGR_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* This file includes structures, macros and routines used by aggregation link
* administration.
@@ -73,21 +71,22 @@ typedef struct dladm_aggr_grp_attr {
aggr_lacp_timer_t lg_lacp_timer;
} dladm_aggr_grp_attr_t;
-extern dladm_status_t dladm_aggr_create(const char *, uint16_t, uint32_t,
- dladm_aggr_port_attr_db_t *, uint32_t, boolean_t,
- const uchar_t *, aggr_lacp_mode_t,
- aggr_lacp_timer_t, uint32_t);
-extern dladm_status_t dladm_aggr_delete(datalink_id_t, uint32_t);
-extern dladm_status_t dladm_aggr_add(datalink_id_t, uint32_t,
- dladm_aggr_port_attr_db_t *, uint32_t);
-extern dladm_status_t dladm_aggr_remove(datalink_id_t, uint32_t,
- dladm_aggr_port_attr_db_t *, uint32_t);
-extern dladm_status_t dladm_aggr_modify(datalink_id_t, uint32_t, uint32_t,
- boolean_t, const uchar_t *, aggr_lacp_mode_t,
- aggr_lacp_timer_t, uint32_t);
-extern dladm_status_t dladm_aggr_up(datalink_id_t);
-extern dladm_status_t dladm_aggr_info(datalink_id_t, dladm_aggr_grp_attr_t *,
+extern dladm_status_t dladm_aggr_create(dladm_handle_t, const char *,
+ uint16_t, uint32_t, dladm_aggr_port_attr_db_t *,
+ uint32_t, boolean_t, const uchar_t *,
+ aggr_lacp_mode_t, aggr_lacp_timer_t, uint32_t);
+extern dladm_status_t dladm_aggr_delete(dladm_handle_t, datalink_id_t,
uint32_t);
+extern dladm_status_t dladm_aggr_add(dladm_handle_t, datalink_id_t, uint32_t,
+ dladm_aggr_port_attr_db_t *, uint32_t);
+extern dladm_status_t dladm_aggr_remove(dladm_handle_t, datalink_id_t,
+ uint32_t, dladm_aggr_port_attr_db_t *, uint32_t);
+extern dladm_status_t dladm_aggr_modify(dladm_handle_t, datalink_id_t,
+ uint32_t, uint32_t, boolean_t, const uchar_t *,
+ aggr_lacp_mode_t, aggr_lacp_timer_t, uint32_t);
+extern dladm_status_t dladm_aggr_up(dladm_handle_t, datalink_id_t);
+extern dladm_status_t dladm_aggr_info(dladm_handle_t, datalink_id_t,
+ dladm_aggr_grp_attr_t *, uint32_t);
extern boolean_t dladm_aggr_str2policy(const char *, uint32_t *);
extern char *dladm_aggr_policy2str(uint32_t, char *);
@@ -101,8 +100,8 @@ extern boolean_t dladm_aggr_str2lacptimer(const char *,
aggr_lacp_timer_t *);
extern const char *dladm_aggr_lacptimer2str(aggr_lacp_timer_t, char *);
extern const char *dladm_aggr_portstate2str(aggr_port_state_t, char *);
-extern dladm_status_t dladm_key2linkid(uint16_t, datalink_id_t *,
- uint32_t);
+extern dladm_status_t dladm_key2linkid(dladm_handle_t, uint16_t,
+ datalink_id_t *, uint32_t);
#ifdef __cplusplus
}
diff --git a/usr/src/lib/libdladm/common/libdlether.c b/usr/src/lib/libdladm/common/libdlether.c
index 926df49dfb..ef89439ae1 100644
--- a/usr/src/lib/libdladm/common/libdlether.c
+++ b/usr/src/lib/libdladm/common/libdlether.c
@@ -105,8 +105,8 @@ static attr_kstat_t attrstat[] = {
* by querying the appropriate kstat for each entry in the table.
*/
static dladm_status_t
-i_dladm_get_spdx(datalink_id_t linkid, dladm_ether_attr_t *eattr,
- ether_spdx_t *spdx_stat)
+i_dladm_get_spdx(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_ether_attr_t *eattr, ether_spdx_t *spdx_stat)
{
int i, nspdx = 0;
uint32_t speed;
@@ -115,7 +115,7 @@ i_dladm_get_spdx(datalink_id_t linkid, dladm_ether_attr_t *eattr,
eattr->le_spdx = NULL;
for (i = 0; spdx_stat[i].eth_spdx_stat_name != NULL; i++) {
- if ((status = dladm_get_single_mac_stat(linkid,
+ if ((status = dladm_get_single_mac_stat(handle, linkid,
spdx_stat[i].eth_spdx_stat_name,
KSTAT_DATA_UINT32, &speed)) != DLADM_STATUS_OK) {
@@ -265,7 +265,8 @@ dladm_ether_spdx2str(char *buf, size_t buflen, dladm_ether_info_t *eattr,
* freed by calling dladm_ether_info_done().
*/
extern dladm_status_t
-dladm_ether_info(datalink_id_t linkid, dladm_ether_info_t *eattr)
+dladm_ether_info(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_ether_info_t *eattr)
{
uint32_t autoneg, pause, asmpause, fault;
uint64_t sp64;
@@ -274,7 +275,7 @@ dladm_ether_info(datalink_id_t linkid, dladm_ether_info_t *eattr)
link_duplex_t link_duplex;
bzero(eattr, sizeof (*eattr));
- status = dladm_datalink_id2info(linkid, NULL, NULL, NULL,
+ status = dladm_datalink_id2info(handle, linkid, NULL, NULL, NULL,
eattr->lei_linkname, sizeof (eattr->lei_linkname));
if (status != DLADM_STATUS_OK)
goto bail;
@@ -287,35 +288,35 @@ dladm_ether_info(datalink_id_t linkid, dladm_ether_info_t *eattr)
goto bail;
}
- if ((status = dladm_get_single_mac_stat(linkid, "ifspeed",
+ if ((status = dladm_get_single_mac_stat(handle, linkid, "ifspeed",
KSTAT_DATA_UINT64, &sp64)) != DLADM_STATUS_OK)
goto bail;
- if ((status = dladm_get_single_mac_stat(linkid, "link_duplex",
+ if ((status = dladm_get_single_mac_stat(handle, linkid, "link_duplex",
KSTAT_DATA_UINT32, &link_duplex)) != DLADM_STATUS_OK)
goto bail;
eattr->lei_attr[CURRENT].le_spdx->lesd_speed = (int)(sp64/1000000ull);
eattr->lei_attr[CURRENT].le_spdx->lesd_duplex = link_duplex;
- status = i_dladm_get_state(linkid, &eattr->lei_state);
+ status = i_dladm_get_state(handle, linkid, &eattr->lei_state);
if (status != DLADM_STATUS_OK)
goto bail;
/* get the auto, pause, asmpause, fault values */
for (i = CURRENT; i <= PEERADV; i++) {
- status = dladm_get_single_mac_stat(linkid,
+ status = dladm_get_single_mac_stat(handle, linkid,
attrstat[i].autoneg_stat, KSTAT_DATA_UINT32, &autoneg);
if (status != DLADM_STATUS_OK)
goto bail;
- status = dladm_get_single_mac_stat(linkid,
+ status = dladm_get_single_mac_stat(handle, linkid,
attrstat[i].pause_stat, KSTAT_DATA_UINT32, &pause);
if (status != DLADM_STATUS_OK)
goto bail;
- status = dladm_get_single_mac_stat(linkid,
+ status = dladm_get_single_mac_stat(handle, linkid,
attrstat[i].asmpause_stat, KSTAT_DATA_UINT32, &asmpause);
if (status != DLADM_STATUS_OK)
goto bail;
@@ -326,14 +327,14 @@ dladm_ether_info(datalink_id_t linkid, dladm_ether_info_t *eattr)
if (i == CURRENT)
continue;
- status = dladm_get_single_mac_stat(linkid,
+ status = dladm_get_single_mac_stat(handle, linkid,
attrstat[i].fault_stat, KSTAT_DATA_UINT32, &fault);
if (status != DLADM_STATUS_OK)
goto bail;
eattr->lei_attr[i].le_fault = (pause != 0);
/* get all the supported speed/duplex values */
- status = i_dladm_get_spdx(linkid, &eattr->lei_attr[i],
+ status = i_dladm_get_spdx(handle, linkid, &eattr->lei_attr[i],
attrstat[i].spdx_stat);
if (status != DLADM_STATUS_OK)
goto bail;
diff --git a/usr/src/lib/libdladm/common/libdlether.h b/usr/src/lib/libdladm/common/libdlether.h
index 2ba38bc2d7..319e4a30a6 100644
--- a/usr/src/lib/libdladm/common/libdlether.h
+++ b/usr/src/lib/libdladm/common/libdlether.h
@@ -65,7 +65,8 @@ typedef struct dladm_ether_info {
dladm_ether_attr_t lei_attr[PEERADV+1];
} dladm_ether_info_t;
-extern dladm_status_t dladm_ether_info(datalink_id_t, dladm_ether_info_t *);
+extern dladm_status_t dladm_ether_info(dladm_handle_t, datalink_id_t,
+ dladm_ether_info_t *);
extern char *dladm_ether_autoneg2str(char *, size_t,
dladm_ether_info_t *, int);
extern char *dladm_ether_pause2str(char *, size_t,
diff --git a/usr/src/lib/libdladm/common/libdlflow.c b/usr/src/lib/libdladm/common/libdlflow.c
index 3ec77705a7..2cb5bf94a0 100644
--- a/usr/src/lib/libdladm/common/libdlflow.c
+++ b/usr/src/lib/libdladm/common/libdlflow.c
@@ -533,11 +533,10 @@ failed:
}
static dladm_status_t
-i_dladm_flow_add(char *flowname, datalink_id_t linkid, flow_desc_t *flowdesc,
- mac_resource_props_t *mrp)
+i_dladm_flow_add(dladm_handle_t handle, char *flowname, datalink_id_t linkid,
+ flow_desc_t *flowdesc, mac_resource_props_t *mrp)
{
dld_ioc_addflow_t attr;
- int fd;
/* create flow */
bzero(&attr, sizeof (attr));
@@ -550,48 +549,33 @@ i_dladm_flow_add(char *flowname, datalink_id_t linkid, flow_desc_t *flowdesc,
(void) strlcpy(attr.af_name, flowname, sizeof (attr.af_name));
attr.af_linkid = linkid;
- fd = open(DLD_CONTROL_DEV, O_RDWR);
- if (fd < 0)
- return (dladm_errno2status(errno));
-
- if (ioctl(fd, DLDIOC_ADDFLOW, &attr) < 0) {
- (void) close(fd);
+ if (ioctl(dladm_dld_fd(handle), DLDIOC_ADDFLOW, &attr) < 0)
return (dladm_errno2status(errno));
- }
-
- (void) close(fd);
return (DLADM_STATUS_OK);
}
static dladm_status_t
-i_dladm_flow_remove(char *flowname)
+i_dladm_flow_remove(dladm_handle_t handle, char *flowname)
{
dld_ioc_removeflow_t attr;
- int fd;
dladm_status_t status = DLADM_STATUS_OK;
(void) strlcpy(attr.rf_name, flowname,
sizeof (attr.rf_name));
- fd = open(DLD_CONTROL_DEV, O_RDWR);
- if (fd < 0)
- return (dladm_errno2status(errno));
-
- if (ioctl(fd, DLDIOC_REMOVEFLOW, &attr) < 0)
+ if (ioctl(dladm_dld_fd(handle), DLDIOC_REMOVEFLOW, &attr) < 0)
status = dladm_errno2status(errno);
- (void) close(fd);
-
return (status);
}
/* ARGSUSED */
dladm_status_t
-dladm_flow_add(datalink_id_t linkid, dladm_arg_list_t *attrlist,
- dladm_arg_list_t *proplist, char *flowname, boolean_t tempop,
- const char *root)
+dladm_flow_add(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_arg_list_t *attrlist, dladm_arg_list_t *proplist, char *flowname,
+ boolean_t tempop, const char *root)
{
dld_flowinfo_t db_attr;
flow_desc_t flowdesc;
@@ -613,7 +597,7 @@ dladm_flow_add(datalink_id_t linkid, dladm_arg_list_t *attrlist,
}
/* Add flow in kernel */
- status = i_dladm_flow_add(flowname, linkid, &flowdesc, &mrp);
+ status = i_dladm_flow_add(handle, flowname, linkid, &flowdesc, &mrp);
if (status != DLADM_STATUS_OK)
return (status);
@@ -627,15 +611,15 @@ dladm_flow_add(datalink_id_t linkid, dladm_arg_list_t *attrlist,
if ((status = i_dladm_flow_create_db(&db_attr, root)) !=
DLADM_STATUS_OK) {
- (void) i_dladm_flow_remove(flowname);
+ (void) i_dladm_flow_remove(handle, flowname);
return (status);
}
/* set flow properties */
if (proplist != NULL) {
- status = i_dladm_set_flow_proplist_db(flowname,
+ status = i_dladm_set_flow_proplist_db(handle, flowname,
proplist);
if (status != DLADM_STATUS_OK) {
- (void) i_dladm_flow_remove(flowname);
+ (void) i_dladm_flow_remove(handle, flowname);
return (status);
}
}
@@ -648,7 +632,7 @@ dladm_flow_add(datalink_id_t linkid, dladm_arg_list_t *attrlist,
*/
/* ARGSUSED */
dladm_status_t
-dladm_flow_remove(char *flowname, boolean_t tempop,
+dladm_flow_remove(dladm_handle_t handle, char *flowname, boolean_t tempop,
const char *root)
{
remove_db_state_t state;
@@ -656,7 +640,7 @@ dladm_flow_remove(char *flowname, boolean_t tempop,
dladm_status_t s = DLADM_STATUS_OK;
/* remove flow */
- status = i_dladm_flow_remove(flowname);
+ status = i_dladm_flow_remove(handle, flowname);
if ((status != DLADM_STATUS_OK) &&
(tempop || status != DLADM_STATUS_NOTFOUND))
goto done;
@@ -675,7 +659,7 @@ dladm_flow_remove(char *flowname, boolean_t tempop,
}
/* flow prop DB */
- s = dladm_set_flowprop(flowname, NULL, NULL, 0,
+ s = dladm_set_flowprop(handle, flowname, NULL, NULL, 0,
DLADM_OPT_PERSIST, NULL);
}
@@ -735,11 +719,11 @@ i_dladm_flow_get_db_fn(void *arg, dld_flowinfo_t *grp)
*/
/* ARGSUSED */
dladm_status_t
-dladm_walk_flow(int (*fn)(dladm_flow_attr_t *, void *),
+dladm_walk_flow(int (*fn)(dladm_flow_attr_t *, void *), dladm_handle_t handle,
datalink_id_t linkid, void *arg, boolean_t persist)
{
dld_flowinfo_t *flow;
- int i, bufsize, fd;
+ int i, bufsize;
dld_ioc_walkflow_t *ioc = NULL;
dladm_flow_attr_t attr;
dladm_status_t status = DLADM_STATUS_OK;
@@ -760,20 +744,16 @@ dladm_walk_flow(int (*fn)(dladm_flow_attr_t *, void *),
if (status != DLADM_STATUS_OK)
return (status);
} else {
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (dladm_errno2status(errno));
-
bufsize = MIN_INFO_SIZE;
if ((ioc = calloc(1, bufsize)) == NULL) {
status = dladm_errno2status(errno);
- (void) close(fd);
return (status);
}
ioc->wf_linkid = linkid;
ioc->wf_len = bufsize - sizeof (*ioc);
- while (ioctl(fd, DLDIOC_WALKFLOW, ioc) < 0) {
+ while (ioctl(dladm_dld_fd(handle), DLDIOC_WALKFLOW, ioc) < 0) {
if (errno == ENOSPC) {
bufsize *= 2;
ioc = realloc(ioc, bufsize);
@@ -805,12 +785,11 @@ dladm_walk_flow(int (*fn)(dladm_flow_attr_t *, void *),
bail:
free(ioc);
- (void) close(fd);
return (status);
}
dladm_status_t
-dladm_flow_init(void)
+dladm_flow_init(dladm_handle_t handle)
{
flow_desc_t flowdesc;
datalink_id_t linkid;
@@ -841,11 +820,11 @@ dladm_flow_init(void)
sizeof (attr.fi_flowname));
linkid = attr.fi_linkid;
- s = i_dladm_flow_add(name, linkid, &flowdesc, NULL);
+ s = i_dladm_flow_add(handle, name, linkid, &flowdesc, NULL);
if (s != DLADM_STATUS_OK)
status = s;
}
- s = i_dladm_init_flowprop_db();
+ s = i_dladm_init_flowprop_db(handle);
if (s != DLADM_STATUS_OK)
status = s;
diff --git a/usr/src/lib/libdladm/common/libdlflow.h b/usr/src/lib/libdladm/common/libdlflow.h
index d35631ba4b..c4d246ae89 100644
--- a/usr/src/lib/libdladm/common/libdlflow.h
+++ b/usr/src/lib/libdladm/common/libdlflow.h
@@ -52,21 +52,23 @@ typedef struct dladm_flow_attr {
int fa_nattr;
} dladm_flow_attr_t;
-extern dladm_status_t dladm_flow_add(datalink_id_t, dladm_arg_list_t *,
- dladm_arg_list_t *, char *, boolean_t,
+extern dladm_status_t dladm_flow_add(dladm_handle_t, datalink_id_t,
+ dladm_arg_list_t *, dladm_arg_list_t *, char *,
+ boolean_t, const char *);
+extern dladm_status_t dladm_flow_remove(dladm_handle_t, char *, boolean_t,
const char *);
-extern dladm_status_t dladm_flow_remove(char *, boolean_t, const char *);
-extern dladm_status_t dladm_flow_init(void);
+extern dladm_status_t dladm_flow_init(dladm_handle_t);
extern dladm_status_t dladm_flow_parse_db(char *, dld_flowinfo_t *);
-extern dladm_status_t dladm_walk_flow(int (*)(dladm_flow_attr_t *,
- void *), datalink_id_t, void *, boolean_t);
-extern dladm_status_t dladm_flow_info(const char *, dladm_flow_attr_t *);
+extern dladm_status_t dladm_walk_flow(int (*)(dladm_flow_attr_t *, void *),
+ dladm_handle_t, datalink_id_t, void *, boolean_t);
+extern dladm_status_t dladm_flow_info(dladm_handle_t, const char *,
+ dladm_flow_attr_t *);
-extern dladm_status_t dladm_set_flowprop(const char *, const char *,
- char **, uint_t, uint_t, char **);
-extern dladm_status_t dladm_get_flowprop(const char *, uint32_t,
- const char *, char **, uint_t *);
+extern dladm_status_t dladm_set_flowprop(dladm_handle_t, const char *,
+ const char *, char **, uint_t, uint_t, char **);
+extern dladm_status_t dladm_get_flowprop(dladm_handle_t, const char *,
+ uint32_t, const char *, char **, uint_t *);
extern dladm_status_t dladm_walk_flowprop(int (*)(void *, const char *),
const char *, void *);
diff --git a/usr/src/lib/libdladm/common/libdlflow_impl.h b/usr/src/lib/libdladm/common/libdlflow_impl.h
index 09b6d55bc1..060c31d84b 100644
--- a/usr/src/lib/libdladm/common/libdlflow_impl.h
+++ b/usr/src/lib/libdladm/common/libdlflow_impl.h
@@ -38,10 +38,12 @@ extern "C" {
struct fprop_desc;
struct fattr_desc;
-typedef dladm_status_t fpd_getf_t(const char *, char **, uint_t *);
-typedef dladm_status_t fpd_setf_t(const char *, val_desc_t *, uint_t);
-typedef dladm_status_t fpd_checkf_t(struct fprop_desc *, char **,
- uint_t, val_desc_t **);
+typedef dladm_status_t fpd_getf_t(dladm_handle_t, const char *, char **,
+ uint_t *);
+typedef dladm_status_t fpd_setf_t(dladm_handle_t, const char *, val_desc_t *,
+ uint_t);
+typedef dladm_status_t fpd_checkf_t(struct fprop_desc *, char **, uint_t,
+ val_desc_t **);
typedef struct fprop_desc {
char *pd_name;
@@ -77,10 +79,12 @@ typedef struct fattr_desc {
fad_checkf_t *ad_check;
} fattr_desc_t;
-extern dladm_status_t i_dladm_get_prop_temp(const char *, prop_type_t,
- const char *, char **, uint_t *, prop_table_t *);
-extern dladm_status_t i_dladm_set_prop_temp(const char *, const char *,
- char **, uint_t, uint_t, char **, prop_table_t *);
+extern dladm_status_t i_dladm_get_prop_temp(dladm_handle_t, const char *,
+ prop_type_t, const char *, char **, uint_t *,
+ prop_table_t *);
+extern dladm_status_t i_dladm_set_prop_temp(dladm_handle_t, const char *,
+ const char *, char **, uint_t, uint_t, char **,
+ prop_table_t *);
extern boolean_t i_dladm_is_prop_temponly(const char *prop_name,
char **, prop_table_t *);
/*
@@ -99,11 +103,11 @@ typedef struct prop_db_info {
typedef struct prop_db_state prop_db_state_t;
-typedef boolean_t (*prop_db_op_t)(prop_db_state_t *,
+typedef boolean_t (*prop_db_op_t)(dladm_handle_t, prop_db_state_t *,
char *, prop_db_info_t *, dladm_status_t *);
-typedef dladm_status_t (*prop_db_initop_t)(const char *, const char *,
- char **, uint_t, uint_t, char **);
+typedef dladm_status_t (*prop_db_initop_t)(dladm_handle_t, const char *,
+ const char *, char **, uint_t, uint_t, char **);
struct prop_db_state {
prop_db_op_t ls_op;
@@ -114,22 +118,26 @@ struct prop_db_state {
prop_db_initop_t ls_initop;
};
-extern boolean_t process_prop_set(prop_db_state_t *lsp, char *buf,
- prop_db_info_t *listp, dladm_status_t *statusp);
-extern boolean_t process_prop_get(prop_db_state_t *lsp, char *buf,
- prop_db_info_t *listp, dladm_status_t *statusp);
-extern boolean_t process_prop_init(prop_db_state_t *lsp, char *buf,
- prop_db_info_t *listp, dladm_status_t *statusp);
-extern dladm_status_t process_prop_db(void *arg, FILE *fp, FILE *nfp);
-
-extern dladm_status_t i_dladm_init_flowprop_db(void);
-extern dladm_status_t i_dladm_set_flow_proplist_db(char *,
- dladm_arg_list_t *);
+extern boolean_t process_prop_set(dladm_handle_t, prop_db_state_t *lsp,
+ char *buf, prop_db_info_t *listp,
+ dladm_status_t *statusp);
+extern boolean_t process_prop_get(dladm_handle_t, prop_db_state_t *lsp,
+ char *buf, prop_db_info_t *listp,
+ dladm_status_t *statusp);
+extern boolean_t process_prop_init(dladm_handle_t, prop_db_state_t *lsp,
+ char *buf, prop_db_info_t *listp,
+ dladm_status_t *statusp);
+extern dladm_status_t process_prop_db(dladm_handle_t, void *arg, FILE *fp,
+ FILE *nfp);
+
+extern dladm_status_t i_dladm_init_flowprop_db(dladm_handle_t);
+extern dladm_status_t i_dladm_set_flow_proplist_db(dladm_handle_t, char *,
+ dladm_arg_list_t *);
extern dladm_status_t i_dladm_flow_check_restriction(datalink_id_t,
- flow_desc_t *, mac_resource_props_t *, boolean_t);
+ flow_desc_t *, mac_resource_props_t *, boolean_t);
extern dladm_status_t dladm_flow_attrlist_extract(dladm_arg_list_t *,
- flow_desc_t *);
+ flow_desc_t *);
#ifdef __cplusplus
}
diff --git a/usr/src/lib/libdladm/common/libdllink.c b/usr/src/lib/libdladm/common/libdllink.c
index 5698409442..c73e7e0b92 100644
--- a/usr/src/lib/libdladm/common/libdllink.c
+++ b/usr/src/lib/libdladm/common/libdllink.c
@@ -48,13 +48,14 @@
* Return the attributes of the specified datalink from the DLD driver.
*/
static dladm_status_t
-i_dladm_info(int fd, const datalink_id_t linkid, dladm_attr_t *dap)
+i_dladm_info(dladm_handle_t handle, const datalink_id_t linkid,
+ dladm_attr_t *dap)
{
dld_ioc_attr_t dia;
dia.dia_linkid = linkid;
- if (ioctl(fd, DLDIOC_ATTR, &dia) < 0)
+ if (ioctl(dladm_dld_fd(handle), DLDIOC_ATTR, &dia) < 0)
return (dladm_errno2status(errno));
dap->da_max_sdu = dia.dia_max_sdu;
@@ -63,47 +64,41 @@ i_dladm_info(int fd, const datalink_id_t linkid, dladm_attr_t *dap)
}
static dladm_status_t
-dladm_usagelog(dladm_logtype_t type, dld_ioc_usagelog_t *log_info)
+dladm_usagelog(dladm_handle_t handle, dladm_logtype_t type,
+ dld_ioc_usagelog_t *log_info)
{
- int fd;
-
- fd = open(DLD_CONTROL_DEV, O_RDWR);
- if (fd < 0)
- return (DLADM_STATUS_IOERR);
-
if (type == DLADM_LOGTYPE_FLOW)
log_info->ul_type = MAC_LOGTYPE_FLOW;
else
log_info->ul_type = MAC_LOGTYPE_LINK;
- if (ioctl(fd, DLDIOC_USAGELOG, log_info) < 0) {
- (void) close(fd);
+ if (ioctl(dladm_dld_fd(handle), DLDIOC_USAGELOG, log_info) < 0)
return (DLADM_STATUS_IOERR);
- }
- (void) close(fd);
+
return (DLADM_STATUS_OK);
}
dladm_status_t
-dladm_start_usagelog(dladm_logtype_t type, uint_t interval)
+dladm_start_usagelog(dladm_handle_t handle, dladm_logtype_t type,
+ uint_t interval)
{
dld_ioc_usagelog_t log_info;
log_info.ul_onoff = B_TRUE;
log_info.ul_interval = interval;
- return (dladm_usagelog(type, &log_info));
+ return (dladm_usagelog(handle, type, &log_info));
}
dladm_status_t
-dladm_stop_usagelog(dladm_logtype_t type)
+dladm_stop_usagelog(dladm_handle_t handle, dladm_logtype_t type)
{
dld_ioc_usagelog_t log_info;
log_info.ul_onoff = B_FALSE;
log_info.ul_interval = 0;
- return (dladm_usagelog(type, &log_info));
+ return (dladm_usagelog(handle, type, &log_info));
}
struct i_dladm_walk_arg {
@@ -112,12 +107,12 @@ struct i_dladm_walk_arg {
};
static int
-i_dladm_walk(datalink_id_t linkid, void *arg)
+i_dladm_walk(dladm_handle_t handle, datalink_id_t linkid, void *arg)
{
struct i_dladm_walk_arg *walk_arg = arg;
char link[MAXLINKNAMELEN];
- if (dladm_datalink_id2info(linkid, NULL, NULL, NULL, link,
+ if (dladm_datalink_id2info(handle, linkid, NULL, NULL, NULL, link,
sizeof (link)) == DLADM_STATUS_OK) {
return (walk_arg->fn(link, walk_arg->arg));
}
@@ -129,30 +124,27 @@ i_dladm_walk(datalink_id_t linkid, void *arg)
* Walk all datalinks.
*/
dladm_status_t
-dladm_walk(dladm_walkcb_t *fn, void *arg, datalink_class_t class,
- datalink_media_t dmedia, uint32_t flags)
+dladm_walk(dladm_walkcb_t *fn, dladm_handle_t handle, void *arg,
+ datalink_class_t class, datalink_media_t dmedia, uint32_t flags)
{
struct i_dladm_walk_arg walk_arg;
walk_arg.fn = fn;
walk_arg.arg = arg;
- return (dladm_walk_datalink_id(i_dladm_walk, &walk_arg,
+ return (dladm_walk_datalink_id(i_dladm_walk, handle, &walk_arg,
class, dmedia, flags));
}
#define MAXGRPPERLINK 64
int
-dladm_walk_hwgrp(datalink_id_t linkid, void *arg,
+dladm_walk_hwgrp(dladm_handle_t handle, datalink_id_t linkid, void *arg,
boolean_t (*fn)(void *, dladm_hwgrp_attr_t *))
{
- int fd, bufsize, ret;
+ int bufsize, ret;
int nhwgrp = MAXGRPPERLINK;
dld_ioc_hwgrpget_t *iomp = NULL;
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (-1);
-
bufsize = sizeof (dld_ioc_hwgrpget_t) +
nhwgrp * sizeof (dld_hwgrpinfo_t);
@@ -162,7 +154,7 @@ dladm_walk_hwgrp(datalink_id_t linkid, void *arg,
iomp->dih_size = nhwgrp * sizeof (dld_hwgrpinfo_t);
iomp->dih_linkid = linkid;
- ret = ioctl(fd, DLDIOC_GETHWGRP, iomp);
+ ret = ioctl(dladm_dld_fd(handle), DLDIOC_GETHWGRP, iomp);
if (ret == 0) {
int i;
dld_hwgrpinfo_t *dhip;
@@ -187,7 +179,6 @@ dladm_walk_hwgrp(datalink_id_t linkid, void *arg,
}
}
free(iomp);
- (void) close(fd);
return (ret);
}
@@ -196,16 +187,13 @@ dladm_walk_hwgrp(datalink_id_t linkid, void *arg,
* the specified device.
*/
int
-dladm_walk_macaddr(datalink_id_t linkid, void *arg,
+dladm_walk_macaddr(dladm_handle_t handle, datalink_id_t linkid, void *arg,
boolean_t (*fn)(void *, dladm_macaddr_attr_t *))
{
- int fd, bufsize, ret;
+ int bufsize, ret;
int nmacaddr = 1024;
dld_ioc_macaddrget_t *iomp = NULL;
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (-1);
-
bufsize = sizeof (dld_ioc_macaddrget_t) +
nmacaddr * sizeof (dld_macaddrinfo_t);
@@ -215,7 +203,7 @@ dladm_walk_macaddr(datalink_id_t linkid, void *arg,
iomp->dig_size = nmacaddr * sizeof (dld_macaddrinfo_t);
iomp->dig_linkid = linkid;
- ret = ioctl(fd, DLDIOC_MACADDRGET, iomp);
+ ret = ioctl(dladm_dld_fd(handle), DLDIOC_MACADDRGET, iomp);
if (ret == 0) {
int i;
dld_macaddrinfo_t *dmip;
@@ -242,7 +230,6 @@ dladm_walk_macaddr(datalink_id_t linkid, void *arg,
}
}
free(iomp);
- (void) close(fd);
return (ret);
}
@@ -346,18 +333,9 @@ dladm_mac_walk(int (*fn)(const char *, void *arg), void *arg)
* Get the current attributes of the specified datalink.
*/
dladm_status_t
-dladm_info(datalink_id_t linkid, dladm_attr_t *dap)
+dladm_info(dladm_handle_t handle, datalink_id_t linkid, dladm_attr_t *dap)
{
- int fd;
- dladm_status_t status;
-
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (dladm_errno2status(errno));
-
- status = i_dladm_info(fd, linkid, dap);
-
- (void) close(fd);
- return (status);
+ return (i_dladm_info(handle, linkid, dap));
}
const char *
@@ -406,17 +384,17 @@ dladm_linkduplex2str(link_duplex_t duplex, char *buf)
* be created implicitly as the result of this function.
*/
dladm_status_t
-dladm_setzid(const char *dlname, char *zone_name)
+dladm_setzid(dladm_handle_t handle, const char *dlname, char *zone_name)
{
datalink_id_t linkid;
dladm_status_t status = DLADM_STATUS_OK;
/* If the link does not exist, it is a ppa-hacked vlan. */
- status = dladm_name2info(dlname, &linkid, NULL, NULL, NULL);
+ status = dladm_name2info(handle, dlname, &linkid, NULL, NULL, NULL);
if (status != DLADM_STATUS_OK)
return (status);
- status = dladm_set_linkprop(linkid, "zone", &zone_name, 1,
+ status = dladm_set_linkprop(handle, linkid, "zone", &zone_name, 1,
DLADM_OPT_ACTIVE);
return (status);
@@ -427,13 +405,12 @@ dladm_setzid(const char *dlname, char *zone_name)
* Result: <linkid1, link2>
*/
static dladm_status_t
-i_dladm_rename_link_c1(datalink_id_t linkid1, const char *link1,
- const char *link2, uint32_t flags)
+i_dladm_rename_link_c1(dladm_handle_t handle, datalink_id_t linkid1,
+ const char *link1, const char *link2, uint32_t flags)
{
dld_ioc_rename_t dir;
dladm_conf_t conf;
dladm_status_t status = DLADM_STATUS_OK;
- int fd;
/*
* Link is currently available. Check to see whether anything is
@@ -443,17 +420,14 @@ i_dladm_rename_link_c1(datalink_id_t linkid1, const char *link1,
dir.dir_linkid1 = linkid1;
dir.dir_linkid2 = DATALINK_INVALID_LINKID;
(void) strlcpy(dir.dir_link, link2, MAXLINKNAMELEN);
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (dladm_errno2status(errno));
- if (ioctl(fd, DLDIOC_RENAME, &dir) < 0) {
+ if (ioctl(dladm_dld_fd(handle), DLDIOC_RENAME, &dir) < 0) {
status = dladm_errno2status(errno);
- (void) close(fd);
return (status);
}
}
- status = dladm_remap_datalink_id(linkid1, link2);
+ status = dladm_remap_datalink_id(handle, linkid1, link2);
if (status != DLADM_STATUS_OK)
goto done;
@@ -461,17 +435,17 @@ i_dladm_rename_link_c1(datalink_id_t linkid1, const char *link1,
* Flush the current mapping to persistent configuration.
*/
if ((flags & DLADM_OPT_PERSIST) &&
- (((status = dladm_read_conf(linkid1, &conf)) != DLADM_STATUS_OK) ||
- ((status = dladm_write_conf(conf)) != DLADM_STATUS_OK))) {
- (void) dladm_remap_datalink_id(linkid1, link1);
+ (((status = dladm_read_conf(handle, linkid1, &conf)) !=
+ DLADM_STATUS_OK) ||
+ ((status = dladm_write_conf(handle, conf)) != DLADM_STATUS_OK))) {
+ (void) dladm_remap_datalink_id(handle, linkid1, link1);
}
done:
if (flags & DLADM_OPT_ACTIVE) {
if (status != DLADM_STATUS_OK) {
(void) strlcpy(dir.dir_link, link1, MAXLINKNAMELEN);
- (void) ioctl(fd, DLDIOC_RENAME, &dir);
+ (void) ioctl(dladm_dld_fd(handle), DLDIOC_RENAME, &dir);
}
- (void) close(fd);
}
return (status);
}
@@ -483,14 +457,14 @@ typedef struct link_hold_arg_s {
} link_hold_arg_t;
static int
-i_dladm_aggr_link_hold(datalink_id_t aggrid, void *arg)
+i_dladm_aggr_link_hold(dladm_handle_t handle, datalink_id_t aggrid, void *arg)
{
link_hold_arg_t *hold_arg = arg;
dladm_aggr_grp_attr_t ginfo;
dladm_status_t status;
int i;
- status = dladm_aggr_info(aggrid, &ginfo, hold_arg->flags);
+ status = dladm_aggr_info(handle, aggrid, &ginfo, hold_arg->flags);
if (status != DLADM_STATUS_OK)
return (DLADM_WALK_CONTINUE);
@@ -504,13 +478,13 @@ i_dladm_aggr_link_hold(datalink_id_t aggrid, void *arg)
}
static int
-i_dladm_vlan_link_hold(datalink_id_t vlanid, void *arg)
+i_dladm_vlan_link_hold(dladm_handle_t handle, datalink_id_t vlanid, void *arg)
{
link_hold_arg_t *hold_arg = arg;
dladm_vlan_attr_t vinfo;
dladm_status_t status;
- status = dladm_vlan_info(vlanid, &vinfo, hold_arg->flags);
+ status = dladm_vlan_info(handle, vlanid, &vinfo, hold_arg->flags);
if (status != DLADM_STATUS_OK)
return (DLADM_WALK_CONTINUE);
@@ -529,13 +503,13 @@ i_dladm_vlan_link_hold(datalink_id_t vlanid, void *arg)
* link2_other_attr>
*/
static dladm_status_t
-i_dladm_rename_link_c2(datalink_id_t linkid1, datalink_id_t linkid2)
+i_dladm_rename_link_c2(dladm_handle_t handle, datalink_id_t linkid1,
+ datalink_id_t linkid2)
{
rcm_handle_t *rcm_hdl = NULL;
nvlist_t *nvl = NULL;
link_hold_arg_t arg;
dld_ioc_rename_t dir;
- int fd;
dladm_conf_t conf1, conf2;
char devname[MAXLINKNAMELEN];
uint64_t phymaj, phyinst;
@@ -548,13 +522,13 @@ i_dladm_rename_link_c2(datalink_id_t linkid1, datalink_id_t linkid2)
arg.linkid = linkid1;
arg.holder = DATALINK_INVALID_LINKID;
arg.flags = DLADM_OPT_PERSIST;
- (void) dladm_walk_datalink_id(i_dladm_aggr_link_hold, &arg,
+ (void) dladm_walk_datalink_id(i_dladm_aggr_link_hold, handle, &arg,
DATALINK_CLASS_AGGR, DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
if (arg.holder != DATALINK_INVALID_LINKID)
return (DLADM_STATUS_LINKBUSY);
arg.flags = DLADM_OPT_PERSIST;
- (void) dladm_walk_datalink_id(i_dladm_vlan_link_hold, &arg,
+ (void) dladm_walk_datalink_id(i_dladm_vlan_link_hold, handle, &arg,
DATALINK_CLASS_VLAN, DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
if (arg.holder != DATALINK_INVALID_LINKID)
return (DLADM_STATUS_LINKBUSY);
@@ -565,16 +539,12 @@ i_dladm_rename_link_c2(datalink_id_t linkid1, datalink_id_t linkid2)
* aggregations or VLANs, or is held by any application. If yes,
* return failure.
*/
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (dladm_errno2status(errno));
-
dir.dir_linkid1 = linkid1;
dir.dir_linkid2 = linkid2;
- if (ioctl(fd, DLDIOC_RENAME, &dir) < 0)
+ if (ioctl(dladm_dld_fd(handle), DLDIOC_RENAME, &dir) < 0)
status = dladm_errno2status(errno);
if (status != DLADM_STATUS_OK) {
- (void) close(fd);
return (status);
}
@@ -583,40 +553,43 @@ i_dladm_rename_link_c2(datalink_id_t linkid1, datalink_id_t linkid2)
* to be associated with linkid2. Before doing that, the old active
* linkprop of linkid1 should be deleted.
*/
- (void) dladm_set_linkprop(linkid1, NULL, NULL, 0, DLADM_OPT_ACTIVE);
+ (void) dladm_set_linkprop(handle, linkid1, NULL, NULL, 0,
+ DLADM_OPT_ACTIVE);
- if (((status = dladm_read_conf(linkid1, &conf1)) != DLADM_STATUS_OK) ||
- ((status = dladm_get_conf_field(conf1, FDEVNAME, devname,
+ if (((status = dladm_read_conf(handle, linkid1, &conf1)) !=
+ DLADM_STATUS_OK) ||
+ ((status = dladm_get_conf_field(handle, conf1, FDEVNAME, devname,
MAXLINKNAMELEN)) != DLADM_STATUS_OK) ||
- ((status = dladm_get_conf_field(conf1, FPHYMAJ, &phymaj,
+ ((status = dladm_get_conf_field(handle, conf1, FPHYMAJ, &phymaj,
sizeof (uint64_t))) != DLADM_STATUS_OK) ||
- ((status = dladm_get_conf_field(conf1, FPHYINST, &phyinst,
+ ((status = dladm_get_conf_field(handle, conf1, FPHYINST, &phyinst,
sizeof (uint64_t))) != DLADM_STATUS_OK) ||
- ((status = dladm_read_conf(linkid2, &conf2)) != DLADM_STATUS_OK)) {
+ ((status = dladm_read_conf(handle, linkid2, &conf2)) !=
+ DLADM_STATUS_OK)) {
dir.dir_linkid1 = linkid2;
dir.dir_linkid2 = linkid1;
- (void) dladm_init_linkprop(linkid1, B_FALSE);
- (void) ioctl(fd, DLDIOC_RENAME, &dir);
- (void) close(fd);
+ (void) dladm_init_linkprop(handle, linkid1, B_FALSE);
+ (void) ioctl(dladm_dld_fd(handle), DLDIOC_RENAME, &dir);
return (status);
}
- (void) close(fd);
- dladm_destroy_conf(conf1);
- (void) dladm_set_conf_field(conf2, FDEVNAME, DLADM_TYPE_STR, devname);
- (void) dladm_set_conf_field(conf2, FPHYMAJ, DLADM_TYPE_UINT64, &phymaj);
- (void) dladm_set_conf_field(conf2, FPHYINST,
+ dladm_destroy_conf(handle, conf1);
+ (void) dladm_set_conf_field(handle, conf2, FDEVNAME, DLADM_TYPE_STR,
+ devname);
+ (void) dladm_set_conf_field(handle, conf2, FPHYMAJ, DLADM_TYPE_UINT64,
+ &phymaj);
+ (void) dladm_set_conf_field(handle, conf2, FPHYINST,
DLADM_TYPE_UINT64, &phyinst);
- (void) dladm_write_conf(conf2);
- dladm_destroy_conf(conf2);
+ (void) dladm_write_conf(handle, conf2);
+ dladm_destroy_conf(handle, conf2);
/*
* Delete link1 and mark link2 up.
*/
- (void) dladm_destroy_datalink_id(linkid1, DLADM_OPT_ACTIVE |
+ (void) dladm_destroy_datalink_id(handle, linkid1, DLADM_OPT_ACTIVE |
DLADM_OPT_PERSIST);
- (void) dladm_remove_conf(linkid1);
- (void) dladm_up_datalink_id(linkid2);
+ (void) dladm_remove_conf(handle, linkid1);
+ (void) dladm_up_datalink_id(handle, linkid2);
/*
* Now generate the RCM_RESOURCE_LINK_NEW sysevent which can be
@@ -652,7 +625,8 @@ done:
* the removed physical link.
*/
static dladm_status_t
-i_dladm_rename_link_c3(const char *link1, datalink_id_t linkid2)
+i_dladm_rename_link_c3(dladm_handle_t handle, const char *link1,
+ datalink_id_t linkid2)
{
dladm_conf_t conf;
dladm_status_t status;
@@ -660,23 +634,23 @@ i_dladm_rename_link_c3(const char *link1, datalink_id_t linkid2)
if (!dladm_valid_linkname(link1))
return (DLADM_STATUS_LINKINVAL);
- status = dladm_read_conf(linkid2, &conf);
+ status = dladm_read_conf(handle, linkid2, &conf);
if (status != DLADM_STATUS_OK)
goto done;
- if ((status = dladm_set_conf_field(conf, FDEVNAME, DLADM_TYPE_STR,
- link1)) == DLADM_STATUS_OK) {
- status = dladm_write_conf(conf);
+ if ((status = dladm_set_conf_field(handle, conf, FDEVNAME,
+ DLADM_TYPE_STR, link1)) == DLADM_STATUS_OK) {
+ status = dladm_write_conf(handle, conf);
}
- dladm_destroy_conf(conf);
+ dladm_destroy_conf(handle, conf);
done:
return (status);
}
dladm_status_t
-dladm_rename_link(const char *link1, const char *link2)
+dladm_rename_link(dladm_handle_t handle, const char *link1, const char *link2)
{
datalink_id_t linkid1 = DATALINK_INVALID_LINKID;
datalink_id_t linkid2 = DATALINK_INVALID_LINKID;
@@ -686,9 +660,10 @@ dladm_rename_link(const char *link1, const char *link2)
boolean_t remphy2 = B_FALSE;
dladm_status_t status;
- (void) dladm_name2info(link1, &linkid1, &flags1, &class1, &media1);
- if ((dladm_name2info(link2, &linkid2, &flags2, &class2, &media2) ==
- DLADM_STATUS_OK) && (class2 == DATALINK_CLASS_PHYS) &&
+ (void) dladm_name2info(handle, link1, &linkid1, &flags1, &class1,
+ &media1);
+ if ((dladm_name2info(handle, link2, &linkid2, &flags2, &class2,
+ &media2) == DLADM_STATUS_OK) && (class2 == DATALINK_CLASS_PHYS) &&
(flags2 == DLADM_OPT_PERSIST)) {
/*
* see whether link2 is a removed physical link.
@@ -702,8 +677,8 @@ dladm_rename_link(const char *link1, const char *link2)
* case 1: rename an existing link to a link that
* does not exist.
*/
- status = i_dladm_rename_link_c1(linkid1, link1, link2,
- flags1);
+ status = i_dladm_rename_link_c1(handle, linkid1, link1,
+ link2, flags1);
} else if (remphy2) {
/*
* case 2: rename an available link to a REMOVED
@@ -714,14 +689,14 @@ dladm_rename_link(const char *link1, const char *link2)
!(flags1 & DLADM_OPT_ACTIVE)) {
status = DLADM_STATUS_BADARG;
} else {
- status = i_dladm_rename_link_c2(linkid1,
+ status = i_dladm_rename_link_c2(handle, linkid1,
linkid2);
}
} else {
status = DLADM_STATUS_EXIST;
}
} else if (remphy2) {
- status = i_dladm_rename_link_c3(link1, linkid2);
+ status = i_dladm_rename_link_c3(handle, link1, linkid2);
} else {
status = DLADM_STATUS_NOTFOUND;
}
@@ -733,23 +708,23 @@ typedef struct consumer_del_phys_arg_s {
} consumer_del_phys_arg_t;
static int
-i_dladm_vlan_link_del(datalink_id_t vlanid, void *arg)
+i_dladm_vlan_link_del(dladm_handle_t handle, datalink_id_t vlanid, void *arg)
{
consumer_del_phys_arg_t *del_arg = arg;
dladm_vlan_attr_t vinfo;
dladm_status_t status;
- status = dladm_vlan_info(vlanid, &vinfo, DLADM_OPT_PERSIST);
+ status = dladm_vlan_info(handle, vlanid, &vinfo, DLADM_OPT_PERSIST);
if (status != DLADM_STATUS_OK)
return (DLADM_WALK_CONTINUE);
if (vinfo.dv_linkid == del_arg->linkid)
- (void) dladm_vlan_delete(vlanid, DLADM_OPT_PERSIST);
+ (void) dladm_vlan_delete(handle, vlanid, DLADM_OPT_PERSIST);
return (DLADM_WALK_CONTINUE);
}
static int
-i_dladm_aggr_link_del(datalink_id_t aggrid, void *arg)
+i_dladm_aggr_link_del(dladm_handle_t handle, datalink_id_t aggrid, void *arg)
{
consumer_del_phys_arg_t *del_arg = arg;
dladm_aggr_grp_attr_t ginfo;
@@ -757,7 +732,7 @@ i_dladm_aggr_link_del(datalink_id_t aggrid, void *arg)
dladm_aggr_port_attr_db_t port[1];
int i;
- status = dladm_aggr_info(aggrid, &ginfo, DLADM_OPT_PERSIST);
+ status = dladm_aggr_info(handle, aggrid, &ginfo, DLADM_OPT_PERSIST);
if (status != DLADM_STATUS_OK)
return (DLADM_WALK_CONTINUE);
@@ -775,12 +750,13 @@ i_dladm_aggr_link_del(datalink_id_t aggrid, void *arg)
*/
aggr_del_arg.linkid = aggrid;
(void) dladm_walk_datalink_id(i_dladm_vlan_link_del,
- &aggr_del_arg, DATALINK_CLASS_VLAN,
+ handle, &aggr_del_arg, DATALINK_CLASS_VLAN,
DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
- (void) dladm_aggr_delete(aggrid, DLADM_OPT_PERSIST);
+ (void) dladm_aggr_delete(handle, aggrid,
+ DLADM_OPT_PERSIST);
} else {
port[0].lp_linkid = del_arg->linkid;
- (void) dladm_aggr_remove(aggrid, 1, port,
+ (void) dladm_aggr_remove(handle, aggrid, 1, port,
DLADM_OPT_PERSIST);
}
}
@@ -792,7 +768,7 @@ typedef struct del_phys_arg_s {
} del_phys_arg_t;
static int
-i_dladm_phys_delete(datalink_id_t linkid, void *arg)
+i_dladm_phys_delete(dladm_handle_t handle, datalink_id_t linkid, void *arg)
{
uint32_t flags;
datalink_class_t class;
@@ -801,7 +777,7 @@ i_dladm_phys_delete(datalink_id_t linkid, void *arg)
del_phys_arg_t *del_phys_arg = arg;
consumer_del_phys_arg_t del_arg;
- if ((status = dladm_datalink_id2info(linkid, &flags, &class,
+ if ((status = dladm_datalink_id2info(handle, linkid, &flags, &class,
&media, NULL, 0)) != DLADM_STATUS_OK) {
goto done;
}
@@ -817,16 +793,16 @@ i_dladm_phys_delete(datalink_id_t linkid, void *arg)
if (media == DL_ETHER) {
del_arg.linkid = linkid;
- (void) dladm_walk_datalink_id(i_dladm_aggr_link_del, &del_arg,
- DATALINK_CLASS_AGGR, DATALINK_ANY_MEDIATYPE,
+ (void) dladm_walk_datalink_id(i_dladm_aggr_link_del, handle,
+ &del_arg, DATALINK_CLASS_AGGR, DATALINK_ANY_MEDIATYPE,
DLADM_OPT_PERSIST);
- (void) dladm_walk_datalink_id(i_dladm_vlan_link_del, &del_arg,
- DATALINK_CLASS_VLAN, DATALINK_ANY_MEDIATYPE,
+ (void) dladm_walk_datalink_id(i_dladm_vlan_link_del, handle,
+ &del_arg, DATALINK_CLASS_VLAN, DATALINK_ANY_MEDIATYPE,
DLADM_OPT_PERSIST);
}
- (void) dladm_destroy_datalink_id(linkid, DLADM_OPT_PERSIST);
- (void) dladm_remove_conf(linkid);
+ (void) dladm_destroy_datalink_id(handle, linkid, DLADM_OPT_PERSIST);
+ (void) dladm_remove_conf(handle, linkid);
done:
del_phys_arg->rval = status;
@@ -834,23 +810,24 @@ done:
}
dladm_status_t
-dladm_phys_delete(datalink_id_t linkid)
+dladm_phys_delete(dladm_handle_t handle, datalink_id_t linkid)
{
del_phys_arg_t arg = {DLADM_STATUS_OK};
if (linkid == DATALINK_ALL_LINKID) {
- (void) dladm_walk_datalink_id(i_dladm_phys_delete, &arg,
+ (void) dladm_walk_datalink_id(i_dladm_phys_delete, handle, &arg,
DATALINK_CLASS_PHYS, DATALINK_ANY_MEDIATYPE,
DLADM_OPT_PERSIST);
return (DLADM_STATUS_OK);
} else {
- (void) i_dladm_phys_delete(linkid, &arg);
+ (void) i_dladm_phys_delete(handle, linkid, &arg);
return (arg.rval);
}
}
dladm_status_t
-dladm_phys_info(datalink_id_t linkid, dladm_phys_attr_t *dpap, uint32_t flags)
+dladm_phys_info(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_phys_attr_t *dpap, uint32_t flags)
{
dladm_status_t status;
@@ -860,29 +837,23 @@ dladm_phys_info(datalink_id_t linkid, dladm_phys_attr_t *dpap, uint32_t flags)
case DLADM_OPT_PERSIST: {
dladm_conf_t conf;
- status = dladm_read_conf(linkid, &conf);
+ status = dladm_read_conf(handle, linkid, &conf);
if (status != DLADM_STATUS_OK)
return (status);
- status = dladm_get_conf_field(conf, FDEVNAME, dpap->dp_dev,
- MAXLINKNAMELEN);
- dladm_destroy_conf(conf);
+ status = dladm_get_conf_field(handle, conf, FDEVNAME,
+ dpap->dp_dev, MAXLINKNAMELEN);
+ dladm_destroy_conf(handle, conf);
return (status);
}
case DLADM_OPT_ACTIVE: {
dld_ioc_phys_attr_t dip;
- int fd;
-
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (dladm_errno2status(errno));
dip.dip_linkid = linkid;
- if (ioctl(fd, DLDIOC_PHYS_ATTR, &dip) < 0) {
+ if (ioctl(dladm_dld_fd(handle), DLDIOC_PHYS_ATTR, &dip) < 0) {
status = dladm_errno2status(errno);
- (void) close(fd);
return (status);
}
- (void) close(fd);
dpap->dp_novanity = dip.dip_novanity;
(void) strlcpy(dpap->dp_dev, dip.dip_dev, MAXLINKNAMELEN);
return (DLADM_STATUS_OK);
@@ -899,13 +870,13 @@ typedef struct i_walk_dev_state_s {
} i_walk_dev_state_t;
int
-i_dladm_walk_dev2linkid(datalink_id_t linkid, void *arg)
+i_dladm_walk_dev2linkid(dladm_handle_t handle, datalink_id_t linkid, void *arg)
{
dladm_phys_attr_t dpa;
dladm_status_t status;
i_walk_dev_state_t *statep = arg;
- status = dladm_phys_info(linkid, &dpa, DLADM_OPT_PERSIST);
+ status = dladm_phys_info(handle, linkid, &dpa, DLADM_OPT_PERSIST);
if ((status == DLADM_STATUS_OK) &&
(strcmp(statep->devname, dpa.dp_dev) == 0)) {
statep->found = B_TRUE;
@@ -919,14 +890,15 @@ i_dladm_walk_dev2linkid(datalink_id_t linkid, void *arg)
* Get the linkid from the physical device name.
*/
dladm_status_t
-dladm_dev2linkid(const char *devname, datalink_id_t *linkidp)
+dladm_dev2linkid(dladm_handle_t handle, const char *devname,
+ datalink_id_t *linkidp)
{
i_walk_dev_state_t state;
state.found = B_FALSE;
state.devname = devname;
- (void) dladm_walk_datalink_id(i_dladm_walk_dev2linkid, &state,
+ (void) dladm_walk_datalink_id(i_dladm_walk_dev2linkid, handle, &state,
DATALINK_CLASS_PHYS, DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
if (state.found == B_TRUE) {
*linkidp = state.linkid;
@@ -962,14 +934,16 @@ parse_devname(const char *devname, char *driver, uint_t *ppa, size_t maxlen)
}
dladm_status_t
-dladm_linkid2legacyname(datalink_id_t linkid, char *dev, size_t len)
+dladm_linkid2legacyname(dladm_handle_t handle, datalink_id_t linkid, char *dev,
+ size_t len)
{
char devname[MAXLINKNAMELEN];
uint16_t vid = VLAN_ID_NONE;
datalink_class_t class;
dladm_status_t status;
- status = dladm_datalink_id2info(linkid, NULL, &class, NULL, NULL, 0);
+ status = dladm_datalink_id2info(handle, linkid, NULL, &class, NULL,
+ NULL, 0);
if (status != DLADM_STATUS_OK)
goto done;
@@ -980,14 +954,15 @@ dladm_linkid2legacyname(datalink_id_t linkid, char *dev, size_t len)
if (class == DATALINK_CLASS_VLAN) {
dladm_vlan_attr_t dva;
- status = dladm_vlan_info(linkid, &dva, DLADM_OPT_ACTIVE);
+ status = dladm_vlan_info(handle, linkid, &dva,
+ DLADM_OPT_ACTIVE);
if (status != DLADM_STATUS_OK)
goto done;
linkid = dva.dv_linkid;
vid = dva.dv_vid;
- if ((status = dladm_datalink_id2info(linkid, NULL, &class, NULL,
- NULL, 0)) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(handle, linkid, NULL,
+ &class, NULL, NULL, 0)) != DLADM_STATUS_OK) {
goto done;
}
}
@@ -996,7 +971,8 @@ dladm_linkid2legacyname(datalink_id_t linkid, char *dev, size_t len)
case DATALINK_CLASS_AGGR: {
dladm_aggr_grp_attr_t dga;
- status = dladm_aggr_info(linkid, &dga, DLADM_OPT_ACTIVE);
+ status = dladm_aggr_info(handle, linkid, &dga,
+ DLADM_OPT_ACTIVE);
if (status != DLADM_STATUS_OK)
goto done;
@@ -1014,7 +990,8 @@ dladm_linkid2legacyname(datalink_id_t linkid, char *dev, size_t len)
case DATALINK_CLASS_PHYS: {
dladm_phys_attr_t dpa;
- status = dladm_phys_info(linkid, &dpa, DLADM_OPT_PERSIST);
+ status = dladm_phys_info(handle, linkid, &dpa,
+ DLADM_OPT_PERSIST);
if (status != DLADM_STATUS_OK)
goto done;
diff --git a/usr/src/lib/libdladm/common/libdllink.h b/usr/src/lib/libdladm/common/libdllink.h
index 22f396c3a6..c486cfa774 100644
--- a/usr/src/lib/libdladm/common/libdllink.h
+++ b/usr/src/lib/libdladm/common/libdllink.h
@@ -114,28 +114,34 @@ typedef struct dladm_macaddr_attr {
datalink_id_t ma_client_linkid;
} dladm_macaddr_attr_t;
-extern dladm_status_t dladm_walk(dladm_walkcb_t *, void *, datalink_class_t,
- datalink_media_t, uint32_t);
+extern dladm_status_t dladm_walk(dladm_walkcb_t *, dladm_handle_t, void *,
+ datalink_class_t, datalink_media_t, uint32_t);
extern dladm_status_t dladm_mac_walk(dladm_walkcb_t *, void *);
-extern dladm_status_t dladm_info(datalink_id_t, dladm_attr_t *);
-extern dladm_status_t dladm_setzid(const char *, char *);
-
-extern dladm_status_t dladm_rename_link(const char *, const char *);
-
-extern dladm_status_t dladm_set_linkprop(datalink_id_t, const char *,
- char **, uint_t, uint_t);
-extern dladm_status_t dladm_get_linkprop(datalink_id_t, dladm_prop_type_t,
- const char *, char **, uint_t *);
-extern dladm_status_t dladm_walk_linkprop(datalink_id_t, void *,
- int (*)(datalink_id_t, const char *, void *));
-
-extern dladm_status_t dladm_set_secobj(const char *, dladm_secobj_class_t,
- uint8_t *, uint_t, uint_t);
-extern dladm_status_t dladm_get_secobj(const char *, dladm_secobj_class_t *,
- uint8_t *, uint_t *, uint_t);
-extern dladm_status_t dladm_unset_secobj(const char *, uint_t);
-extern dladm_status_t dladm_walk_secobj(void *,
- boolean_t (*)(void *, const char *), uint_t);
+extern dladm_status_t dladm_info(dladm_handle_t, datalink_id_t,
+ dladm_attr_t *);
+extern dladm_status_t dladm_setzid(dladm_handle_t, const char *, char *);
+
+extern dladm_status_t dladm_rename_link(dladm_handle_t, const char *,
+ const char *);
+
+extern dladm_status_t dladm_set_linkprop(dladm_handle_t, datalink_id_t,
+ const char *, char **, uint_t, uint_t);
+extern dladm_status_t dladm_get_linkprop(dladm_handle_t, datalink_id_t,
+ dladm_prop_type_t, const char *, char **, uint_t *);
+extern dladm_status_t dladm_walk_linkprop(dladm_handle_t, datalink_id_t,
+ void *, int (*)(dladm_handle_t, datalink_id_t,
+ const char *, void *));
+
+extern dladm_status_t dladm_set_secobj(dladm_handle_t, const char *,
+ dladm_secobj_class_t, uint8_t *, uint_t, uint_t);
+extern dladm_status_t dladm_get_secobj(dladm_handle_t, const char *,
+ dladm_secobj_class_t *, uint8_t *, uint_t *,
+ uint_t);
+extern dladm_status_t dladm_unset_secobj(dladm_handle_t, const char *,
+ uint_t);
+extern dladm_status_t dladm_walk_secobj(dladm_handle_t, void *,
+ boolean_t (*)(dladm_handle_t, void *, const char *),
+ uint_t);
extern const char *dladm_linkstate2str(link_state_t, char *);
extern const char *dladm_linkduplex2str(link_duplex_t, char *);
@@ -143,48 +149,60 @@ extern const char *dladm_secobjclass2str(dladm_secobj_class_t, char *);
extern dladm_status_t dladm_str2secobjclass(const char *,
dladm_secobj_class_t *);
-extern dladm_status_t dladm_init_linkprop(datalink_id_t, boolean_t);
-extern dladm_status_t dladm_init_secobj(void);
+extern dladm_status_t dladm_init_linkprop(dladm_handle_t, datalink_id_t,
+ boolean_t);
+extern dladm_status_t dladm_init_secobj(dladm_handle_t);
extern boolean_t dladm_valid_secobj_name(const char *);
-extern dladm_status_t dladm_create_datalink_id(const char *, datalink_class_t,
- uint_t, uint32_t, datalink_id_t *);
-extern dladm_status_t dladm_destroy_datalink_id(datalink_id_t, uint32_t);
-extern dladm_status_t dladm_remap_datalink_id(datalink_id_t, const char *);
-extern dladm_status_t dladm_up_datalink_id(datalink_id_t);
-extern dladm_status_t dladm_name2info(const char *, datalink_id_t *,
- uint32_t *, datalink_class_t *, uint32_t *);
-extern dladm_status_t dladm_datalink_id2info(datalink_id_t, uint32_t *,
- datalink_class_t *, uint32_t *, char *, size_t);
-extern dladm_status_t dladm_walk_datalink_id(int (*)(datalink_id_t, void *),
- void *, datalink_class_t, datalink_media_t,
- uint32_t);
-extern dladm_status_t dladm_create_conf(const char *, datalink_id_t,
- datalink_class_t, uint32_t, dladm_conf_t *);
-extern dladm_status_t dladm_read_conf(datalink_id_t, dladm_conf_t *);
-extern dladm_status_t dladm_write_conf(dladm_conf_t);
-extern dladm_status_t dladm_remove_conf(datalink_id_t);
-extern void dladm_destroy_conf(dladm_conf_t);
-extern dladm_status_t dladm_get_conf_field(dladm_conf_t, const char *,
- void *, size_t);
-extern dladm_status_t dladm_set_conf_field(dladm_conf_t, const char *,
- dladm_datatype_t, const void *);
-extern dladm_status_t dladm_unset_conf_field(dladm_conf_t, const char *);
-
-extern dladm_status_t dladm_dev2linkid(const char *, datalink_id_t *);
-extern dladm_status_t dladm_linkid2legacyname(datalink_id_t, char *, size_t);
-extern dladm_status_t dladm_phys_delete(datalink_id_t);
-
-extern dladm_status_t dladm_phys_info(datalink_id_t, dladm_phys_attr_t *,
+extern dladm_status_t dladm_create_datalink_id(dladm_handle_t, const char *,
+ datalink_class_t, uint_t, uint32_t,
+ datalink_id_t *);
+extern dladm_status_t dladm_destroy_datalink_id(dladm_handle_t, datalink_id_t,
uint32_t);
+extern dladm_status_t dladm_remap_datalink_id(dladm_handle_t, datalink_id_t,
+ const char *);
+extern dladm_status_t dladm_up_datalink_id(dladm_handle_t, datalink_id_t);
+extern dladm_status_t dladm_name2info(dladm_handle_t, const char *,
+ datalink_id_t *, uint32_t *, datalink_class_t *,
+ uint32_t *);
+extern dladm_status_t dladm_datalink_id2info(dladm_handle_t, datalink_id_t,
+ uint32_t *, datalink_class_t *, uint32_t *, char *,
+ size_t);
+extern dladm_status_t dladm_walk_datalink_id(int (*)(dladm_handle_t,
+ datalink_id_t, void *), dladm_handle_t, void *,
+ datalink_class_t, datalink_media_t, uint32_t);
+extern dladm_status_t dladm_create_conf(dladm_handle_t, const char *,
+ datalink_id_t, datalink_class_t, uint32_t,
+ dladm_conf_t *);
+extern dladm_status_t dladm_read_conf(dladm_handle_t, datalink_id_t,
+ dladm_conf_t *);
+extern dladm_status_t dladm_write_conf(dladm_handle_t, dladm_conf_t);
+extern dladm_status_t dladm_remove_conf(dladm_handle_t, datalink_id_t);
+extern void dladm_destroy_conf(dladm_handle_t, dladm_conf_t);
+extern dladm_status_t dladm_get_conf_field(dladm_handle_t, dladm_conf_t,
+ const char *, void *, size_t);
+extern dladm_status_t dladm_set_conf_field(dladm_handle_t, dladm_conf_t,
+ const char *, dladm_datatype_t, const void *);
+extern dladm_status_t dladm_unset_conf_field(dladm_handle_t, dladm_conf_t,
+ const char *);
+
+extern dladm_status_t dladm_dev2linkid(dladm_handle_t, const char *,
+ datalink_id_t *);
+extern dladm_status_t dladm_linkid2legacyname(dladm_handle_t, datalink_id_t,
+ char *, size_t);
+extern dladm_status_t dladm_phys_delete(dladm_handle_t, datalink_id_t);
+
+extern dladm_status_t dladm_phys_info(dladm_handle_t, datalink_id_t,
+ dladm_phys_attr_t *, uint32_t);
extern dladm_status_t dladm_parselink(const char *, char *, uint_t *);
-extern int dladm_walk_macaddr(datalink_id_t, void *,
+extern int dladm_walk_macaddr(dladm_handle_t, datalink_id_t,
+ void *,
boolean_t (*)(void *, dladm_macaddr_attr_t *));
-extern int dladm_walk_hwgrp(datalink_id_t, void *,
+extern int dladm_walk_hwgrp(dladm_handle_t, datalink_id_t, void *,
boolean_t (*)(void *, dladm_hwgrp_attr_t *));
-extern dladm_status_t dladm_link_get_proplist(datalink_id_t,
+extern dladm_status_t dladm_link_get_proplist(dladm_handle_t, datalink_id_t,
dladm_arg_list_t **);
extern dladm_status_t i_dladm_set_link_proplist_db(char *,
diff --git a/usr/src/lib/libdladm/common/libdlmgmt.c b/usr/src/lib/libdladm/common/libdlmgmt.c
index 2e7d6c58aa..611c693579 100644
--- a/usr/src/lib/libdladm/common/libdlmgmt.c
+++ b/usr/src/lib/libdladm/common/libdlmgmt.c
@@ -50,15 +50,13 @@ static size_t dladm_datatype_size[] = {
};
static dladm_status_t
-dladm_door_call(void *arg, size_t asize, void *rbuf, size_t rsize)
+dladm_door_call(dladm_handle_t handle, void *arg, size_t asize, void *rbuf,
+ size_t rsize)
{
door_arg_t darg;
- int fd;
+ int door_fd;
dladm_status_t status = DLADM_STATUS_OK;
- if ((fd = open(DLMGMT_DOOR, O_RDONLY)) == -1)
- return (dladm_errno2status(errno));
-
darg.data_ptr = arg;
darg.data_size = asize;
darg.desc_ptr = NULL;
@@ -66,10 +64,11 @@ dladm_door_call(void *arg, size_t asize, void *rbuf, size_t rsize)
darg.rbuf = rbuf;
darg.rsize = rsize;
- if (door_call(fd, &darg) == -1)
+ /* The door descriptor is opened if it isn't already */
+ if ((status = dladm_door_fd(handle, &door_fd)) != DLADM_STATUS_OK)
+ return (status);
+ if (door_call(door_fd, &darg) == -1)
status = dladm_errno2status(errno);
- (void) close(fd);
-
if (status != DLADM_STATUS_OK)
return (status);
@@ -92,8 +91,9 @@ dladm_door_call(void *arg, size_t asize, void *rbuf, size_t rsize)
* Allocate a new linkid with the given name. Return the new linkid.
*/
dladm_status_t
-dladm_create_datalink_id(const char *link, datalink_class_t class,
- uint32_t media, uint32_t flags, datalink_id_t *linkidp)
+dladm_create_datalink_id(dladm_handle_t handle, const char *link,
+ datalink_class_t class, uint32_t media, uint32_t flags,
+ datalink_id_t *linkidp)
{
dlmgmt_door_createid_t createid;
dlmgmt_createid_retval_t retval;
@@ -116,8 +116,8 @@ dladm_create_datalink_id(const char *link, datalink_class_t class,
createid.ld_cmd = DLMGMT_CMD_CREATE_LINKID;
createid.ld_prefix = (flags & DLADM_OPT_PREFIX);
- if ((status = dladm_door_call(&createid, sizeof (createid), &retval,
- sizeof (retval))) == DLADM_STATUS_OK) {
+ if ((status = dladm_door_call(handle, &createid, sizeof (createid),
+ &retval, sizeof (retval))) == DLADM_STATUS_OK) {
*linkidp = retval.lr_linkid;
}
return (status);
@@ -127,7 +127,8 @@ dladm_create_datalink_id(const char *link, datalink_class_t class,
* Destroy the given link ID.
*/
dladm_status_t
-dladm_destroy_datalink_id(datalink_id_t linkid, uint32_t flags)
+dladm_destroy_datalink_id(dladm_handle_t handle, datalink_id_t linkid,
+ uint32_t flags)
{
dlmgmt_door_destroyid_t destroyid;
dlmgmt_destroyid_retval_t retval;
@@ -140,15 +141,16 @@ dladm_destroy_datalink_id(datalink_id_t linkid, uint32_t flags)
destroyid.ld_linkid = linkid;
destroyid.ld_flags = dlmgmt_flags;
- return (dladm_door_call(&destroyid, sizeof (destroyid),
- &retval, sizeof (retval)));
+ return (dladm_door_call(handle, &destroyid, sizeof (destroyid), &retval,
+ sizeof (retval)));
}
/*
* Remap a given link ID to a new name.
*/
dladm_status_t
-dladm_remap_datalink_id(datalink_id_t linkid, const char *link)
+dladm_remap_datalink_id(dladm_handle_t handle, datalink_id_t linkid,
+ const char *link)
{
dlmgmt_door_remapid_t remapid;
dlmgmt_remapid_retval_t retval;
@@ -157,15 +159,15 @@ dladm_remap_datalink_id(datalink_id_t linkid, const char *link)
remapid.ld_linkid = linkid;
(void) strlcpy(remapid.ld_link, link, MAXLINKNAMELEN);
- return (dladm_door_call(&remapid, sizeof (remapid),
- &retval, sizeof (retval)));
+ return (dladm_door_call(handle, &remapid, sizeof (remapid), &retval,
+ sizeof (retval)));
}
/*
* Make a given link ID active.
*/
dladm_status_t
-dladm_up_datalink_id(datalink_id_t linkid)
+dladm_up_datalink_id(dladm_handle_t handle, datalink_id_t linkid)
{
dlmgmt_door_upid_t upid;
dlmgmt_upid_retval_t retval;
@@ -173,15 +175,15 @@ dladm_up_datalink_id(datalink_id_t linkid)
upid.ld_cmd = DLMGMT_CMD_UP_LINKID;
upid.ld_linkid = linkid;
- return (dladm_door_call(&upid, sizeof (upid),
- &retval, sizeof (retval)));
+ return (dladm_door_call(handle, &upid, sizeof (upid), &retval,
+ sizeof (retval)));
}
/*
* Create a new link with the given name. Return the new link's handle
*/
dladm_status_t
-dladm_create_conf(const char *link, datalink_id_t linkid,
+dladm_create_conf(dladm_handle_t handle, const char *link, datalink_id_t linkid,
datalink_class_t class, uint32_t media, dladm_conf_t *confp)
{
dlmgmt_door_createconf_t createconf;
@@ -197,7 +199,7 @@ dladm_create_conf(const char *link, datalink_id_t linkid,
createconf.ld_linkid = linkid;
createconf.ld_cmd = DLMGMT_CMD_CREATECONF;
- if ((status = dladm_door_call(&createconf, sizeof (createconf),
+ if ((status = dladm_door_call(handle, &createconf, sizeof (createconf),
&retval, sizeof (retval))) == DLADM_STATUS_OK) {
*confp = retval.lr_conf;
}
@@ -210,14 +212,15 @@ dladm_create_conf(const char *link, datalink_id_t linkid,
* real status by calling dladm_phys_info().
*/
dladm_status_t
-i_dladm_phys_status(datalink_id_t linkid, uint32_t *flagsp)
+i_dladm_phys_status(dladm_handle_t handle, datalink_id_t linkid,
+ uint32_t *flagsp)
{
dladm_phys_attr_t dpa;
dladm_status_t status;
assert((*flagsp) & DLMGMT_ACTIVE);
- status = dladm_phys_info(linkid, &dpa, DLADM_OPT_ACTIVE);
+ status = dladm_phys_info(handle, linkid, &dpa, DLADM_OPT_ACTIVE);
if (status == DLADM_STATUS_NOTFOUND) {
/*
* No active status, this link was removed. Update its status
@@ -227,11 +230,11 @@ i_dladm_phys_status(datalink_id_t linkid, uint32_t *flagsp)
* failure now since otherwise dladm_set_linkprop() might
* call back to i_dladm_phys_status() recursively.
*/
- status = dladm_destroy_datalink_id(linkid, DLADM_OPT_ACTIVE);
- if (status != DLADM_STATUS_OK)
+ if ((status = dladm_destroy_datalink_id(handle, linkid,
+ DLADM_OPT_ACTIVE)) != DLADM_STATUS_OK)
return (status);
- (void) dladm_set_linkprop(linkid, NULL, NULL, 0,
+ (void) dladm_set_linkprop(handle, linkid, NULL, NULL, 0,
DLADM_OPT_ACTIVE);
(*flagsp) &= ~DLMGMT_ACTIVE;
@@ -245,8 +248,9 @@ i_dladm_phys_status(datalink_id_t linkid, uint32_t *flagsp)
* call fn on the linkid and arg.
*/
dladm_status_t
-dladm_walk_datalink_id(int (*fn)(datalink_id_t, void *), void *argp,
- datalink_class_t class, datalink_media_t dmedia, uint32_t flags)
+dladm_walk_datalink_id(int (*fn)(dladm_handle_t, datalink_id_t, void *),
+ dladm_handle_t handle, void *argp, datalink_class_t class,
+ datalink_media_t dmedia, uint32_t flags)
{
dlmgmt_door_getnext_t getnext;
dlmgmt_getnext_retval_t retval;
@@ -267,8 +271,9 @@ dladm_walk_datalink_id(int (*fn)(datalink_id_t, void *), void *argp,
do {
getnext.ld_linkid = linkid;
- if ((status = dladm_door_call(&getnext, sizeof (getnext),
- &retval, sizeof (retval))) != DLADM_STATUS_OK) {
+ if ((status = dladm_door_call(handle, &getnext,
+ sizeof (getnext), &retval, sizeof (retval))) !=
+ DLADM_STATUS_OK) {
/*
* done with walking
*/
@@ -283,8 +288,8 @@ dladm_walk_datalink_id(int (*fn)(datalink_id_t, void *), void *argp,
* daemon might not be active anymore. Check its
* real status.
*/
- if (i_dladm_phys_status(linkid, &retval.lr_flags) !=
- DLADM_STATUS_OK) {
+ if (i_dladm_phys_status(handle, linkid,
+ &retval.lr_flags) != DLADM_STATUS_OK) {
continue;
}
@@ -292,7 +297,7 @@ dladm_walk_datalink_id(int (*fn)(datalink_id_t, void *), void *argp,
continue;
}
- if (fn(linkid, argp) == DLADM_WALK_TERMINATE)
+ if (fn(handle, linkid, argp) == DLADM_WALK_TERMINATE)
break;
} while (linkid != DATALINK_INVALID_LINKID);
@@ -303,7 +308,8 @@ dladm_walk_datalink_id(int (*fn)(datalink_id_t, void *), void *argp,
* Get the link properties structure for the given link.
*/
dladm_status_t
-dladm_read_conf(datalink_id_t linkid, dladm_conf_t *confp)
+dladm_read_conf(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_conf_t *confp)
{
dlmgmt_door_readconf_t readconf;
dlmgmt_readconf_retval_t retval;
@@ -315,7 +321,7 @@ dladm_read_conf(datalink_id_t linkid, dladm_conf_t *confp)
readconf.ld_linkid = linkid;
readconf.ld_cmd = DLMGMT_CMD_READCONF;
- if ((status = dladm_door_call(&readconf, sizeof (readconf),
+ if ((status = dladm_door_call(handle, &readconf, sizeof (readconf),
&retval, sizeof (retval))) == DLADM_STATUS_OK) {
*confp = retval.lr_conf;
}
@@ -327,7 +333,7 @@ dladm_read_conf(datalink_id_t linkid, dladm_conf_t *confp)
* that it will persist across reboots.
*/
dladm_status_t
-dladm_write_conf(dladm_conf_t conf)
+dladm_write_conf(dladm_handle_t handle, dladm_conf_t conf)
{
dlmgmt_door_writeconf_t writeconf;
dlmgmt_writeconf_retval_t retval;
@@ -338,8 +344,8 @@ dladm_write_conf(dladm_conf_t conf)
writeconf.ld_cmd = DLMGMT_CMD_WRITECONF;
writeconf.ld_conf = conf;
- return (dladm_door_call(&writeconf, sizeof (writeconf),
- &retval, sizeof (retval)));
+ return (dladm_door_call(handle, &writeconf, sizeof (writeconf), &retval,
+ sizeof (retval)));
}
/*
@@ -347,8 +353,8 @@ dladm_write_conf(dladm_conf_t conf)
* data link configuration repository.
*/
dladm_status_t
-dladm_get_conf_field(dladm_conf_t conf, const char *attr, void *attrval,
- size_t attrsz)
+dladm_get_conf_field(dladm_handle_t handle, dladm_conf_t conf, const char *attr,
+ void *attrval, size_t attrsz)
{
dlmgmt_door_getattr_t getattr;
dlmgmt_getattr_retval_t retval;
@@ -363,8 +369,8 @@ dladm_get_conf_field(dladm_conf_t conf, const char *attr, void *attrval,
getattr.ld_conf = conf;
(void) strlcpy(getattr.ld_attr, attr, MAXLINKATTRLEN);
- if ((status = dladm_door_call(&getattr, sizeof (getattr), &retval,
- sizeof (retval))) != DLADM_STATUS_OK) {
+ if ((status = dladm_door_call(handle, &getattr, sizeof (getattr),
+ &retval, sizeof (retval))) != DLADM_STATUS_OK) {
return (status);
}
@@ -379,8 +385,8 @@ dladm_get_conf_field(dladm_conf_t conf, const char *attr, void *attrval,
* Get the link ID that is associated with the given name.
*/
dladm_status_t
-dladm_name2info(const char *link, datalink_id_t *linkidp, uint32_t *flagp,
- datalink_class_t *classp, uint32_t *mediap)
+dladm_name2info(dladm_handle_t handle, const char *link, datalink_id_t *linkidp,
+ uint32_t *flagp, datalink_class_t *classp, uint32_t *mediap)
{
dlmgmt_door_getlinkid_t getlinkid;
dlmgmt_getlinkid_retval_t retval;
@@ -390,7 +396,7 @@ dladm_name2info(const char *link, datalink_id_t *linkidp, uint32_t *flagp,
getlinkid.ld_cmd = DLMGMT_CMD_GETLINKID;
(void) strlcpy(getlinkid.ld_link, link, MAXLINKNAMELEN);
- if ((status = dladm_door_call(&getlinkid, sizeof (getlinkid),
+ if ((status = dladm_door_call(handle, &getlinkid, sizeof (getlinkid),
&retval, sizeof (retval))) != DLADM_STATUS_OK) {
return (status);
}
@@ -402,7 +408,7 @@ dladm_name2info(const char *link, datalink_id_t *linkidp, uint32_t *flagp,
* An active physical link reported by the dlmgmtd daemon
* might not be active anymore. Check and set its real status.
*/
- status = i_dladm_phys_status(linkid, &retval.lr_flags);
+ status = i_dladm_phys_status(handle, linkid, &retval.lr_flags);
if (status != DLADM_STATUS_OK)
return (status);
}
@@ -426,8 +432,9 @@ dladm_name2info(const char *link, datalink_id_t *linkidp, uint32_t *flagp,
* Get the link name that is associated with the given id.
*/
dladm_status_t
-dladm_datalink_id2info(datalink_id_t linkid, uint32_t *flagp,
- datalink_class_t *classp, uint32_t *mediap, char *link, size_t len)
+dladm_datalink_id2info(dladm_handle_t handle, datalink_id_t linkid,
+ uint32_t *flagp, datalink_class_t *classp, uint32_t *mediap, char *link,
+ size_t len)
{
dlmgmt_door_getname_t getname;
dlmgmt_getname_retval_t retval;
@@ -440,8 +447,8 @@ dladm_datalink_id2info(datalink_id_t linkid, uint32_t *flagp,
getname.ld_cmd = DLMGMT_CMD_GETNAME;
getname.ld_linkid = linkid;
- if ((status = dladm_door_call(&getname, sizeof (getname), &retval,
- sizeof (retval))) != DLADM_STATUS_OK) {
+ if ((status = dladm_door_call(handle, &getname, sizeof (getname),
+ &retval, sizeof (retval))) != DLADM_STATUS_OK) {
return (status);
}
@@ -454,7 +461,7 @@ dladm_datalink_id2info(datalink_id_t linkid, uint32_t *flagp,
* An active physical link reported by the dlmgmtd daemon
* might not be active anymore. Check and set its real status.
*/
- status = i_dladm_phys_status(linkid, &retval.lr_flags);
+ status = i_dladm_phys_status(handle, linkid, &retval.lr_flags);
if (status != DLADM_STATUS_OK)
return (status);
}
@@ -478,7 +485,7 @@ dladm_datalink_id2info(datalink_id_t linkid, uint32_t *flagp,
* Set the given attr with the given attrval for the given link.
*/
dladm_status_t
-dladm_set_conf_field(dladm_conf_t conf, const char *attr,
+dladm_set_conf_field(dladm_handle_t handle, dladm_conf_t conf, const char *attr,
dladm_datatype_t type, const void *attrval)
{
dlmgmt_door_setattr_t setattr;
@@ -503,15 +510,16 @@ dladm_set_conf_field(dladm_conf_t conf, const char *attr,
setattr.ld_type = type;
bcopy(attrval, &setattr.ld_attrval, attrsz);
- return (dladm_door_call(&setattr, sizeof (setattr),
- &retval, sizeof (retval)));
+ return (dladm_door_call(handle, &setattr, sizeof (setattr), &retval,
+ sizeof (retval)));
}
/*
* Unset the given attr the given link.
*/
dladm_status_t
-dladm_unset_conf_field(dladm_conf_t conf, const char *attr)
+dladm_unset_conf_field(dladm_handle_t handle, dladm_conf_t conf,
+ const char *attr)
{
dlmgmt_door_unsetattr_t unsetattr;
dlmgmt_unsetattr_retval_t retval;
@@ -523,8 +531,8 @@ dladm_unset_conf_field(dladm_conf_t conf, const char *attr)
unsetattr.ld_conf = conf;
(void) strlcpy(unsetattr.ld_attr, attr, MAXLINKATTRLEN);
- return (dladm_door_call(&unsetattr, sizeof (unsetattr),
- &retval, sizeof (retval)));
+ return (dladm_door_call(handle, &unsetattr, sizeof (unsetattr), &retval,
+ sizeof (retval)));
}
/*
@@ -532,7 +540,7 @@ dladm_unset_conf_field(dladm_conf_t conf, const char *attr)
* repository.
*/
dladm_status_t
-dladm_remove_conf(datalink_id_t linkid)
+dladm_remove_conf(dladm_handle_t handle, datalink_id_t linkid)
{
dlmgmt_door_removeconf_t removeconf;
dlmgmt_removeconf_retval_t retval;
@@ -540,7 +548,7 @@ dladm_remove_conf(datalink_id_t linkid)
removeconf.ld_cmd = DLMGMT_CMD_REMOVECONF;
removeconf.ld_linkid = linkid;
- return (dladm_door_call(&removeconf, sizeof (removeconf),
+ return (dladm_door_call(handle, &removeconf, sizeof (removeconf),
&retval, sizeof (retval)));
}
@@ -548,7 +556,7 @@ dladm_remove_conf(datalink_id_t linkid)
* Free the contents of the link structure.
*/
void
-dladm_destroy_conf(dladm_conf_t conf)
+dladm_destroy_conf(dladm_handle_t handle, dladm_conf_t conf)
{
dlmgmt_door_destroyconf_t destroyconf;
dlmgmt_destroyconf_retval_t retval;
@@ -559,6 +567,6 @@ dladm_destroy_conf(dladm_conf_t conf)
destroyconf.ld_cmd = DLMGMT_CMD_DESTROYCONF;
destroyconf.ld_conf = conf;
- (void) dladm_door_call(&destroyconf, sizeof (destroyconf),
+ (void) dladm_door_call(handle, &destroyconf, sizeof (destroyconf),
&retval, sizeof (retval));
}
diff --git a/usr/src/lib/libdladm/common/libdlstat.c b/usr/src/lib/libdladm/common/libdlstat.c
index 1990d27c67..81d0d7d321 100644
--- a/usr/src/lib/libdladm/common/libdlstat.c
+++ b/usr/src/lib/libdladm/common/libdlstat.c
@@ -126,7 +126,7 @@ findstat(const char *flowname, datalink_id_t linkid)
}
static void
-print_flow_stats(struct flowlist *flist)
+print_flow_stats(dladm_handle_t handle, struct flowlist *flist)
{
struct flowlist *fcurr;
double ikbs, okbs;
@@ -147,8 +147,8 @@ print_flow_stats(struct flowlist *flist)
if (fcurr->flowname && fcurr->display) {
char linkname[MAXNAMELEN];
- (void) dladm_datalink_id2info(fcurr->linkid, NULL, NULL,
- NULL, linkname, sizeof (linkname));
+ (void) dladm_datalink_id2info(handle, fcurr->linkid,
+ NULL, NULL, NULL, linkname, sizeof (linkname));
dlt = (double)fcurr->diffstats.snaptime/(double)NANOSEC;
ikbs = fcurr->diffstats.rbytes * 8 / dlt / 1024;
okbs = fcurr->diffstats.obytes * 8 / dlt / 1024;
@@ -205,7 +205,7 @@ flow_kstats(dladm_flow_attr_t *attr, void *arg)
}
static void
-print_link_stats(struct flowlist *flist)
+print_link_stats(dladm_handle_t handle, struct flowlist *flist)
{
struct flowlist *fcurr;
double ikbs, okbs;
@@ -228,8 +228,8 @@ print_link_stats(struct flowlist *flist)
fcurr->display) {
char linkname[MAXNAMELEN];
- (void) dladm_datalink_id2info(fcurr->linkid, NULL, NULL,
- NULL, linkname, sizeof (linkname));
+ (void) dladm_datalink_id2info(handle, fcurr->linkid,
+ NULL, NULL, NULL, linkname, sizeof (linkname));
dlt = (double)fcurr->diffstats.snaptime/(double)NANOSEC;
ikbs = (double)fcurr->diffstats.rbytes * 8 / dlt / 1024;
okbs = (double)fcurr->diffstats.obytes * 8 / dlt / 1024;
@@ -258,14 +258,14 @@ print_link_stats(struct flowlist *flist)
/*ARGSUSED*/
static int
-link_flowstats(datalink_id_t linkid, void *arg)
+link_flowstats(dladm_handle_t handle, datalink_id_t linkid, void *arg)
{
- return (dladm_walk_flow(flow_kstats, linkid, arg, B_FALSE));
+ return (dladm_walk_flow(flow_kstats, handle, linkid, arg, B_FALSE));
}
/*ARGSUSED*/
static int
-link_kstats(datalink_id_t linkid, void *arg)
+link_kstats(dladm_handle_t handle, datalink_id_t linkid, void *arg)
{
kstat_ctl_t *kcp = (kstat_ctl_t *)arg;
struct flowlist *flist;
@@ -283,8 +283,8 @@ link_kstats(datalink_id_t linkid, void *arg)
}
/* lookup kstat entry */
- (void) dladm_datalink_id2info(linkid, NULL, NULL, NULL, linkname,
- sizeof (linkname));
+ (void) dladm_datalink_id2info(handle, linkid, NULL, NULL, NULL,
+ linkname, sizeof (linkname));
if (linkname == NULL) {
warn("no linkname for linkid");
@@ -362,8 +362,8 @@ curses_fin()
}
static void
-stat_report(kstat_ctl_t *kcp, datalink_id_t linkid, const char *flowname,
- int opt)
+stat_report(dladm_handle_t handle, kstat_ctl_t *kcp, datalink_id_t linkid,
+ const char *flowname, int opt)
{
double dlt, ikbs, okbs, ipks, opks;
@@ -407,34 +407,34 @@ stat_report(kstat_ctl_t *kcp, datalink_id_t linkid, const char *flowname,
if (opt == LINK_REPORT) {
/* Display all links */
if (linkid == DATALINK_ALL_LINKID) {
- (void) dladm_walk_datalink_id(link_kstats,
+ (void) dladm_walk_datalink_id(link_kstats, handle,
(void *)kcp, DATALINK_CLASS_ALL,
DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
/* Display 1 link */
} else {
- (void) link_kstats(linkid, kcp);
+ (void) link_kstats(handle, linkid, kcp);
}
- print_link_stats(fstable);
+ print_link_stats(handle, fstable);
} else if (opt == FLOW_REPORT) {
/* Display 1 flow */
if (flowname != NULL) {
dladm_flow_attr_t fattr;
- if (dladm_flow_info(flowname, &fattr) !=
+ if (dladm_flow_info(handle, flowname, &fattr) !=
DLADM_STATUS_OK)
return;
(void) flow_kstats(&fattr, kcp);
/* Display all flows on all links */
} else if (linkid == DATALINK_ALL_LINKID) {
- (void) dladm_walk_datalink_id(link_flowstats,
+ (void) dladm_walk_datalink_id(link_flowstats, handle,
(void *)kcp, DATALINK_CLASS_ALL,
DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
/* Display all flows on a link */
} else if (linkid != DATALINK_INVALID_LINKID) {
- (void) dladm_walk_flow(flow_kstats, linkid, kcp,
+ (void) dladm_walk_flow(flow_kstats, handle, linkid, kcp,
B_FALSE);
}
- print_flow_stats(fstable);
+ print_flow_stats(handle, fstable);
/* Print totals */
(void) attron(A_BOLD);
@@ -469,8 +469,8 @@ stat_report(kstat_ctl_t *kcp, datalink_id_t linkid, const char *flowname,
*/
void
-dladm_continuous(datalink_id_t linkid, const char *flowname, int interval,
- int opt)
+dladm_continuous(dladm_handle_t handle, datalink_id_t linkid,
+ const char *flowname, int interval, int opt)
{
kstat_ctl_t *kcp;
@@ -486,7 +486,7 @@ dladm_continuous(datalink_id_t linkid, const char *flowname, int interval,
if (handle_break)
break;
- stat_report(kcp, linkid, flowname, opt);
+ stat_report(handle, kcp, linkid, flowname, opt);
(void) sleep(max(1, interval));
}
@@ -601,8 +601,8 @@ dladm_kstat_value(kstat_t *ksp, const char *name, uint8_t type, void *buf)
}
dladm_status_t
-dladm_get_single_mac_stat(datalink_id_t linkid, const char *name, uint8_t type,
- void *val)
+dladm_get_single_mac_stat(dladm_handle_t handle, datalink_id_t linkid,
+ const char *name, uint8_t type, void *val)
{
kstat_ctl_t *kcp;
char module[DLPI_LINKNAME_MAX];
@@ -618,14 +618,14 @@ dladm_get_single_mac_stat(datalink_id_t linkid, const char *name, uint8_t type,
return (-1);
}
- if ((status = dladm_datalink_id2info(linkid, &flags, NULL, &media,
- link, DLPI_LINKNAME_MAX)) != DLADM_STATUS_OK)
+ if ((status = dladm_datalink_id2info(handle, linkid, &flags, NULL,
+ &media, link, DLPI_LINKNAME_MAX)) != DLADM_STATUS_OK)
return (status);
if (media != DL_ETHER)
return (DLADM_STATUS_LINKINVAL);
- status = dladm_phys_info(linkid, &dpap, DLADM_OPT_PERSIST);
+ status = dladm_phys_info(handle, linkid, &dpap, DLADM_OPT_PERSIST);
if (status != DLADM_STATUS_OK)
return (status);
diff --git a/usr/src/lib/libdladm/common/libdlstat.h b/usr/src/lib/libdladm/common/libdlstat.h
index a142275268..51e28627a9 100644
--- a/usr/src/lib/libdladm/common/libdlstat.h
+++ b/usr/src/lib/libdladm/common/libdlstat.h
@@ -51,15 +51,16 @@ typedef struct pktsum_s {
uint64_t oerrors;
} pktsum_t;
-extern void dladm_continuous(datalink_id_t, const char *, int, int);
+extern void dladm_continuous(dladm_handle_t, datalink_id_t,
+ const char *, int, int);
extern kstat_t *dladm_kstat_lookup(kstat_ctl_t *, const char *, int,
const char *, const char *);
extern void dladm_get_stats(kstat_ctl_t *, kstat_t *, pktsum_t *);
extern int dladm_kstat_value(kstat_t *, const char *, uint8_t,
void *);
-extern dladm_status_t dladm_get_single_mac_stat(datalink_id_t, const char *,
- uint8_t, void *);
+extern dladm_status_t dladm_get_single_mac_stat(dladm_handle_t, datalink_id_t,
+ const char *, uint8_t, void *);
extern void dladm_stats_total(pktsum_t *, pktsum_t *, pktsum_t *);
extern void dladm_stats_diff(pktsum_t *, pktsum_t *, pktsum_t *);
diff --git a/usr/src/lib/libdladm/common/libdlvlan.c b/usr/src/lib/libdladm/common/libdlvlan.c
index 1dc04bf4eb..0e21c235fa 100644
--- a/usr/src/lib/libdladm/common/libdlvlan.c
+++ b/usr/src/lib/libdladm/common/libdlvlan.c
@@ -37,12 +37,13 @@
* Returns the current attributes of the specified VLAN.
*/
dladm_status_t
-dladm_vlan_info(datalink_id_t vlanid, dladm_vlan_attr_t *dvap, uint32_t flags)
+dladm_vlan_info(dladm_handle_t handle, datalink_id_t vlanid,
+ dladm_vlan_attr_t *dvap, uint32_t flags)
{
dladm_status_t status;
dladm_vnic_attr_t attr, *vnic = &attr;
- if ((status = dladm_vnic_info(vlanid, vnic, flags)) !=
+ if ((status = dladm_vnic_info(handle, vlanid, vnic, flags)) !=
DLADM_STATUS_OK)
return (status);
@@ -56,25 +57,26 @@ dladm_vlan_info(datalink_id_t vlanid, dladm_vlan_attr_t *dvap, uint32_t flags)
* Create a VLAN on given link.
*/
dladm_status_t
-dladm_vlan_create(const char *vlan, datalink_id_t linkid, uint16_t vid,
- dladm_arg_list_t *proplist, uint32_t flags, datalink_id_t *vlan_id_out)
+dladm_vlan_create(dladm_handle_t handle, const char *vlan, datalink_id_t linkid,
+ uint16_t vid, dladm_arg_list_t *proplist, uint32_t flags,
+ datalink_id_t *vlan_id_out)
{
- return (dladm_vnic_create(vlan, linkid, VNIC_MAC_ADDR_TYPE_PRIMARY,
- NULL, 0, NULL, 0, vid, vlan_id_out, proplist,
- flags | DLADM_OPT_VLAN));
+ return (dladm_vnic_create(handle, vlan, linkid,
+ VNIC_MAC_ADDR_TYPE_PRIMARY, NULL, 0, NULL, 0, vid, vlan_id_out,
+ proplist, flags | DLADM_OPT_VLAN));
}
/*
* Delete a given VLAN.
*/
dladm_status_t
-dladm_vlan_delete(datalink_id_t vlanid, uint32_t flags)
+dladm_vlan_delete(dladm_handle_t handle, datalink_id_t vlanid, uint32_t flags)
{
- return (dladm_vnic_delete(vlanid, flags | DLADM_OPT_VLAN));
+ return (dladm_vnic_delete(handle, vlanid, flags | DLADM_OPT_VLAN));
}
dladm_status_t
-dladm_vlan_up(datalink_id_t linkid)
+dladm_vlan_up(dladm_handle_t handle, datalink_id_t linkid)
{
- return (dladm_vnic_up(linkid, DLADM_OPT_VLAN));
+ return (dladm_vnic_up(handle, linkid, DLADM_OPT_VLAN));
}
diff --git a/usr/src/lib/libdladm/common/libdlvlan.h b/usr/src/lib/libdladm/common/libdlvlan.h
index 91f6ee8671..8e32a9ad30 100644
--- a/usr/src/lib/libdladm/common/libdlvlan.h
+++ b/usr/src/lib/libdladm/common/libdlvlan.h
@@ -43,13 +43,14 @@ typedef struct dladm_vlan_attr {
boolean_t dv_force;
} dladm_vlan_attr_t;
-extern dladm_status_t dladm_vlan_info(datalink_id_t, dladm_vlan_attr_t *,
+extern dladm_status_t dladm_vlan_info(dladm_handle_t, datalink_id_t,
+ dladm_vlan_attr_t *, uint32_t);
+extern dladm_status_t dladm_vlan_create(dladm_handle_t, const char *,
+ datalink_id_t, uint16_t, dladm_arg_list_t *,
+ uint32_t, datalink_id_t *);
+extern dladm_status_t dladm_vlan_delete(dladm_handle_t, datalink_id_t,
uint32_t);
-extern dladm_status_t dladm_vlan_create(const char *, datalink_id_t,
- uint16_t, dladm_arg_list_t *, uint32_t,
- datalink_id_t *);
-extern dladm_status_t dladm_vlan_delete(datalink_id_t, uint32_t);
-extern dladm_status_t dladm_vlan_up(datalink_id_t);
+extern dladm_status_t dladm_vlan_up(dladm_handle_t, datalink_id_t);
#ifdef __cplusplus
}
diff --git a/usr/src/lib/libdladm/common/libdlvnic.c b/usr/src/lib/libdladm/common/libdlvnic.c
index dfa58bcac5..3e83a6e6a2 100644
--- a/usr/src/lib/libdladm/common/libdlvnic.c
+++ b/usr/src/lib/libdladm/common/libdlvnic.c
@@ -50,8 +50,9 @@
*/
static char dladm_vnic_def_prefix[] = {0x02, 0x08, 0x20};
-static dladm_status_t dladm_vnic_persist_conf(const char *name,
- dladm_vnic_attr_t *, datalink_class_t);
+static dladm_status_t dladm_vnic_persist_conf(dladm_handle_t,
+ const char *name, dladm_vnic_attr_t *,
+ datalink_class_t);
static const char *dladm_vnic_macaddr2str(const uchar_t *, char *);
static dladm_status_t dladm_vnic_str2macaddr(const char *, uchar_t *);
@@ -94,9 +95,9 @@ dladm_vnic_diag2status(vnic_ioc_diag_t ioc_diag)
* Send a create command to the VNIC driver.
*/
dladm_status_t
-i_dladm_vnic_create_sys(dladm_vnic_attr_t *attr)
+i_dladm_vnic_create_sys(dladm_handle_t handle, dladm_vnic_attr_t *attr)
{
- int rc, fd;
+ int rc;
vnic_ioc_create_t ioc;
dladm_status_t status = DLADM_STATUS_OK;
@@ -118,14 +119,10 @@ i_dladm_vnic_create_sys(dladm_vnic_attr_t *attr)
if (attr->va_link_id == DATALINK_INVALID_LINKID)
ioc.vc_flags |= VNIC_IOC_CREATE_ANCHOR;
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (dladm_errno2status(errno));
-
- rc = ioctl(fd, VNIC_IOC_CREATE, &ioc);
+ rc = ioctl(dladm_dld_fd(handle), VNIC_IOC_CREATE, &ioc);
if (rc < 0)
status = dladm_errno2status(errno);
- (void) close(fd);
if (status != DLADM_STATUS_OK) {
if (ioc.vc_diag != VNIC_IOC_DIAG_NONE)
status = dladm_vnic_diag2status(ioc.vc_diag);
@@ -150,21 +147,19 @@ i_dladm_vnic_create_sys(dladm_vnic_attr_t *attr)
* Get the configuration information of the given VNIC.
*/
static dladm_status_t
-i_dladm_vnic_info_active(datalink_id_t linkid, dladm_vnic_attr_t *attrp)
+i_dladm_vnic_info_active(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_vnic_attr_t *attrp)
{
vnic_ioc_info_t ioc;
vnic_info_t *vnic;
- int rc, fd;
+ int rc;
dladm_status_t status = DLADM_STATUS_OK;
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) == -1)
- return (dladm_errno2status(errno));
-
bzero(&ioc, sizeof (ioc));
vnic = &ioc.vi_info;
vnic->vn_vnic_id = linkid;
- rc = ioctl(fd, VNIC_IOC_INFO, &ioc);
+ rc = ioctl(dladm_dld_fd(handle), VNIC_IOC_INFO, &ioc);
if (rc != 0) {
status = dladm_errno2status(errno);
goto bail;
@@ -181,12 +176,12 @@ i_dladm_vnic_info_active(datalink_id_t linkid, dladm_vnic_attr_t *attrp)
attrp->va_force = vnic->vn_force;
bail:
- (void) close(fd);
return (status);
}
static dladm_status_t
-i_dladm_vnic_info_persist(datalink_id_t linkid, dladm_vnic_attr_t *attrp)
+i_dladm_vnic_info_persist(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_vnic_attr_t *attrp)
{
dladm_conf_t conf;
dladm_status_t status;
@@ -195,22 +190,24 @@ i_dladm_vnic_info_persist(datalink_id_t linkid, dladm_vnic_attr_t *attrp)
datalink_class_t class;
attrp->va_vnic_id = linkid;
- if ((status = dladm_read_conf(linkid, &conf)) != DLADM_STATUS_OK)
+ if ((status = dladm_read_conf(handle, linkid, &conf)) !=
+ DLADM_STATUS_OK)
return (status);
- status = dladm_get_conf_field(conf, FLINKOVER, &u64, sizeof (u64));
+ status = dladm_get_conf_field(handle, conf, FLINKOVER, &u64,
+ sizeof (u64));
attrp->va_link_id = ((status == DLADM_STATUS_OK) ?
(datalink_id_t)u64 : DATALINK_INVALID_LINKID);
- status = dladm_get_conf_field(conf, FHWRINGS, &attrp->va_hwrings,
- sizeof (boolean_t));
+ status = dladm_get_conf_field(handle, conf, FHWRINGS,
+ &attrp->va_hwrings, sizeof (boolean_t));
if (status != DLADM_STATUS_OK && status != DLADM_STATUS_NOTFOUND)
goto done;
if (status == DLADM_STATUS_NOTFOUND)
attrp->va_hwrings = B_FALSE;
- if ((status = dladm_datalink_id2info(linkid, NULL, &class,
+ if ((status = dladm_datalink_id2info(handle, linkid, NULL, &class,
NULL, NULL, 0)) != DLADM_STATUS_OK)
goto done;
@@ -222,29 +219,29 @@ i_dladm_vnic_info_persist(datalink_id_t linkid, dladm_vnic_attr_t *attrp)
attrp->va_mac_addr_type = VNIC_MAC_ADDR_TYPE_PRIMARY;
attrp->va_mac_len = 0;
} else {
- status = dladm_get_conf_field(conf, FMADDRTYPE, &u64,
+ status = dladm_get_conf_field(handle, conf, FMADDRTYPE, &u64,
sizeof (u64));
if (status != DLADM_STATUS_OK)
goto done;
attrp->va_mac_addr_type = (vnic_mac_addr_type_t)u64;
- status = dladm_get_conf_field(conf, FMADDRLEN, &u64,
+ status = dladm_get_conf_field(handle, conf, FMADDRLEN, &u64,
sizeof (u64));
attrp->va_mac_len = ((status == DLADM_STATUS_OK) ?
(uint_t)u64 : ETHERADDRL);
- status = dladm_get_conf_field(conf, FMADDRSLOT, &u64,
+ status = dladm_get_conf_field(handle, conf, FMADDRSLOT, &u64,
sizeof (u64));
attrp->va_mac_slot = ((status == DLADM_STATUS_OK) ?
(int)u64 : -1);
- status = dladm_get_conf_field(conf, FMADDRPREFIXLEN, &u64,
- sizeof (u64));
+ status = dladm_get_conf_field(handle, conf, FMADDRPREFIXLEN,
+ &u64, sizeof (u64));
attrp->va_mac_prefix_len = ((status == DLADM_STATUS_OK) ?
(uint_t)u64 : sizeof (dladm_vnic_def_prefix));
- status = dladm_get_conf_field(conf, FMACADDR, macstr,
+ status = dladm_get_conf_field(handle, conf, FMACADDR, macstr,
sizeof (macstr));
if (status != DLADM_STATUS_OK)
goto done;
@@ -254,24 +251,25 @@ i_dladm_vnic_info_persist(datalink_id_t linkid, dladm_vnic_attr_t *attrp)
goto done;
}
- status = dladm_get_conf_field(conf, FVLANID, &u64, sizeof (u64));
+ status = dladm_get_conf_field(handle, conf, FVLANID, &u64,
+ sizeof (u64));
attrp->va_vid = ((status == DLADM_STATUS_OK) ? (uint16_t)u64 : 0);
status = DLADM_STATUS_OK;
done:
- dladm_destroy_conf(conf);
+ dladm_destroy_conf(handle, conf);
return (status);
}
dladm_status_t
-dladm_vnic_info(datalink_id_t linkid, dladm_vnic_attr_t *attrp,
- uint32_t flags)
+dladm_vnic_info(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_vnic_attr_t *attrp, uint32_t flags)
{
if (flags == DLADM_OPT_ACTIVE)
- return (i_dladm_vnic_info_active(linkid, attrp));
+ return (i_dladm_vnic_info_active(handle, linkid, attrp));
else if (flags == DLADM_OPT_PERSIST)
- return (i_dladm_vnic_info_persist(linkid, attrp));
+ return (i_dladm_vnic_info_persist(handle, linkid, attrp));
else
return (DLADM_STATUS_BADARG);
}
@@ -280,22 +278,18 @@ dladm_vnic_info(datalink_id_t linkid, dladm_vnic_attr_t *attrp,
* Remove a VNIC from the kernel.
*/
dladm_status_t
-i_dladm_vnic_delete_sys(datalink_id_t linkid)
+i_dladm_vnic_delete_sys(dladm_handle_t handle, datalink_id_t linkid)
{
vnic_ioc_delete_t ioc;
dladm_status_t status = DLADM_STATUS_OK;
- int rc, fd;
-
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (dladm_errno2status(errno));
+ int rc;
ioc.vd_vnic_id = linkid;
- rc = ioctl(fd, VNIC_IOC_DELETE, &ioc);
+ rc = ioctl(dladm_dld_fd(handle), VNIC_IOC_DELETE, &ioc);
if (rc < 0)
status = dladm_errno2status(errno);
- (void) close(fd);
return (status);
}
@@ -352,7 +346,7 @@ dladm_vnic_str2macaddrtype(const char *str, vnic_mac_addr_type_t *val)
* Create a new VNIC / VLAN. Update the configuration file and bring it up.
*/
dladm_status_t
-dladm_vnic_create(const char *vnic, datalink_id_t linkid,
+dladm_vnic_create(dladm_handle_t handle, const char *vnic, datalink_id_t linkid,
vnic_mac_addr_type_t mac_addr_type, uchar_t *mac_addr, int mac_len,
int *mac_slot, uint_t mac_prefix_len, uint16_t vid,
datalink_id_t *vnic_id_out, dladm_arg_list_t *proplist, uint32_t flags)
@@ -400,8 +394,8 @@ dladm_vnic_create(const char *vnic, datalink_id_t linkid,
}
if ((flags & DLADM_OPT_ANCHOR) == 0) {
- if ((status = dladm_datalink_id2info(linkid, NULL, &class,
- &media, NULL, 0)) != DLADM_STATUS_OK)
+ if ((status = dladm_datalink_id2info(handle, linkid, NULL,
+ &class, &media, NULL, 0)) != DLADM_STATUS_OK)
return (status);
if (class == DATALINK_CLASS_VNIC ||
@@ -422,7 +416,7 @@ dladm_vnic_create(const char *vnic, datalink_id_t linkid,
class = is_vlan ? DATALINK_CLASS_VLAN :
(is_etherstub ? DATALINK_CLASS_ETHERSTUB : DATALINK_CLASS_VNIC);
- if ((status = dladm_create_datalink_id(name, class,
+ if ((status = dladm_create_datalink_id(handle, name, class,
media, flags, &vnic_id)) != DLADM_STATUS_OK)
return (status);
@@ -435,7 +429,7 @@ dladm_vnic_create(const char *vnic, datalink_id_t linkid,
/* Extract resource_ctl and cpu_list from proplist */
if (proplist != NULL) {
- status = dladm_link_proplist_extract(proplist,
+ status = dladm_link_proplist_extract(handle, proplist,
&attr.va_resource_props);
if (status != DLADM_STATUS_OK)
goto done;
@@ -456,7 +450,7 @@ dladm_vnic_create(const char *vnic, datalink_id_t linkid,
attr.va_force = (flags & DLADM_OPT_FORCE) != 0;
attr.va_hwrings = (flags & DLADM_OPT_HWRINGS) != 0;
- status = i_dladm_vnic_create_sys(&attr);
+ status = i_dladm_vnic_create_sys(handle, &attr);
if (status != DLADM_STATUS_OK)
goto done;
@@ -464,9 +458,9 @@ dladm_vnic_create(const char *vnic, datalink_id_t linkid,
if (!(flags & DLADM_OPT_PERSIST))
goto done;
- status = dladm_vnic_persist_conf(name, &attr, class);
+ status = dladm_vnic_persist_conf(handle, name, &attr, class);
if (status != DLADM_STATUS_OK) {
- (void) i_dladm_vnic_delete_sys(vnic_id);
+ (void) i_dladm_vnic_delete_sys(handle, vnic_id);
goto done;
}
@@ -474,21 +468,22 @@ dladm_vnic_create(const char *vnic, datalink_id_t linkid,
for (i = 0; i < proplist->al_count; i++) {
dladm_arg_info_t *aip = &proplist->al_info[i];
- status = dladm_set_linkprop(vnic_id, aip->ai_name,
- aip->ai_val, aip->ai_count, DLADM_OPT_PERSIST);
+ status = dladm_set_linkprop(handle, vnic_id,
+ aip->ai_name, aip->ai_val, aip->ai_count,
+ DLADM_OPT_PERSIST);
if (status != DLADM_STATUS_OK)
break;
}
if (status != DLADM_STATUS_OK) {
- (void) dladm_remove_conf(vnic_id);
- (void) i_dladm_vnic_delete_sys(vnic_id);
+ (void) dladm_remove_conf(handle, vnic_id);
+ (void) i_dladm_vnic_delete_sys(handle, vnic_id);
}
}
done:
if (status != DLADM_STATUS_OK) {
- (void) dladm_destroy_datalink_id(vnic_id, flags);
+ (void) dladm_destroy_datalink_id(handle, vnic_id, flags);
} else {
if (vnic_id_out != NULL)
*vnic_id_out = vnic_id;
@@ -502,7 +497,7 @@ done:
* Delete a VNIC / VLAN.
*/
dladm_status_t
-dladm_vnic_delete(datalink_id_t linkid, uint32_t flags)
+dladm_vnic_delete(dladm_handle_t handle, datalink_id_t linkid, uint32_t flags)
{
dladm_status_t status;
datalink_class_t class;
@@ -510,8 +505,8 @@ dladm_vnic_delete(datalink_id_t linkid, uint32_t flags)
if (flags == 0)
return (DLADM_STATUS_BADARG);
- if ((dladm_datalink_id2info(linkid, NULL, &class, NULL, NULL, 0) !=
- DLADM_STATUS_OK))
+ if ((dladm_datalink_id2info(handle, linkid, NULL, &class, NULL, NULL, 0)
+ != DLADM_STATUS_OK))
return (DLADM_STATUS_BADARG);
if ((flags & DLADM_OPT_VLAN) != 0) {
@@ -524,11 +519,11 @@ dladm_vnic_delete(datalink_id_t linkid, uint32_t flags)
}
if ((flags & DLADM_OPT_ACTIVE) != 0) {
- status = i_dladm_vnic_delete_sys(linkid);
+ status = i_dladm_vnic_delete_sys(handle, linkid);
if (status == DLADM_STATUS_OK) {
- (void) dladm_set_linkprop(linkid, NULL, NULL, 0,
+ (void) dladm_set_linkprop(handle, linkid, NULL, NULL, 0,
DLADM_OPT_ACTIVE);
- (void) dladm_destroy_datalink_id(linkid,
+ (void) dladm_destroy_datalink_id(handle, linkid,
DLADM_OPT_ACTIVE);
} else if (status != DLADM_STATUS_NOTFOUND ||
!(flags & DLADM_OPT_PERSIST)) {
@@ -536,8 +531,9 @@ dladm_vnic_delete(datalink_id_t linkid, uint32_t flags)
}
}
if ((flags & DLADM_OPT_PERSIST) != 0) {
- (void) dladm_destroy_datalink_id(linkid, DLADM_OPT_PERSIST);
- (void) dladm_remove_conf(linkid);
+ (void) dladm_destroy_datalink_id(handle, linkid,
+ DLADM_OPT_PERSIST);
+ (void) dladm_remove_conf(handle, linkid);
}
return (DLADM_STATUS_OK);
}
@@ -574,21 +570,21 @@ dladm_vnic_str2macaddr(const char *str, uchar_t *buf)
static dladm_status_t
-dladm_vnic_persist_conf(const char *name, dladm_vnic_attr_t *attrp,
- datalink_class_t class)
+dladm_vnic_persist_conf(dladm_handle_t handle, const char *name,
+ dladm_vnic_attr_t *attrp, datalink_class_t class)
{
dladm_conf_t conf = DLADM_INVALID_CONF;
dladm_status_t status;
char macstr[ETHERADDRL * 3];
uint64_t u64;
- if ((status = dladm_create_conf(name, attrp->va_vnic_id,
+ if ((status = dladm_create_conf(handle, name, attrp->va_vnic_id,
class, DL_ETHER, &conf)) != DLADM_STATUS_OK)
return (status);
if (attrp->va_link_id != DATALINK_INVALID_LINKID) {
u64 = attrp->va_link_id;
- status = dladm_set_conf_field(conf, FLINKOVER,
+ status = dladm_set_conf_field(handle, conf, FLINKOVER,
DLADM_TYPE_UINT64, &u64);
if (status != DLADM_STATUS_OK)
goto done;
@@ -596,14 +592,14 @@ dladm_vnic_persist_conf(const char *name, dladm_vnic_attr_t *attrp,
if (class != DATALINK_CLASS_VLAN) {
u64 = attrp->va_mac_addr_type;
- status = dladm_set_conf_field(conf, FMADDRTYPE,
+ status = dladm_set_conf_field(handle, conf, FMADDRTYPE,
DLADM_TYPE_UINT64, &u64);
if (status != DLADM_STATUS_OK)
goto done;
if (attrp->va_mac_len != ETHERADDRL) {
u64 = attrp->va_mac_len;
- status = dladm_set_conf_field(conf, FMADDRLEN,
+ status = dladm_set_conf_field(handle, conf, FMADDRLEN,
DLADM_TYPE_UINT64, &u64);
if (status != DLADM_STATUS_OK)
goto done;
@@ -612,7 +608,7 @@ dladm_vnic_persist_conf(const char *name, dladm_vnic_attr_t *attrp,
if (attrp->va_hwrings) {
boolean_t hwrings = attrp->va_hwrings;
- status = dladm_set_conf_field(conf, FHWRINGS,
+ status = dladm_set_conf_field(handle, conf, FHWRINGS,
DLADM_TYPE_BOOLEAN, &hwrings);
if (status != DLADM_STATUS_OK)
goto done;
@@ -621,7 +617,7 @@ dladm_vnic_persist_conf(const char *name, dladm_vnic_attr_t *attrp,
if (class != DATALINK_CLASS_VLAN) {
if (attrp->va_mac_slot != -1) {
u64 = attrp->va_mac_slot;
- status = dladm_set_conf_field(conf, FMADDRSLOT,
+ status = dladm_set_conf_field(handle, conf, FMADDRSLOT,
DLADM_TYPE_UINT64, &u64);
if (status != DLADM_STATUS_OK)
goto done;
@@ -630,22 +626,22 @@ dladm_vnic_persist_conf(const char *name, dladm_vnic_attr_t *attrp,
if (attrp->va_mac_prefix_len !=
sizeof (dladm_vnic_def_prefix)) {
u64 = attrp->va_mac_prefix_len;
- status = dladm_set_conf_field(conf, FMADDRPREFIXLEN,
- DLADM_TYPE_UINT64, &u64);
+ status = dladm_set_conf_field(handle, conf,
+ FMADDRPREFIXLEN, DLADM_TYPE_UINT64, &u64);
if (status != DLADM_STATUS_OK)
goto done;
}
(void) dladm_vnic_macaddr2str(attrp->va_mac_addr, macstr);
- status = dladm_set_conf_field(conf, FMACADDR, DLADM_TYPE_STR,
- macstr);
+ status = dladm_set_conf_field(handle, conf, FMACADDR,
+ DLADM_TYPE_STR, macstr);
if (status != DLADM_STATUS_OK)
goto done;
}
if (attrp->va_vid != 0) {
u64 = attrp->va_vid;
- status = dladm_set_conf_field(conf, FVLANID,
+ status = dladm_set_conf_field(handle, conf, FVLANID,
DLADM_TYPE_UINT64, &u64);
if (status != DLADM_STATUS_OK)
goto done;
@@ -654,10 +650,10 @@ dladm_vnic_persist_conf(const char *name, dladm_vnic_attr_t *attrp,
/*
* Commit the link configuration.
*/
- status = dladm_write_conf(conf);
+ status = dladm_write_conf(handle, conf);
done:
- dladm_destroy_conf(conf);
+ dladm_destroy_conf(handle, conf);
return (status);
}
@@ -670,7 +666,7 @@ typedef struct dladm_vnic_up_arg_s {
#define DLADM_VNIC_UP_SECOND_WALK 0x2
static int
-i_dladm_vnic_up(datalink_id_t linkid, void *arg)
+i_dladm_vnic_up(dladm_handle_t handle, datalink_id_t linkid, void *arg)
{
dladm_status_t *statusp = &(((dladm_vnic_up_arg_t *)arg)->status);
dladm_vnic_attr_t attr;
@@ -680,7 +676,7 @@ i_dladm_vnic_up(datalink_id_t linkid, void *arg)
bzero(&attr, sizeof (attr));
- status = dladm_vnic_info(linkid, &attr, DLADM_OPT_PERSIST);
+ status = dladm_vnic_info(handle, linkid, &attr, DLADM_OPT_PERSIST);
if (status != DLADM_STATUS_OK)
goto done;
@@ -693,21 +689,22 @@ i_dladm_vnic_up(datalink_id_t linkid, void *arg)
goto done;
/* Get all properties for this vnic */
- status = dladm_link_get_proplist(linkid, &proplist);
+ status = dladm_link_get_proplist(handle, linkid, &proplist);
if (status != DLADM_STATUS_OK)
goto done;
if (proplist != NULL) {
- status = dladm_link_proplist_extract(proplist,
+ status = dladm_link_proplist_extract(handle, proplist,
&attr.va_resource_props);
}
- status = i_dladm_vnic_create_sys(&attr);
+ status = i_dladm_vnic_create_sys(handle, &attr);
if (status != DLADM_STATUS_OK)
goto done;
- if ((status = dladm_up_datalink_id(linkid)) != DLADM_STATUS_OK) {
- (void) i_dladm_vnic_delete_sys(linkid);
+ if ((status = dladm_up_datalink_id(handle, linkid)) !=
+ DLADM_STATUS_OK) {
+ (void) i_dladm_vnic_delete_sys(handle, linkid);
goto done;
}
done:
@@ -716,7 +713,7 @@ done:
}
dladm_status_t
-dladm_vnic_up(datalink_id_t linkid, uint32_t flags)
+dladm_vnic_up(dladm_handle_t handle, datalink_id_t linkid, uint32_t flags)
{
dladm_vnic_up_arg_t vnic_arg;
datalink_class_t class;
@@ -726,14 +723,16 @@ dladm_vnic_up(datalink_id_t linkid, uint32_t flags)
if (linkid == DATALINK_ALL_LINKID) {
vnic_arg.flags = DLADM_VNIC_UP_FIRST_WALK;
- (void) dladm_walk_datalink_id(i_dladm_vnic_up, &vnic_arg,
- class, DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
+ (void) dladm_walk_datalink_id(i_dladm_vnic_up, handle,
+ &vnic_arg, class, DATALINK_ANY_MEDIATYPE,
+ DLADM_OPT_PERSIST);
vnic_arg.flags = DLADM_VNIC_UP_SECOND_WALK;
- (void) dladm_walk_datalink_id(i_dladm_vnic_up, &vnic_arg,
- class, DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
+ (void) dladm_walk_datalink_id(i_dladm_vnic_up, handle,
+ &vnic_arg, class, DATALINK_ANY_MEDIATYPE,
+ DLADM_OPT_PERSIST);
return (DLADM_STATUS_OK);
} else {
- (void) i_dladm_vnic_up(linkid, &vnic_arg);
+ (void) i_dladm_vnic_up(handle, linkid, &vnic_arg);
return (vnic_arg.status);
}
}
diff --git a/usr/src/lib/libdladm/common/libdlvnic.h b/usr/src/lib/libdladm/common/libdlvnic.h
index 77f78130be..9c93ceae3a 100644
--- a/usr/src/lib/libdladm/common/libdlvnic.h
+++ b/usr/src/lib/libdladm/common/libdlvnic.h
@@ -51,16 +51,17 @@ typedef struct dladm_vnic_attr {
mac_resource_props_t va_resource_props;
} dladm_vnic_attr_t;
-extern dladm_status_t dladm_vnic_create(const char *, datalink_id_t,
- vnic_mac_addr_type_t, uchar_t *, int, int *,
- uint_t, uint16_t, datalink_id_t *,
+extern dladm_status_t dladm_vnic_create(dladm_handle_t, const char *,
+ datalink_id_t, vnic_mac_addr_type_t, uchar_t *,
+ int, int *, uint_t, uint16_t, datalink_id_t *,
dladm_arg_list_t *, uint32_t);
-extern dladm_status_t dladm_vnic_delete(datalink_id_t, uint32_t);
-extern dladm_status_t dladm_vnic_info(datalink_id_t, dladm_vnic_attr_t *,
+extern dladm_status_t dladm_vnic_delete(dladm_handle_t, datalink_id_t,
uint32_t);
+extern dladm_status_t dladm_vnic_info(dladm_handle_t, datalink_id_t,
+ dladm_vnic_attr_t *, uint32_t);
-extern dladm_status_t dladm_vnic_up(datalink_id_t, uint32_t);
+extern dladm_status_t dladm_vnic_up(dladm_handle_t, datalink_id_t, uint32_t);
extern dladm_status_t dladm_vnic_str2macaddrtype(const char *,
vnic_mac_addr_type_t *);
diff --git a/usr/src/lib/libdladm/common/libdlwlan.c b/usr/src/lib/libdladm/common/libdlwlan.c
index 9694c5350b..82dd9e49e5 100644
--- a/usr/src/lib/libdladm/common/libdlwlan.c
+++ b/usr/src/lib/libdladm/common/libdlwlan.c
@@ -43,43 +43,61 @@
#include <libdlwlan_impl.h>
#include <net/wpa.h>
-static dladm_status_t wpa_instance_create(datalink_id_t, void *);
-static dladm_status_t wpa_instance_delete(datalink_id_t);
-
-static dladm_status_t do_get_bsstype(datalink_id_t, void *, int);
-static dladm_status_t do_get_essid(datalink_id_t, void *, int);
-static dladm_status_t do_get_bssid(datalink_id_t, void *, int);
-static dladm_status_t do_get_signal(datalink_id_t, void *, int);
-static dladm_status_t do_get_encryption(datalink_id_t, void *, int);
-static dladm_status_t do_get_authmode(datalink_id_t, void *, int);
-static dladm_status_t do_get_linkstatus(datalink_id_t, void *, int);
-static dladm_status_t do_get_esslist(datalink_id_t, void *, int);
-static dladm_status_t do_get_rate(datalink_id_t, void *, int);
-static dladm_status_t do_get_mode(datalink_id_t, void *, int);
-static dladm_status_t do_get_capability(datalink_id_t, void *, int);
-static dladm_status_t do_get_wpamode(datalink_id_t, void *, int);
-
-static dladm_status_t do_set_bsstype(datalink_id_t, dladm_wlan_bsstype_t *);
-static dladm_status_t do_set_authmode(datalink_id_t, dladm_wlan_auth_t *);
-static dladm_status_t do_set_encryption(datalink_id_t,
- dladm_wlan_secmode_t *);
-static dladm_status_t do_set_essid(datalink_id_t, dladm_wlan_essid_t *);
-static dladm_status_t do_set_createibss(datalink_id_t, boolean_t *);
-static dladm_status_t do_set_key(datalink_id_t, dladm_wlan_key_t *, uint_t);
-static dladm_status_t do_set_channel(datalink_id_t, dladm_wlan_channel_t *);
+static dladm_status_t wpa_instance_create(dladm_handle_t, datalink_id_t,
+ void *);
+static dladm_status_t wpa_instance_delete(dladm_handle_t, datalink_id_t);
-static dladm_status_t do_scan(datalink_id_t, void *, int);
-static dladm_status_t do_connect(datalink_id_t, void *, int,
+static dladm_status_t do_get_bsstype(dladm_handle_t, datalink_id_t, void *,
+ int);
+static dladm_status_t do_get_essid(dladm_handle_t, datalink_id_t, void *,
+ int);
+static dladm_status_t do_get_bssid(dladm_handle_t, datalink_id_t, void *,
+ int);
+static dladm_status_t do_get_signal(dladm_handle_t, datalink_id_t, void *,
+ int);
+static dladm_status_t do_get_encryption(dladm_handle_t, datalink_id_t, void *,
+ int);
+static dladm_status_t do_get_authmode(dladm_handle_t, datalink_id_t, void *,
+ int);
+static dladm_status_t do_get_linkstatus(dladm_handle_t, datalink_id_t, void *,
+ int);
+static dladm_status_t do_get_esslist(dladm_handle_t, datalink_id_t, void *,
+ int);
+static dladm_status_t do_get_rate(dladm_handle_t, datalink_id_t, void *, int);
+static dladm_status_t do_get_mode(dladm_handle_t, datalink_id_t, void *, int);
+static dladm_status_t do_get_capability(dladm_handle_t, datalink_id_t, void *,
+ int);
+static dladm_status_t do_get_wpamode(dladm_handle_t, datalink_id_t, void *,
+ int);
+
+static dladm_status_t do_set_bsstype(dladm_handle_t, datalink_id_t,
+ dladm_wlan_bsstype_t *);
+static dladm_status_t do_set_authmode(dladm_handle_t, datalink_id_t,
+ dladm_wlan_auth_t *);
+static dladm_status_t do_set_encryption(dladm_handle_t, datalink_id_t,
+ dladm_wlan_secmode_t *);
+static dladm_status_t do_set_essid(dladm_handle_t, datalink_id_t,
+ dladm_wlan_essid_t *);
+static dladm_status_t do_set_createibss(dladm_handle_t, datalink_id_t,
+ boolean_t *);
+static dladm_status_t do_set_key(dladm_handle_t, datalink_id_t,
+ dladm_wlan_key_t *, uint_t);
+static dladm_status_t do_set_channel(dladm_handle_t, datalink_id_t,
+ dladm_wlan_channel_t *);
+
+static dladm_status_t do_scan(dladm_handle_t, datalink_id_t, void *, int);
+static dladm_status_t do_connect(dladm_handle_t, datalink_id_t, void *, int,
dladm_wlan_attr_t *, boolean_t, void *, uint_t,
int);
-static dladm_status_t do_disconnect(datalink_id_t, void *, int);
+static dladm_status_t do_disconnect(dladm_handle_t, datalink_id_t, void *,
+ int);
static boolean_t find_val_by_name(const char *, val_desc_t *,
uint_t, uint_t *);
static boolean_t find_name_by_val(uint_t, val_desc_t *, uint_t, char **);
static void generate_essid(dladm_wlan_essid_t *);
static dladm_status_t dladm_wlan_wlresult2status(wldp_t *);
-static dladm_status_t dladm_wlan_validate(datalink_id_t);
+static dladm_status_t dladm_wlan_validate(dladm_handle_t, datalink_id_t);
static val_desc_t linkstatus_vals[] = {
{ "disconnected", DLADM_WLAN_LINK_DISCONNECTED },
@@ -231,7 +249,7 @@ fill_wlan_attr(wl_ess_conf_t *wlp, dladm_wlan_attr_t *attrp)
}
dladm_status_t
-dladm_wlan_scan(datalink_id_t linkid, void *arg,
+dladm_wlan_scan(dladm_handle_t handle, datalink_id_t linkid, void *arg,
boolean_t (*func)(void *, dladm_wlan_attr_t *))
{
int i;
@@ -243,14 +261,16 @@ dladm_wlan_scan(datalink_id_t linkid, void *arg,
dladm_wlan_attr_t wlattr;
dladm_status_t status;
- if ((status = dladm_wlan_validate(linkid)) != DLADM_STATUS_OK)
+ if ((status = dladm_wlan_validate(handle, linkid)) != DLADM_STATUS_OK)
goto done;
- status = do_get_linkstatus(linkid, &wl_status, sizeof (wl_status));
+ status = do_get_linkstatus(handle, linkid, &wl_status,
+ sizeof (wl_status));
if (status != DLADM_STATUS_OK)
goto done;
- if ((status = do_scan(linkid, buf, sizeof (buf))) != DLADM_STATUS_OK)
+ if ((status = do_scan(handle, linkid, buf, sizeof (buf))) !=
+ DLADM_STATUS_OK)
goto done;
if (func == NULL) {
@@ -264,7 +284,7 @@ dladm_wlan_scan(datalink_id_t linkid, void *arg,
goto done;
}
- if ((status = do_get_esslist(linkid, wls, WLDP_BUFSIZE))
+ if ((status = do_get_esslist(handle, linkid, wls, WLDP_BUFSIZE))
!= DLADM_STATUS_OK)
goto done;
@@ -278,12 +298,12 @@ dladm_wlan_scan(datalink_id_t linkid, void *arg,
}
if (wl_status != WL_CONNECTED) {
- status = do_get_linkstatus(linkid, &wl_status,
+ status = do_get_linkstatus(handle, linkid, &wl_status,
sizeof (&wl_status));
if (status != DLADM_STATUS_OK)
goto done;
if (wl_status == WL_CONNECTED)
- (void) do_disconnect(linkid, buf, sizeof (buf));
+ (void) do_disconnect(handle, linkid, buf, sizeof (buf));
}
status = DLADM_STATUS_OK;
@@ -402,7 +422,7 @@ append:
#define IEEE80211_C_WPA 0x01800000
static dladm_status_t
-do_connect(datalink_id_t linkid, void *buf, int bufsize,
+do_connect(dladm_handle_t handle, datalink_id_t linkid, void *buf, int bufsize,
dladm_wlan_attr_t *attrp, boolean_t create_ibss, void *keys,
uint_t key_count, int timeout)
{
@@ -419,7 +439,7 @@ do_connect(datalink_id_t linkid, void *buf, int bufsize,
if ((attrp->wa_valid & DLADM_WLAN_ATTR_CHANNEL) != 0) {
channel = attrp->wa_channel;
- status = do_set_channel(linkid, &channel);
+ status = do_set_channel(handle, linkid, &channel);
if (status != DLADM_STATUS_OK)
goto fail;
}
@@ -427,19 +447,22 @@ do_connect(datalink_id_t linkid, void *buf, int bufsize,
secmode = ((attrp->wa_valid & DLADM_WLAN_ATTR_SECMODE) != 0) ?
attrp->wa_secmode : DLADM_WLAN_SECMODE_NONE;
- if ((status = do_set_encryption(linkid, &secmode)) != DLADM_STATUS_OK)
+ if ((status = do_set_encryption(handle, linkid, &secmode)) !=
+ DLADM_STATUS_OK)
goto fail;
authmode = ((attrp->wa_valid & DLADM_WLAN_ATTR_AUTH) != 0) ?
attrp->wa_auth : DLADM_WLAN_AUTH_OPEN;
- if ((status = do_set_authmode(linkid, &authmode)) != DLADM_STATUS_OK)
+ if ((status = do_set_authmode(handle, linkid, &authmode)) !=
+ DLADM_STATUS_OK)
goto fail;
bsstype = ((attrp->wa_valid & DLADM_WLAN_ATTR_BSSTYPE) != 0) ?
attrp->wa_bsstype : DLADM_WLAN_BSSTYPE_BSS;
- if ((status = do_set_bsstype(linkid, &bsstype)) != DLADM_STATUS_OK)
+ if ((status = do_set_bsstype(handle, linkid, &bsstype)) !=
+ DLADM_STATUS_OK)
goto fail;
if (secmode == DLADM_WLAN_SECMODE_WEP) {
@@ -448,7 +471,7 @@ do_connect(datalink_id_t linkid, void *buf, int bufsize,
status = DLADM_STATUS_BADARG;
goto fail;
}
- status = do_set_key(linkid, keys, key_count);
+ status = do_set_key(handle, linkid, keys, key_count);
if (status != DLADM_STATUS_OK)
goto fail;
} else if (secmode == DLADM_WLAN_SECMODE_WPA) {
@@ -457,7 +480,7 @@ do_connect(datalink_id_t linkid, void *buf, int bufsize,
status = DLADM_STATUS_BADARG;
goto fail;
}
- status = do_get_capability(linkid, buf, bufsize);
+ status = do_get_capability(handle, linkid, buf, bufsize);
if (status != DLADM_STATUS_OK)
goto fail;
caps = (wl_capability_t *)buf;
@@ -466,11 +489,11 @@ do_connect(datalink_id_t linkid, void *buf, int bufsize,
}
if (create_ibss) {
- status = do_set_channel(linkid, &channel);
+ status = do_set_channel(handle, linkid, &channel);
if (status != DLADM_STATUS_OK)
goto fail;
- status = do_set_createibss(linkid, &create_ibss);
+ status = do_set_createibss(handle, linkid, &create_ibss);
if (status != DLADM_STATUS_OK)
goto fail;
@@ -490,7 +513,7 @@ do_connect(datalink_id_t linkid, void *buf, int bufsize,
goto fail;
}
- if ((status = do_set_essid(linkid, &essid)) != DLADM_STATUS_OK)
+ if ((status = do_set_essid(handle, linkid, &essid)) != DLADM_STATUS_OK)
goto fail;
/*
@@ -498,11 +521,11 @@ do_connect(datalink_id_t linkid, void *buf, int bufsize,
* we need call do_set_essid() first, then call wpa_instance_create().
*/
if (secmode == DLADM_WLAN_SECMODE_WPA && keys != NULL)
- (void) wpa_instance_create(linkid, keys);
+ (void) wpa_instance_create(handle, linkid, keys);
start = gethrtime();
for (;;) {
- status = do_get_linkstatus(linkid, &wl_status,
+ status = do_get_linkstatus(handle, linkid, &wl_status,
sizeof (wl_status));
if (status != DLADM_STATUS_OK)
goto fail;
@@ -523,8 +546,9 @@ fail:
}
dladm_status_t
-dladm_wlan_connect(datalink_id_t linkid, dladm_wlan_attr_t *attrp,
- int timeout, void *keys, uint_t key_count, uint_t flags)
+dladm_wlan_connect(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_wlan_attr_t *attrp, int timeout, void *keys, uint_t key_count,
+ uint_t flags)
{
int i;
char buf[WLDP_BUFSIZE];
@@ -535,11 +559,11 @@ dladm_wlan_connect(datalink_id_t linkid, dladm_wlan_attr_t *attrp,
dladm_status_t status;
wl_linkstatus_t wl_status;
- if ((status = dladm_wlan_validate(linkid)) != DLADM_STATUS_OK)
+ if ((status = dladm_wlan_validate(handle, linkid)) != DLADM_STATUS_OK)
return (status);
- if ((status = do_get_linkstatus(linkid, &wl_status, sizeof (wl_status)))
- != DLADM_STATUS_OK)
+ if ((status = do_get_linkstatus(handle, linkid, &wl_status,
+ sizeof (wl_status))) != DLADM_STATUS_OK)
goto done;
if (wl_status == WL_CONNECTED) {
@@ -557,7 +581,7 @@ dladm_wlan_connect(datalink_id_t linkid, dladm_wlan_attr_t *attrp,
if ((flags & DLADM_WLAN_CONNECT_NOSCAN) != 0 ||
(create_ibss && attrp != NULL &&
(attrp->wa_valid & DLADM_WLAN_ATTR_ESSID) == 0)) {
- status = do_connect(linkid, buf, sizeof (buf), attrp,
+ status = do_connect(handle, linkid, buf, sizeof (buf), attrp,
create_ibss, keys, key_count, timeout);
goto done;
}
@@ -566,7 +590,7 @@ dladm_wlan_connect(datalink_id_t linkid, dladm_wlan_attr_t *attrp,
state.cs_list = NULL;
state.cs_count = 0;
- status = dladm_wlan_scan(linkid, &state, connect_cb);
+ status = dladm_wlan_scan(handle, linkid, &state, connect_cb);
if (status != DLADM_STATUS_OK)
goto done;
@@ -575,7 +599,7 @@ dladm_wlan_connect(datalink_id_t linkid, dladm_wlan_attr_t *attrp,
status = DLADM_STATUS_NOTFOUND;
goto done;
}
- status = do_connect(linkid, buf, sizeof (buf),
+ status = do_connect(handle, linkid, buf, sizeof (buf),
attrp, create_ibss, keys, key_count, timeout);
goto done;
}
@@ -597,7 +621,7 @@ dladm_wlan_connect(datalink_id_t linkid, dladm_wlan_attr_t *attrp,
for (i = 0; i < state.cs_count; i++) {
dladm_wlan_attr_t *ap = wl_list[i];
- status = do_connect(linkid, buf, sizeof (buf),
+ status = do_connect(handle, linkid, buf, sizeof (buf),
ap, create_ibss, keys, key_count, timeout);
if (status == DLADM_STATUS_OK)
break;
@@ -605,7 +629,7 @@ dladm_wlan_connect(datalink_id_t linkid, dladm_wlan_attr_t *attrp,
if (!set_authmode) {
ap->wa_auth = DLADM_WLAN_AUTH_SHARED;
ap->wa_valid |= DLADM_WLAN_ATTR_AUTH;
- status = do_connect(linkid, buf, sizeof (buf),
+ status = do_connect(handle, linkid, buf, sizeof (buf),
ap, create_ibss, keys, key_count, timeout);
if (status == DLADM_STATUS_OK)
break;
@@ -613,7 +637,7 @@ dladm_wlan_connect(datalink_id_t linkid, dladm_wlan_attr_t *attrp,
}
done:
if ((status != DLADM_STATUS_OK) && (status != DLADM_STATUS_ISCONN))
- (void) do_disconnect(linkid, buf, sizeof (buf));
+ (void) do_disconnect(handle, linkid, buf, sizeof (buf));
while (state.cs_list != NULL) {
nodep = state.cs_list;
@@ -625,17 +649,17 @@ done:
}
dladm_status_t
-dladm_wlan_disconnect(datalink_id_t linkid)
+dladm_wlan_disconnect(dladm_handle_t handle, datalink_id_t linkid)
{
char buf[WLDP_BUFSIZE];
dladm_status_t status;
wl_linkstatus_t wl_status;
- if ((status = dladm_wlan_validate(linkid)) != DLADM_STATUS_OK)
+ if ((status = dladm_wlan_validate(handle, linkid)) != DLADM_STATUS_OK)
return (status);
- if ((status = do_get_linkstatus(linkid, &wl_status, sizeof (wl_status)))
- != DLADM_STATUS_OK)
+ if ((status = do_get_linkstatus(handle, linkid, &wl_status,
+ sizeof (wl_status))) != DLADM_STATUS_OK)
goto done;
if (wl_status != WL_CONNECTED) {
@@ -643,12 +667,12 @@ dladm_wlan_disconnect(datalink_id_t linkid)
goto done;
}
- if ((status = do_disconnect(linkid, buf, sizeof (buf)))
+ if ((status = do_disconnect(handle, linkid, buf, sizeof (buf)))
!= DLADM_STATUS_OK)
goto done;
- if ((status = do_get_linkstatus(linkid, &wl_status, sizeof (wl_status)))
- != DLADM_STATUS_OK)
+ if ((status = do_get_linkstatus(handle, linkid, &wl_status,
+ sizeof (wl_status))) != DLADM_STATUS_OK)
goto done;
if (wl_status == WL_CONNECTED) {
@@ -662,7 +686,8 @@ done:
}
dladm_status_t
-dladm_wlan_get_linkattr(datalink_id_t linkid, dladm_wlan_linkattr_t *attrp)
+dladm_wlan_get_linkattr(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_wlan_linkattr_t *attrp)
{
wl_rssi_t signal;
wl_bss_type_t bsstype;
@@ -679,14 +704,14 @@ dladm_wlan_get_linkattr(datalink_id_t linkid, dladm_wlan_linkattr_t *attrp)
if (attrp == NULL)
return (DLADM_STATUS_BADARG);
- if ((status = dladm_wlan_validate(linkid)) != DLADM_STATUS_OK)
+ if ((status = dladm_wlan_validate(handle, linkid)) != DLADM_STATUS_OK)
goto done;
(void) memset(attrp, 0, sizeof (*attrp));
wl_attrp = &attrp->la_wlan_attr;
- if ((status = do_get_linkstatus(linkid, &wl_status, sizeof (wl_status)))
- != DLADM_STATUS_OK)
+ if ((status = do_get_linkstatus(handle, linkid, &wl_status,
+ sizeof (wl_status))) != DLADM_STATUS_OK)
goto done;
attrp->la_valid |= DLADM_WLAN_LINKATTR_STATUS;
@@ -695,7 +720,7 @@ dladm_wlan_get_linkattr(datalink_id_t linkid, dladm_wlan_linkattr_t *attrp)
else
attrp->la_status = DLADM_WLAN_LINK_CONNECTED;
- if ((status = do_get_essid(linkid, &wls, sizeof (wls)))
+ if ((status = do_get_essid(handle, linkid, &wls, sizeof (wls)))
!= DLADM_STATUS_OK)
goto done;
@@ -704,7 +729,7 @@ dladm_wlan_get_linkattr(datalink_id_t linkid, dladm_wlan_linkattr_t *attrp)
wl_attrp->wa_valid |= DLADM_WLAN_ATTR_ESSID;
- if ((status = do_get_bssid(linkid, buf, sizeof (buf)))
+ if ((status = do_get_bssid(handle, linkid, buf, sizeof (buf)))
!= DLADM_STATUS_OK)
goto done;
@@ -718,7 +743,7 @@ dladm_wlan_get_linkattr(datalink_id_t linkid, dladm_wlan_linkattr_t *attrp)
goto done;
}
- if ((status = do_get_encryption(linkid, &encryption,
+ if ((status = do_get_encryption(handle, linkid, &encryption,
sizeof (encryption))) != DLADM_STATUS_OK)
goto done;
@@ -739,7 +764,7 @@ dladm_wlan_get_linkattr(datalink_id_t linkid, dladm_wlan_linkattr_t *attrp)
break;
}
- if ((status = do_get_signal(linkid, &signal, sizeof (signal)))
+ if ((status = do_get_signal(handle, linkid, &signal, sizeof (signal)))
!= DLADM_STATUS_OK)
goto done;
@@ -752,7 +777,7 @@ dladm_wlan_get_linkattr(datalink_id_t linkid, dladm_wlan_linkattr_t *attrp)
goto done;
}
- if ((status = do_get_rate(linkid, ratesp, WLDP_BUFSIZE))
+ if ((status = do_get_rate(handle, linkid, ratesp, WLDP_BUFSIZE))
!= DLADM_STATUS_OK)
goto done;
@@ -767,7 +792,7 @@ dladm_wlan_get_linkattr(datalink_id_t linkid, dladm_wlan_linkattr_t *attrp)
wl_attrp->wa_valid |= DLADM_WLAN_ATTR_SPEED;
}
- if ((status = do_get_authmode(linkid, &authmode,
+ if ((status = do_get_authmode(handle, linkid, &authmode,
sizeof (authmode))) != DLADM_STATUS_OK)
goto done;
@@ -785,7 +810,7 @@ dladm_wlan_get_linkattr(datalink_id_t linkid, dladm_wlan_linkattr_t *attrp)
break;
}
- if ((status = do_get_bsstype(linkid, &bsstype,
+ if ((status = do_get_bsstype(handle, linkid, &bsstype,
sizeof (bsstype))) != DLADM_STATUS_OK)
goto done;
@@ -806,7 +831,7 @@ dladm_wlan_get_linkattr(datalink_id_t linkid, dladm_wlan_linkattr_t *attrp)
break;
}
- if ((status = do_get_mode(linkid, &wl_phy_conf,
+ if ((status = do_get_mode(handle, linkid, &wl_phy_conf,
sizeof (wl_phy_conf))) != DLADM_STATUS_OK)
goto done;
@@ -827,12 +852,13 @@ done:
* Check to see if the link is wireless.
*/
static dladm_status_t
-dladm_wlan_validate(datalink_id_t linkid)
+dladm_wlan_validate(dladm_handle_t handle, datalink_id_t linkid)
{
uint32_t media;
dladm_status_t status;
- status = dladm_datalink_id2info(linkid, NULL, NULL, &media, NULL, 0);
+ status = dladm_datalink_id2info(handle, linkid, NULL, NULL, &media,
+ NULL, 0);
if (status == DLADM_STATUS_OK) {
if (media != DL_WIFI)
status = DLADM_STATUS_LINKINVAL;
@@ -1056,8 +1082,8 @@ dladm_wlan_str2linkstatus(const char *str, dladm_wlan_linkstatus_t *linkstatus)
}
dladm_status_t
-i_dladm_wlan_legacy_ioctl(datalink_id_t linkid, wldp_t *gbuf, uint_t id,
- size_t len, uint_t cmd, size_t cmdlen)
+i_dladm_wlan_legacy_ioctl(dladm_handle_t handle, datalink_id_t linkid,
+ wldp_t *gbuf, uint_t id, size_t len, uint_t cmd, size_t cmdlen)
{
char linkname[MAXPATHLEN];
int fd, rc;
@@ -1067,8 +1093,8 @@ i_dladm_wlan_legacy_ioctl(datalink_id_t linkid, wldp_t *gbuf, uint_t id,
uint32_t media;
char link[MAXLINKNAMELEN];
- if ((status = dladm_datalink_id2info(linkid, &flags, NULL, &media,
- link, MAXLINKNAMELEN)) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(handle, linkid, &flags, NULL,
+ &media, link, MAXLINKNAMELEN)) != DLADM_STATUS_OK) {
return (status);
}
@@ -1115,7 +1141,8 @@ i_dladm_wlan_legacy_ioctl(datalink_id_t linkid, wldp_t *gbuf, uint_t id,
}
static dladm_status_t
-do_cmd_ioctl(datalink_id_t linkid, void *buf, int buflen, uint_t cmd)
+do_cmd_ioctl(dladm_handle_t handle, datalink_id_t linkid, void *buf,
+ int buflen, uint_t cmd)
{
wldp_t *gbuf;
dladm_status_t status = DLADM_STATUS_OK;
@@ -1124,101 +1151,109 @@ do_cmd_ioctl(datalink_id_t linkid, void *buf, int buflen, uint_t cmd)
return (DLADM_STATUS_NOMEM);
(void) memset(gbuf, 0, MAX_BUF_LEN);
- status = i_dladm_wlan_legacy_ioctl(linkid, gbuf, cmd, WLDP_BUFSIZE,
- WLAN_COMMAND, sizeof (wldp_t));
+ status = i_dladm_wlan_legacy_ioctl(handle, linkid, gbuf, cmd,
+ WLDP_BUFSIZE, WLAN_COMMAND, sizeof (wldp_t));
(void) memcpy(buf, gbuf->wldp_buf, buflen);
free(gbuf);
return (status);
}
static dladm_status_t
-do_scan(datalink_id_t linkid, void *buf, int buflen)
+do_scan(dladm_handle_t handle, datalink_id_t linkid, void *buf, int buflen)
{
- return (do_cmd_ioctl(linkid, buf, buflen, WL_SCAN));
+ return (do_cmd_ioctl(handle, linkid, buf, buflen, WL_SCAN));
}
static dladm_status_t
-do_disconnect(datalink_id_t linkid, void *buf, int buflen)
+do_disconnect(dladm_handle_t handle, datalink_id_t linkid, void *buf,
+ int buflen)
{
- if (do_get_wpamode(linkid, buf, buflen) == 0 &&
+ if (do_get_wpamode(handle, linkid, buf, buflen) == 0 &&
((wl_wpa_t *)(buf))->wpa_flag > 0)
- (void) wpa_instance_delete(linkid);
+ (void) wpa_instance_delete(handle, linkid);
- return (do_cmd_ioctl(linkid, buf, buflen, WL_DISASSOCIATE));
+ return (do_cmd_ioctl(handle, linkid, buf, buflen, WL_DISASSOCIATE));
}
static dladm_status_t
-do_get_esslist(datalink_id_t linkid, void *buf, int buflen)
+do_get_esslist(dladm_handle_t handle, datalink_id_t linkid, void *buf,
+ int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_ESS_LIST, buflen,
- B_FALSE));
+ return (i_dladm_wlan_param(handle, linkid, buf, MAC_PROP_WL_ESS_LIST,
+ buflen, B_FALSE));
}
static dladm_status_t
-do_get_bssid(datalink_id_t linkid, void *buf, int buflen)
+do_get_bssid(dladm_handle_t handle, datalink_id_t linkid, void *buf, int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_BSSID, buflen,
- B_FALSE));
+ return (i_dladm_wlan_param(handle, linkid, buf, MAC_PROP_WL_BSSID,
+ buflen, B_FALSE));
}
static dladm_status_t
-do_get_essid(datalink_id_t linkid, void *buf, int buflen)
+do_get_essid(dladm_handle_t handle, datalink_id_t linkid, void *buf, int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_ESSID, buflen,
- B_FALSE));
+ return (i_dladm_wlan_param(handle, linkid, buf, MAC_PROP_WL_ESSID,
+ buflen, B_FALSE));
}
static dladm_status_t
-do_get_bsstype(datalink_id_t linkid, void *buf, int buflen)
+do_get_bsstype(dladm_handle_t handle, datalink_id_t linkid, void *buf,
+ int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_BSSTYPE, buflen,
- B_FALSE));
+ return (i_dladm_wlan_param(handle, linkid, buf, MAC_PROP_WL_BSSTYPE,
+ buflen, B_FALSE));
}
static dladm_status_t
-do_get_linkstatus(datalink_id_t linkid, void *buf, int buflen)
+do_get_linkstatus(dladm_handle_t handle, datalink_id_t linkid, void *buf,
+ int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_LINKSTATUS, buflen,
- B_FALSE));
+ return (i_dladm_wlan_param(handle, linkid, buf, MAC_PROP_WL_LINKSTATUS,
+ buflen, B_FALSE));
}
static dladm_status_t
-do_get_rate(datalink_id_t linkid, void *buf, int buflen)
+do_get_rate(dladm_handle_t handle, datalink_id_t linkid, void *buf, int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_DESIRED_RATES,
- buflen, B_FALSE));
+ return (i_dladm_wlan_param(handle, linkid, buf,
+ MAC_PROP_WL_DESIRED_RATES, buflen, B_FALSE));
}
static dladm_status_t
-do_get_authmode(datalink_id_t linkid, void *buf, int buflen)
+do_get_authmode(dladm_handle_t handle, datalink_id_t linkid, void *buf,
+ int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_AUTH_MODE, buflen,
- B_FALSE));
+ return (i_dladm_wlan_param(handle, linkid, buf,
+ MAC_PROP_WL_AUTH_MODE, buflen, B_FALSE));
}
static dladm_status_t
-do_get_encryption(datalink_id_t linkid, void *buf, int buflen)
+do_get_encryption(dladm_handle_t handle, datalink_id_t linkid, void *buf,
+ int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_ENCRYPTION, buflen,
- B_FALSE));
+ return (i_dladm_wlan_param(handle, linkid, buf,
+ MAC_PROP_WL_ENCRYPTION, buflen, B_FALSE));
}
static dladm_status_t
-do_get_signal(datalink_id_t linkid, void *buf, int buflen)
+do_get_signal(dladm_handle_t handle, datalink_id_t linkid, void *buf,
+ int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_RSSI, buflen,
- B_FALSE));
+ return (i_dladm_wlan_param(handle, linkid, buf, MAC_PROP_WL_RSSI,
+ buflen, B_FALSE));
}
static dladm_status_t
-do_get_mode(datalink_id_t linkid, void *buf, int buflen)
+do_get_mode(dladm_handle_t handle, datalink_id_t linkid, void *buf, int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_PHY_CONFIG,
+ return (i_dladm_wlan_param(handle, linkid, buf, MAC_PROP_WL_PHY_CONFIG,
buflen, B_FALSE));
}
static dladm_status_t
-do_set_bsstype(datalink_id_t linkid, dladm_wlan_bsstype_t *bsstype)
+do_set_bsstype(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_wlan_bsstype_t *bsstype)
{
wl_bss_type_t ibsstype;
@@ -1233,12 +1268,13 @@ do_set_bsstype(datalink_id_t linkid, dladm_wlan_bsstype_t *bsstype)
ibsstype = WL_BSS_ANY;
break;
}
- return (i_dladm_wlan_param(linkid, &ibsstype, MAC_PROP_WL_BSSTYPE,
- sizeof (ibsstype), B_TRUE));
+ return (i_dladm_wlan_param(handle, linkid, &ibsstype,
+ MAC_PROP_WL_BSSTYPE, sizeof (ibsstype), B_TRUE));
}
static dladm_status_t
-do_set_authmode(datalink_id_t linkid, dladm_wlan_auth_t *auth)
+do_set_authmode(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_wlan_auth_t *auth)
{
wl_authmode_t auth_mode;
@@ -1252,12 +1288,13 @@ do_set_authmode(datalink_id_t linkid, dladm_wlan_auth_t *auth)
default:
return (DLADM_STATUS_NOTSUP);
}
- return (i_dladm_wlan_param(linkid, &auth_mode, MAC_PROP_WL_AUTH_MODE,
- sizeof (auth_mode), B_TRUE));
+ return (i_dladm_wlan_param(handle, linkid, &auth_mode,
+ MAC_PROP_WL_AUTH_MODE, sizeof (auth_mode), B_TRUE));
}
static dladm_status_t
-do_set_encryption(datalink_id_t linkid, dladm_wlan_secmode_t *secmode)
+do_set_encryption(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_wlan_secmode_t *secmode)
{
wl_encryption_t encryption;
@@ -1273,12 +1310,12 @@ do_set_encryption(datalink_id_t linkid, dladm_wlan_secmode_t *secmode)
default:
return (DLADM_STATUS_NOTSUP);
}
- return (i_dladm_wlan_param(linkid, &encryption, MAC_PROP_WL_ENCRYPTION,
- sizeof (encryption), B_TRUE));
+ return (i_dladm_wlan_param(handle, linkid, &encryption,
+ MAC_PROP_WL_ENCRYPTION, sizeof (encryption), B_TRUE));
}
static dladm_status_t
-do_set_key(datalink_id_t linkid, dladm_wlan_key_t *keys,
+do_set_key(dladm_handle_t handle, datalink_id_t linkid, dladm_wlan_key_t *keys,
uint_t key_count)
{
int i;
@@ -1307,12 +1344,13 @@ do_set_key(datalink_id_t linkid, dladm_wlan_key_t *keys,
(void) memcpy(wkp->wl_wep_key, kp->wk_val, kp->wk_len);
}
- return (i_dladm_wlan_param(linkid, &wepkey_tab, MAC_PROP_WL_KEY_TAB,
- sizeof (wepkey_tab), B_TRUE));
+ return (i_dladm_wlan_param(handle, linkid, &wepkey_tab,
+ MAC_PROP_WL_KEY_TAB, sizeof (wepkey_tab), B_TRUE));
}
static dladm_status_t
-do_set_essid(datalink_id_t linkid, dladm_wlan_essid_t *essid)
+do_set_essid(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_wlan_essid_t *essid)
{
wl_essid_t iessid;
@@ -1325,12 +1363,13 @@ do_set_essid(datalink_id_t linkid, dladm_wlan_essid_t *essid)
} else {
return (DLADM_STATUS_BADARG);
}
- return (i_dladm_wlan_param(linkid, &iessid, MAC_PROP_WL_ESSID,
+ return (i_dladm_wlan_param(handle, linkid, &iessid, MAC_PROP_WL_ESSID,
sizeof (iessid), B_TRUE));
}
static dladm_status_t
-do_set_channel(datalink_id_t linkid, dladm_wlan_channel_t *channel)
+do_set_channel(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_wlan_channel_t *channel)
{
wl_phy_conf_t phy_conf;
@@ -1340,16 +1379,17 @@ do_set_channel(datalink_id_t linkid, dladm_wlan_channel_t *channel)
(void) memset(&phy_conf, 0xff, sizeof (phy_conf));
phy_conf.wl_phy_dsss_conf.wl_dsss_channel = *channel;
- return (i_dladm_wlan_param(linkid, &phy_conf, MAC_PROP_WL_PHY_CONFIG,
- sizeof (phy_conf), B_TRUE));
+ return (i_dladm_wlan_param(handle, linkid, &phy_conf,
+ MAC_PROP_WL_PHY_CONFIG, sizeof (phy_conf), B_TRUE));
}
static dladm_status_t
-do_set_createibss(datalink_id_t linkid, boolean_t *create_ibss)
+do_set_createibss(dladm_handle_t handle, datalink_id_t linkid,
+ boolean_t *create_ibss)
{
wl_create_ibss_t cr = (wl_create_ibss_t)(*create_ibss);
- return (i_dladm_wlan_param(linkid, &cr, MAC_PROP_WL_CREATE_IBSS,
+ return (i_dladm_wlan_param(handle, linkid, &cr, MAC_PROP_WL_CREATE_IBSS,
sizeof (cr), B_TRUE));
}
@@ -1362,22 +1402,24 @@ generate_essid(dladm_wlan_essid_t *essid)
}
static dladm_status_t
-do_get_capability(datalink_id_t linkid, void *buf, int buflen)
+do_get_capability(dladm_handle_t handle, datalink_id_t linkid, void *buf,
+ int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_CAPABILITY,
+ return (i_dladm_wlan_param(handle, linkid, buf, MAC_PROP_WL_CAPABILITY,
buflen, B_FALSE));
}
static dladm_status_t
-do_get_wpamode(datalink_id_t linkid, void *buf, int buflen)
+do_get_wpamode(dladm_handle_t handle, datalink_id_t linkid, void *buf,
+ int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_WPA, buflen,
+ return (i_dladm_wlan_param(handle, linkid, buf, MAC_PROP_WL_WPA, buflen,
B_FALSE));
}
dladm_status_t
-dladm_wlan_wpa_get_sr(datalink_id_t linkid, dladm_wlan_ess_t *sr,
- uint_t escnt, uint_t *estot)
+dladm_wlan_wpa_get_sr(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_wlan_ess_t *sr, uint_t escnt, uint_t *estot)
{
int i, n;
wl_wpa_ess_t *es;
@@ -1387,7 +1429,7 @@ dladm_wlan_wpa_get_sr(datalink_id_t linkid, dladm_wlan_ess_t *sr,
if (es == NULL)
return (DLADM_STATUS_NOMEM);
- status = i_dladm_wlan_param(linkid, es, MAC_PROP_WL_SCANRESULTS,
+ status = i_dladm_wlan_param(handle, linkid, es, MAC_PROP_WL_SCANRESULTS,
WLDP_BUFSIZE, B_FALSE);
if (status == DLADM_STATUS_OK) {
@@ -1411,7 +1453,8 @@ dladm_wlan_wpa_get_sr(datalink_id_t linkid, dladm_wlan_ess_t *sr,
}
dladm_status_t
-dladm_wlan_wpa_set_ie(datalink_id_t linkid, uint8_t *wpa_ie, uint_t wpa_ie_len)
+dladm_wlan_wpa_set_ie(dladm_handle_t handle, datalink_id_t linkid,
+ uint8_t *wpa_ie, uint_t wpa_ie_len)
{
wl_wpa_ie_t *ie;
uint_t len;
@@ -1428,26 +1471,27 @@ dladm_wlan_wpa_set_ie(datalink_id_t linkid, uint8_t *wpa_ie, uint_t wpa_ie_len)
ie->wpa_ie_len = wpa_ie_len;
(void) memcpy(ie->wpa_ie, wpa_ie, wpa_ie_len);
- status = i_dladm_wlan_param(linkid, ie, MAC_PROP_WL_SETOPTIE, len,
- B_TRUE);
+ status = i_dladm_wlan_param(handle, linkid, ie, MAC_PROP_WL_SETOPTIE,
+ len, B_TRUE);
free(ie);
return (status);
}
dladm_status_t
-dladm_wlan_wpa_set_wpa(datalink_id_t linkid, boolean_t flag)
+dladm_wlan_wpa_set_wpa(dladm_handle_t handle, datalink_id_t linkid,
+ boolean_t flag)
{
wl_wpa_t wpa;
wpa.wpa_flag = flag;
- return (i_dladm_wlan_param(linkid, &wpa, MAC_PROP_WL_WPA,
+ return (i_dladm_wlan_param(handle, linkid, &wpa, MAC_PROP_WL_WPA,
sizeof (wpa), B_TRUE));
}
dladm_status_t
-dladm_wlan_wpa_del_key(datalink_id_t linkid, uint_t key_idx,
- const dladm_wlan_bssid_t *addr)
+dladm_wlan_wpa_del_key(dladm_handle_t handle, datalink_id_t linkid,
+ uint_t key_idx, const dladm_wlan_bssid_t *addr)
{
wl_del_key_t wk;
@@ -1456,14 +1500,15 @@ dladm_wlan_wpa_del_key(datalink_id_t linkid, uint_t key_idx,
(void) memcpy((char *)wk.idk_macaddr, addr->wb_bytes,
DLADM_WLAN_BSSID_LEN);
- return (i_dladm_wlan_param(linkid, &wk, MAC_PROP_WL_DELKEY,
+ return (i_dladm_wlan_param(handle, linkid, &wk, MAC_PROP_WL_DELKEY,
sizeof (wk), B_TRUE));
}
dladm_status_t
-dladm_wlan_wpa_set_key(datalink_id_t linkid, dladm_wlan_cipher_t cipher,
- const dladm_wlan_bssid_t *addr, boolean_t set_tx, uint64_t seq,
- uint_t key_idx, uint8_t *key, uint_t key_len)
+dladm_wlan_wpa_set_key(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_wlan_cipher_t cipher, const dladm_wlan_bssid_t *addr,
+ boolean_t set_tx, uint64_t seq, uint_t key_idx, uint8_t *key,
+ uint_t key_len)
{
wl_key_t wk;
@@ -1502,13 +1547,14 @@ dladm_wlan_wpa_set_key(datalink_id_t linkid, dladm_wlan_cipher_t cipher,
(void) memcpy(&wk.ik_keyrsc, &seq, 6); /* only use 48-bit of seq */
(void) memcpy(wk.ik_keydata, key, key_len);
- return (i_dladm_wlan_param(linkid, &wk, MAC_PROP_WL_KEY,
+ return (i_dladm_wlan_param(handle, linkid, &wk, MAC_PROP_WL_KEY,
sizeof (wk), B_TRUE));
}
dladm_status_t
-dladm_wlan_wpa_set_mlme(datalink_id_t linkid, dladm_wlan_mlme_op_t op,
- dladm_wlan_reason_t reason, dladm_wlan_bssid_t *bssid)
+dladm_wlan_wpa_set_mlme(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_wlan_mlme_op_t op, dladm_wlan_reason_t reason,
+ dladm_wlan_bssid_t *bssid)
{
wl_mlme_t mlme;
@@ -1528,7 +1574,7 @@ dladm_wlan_wpa_set_mlme(datalink_id_t linkid, dladm_wlan_mlme_op_t op,
(void) memcpy(mlme.im_macaddr, bssid->wb_bytes,
DLADM_WLAN_BSSID_LEN);
- return (i_dladm_wlan_param(linkid, &mlme, MAC_PROP_WL_MLME,
+ return (i_dladm_wlan_param(handle, linkid, &mlme, MAC_PROP_WL_MLME,
sizeof (mlme), B_TRUE));
}
@@ -1866,7 +1912,7 @@ out:
}
static dladm_status_t
-wpa_instance_create(datalink_id_t linkid, void *key)
+wpa_instance_create(dladm_handle_t handle, datalink_id_t linkid, void *key)
{
dladm_status_t status = DLADM_STATUS_FAILED;
char *command = NULL;
@@ -1877,8 +1923,8 @@ wpa_instance_create(datalink_id_t linkid, void *key)
/*
* Use the link name as the instance name of the network/wpad service.
*/
- status = dladm_datalink_id2info(linkid, NULL, NULL, NULL, instance_name,
- sizeof (instance_name));
+ status = dladm_datalink_id2info(handle, linkid, NULL, NULL, NULL,
+ instance_name, sizeof (instance_name));
if (status != DLADM_STATUS_OK)
goto out;
@@ -1910,7 +1956,7 @@ out:
}
static dladm_status_t
-wpa_instance_delete(datalink_id_t linkid)
+wpa_instance_delete(dladm_handle_t handle, datalink_id_t linkid)
{
char instance_name[MAXLINKNAMELEN];
@@ -1918,8 +1964,8 @@ wpa_instance_delete(datalink_id_t linkid)
* Get the instance name of the network/wpad service (the same as
* the link name).
*/
- if (dladm_datalink_id2info(linkid, NULL, NULL, NULL, instance_name,
- sizeof (instance_name)) != DLADM_STATUS_OK)
+ if (dladm_datalink_id2info(handle, linkid, NULL, NULL, NULL,
+ instance_name, sizeof (instance_name)) != DLADM_STATUS_OK)
return (DLADM_STATUS_FAILED);
return (delete_instance(instance_name));
diff --git a/usr/src/lib/libdladm/common/libdlwlan.h b/usr/src/lib/libdladm/common/libdlwlan.h
index 5e81b0001e..87dc01c863 100644
--- a/usr/src/lib/libdladm/common/libdlwlan.h
+++ b/usr/src/lib/libdladm/common/libdlwlan.h
@@ -26,8 +26,6 @@
#ifndef _LIBDLWLAN_H
#define _LIBDLWLAN_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* This file includes structures, macros and routines used by WLAN link
* administration.
@@ -181,24 +179,26 @@ typedef struct dladm_wlan_key {
uint_t wk_class;
} dladm_wlan_key_t;
-extern dladm_status_t dladm_wlan_scan(datalink_id_t, void *,
+extern dladm_status_t dladm_wlan_scan(dladm_handle_t, datalink_id_t, void *,
boolean_t (*)(void *, dladm_wlan_attr_t *));
-extern dladm_status_t dladm_wlan_connect(datalink_id_t, dladm_wlan_attr_t *,
- int, void *, uint_t, uint_t);
-extern dladm_status_t dladm_wlan_disconnect(datalink_id_t);
-extern dladm_status_t dladm_wlan_get_linkattr(datalink_id_t,
+extern dladm_status_t dladm_wlan_connect(dladm_handle_t, datalink_id_t,
+ dladm_wlan_attr_t *, int, void *, uint_t, uint_t);
+extern dladm_status_t dladm_wlan_disconnect(dladm_handle_t, datalink_id_t);
+extern dladm_status_t dladm_wlan_get_linkattr(dladm_handle_t, datalink_id_t,
dladm_wlan_linkattr_t *);
/* WPA support routines */
-extern dladm_status_t dladm_wlan_wpa_get_sr(datalink_id_t, dladm_wlan_ess_t *,
- uint_t, uint_t *);
-extern dladm_status_t dladm_wlan_wpa_set_ie(datalink_id_t, uint8_t *, uint_t);
-extern dladm_status_t dladm_wlan_wpa_set_wpa(datalink_id_t, boolean_t);
-extern dladm_status_t dladm_wlan_wpa_del_key(datalink_id_t, uint_t,
- const dladm_wlan_bssid_t *);
-extern dladm_status_t dladm_wlan_wpa_set_key(datalink_id_t,
+extern dladm_status_t dladm_wlan_wpa_get_sr(dladm_handle_t, datalink_id_t,
+ dladm_wlan_ess_t *, uint_t, uint_t *);
+extern dladm_status_t dladm_wlan_wpa_set_ie(dladm_handle_t, datalink_id_t,
+ uint8_t *, uint_t);
+extern dladm_status_t dladm_wlan_wpa_set_wpa(dladm_handle_t, datalink_id_t,
+ boolean_t);
+extern dladm_status_t dladm_wlan_wpa_del_key(dladm_handle_t, datalink_id_t,
+ uint_t, const dladm_wlan_bssid_t *);
+extern dladm_status_t dladm_wlan_wpa_set_key(dladm_handle_t, datalink_id_t,
dladm_wlan_cipher_t, const dladm_wlan_bssid_t *,
boolean_t, uint64_t, uint_t, uint8_t *, uint_t);
-extern dladm_status_t dladm_wlan_wpa_set_mlme(datalink_id_t,
+extern dladm_status_t dladm_wlan_wpa_set_mlme(dladm_handle_t, datalink_id_t,
dladm_wlan_mlme_op_t,
dladm_wlan_reason_t, dladm_wlan_bssid_t *);
diff --git a/usr/src/lib/libdladm/common/libdlwlan_impl.h b/usr/src/lib/libdladm/common/libdlwlan_impl.h
index 256876f030..18457870a0 100644
--- a/usr/src/lib/libdladm/common/libdlwlan_impl.h
+++ b/usr/src/lib/libdladm/common/libdlwlan_impl.h
@@ -74,10 +74,11 @@ typedef enum {
DLADM_WLAN_PM_FAST
} dladm_wlan_powermode_t;
-extern dladm_status_t i_dladm_wlan_legacy_ioctl(datalink_id_t, wldp_t *,
- uint_t, size_t, uint_t, size_t);
-extern dladm_status_t i_dladm_wlan_param(datalink_id_t, void *,
- mac_prop_id_t, size_t, boolean_t);
+extern dladm_status_t i_dladm_wlan_legacy_ioctl(dladm_handle_t,
+ datalink_id_t, wldp_t *, uint_t, size_t, uint_t,
+ size_t);
+extern dladm_status_t i_dladm_wlan_param(dladm_handle_t, datalink_id_t,
+ void *, mac_prop_id_t, size_t, boolean_t);
extern boolean_t i_dladm_wlan_convert_chan(wl_phy_conf_t *, uint32_t *);
#ifdef __cplusplus
diff --git a/usr/src/lib/libdladm/common/linkprop.c b/usr/src/lib/libdladm/common/linkprop.c
index 0b72c72633..22daa9c5d6 100644
--- a/usr/src/lib/libdladm/common/linkprop.c
+++ b/usr/src/lib/libdladm/common/linkprop.c
@@ -68,7 +68,7 @@
struct prop_desc;
typedef struct prop_desc prop_desc_t;
-typedef dladm_status_t pd_getf_t(prop_desc_t *pdp,
+typedef dladm_status_t pd_getf_t(dladm_handle_t, prop_desc_t *pdp,
datalink_id_t, char **propstp, uint_t *cntp,
datalink_media_t, uint_t, uint_t *);
@@ -83,7 +83,7 @@ typedef dladm_status_t pd_getf_t(prop_desc_t *pdp,
* of ioctl buffers etc. pd_set() may call another common routine (used
* by all other pd_sets) which invokes the ioctl.
*/
-typedef dladm_status_t pd_setf_t(prop_desc_t *, datalink_id_t,
+typedef dladm_status_t pd_setf_t(dladm_handle_t, prop_desc_t *, datalink_id_t,
val_desc_t *propval, uint_t cnt, uint_t flags,
datalink_media_t);
@@ -101,9 +101,9 @@ typedef dladm_status_t pd_setf_t(prop_desc_t *, datalink_id_t,
* with either a val_desc_t found on the pd_modval list or something
* generated on the fly.
*/
-typedef dladm_status_t pd_checkf_t(prop_desc_t *pdp, datalink_id_t,
- char **propstrp, uint_t cnt, val_desc_t *propval,
- datalink_media_t);
+typedef dladm_status_t pd_checkf_t(dladm_handle_t, prop_desc_t *pdp,
+ datalink_id_t, char **propstrp, uint_t cnt,
+ val_desc_t *propval, datalink_media_t);
typedef struct link_attr_s {
mac_prop_id_t pp_id;
@@ -115,13 +115,14 @@ static dld_ioc_macprop_t *i_dladm_buf_alloc_by_name(size_t, datalink_id_t,
const char *, uint_t, dladm_status_t *);
static dld_ioc_macprop_t *i_dladm_buf_alloc_by_id(size_t, datalink_id_t,
mac_prop_id_t, uint_t, dladm_status_t *);
-static dld_ioc_macprop_t *i_dladm_get_public_prop(datalink_id_t, char *, uint_t,
- dladm_status_t *, uint_t *);
-
-static dladm_status_t i_dladm_set_prop(datalink_id_t, const char *, char **,
- uint_t, uint_t);
-static dladm_status_t i_dladm_get_prop(datalink_id_t, const char *, char **,
- uint_t *, dladm_prop_type_t, uint_t);
+static dld_ioc_macprop_t *i_dladm_get_public_prop(dladm_handle_t, datalink_id_t,
+ char *, uint_t, dladm_status_t *, uint_t *);
+
+static dladm_status_t i_dladm_set_prop(dladm_handle_t, datalink_id_t,
+ const char *, char **, uint_t, uint_t);
+static dladm_status_t i_dladm_get_prop(dladm_handle_t, datalink_id_t,
+ const char *, char **, uint_t *, dladm_prop_type_t,
+ uint_t);
static link_attr_t *dladm_name2prop(const char *);
static link_attr_t *dladm_id2prop(mac_prop_id_t);
@@ -141,13 +142,13 @@ static pd_checkf_t do_check_zone, do_check_autopush, do_check_rate,
i_dladm_defmtu_check, do_check_maxbw, do_check_cpus,
do_check_priority;
-static dladm_status_t i_dladm_speed_get(prop_desc_t *, datalink_id_t,
- char **, uint_t *, uint_t, uint_t *);
-static dladm_status_t i_dladm_wlan_get_legacy_ioctl(datalink_id_t, void *,
- uint_t, uint_t);
-static dladm_status_t i_dladm_wlan_set_legacy_ioctl(datalink_id_t, void *,
- uint_t, uint_t);
-static dladm_status_t i_dladm_macprop(void *, boolean_t);
+static dladm_status_t i_dladm_speed_get(dladm_handle_t, prop_desc_t *,
+ datalink_id_t, char **, uint_t *, uint_t, uint_t *);
+static dladm_status_t i_dladm_wlan_get_legacy_ioctl(dladm_handle_t,
+ datalink_id_t, void *, uint_t, uint_t);
+static dladm_status_t i_dladm_wlan_set_legacy_ioctl(dladm_handle_t,
+ datalink_id_t, void *, uint_t, uint_t);
+static dladm_status_t i_dladm_macprop(dladm_handle_t, void *, boolean_t);
static const char *dladm_perm2str(uint_t, char *);
struct prop_desc {
@@ -509,16 +510,17 @@ static resource_prop_t rsrc_prop_table[] = {
*/
#define DLADM_PROP_BUF_CHUNK 1024
-static dladm_status_t i_dladm_set_linkprop_db(datalink_id_t, const char *,
- char **, uint_t);
-static dladm_status_t i_dladm_get_linkprop_db(datalink_id_t, const char *,
- char **, uint_t *);
-static dladm_status_t i_dladm_set_single_prop(datalink_id_t, datalink_class_t,
- uint32_t, prop_desc_t *, char **, uint_t, uint_t);
-static dladm_status_t i_dladm_set_linkprop(datalink_id_t, const char *,
- char **, uint_t, uint_t);
-static dladm_status_t i_dladm_getset_defval(prop_desc_t *, datalink_id_t,
- datalink_media_t, uint_t);
+static dladm_status_t i_dladm_set_linkprop_db(dladm_handle_t, datalink_id_t,
+ const char *, char **, uint_t);
+static dladm_status_t i_dladm_get_linkprop_db(dladm_handle_t, datalink_id_t,
+ const char *, char **, uint_t *);
+static dladm_status_t i_dladm_set_single_prop(dladm_handle_t, datalink_id_t,
+ datalink_class_t, uint32_t, prop_desc_t *, char **,
+ uint_t, uint_t);
+static dladm_status_t i_dladm_set_linkprop(dladm_handle_t, datalink_id_t,
+ const char *, char **, uint_t, uint_t);
+static dladm_status_t i_dladm_getset_defval(dladm_handle_t, prop_desc_t *,
+ datalink_id_t, datalink_media_t, uint_t);
static dladm_status_t link_proplist_check(dladm_arg_list_t *);
@@ -560,9 +562,9 @@ done:
}
static dladm_status_t
-i_dladm_set_single_prop(datalink_id_t linkid, datalink_class_t class,
- uint32_t media, prop_desc_t *pdp, char **prop_val, uint_t val_cnt,
- uint_t flags)
+i_dladm_set_single_prop(dladm_handle_t handle, datalink_id_t linkid,
+ datalink_class_t class, uint32_t media, prop_desc_t *pdp, char **prop_val,
+ uint_t val_cnt, uint_t flags)
{
dladm_status_t status = DLADM_STATUS_OK;
val_desc_t *vdp = NULL;
@@ -591,8 +593,8 @@ i_dladm_set_single_prop(datalink_id_t linkid, datalink_class_t class,
if (pdp->pd_check != NULL) {
needfree = ((pdp->pd_flags & PD_CHECK_ALLOC) != 0);
- status = pdp->pd_check(pdp, linkid, prop_val, val_cnt,
- vdp, media);
+ status = pdp->pd_check(handle, pdp, linkid, prop_val,
+ val_cnt, vdp, media);
} else if (pdp->pd_optval != NULL) {
status = do_check_prop(pdp, prop_val, val_cnt, vdp);
} else {
@@ -619,18 +621,18 @@ i_dladm_set_single_prop(datalink_id_t linkid, datalink_class_t class,
(void) memcpy(vdp, &pdp->pd_defval,
sizeof (val_desc_t));
} else if (pdp->pd_check != NULL) {
- status = pdp->pd_check(pdp, linkid, prop_val,
- cnt, vdp, media);
+ status = pdp->pd_check(handle, pdp, linkid,
+ prop_val, cnt, vdp, media);
if (status != DLADM_STATUS_OK)
goto done;
}
} else {
- status = i_dladm_getset_defval(pdp, linkid,
+ status = i_dladm_getset_defval(handle, pdp, linkid,
media, flags);
return (status);
}
}
- status = pdp->pd_set(pdp, linkid, vdp, cnt, flags, media);
+ status = pdp->pd_set(handle, pdp, linkid, vdp, cnt, flags, media);
if (needfree) {
for (i = 0; i < cnt; i++)
free((void *)((val_desc_t *)vdp + i)->vd_val);
@@ -641,8 +643,8 @@ done:
}
static dladm_status_t
-i_dladm_set_linkprop(datalink_id_t linkid, const char *prop_name,
- char **prop_val, uint_t val_cnt, uint_t flags)
+i_dladm_set_linkprop(dladm_handle_t handle, datalink_id_t linkid,
+ const char *prop_name, char **prop_val, uint_t val_cnt, uint_t flags)
{
int i;
boolean_t found = B_FALSE;
@@ -650,7 +652,8 @@ i_dladm_set_linkprop(datalink_id_t linkid, const char *prop_name,
uint32_t media;
dladm_status_t status = DLADM_STATUS_OK;
- status = dladm_datalink_id2info(linkid, NULL, &class, &media, NULL, 0);
+ status = dladm_datalink_id2info(handle, linkid, NULL, &class, &media,
+ NULL, 0);
if (status != DLADM_STATUS_OK)
return (status);
@@ -662,8 +665,8 @@ i_dladm_set_linkprop(datalink_id_t linkid, const char *prop_name,
(strcasecmp(prop_name, pdp->pd_name) != 0))
continue;
found = B_TRUE;
- s = i_dladm_set_single_prop(linkid, class, media, pdp, prop_val,
- val_cnt, flags);
+ s = i_dladm_set_single_prop(handle, linkid, class, media, pdp,
+ prop_val, val_cnt, flags);
if (prop_name != NULL) {
status = s;
@@ -677,8 +680,8 @@ i_dladm_set_linkprop(datalink_id_t linkid, const char *prop_name,
if (!found) {
if (prop_name[0] == '_') {
/* other private properties */
- status = i_dladm_set_prop(linkid, prop_name, prop_val,
- val_cnt, flags);
+ status = i_dladm_set_prop(handle, linkid, prop_name,
+ prop_val, val_cnt, flags);
} else {
status = DLADM_STATUS_NOTFOUND;
}
@@ -691,8 +694,8 @@ i_dladm_set_linkprop(datalink_id_t linkid, const char *prop_name,
* Set/reset link property for specific link
*/
dladm_status_t
-dladm_set_linkprop(datalink_id_t linkid, const char *prop_name, char **prop_val,
- uint_t val_cnt, uint_t flags)
+dladm_set_linkprop(dladm_handle_t handle, datalink_id_t linkid,
+ const char *prop_name, char **prop_val, uint_t val_cnt, uint_t flags)
{
dladm_status_t status = DLADM_STATUS_OK;
@@ -703,13 +706,13 @@ dladm_set_linkprop(datalink_id_t linkid, const char *prop_name, char **prop_val,
return (DLADM_STATUS_BADARG);
}
- status = i_dladm_set_linkprop(linkid, prop_name, prop_val,
+ status = i_dladm_set_linkprop(handle, linkid, prop_name, prop_val,
val_cnt, flags);
if (status != DLADM_STATUS_OK)
return (status);
if (flags & DLADM_OPT_PERSIST) {
- status = i_dladm_set_linkprop_db(linkid, prop_name,
+ status = i_dladm_set_linkprop_db(handle, linkid, prop_name,
prop_val, val_cnt);
}
return (status);
@@ -719,8 +722,8 @@ dladm_set_linkprop(datalink_id_t linkid, const char *prop_name, char **prop_val,
* Walk link properties of the given specific link.
*/
dladm_status_t
-dladm_walk_linkprop(datalink_id_t linkid, void *arg,
- int (*func)(datalink_id_t, const char *, void *))
+dladm_walk_linkprop(dladm_handle_t handle, datalink_id_t linkid, void *arg,
+ int (*func)(dladm_handle_t, datalink_id_t, const char *, void *))
{
dladm_status_t status;
datalink_class_t class;
@@ -730,7 +733,8 @@ dladm_walk_linkprop(datalink_id_t linkid, void *arg,
if (linkid == DATALINK_INVALID_LINKID || func == NULL)
return (DLADM_STATUS_BADARG);
- status = dladm_datalink_id2info(linkid, NULL, &class, &media, NULL, 0);
+ status = dladm_datalink_id2info(handle, linkid, NULL, &class, &media,
+ NULL, 0);
if (status != DLADM_STATUS_OK)
return (status);
@@ -741,7 +745,7 @@ dladm_walk_linkprop(datalink_id_t linkid, void *arg,
if (!DATALINK_MEDIA_ACCEPTED(prop_table[i].pd_dmedia, media))
continue;
- if (func(linkid, prop_table[i].pd_name, arg) ==
+ if (func(handle, linkid, prop_table[i].pd_name, arg) ==
DLADM_WALK_TERMINATE) {
break;
}
@@ -754,8 +758,9 @@ dladm_walk_linkprop(datalink_id_t linkid, void *arg,
* Get linkprop of the given specific link.
*/
dladm_status_t
-dladm_get_linkprop(datalink_id_t linkid, dladm_prop_type_t type,
- const char *prop_name, char **prop_val, uint_t *val_cntp)
+dladm_get_linkprop(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_prop_type_t type, const char *prop_name, char **prop_val,
+ uint_t *val_cntp)
{
dladm_status_t status = DLADM_STATUS_OK;
datalink_class_t class;
@@ -781,7 +786,7 @@ dladm_get_linkprop(datalink_id_t linkid, dladm_prop_type_t type,
/*
* private property.
*/
- return (i_dladm_get_prop(linkid, prop_name,
+ return (i_dladm_get_prop(handle, linkid, prop_name,
prop_val, val_cntp, type, dld_flags));
} else {
return (DLADM_STATUS_NOTFOUND);
@@ -790,7 +795,8 @@ dladm_get_linkprop(datalink_id_t linkid, dladm_prop_type_t type,
pdp = &prop_table[i];
- status = dladm_datalink_id2info(linkid, NULL, &class, &media, NULL, 0);
+ status = dladm_datalink_id2info(handle, linkid, NULL, &class, &media,
+ NULL, 0);
if (status != DLADM_STATUS_OK)
return (status);
@@ -802,8 +808,8 @@ dladm_get_linkprop(datalink_id_t linkid, dladm_prop_type_t type,
switch (type) {
case DLADM_PROP_VAL_CURRENT:
- status = pdp->pd_get(pdp, linkid, prop_val, val_cntp, media,
- dld_flags, &perm_flags);
+ status = pdp->pd_get(handle, pdp, linkid, prop_val, val_cntp,
+ media, dld_flags, &perm_flags);
break;
case DLADM_PROP_VAL_PERM:
@@ -811,8 +817,8 @@ dladm_get_linkprop(datalink_id_t linkid, dladm_prop_type_t type,
perm_flags = MAC_PROP_PERM_READ;
*val_cntp = 1;
} else {
- status = pdp->pd_get(pdp, linkid, prop_val, val_cntp,
- media, dld_flags, &perm_flags);
+ status = pdp->pd_get(handle, pdp, linkid, prop_val,
+ val_cntp, media, dld_flags, &perm_flags);
}
*prop_val[0] = '\0';
@@ -834,8 +840,8 @@ dladm_get_linkprop(datalink_id_t linkid, dladm_prop_type_t type,
}
if (strlen(pdp->pd_defval.vd_name) == 0) {
- status = pdp->pd_get(pdp, linkid, prop_val, val_cntp,
- media, dld_flags, &perm_flags);
+ status = pdp->pd_get(handle, pdp, linkid, prop_val,
+ val_cntp, media, dld_flags, &perm_flags);
} else {
(void) strcpy(*prop_val, pdp->pd_defval.vd_name);
}
@@ -844,7 +850,7 @@ dladm_get_linkprop(datalink_id_t linkid, dladm_prop_type_t type,
case DLADM_PROP_VAL_MODIFIABLE:
if (pdp->pd_getmod != NULL) {
- status = pdp->pd_getmod(pdp, linkid, prop_val,
+ status = pdp->pd_getmod(handle, pdp, linkid, prop_val,
val_cntp, media, dld_flags, &perm_flags);
break;
}
@@ -864,7 +870,7 @@ dladm_get_linkprop(datalink_id_t linkid, dladm_prop_type_t type,
case DLADM_PROP_VAL_PERSISTENT:
if (pdp->pd_flags & PD_TEMPONLY)
return (DLADM_STATUS_TEMPONLY);
- status = i_dladm_get_linkprop_db(linkid, prop_name,
+ status = i_dladm_get_linkprop_db(handle, linkid, prop_name,
prop_val, val_cntp);
break;
default:
@@ -877,7 +883,8 @@ dladm_get_linkprop(datalink_id_t linkid, dladm_prop_type_t type,
/*ARGSUSED*/
static int
-i_dladm_init_one_prop(datalink_id_t linkid, const char *prop_name, void *arg)
+i_dladm_init_one_prop(dladm_handle_t handle, datalink_id_t linkid,
+ const char *prop_name, void *arg)
{
char *buf, **propvals;
uint_t i, valcnt = DLADM_MAX_PROP_VALCNT;
@@ -894,12 +901,12 @@ i_dladm_init_one_prop(datalink_id_t linkid, const char *prop_name, void *arg)
i * DLADM_PROP_VAL_MAX;
}
- if (dladm_get_linkprop(linkid, DLADM_PROP_VAL_PERSISTENT, prop_name,
- propvals, &valcnt) != DLADM_STATUS_OK) {
+ if (dladm_get_linkprop(handle, linkid, DLADM_PROP_VAL_PERSISTENT,
+ prop_name, propvals, &valcnt) != DLADM_STATUS_OK) {
goto done;
}
- (void) dladm_set_linkprop(linkid, prop_name, propvals, valcnt,
+ (void) dladm_set_linkprop(handle, linkid, prop_name, propvals, valcnt,
DLADM_OPT_ACTIVE);
done:
@@ -911,23 +918,25 @@ done:
/*ARGSUSED*/
static int
-i_dladm_init_linkprop(datalink_id_t linkid, void *arg)
+i_dladm_init_linkprop(dladm_handle_t handle, datalink_id_t linkid, void *arg)
{
datalink_class_t class;
dladm_status_t status;
- status = dladm_datalink_id2info(linkid, NULL, &class, NULL, NULL, 0);
+ status = dladm_datalink_id2info(handle, linkid, NULL, &class, NULL,
+ NULL, 0);
if (status != DLADM_STATUS_OK)
return (DLADM_WALK_TERMINATE);
if ((class & (DATALINK_CLASS_VNIC | DATALINK_CLASS_VLAN)) == 0)
- (void) dladm_init_linkprop(linkid, B_TRUE);
+ (void) dladm_init_linkprop(handle, linkid, B_TRUE);
return (DLADM_WALK_CONTINUE);
}
dladm_status_t
-dladm_init_linkprop(datalink_id_t linkid, boolean_t any_media)
+dladm_init_linkprop(dladm_handle_t handle, datalink_id_t linkid,
+ boolean_t any_media)
{
datalink_media_t dmedia;
uint32_t media;
@@ -935,19 +944,21 @@ dladm_init_linkprop(datalink_id_t linkid, boolean_t any_media)
dmedia = any_media ? DATALINK_ANY_MEDIATYPE : DL_WIFI;
if (linkid == DATALINK_ALL_LINKID) {
- (void) dladm_walk_datalink_id(i_dladm_init_linkprop, NULL,
- DATALINK_CLASS_ALL, dmedia, DLADM_OPT_PERSIST);
- } else if (any_media || ((dladm_datalink_id2info(linkid, NULL, NULL,
- &media, NULL, 0) == DLADM_STATUS_OK) &&
+ (void) dladm_walk_datalink_id(i_dladm_init_linkprop, handle,
+ NULL, DATALINK_CLASS_ALL, dmedia, DLADM_OPT_PERSIST);
+ } else if (any_media ||
+ ((dladm_datalink_id2info(handle, linkid, NULL, NULL, &media, NULL,
+ 0) == DLADM_STATUS_OK) &&
DATALINK_MEDIA_ACCEPTED(dmedia, media))) {
- (void) dladm_walk_linkprop(linkid, NULL, i_dladm_init_one_prop);
+ (void) dladm_walk_linkprop(handle, linkid, NULL,
+ i_dladm_init_one_prop);
}
return (DLADM_STATUS_OK);
}
/* ARGSUSED */
static dladm_status_t
-do_get_zone(prop_desc_t *pdp, datalink_id_t linkid,
+do_get_zone(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
char **prop_val, uint_t *val_cnt, datalink_media_t media,
uint_t flags, uint_t *perm_flags)
{
@@ -960,7 +971,7 @@ do_get_zone(prop_desc_t *pdp, datalink_id_t linkid,
if (flags != 0)
return (DLADM_STATUS_NOTSUP);
- dip = i_dladm_get_public_prop(linkid, pdp->pd_name, flags,
+ dip = i_dladm_get_public_prop(handle, linkid, pdp->pd_name, flags,
&status, perm_flags);
if (status != DLADM_STATUS_OK)
return (status);
@@ -1011,7 +1022,8 @@ i_dladm_get_zone_dev(char *zone_name, char *dev, size_t devlen)
}
static dladm_status_t
-i_dladm_update_deventry(zoneid_t zid, datalink_id_t linkid, boolean_t add)
+i_dladm_update_deventry(dladm_handle_t handle, zoneid_t zid,
+ datalink_id_t linkid, boolean_t add)
{
char path[MAXPATHLEN];
char name[MAXLINKNAMELEN];
@@ -1027,7 +1039,7 @@ i_dladm_update_deventry(zoneid_t zid, datalink_id_t linkid, boolean_t add)
if (di_prof_init(path, &prof) != 0)
return (dladm_errno2status(errno));
- status = dladm_linkid2legacyname(linkid, name, MAXLINKNAMELEN);
+ status = dladm_linkid2legacyname(handle, linkid, name, MAXLINKNAMELEN);
if (status != DLADM_STATUS_OK)
goto cleanup;
@@ -1052,8 +1064,8 @@ cleanup:
/* ARGSUSED */
static dladm_status_t
-do_set_zone(prop_desc_t *pdp, datalink_id_t linkid, val_desc_t *vdp,
- uint_t val_cnt, uint_t flags, datalink_media_t media)
+do_set_zone(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
+ val_desc_t *vdp, uint_t val_cnt, uint_t flags, datalink_media_t media)
{
dladm_status_t status = DLADM_STATUS_OK;
zoneid_t zid_old, zid_new;
@@ -1067,7 +1079,7 @@ do_set_zone(prop_desc_t *pdp, datalink_id_t linkid, val_desc_t *vdp,
dzp = (dld_ioc_zid_t *)vdp->vd_val;
- dip = i_dladm_get_public_prop(linkid, pdp->pd_name, flags,
+ dip = i_dladm_get_public_prop(handle, linkid, pdp->pd_name, flags,
&status, NULL);
if (status != DLADM_STATUS_OK)
return (status);
@@ -1096,8 +1108,8 @@ do_set_zone(prop_desc_t *pdp, datalink_id_t linkid, val_desc_t *vdp,
* link and prevent a link renaming, so we need to do it
* before other operations.
*/
- status = i_dladm_set_public_prop(pdp, linkid, vdp, val_cnt,
- flags, media);
+ status = i_dladm_set_public_prop(handle, pdp, linkid, vdp,
+ val_cnt, flags, media);
if (status != DLADM_STATUS_OK)
return (status);
}
@@ -1113,7 +1125,8 @@ do_set_zone(prop_desc_t *pdp, datalink_id_t linkid, val_desc_t *vdp,
* It is okay to fail to update the /dev entry (some
* vanity-named links do not have a /dev entry).
*/
- (void) i_dladm_update_deventry(zid_old, linkid, B_FALSE);
+ (void) i_dladm_update_deventry(handle, zid_old, linkid,
+ B_FALSE);
}
if (zid_new != GLOBAL_ZONEID) {
@@ -1122,10 +1135,10 @@ do_set_zone(prop_desc_t *pdp, datalink_id_t linkid, val_desc_t *vdp,
goto rollback2;
}
- (void) i_dladm_update_deventry(zid_new, linkid, B_TRUE);
+ (void) i_dladm_update_deventry(handle, zid_new, linkid, B_TRUE);
} else {
- status = i_dladm_set_public_prop(pdp, linkid, vdp, val_cnt,
- flags, media);
+ status = i_dladm_set_public_prop(handle, pdp, linkid, vdp,
+ val_cnt, flags, media);
if (status != DLADM_STATUS_OK)
goto rollback2;
}
@@ -1134,14 +1147,14 @@ do_set_zone(prop_desc_t *pdp, datalink_id_t linkid, val_desc_t *vdp,
rollback2:
if (zid_old != GLOBAL_ZONEID)
- (void) i_dladm_update_deventry(zid_old, linkid, B_TRUE);
+ (void) i_dladm_update_deventry(handle, zid_old, linkid, B_TRUE);
if (zid_old != GLOBAL_ZONEID)
(void) zone_add_datalink(zid_old, link);
rollback1:
if (zid_new != GLOBAL_ZONEID) {
dzp->diz_zid = zid_old;
- (void) i_dladm_set_public_prop(pdp, linkid, vdp, val_cnt,
- flags, media);
+ (void) i_dladm_set_public_prop(handle, pdp, linkid, vdp,
+ val_cnt, flags, media);
}
return (status);
@@ -1149,8 +1162,8 @@ rollback1:
/* ARGSUSED */
static dladm_status_t
-do_check_zone(prop_desc_t *pdp, datalink_id_t linkid, char **prop_val,
- uint_t val_cnt, val_desc_t *vdp, datalink_media_t media)
+do_check_zone(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
+ char **prop_val, uint_t val_cnt, val_desc_t *vdp, datalink_media_t media)
{
char *zone_name;
char linkname[MAXLINKNAMELEN];
@@ -1165,7 +1178,7 @@ do_check_zone(prop_desc_t *pdp, datalink_id_t linkid, char **prop_val,
if (dzp == NULL)
return (DLADM_STATUS_NOMEM);
- if ((status = dladm_datalink_id2info(linkid, NULL, NULL, NULL,
+ if ((status = dladm_datalink_id2info(handle, linkid, NULL, NULL, NULL,
linkname, MAXLINKNAMELEN)) != DLADM_STATUS_OK) {
goto done;
}
@@ -1210,7 +1223,7 @@ done:
/* ARGSUSED */
static dladm_status_t
-dld_maxbw_get(prop_desc_t *pdp, datalink_id_t linkid,
+dld_maxbw_get(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
char **prop_val, uint_t *val_cnt, datalink_media_t media,
uint_t flags, uint_t *perm_flags)
{
@@ -1218,7 +1231,7 @@ dld_maxbw_get(prop_desc_t *pdp, datalink_id_t linkid,
mac_resource_props_t mrp;
dladm_status_t status;
- dip = i_dladm_get_public_prop(linkid, pdp->pd_name, flags,
+ dip = i_dladm_get_public_prop(handle, linkid, pdp->pd_name, flags,
&status, perm_flags);
if (dip == NULL)
return (status);
@@ -1237,8 +1250,8 @@ dld_maxbw_get(prop_desc_t *pdp, datalink_id_t linkid,
/* ARGSUSED */
static dladm_status_t
-do_check_maxbw(prop_desc_t *pdp, datalink_id_t linkid, char **prop_val,
- uint_t val_cnt, val_desc_t *vdp, datalink_media_t media)
+do_check_maxbw(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
+ char **prop_val, uint_t val_cnt, val_desc_t *vdp, datalink_media_t media)
{
uint64_t *maxbw;
dladm_status_t status = DLADM_STATUS_OK;
@@ -1279,7 +1292,7 @@ do_extract_maxbw(val_desc_t *vdp, void *arg, uint_t cnt)
/* ARGSUSED */
static dladm_status_t
-dld_cpus_get(prop_desc_t *pdp, datalink_id_t linkid,
+dld_cpus_get(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
char **prop_val, uint_t *val_cnt, datalink_media_t media,
uint_t flags, uint_t *perm_flags)
{
@@ -1290,7 +1303,7 @@ dld_cpus_get(prop_desc_t *pdp, datalink_id_t linkid,
uchar_t *cp;
dladm_status_t status;
- dip = i_dladm_get_public_prop(linkid, pdp->pd_name, flags,
+ dip = i_dladm_get_public_prop(handle, linkid, pdp->pd_name, flags,
&status, perm_flags);
if (dip == NULL)
return (status);
@@ -1320,8 +1333,8 @@ dld_cpus_get(prop_desc_t *pdp, datalink_id_t linkid,
/* ARGSUSED */
static dladm_status_t
-do_set_res(prop_desc_t *pdp, datalink_id_t linkid, val_desc_t *vdp,
- uint_t val_cnt, uint_t flags, datalink_media_t media)
+do_set_res(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
+ val_desc_t *vdp, uint_t val_cnt, uint_t flags, datalink_media_t media)
{
mac_resource_props_t mrp;
dladm_status_t status = DLADM_STATUS_OK;
@@ -1367,15 +1380,15 @@ do_set_res(prop_desc_t *pdp, datalink_id_t linkid, val_desc_t *vdp,
}
(void) memcpy(dip->pr_val, &mrp, dip->pr_valsize);
- status = i_dladm_macprop(dip, B_TRUE);
+ status = i_dladm_macprop(handle, dip, B_TRUE);
free(dip);
return (status);
}
/* ARGSUSED */
static dladm_status_t
-do_set_cpus(prop_desc_t *pdp, datalink_id_t linkid, val_desc_t *vdp,
- uint_t val_cnt, uint_t flags, datalink_media_t media)
+do_set_cpus(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
+ val_desc_t *vdp, uint_t val_cnt, uint_t flags, datalink_media_t media)
{
mac_resource_props_t mrp;
dladm_status_t status;
@@ -1387,7 +1400,7 @@ do_set_cpus(prop_desc_t *pdp, datalink_id_t linkid, val_desc_t *vdp,
* However VNICs fails the dladm_phys_info test(). So apply
* the phys_info test only on physical links.
*/
- if ((status = dladm_datalink_id2info(linkid, NULL, &class,
+ if ((status = dladm_datalink_id2info(handle, linkid, NULL, &class,
NULL, NULL, 0)) != DLADM_STATUS_OK) {
return (status);
}
@@ -1417,15 +1430,15 @@ do_set_cpus(prop_desc_t *pdp, datalink_id_t linkid, val_desc_t *vdp,
return (status);
(void) memcpy(dip->pr_val, &mrp, dip->pr_valsize);
- status = i_dladm_macprop(dip, B_TRUE);
+ status = i_dladm_macprop(handle, dip, B_TRUE);
free(dip);
return (status);
}
/* ARGSUSED */
static dladm_status_t
-do_check_cpus(prop_desc_t *pdp, datalink_id_t linkid, char **prop_val,
- uint_t val_cnt, val_desc_t *vdp, datalink_media_t media)
+do_check_cpus(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
+ char **prop_val, uint_t val_cnt, val_desc_t *vdp, datalink_media_t media)
{
uint32_t cpuid;
int i, j, rc;
@@ -1490,7 +1503,7 @@ do_extract_cpus(val_desc_t *vdp, void *arg, uint_t cnt)
/* ARGSUSED */
static dladm_status_t
-dld_priority_get(prop_desc_t *pdp, datalink_id_t linkid,
+dld_priority_get(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
char **prop_val, uint_t *val_cnt, datalink_media_t media,
uint_t flags, uint_t *perm_flags)
{
@@ -1499,7 +1512,7 @@ dld_priority_get(prop_desc_t *pdp, datalink_id_t linkid,
mac_priority_level_t pri;
dladm_status_t status;
- dip = i_dladm_get_public_prop(linkid, pdp->pd_name, flags,
+ dip = i_dladm_get_public_prop(handle, linkid, pdp->pd_name, flags,
&status, perm_flags);
if (dip == NULL)
return (status);
@@ -1517,8 +1530,8 @@ dld_priority_get(prop_desc_t *pdp, datalink_id_t linkid,
/* ARGSUSED */
static dladm_status_t
-do_check_priority(prop_desc_t *pdp, datalink_id_t linkid, char **prop_val,
- uint_t val_cnt, val_desc_t *vdp, datalink_media_t media)
+do_check_priority(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
+ char **prop_val, uint_t val_cnt, val_desc_t *vdp, datalink_media_t media)
{
mac_priority_level_t *pri;
dladm_status_t status = DLADM_STATUS_OK;
@@ -1560,7 +1573,7 @@ do_extract_priority(val_desc_t *vdp, void *arg, uint_t cnt)
/* ARGSUSED */
static dladm_status_t
-do_get_autopush(prop_desc_t *pdp, datalink_id_t linkid,
+do_get_autopush(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
char **prop_val, uint_t *val_cnt, datalink_media_t media,
uint_t flags, uint_t *perm_flags)
{
@@ -1573,7 +1586,7 @@ do_get_autopush(prop_desc_t *pdp, datalink_id_t linkid,
return (DLADM_STATUS_NOTDEFINED);
*val_cnt = 1;
- dip = i_dladm_get_public_prop(linkid, pdp->pd_name, flags,
+ dip = i_dladm_get_public_prop(handle, linkid, pdp->pd_name, flags,
&status, perm_flags);
if (dip == NULL) {
(*prop_val)[0] = '\0';
@@ -1641,8 +1654,8 @@ i_dladm_add_ap_module(const char *module, struct dlautopush *dlap)
*/
/* ARGSUSED */
static dladm_status_t
-do_check_autopush(prop_desc_t *pdp, datalink_id_t linkid, char **prop_val,
- uint_t val_cnt, val_desc_t *vdp, datalink_media_t media)
+do_check_autopush(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
+ char **prop_val, uint_t val_cnt, val_desc_t *vdp, datalink_media_t media)
{
char *module;
struct dlautopush *dlap;
@@ -1680,8 +1693,9 @@ do_check_autopush(prop_desc_t *pdp, datalink_id_t linkid, char **prop_val,
/* ARGSUSED */
static dladm_status_t
-do_get_rate_common(prop_desc_t *pdp, datalink_id_t linkid,
- char **prop_val, uint_t *val_cnt, uint_t id, uint_t *perm_flags)
+do_get_rate_common(dladm_handle_t handle, prop_desc_t *pdp,
+ datalink_id_t linkid, char **prop_val, uint_t *val_cnt, uint_t id,
+ uint_t *perm_flags)
{
wl_rates_t *wrp;
uint_t i;
@@ -1691,7 +1705,8 @@ do_get_rate_common(prop_desc_t *pdp, datalink_id_t linkid,
if (wrp == NULL)
return (DLADM_STATUS_NOMEM);
- status = i_dladm_wlan_param(linkid, wrp, id, WLDP_BUFSIZE, B_FALSE);
+ status = i_dladm_wlan_param(handle, linkid, wrp, id, WLDP_BUFSIZE,
+ B_FALSE);
if (status != DLADM_STATUS_OK)
goto done;
@@ -1720,22 +1735,22 @@ done:
}
static dladm_status_t
-do_get_rate_prop(prop_desc_t *pdp, datalink_id_t linkid,
+do_get_rate_prop(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
char **prop_val, uint_t *val_cnt, datalink_media_t media,
uint_t flags, uint_t *perm_flags)
{
if (media != DL_WIFI) {
- return (i_dladm_speed_get(pdp, linkid, prop_val,
+ return (i_dladm_speed_get(handle, pdp, linkid, prop_val,
val_cnt, flags, perm_flags));
}
- return (do_get_rate_common(pdp, linkid, prop_val, val_cnt,
+ return (do_get_rate_common(handle, pdp, linkid, prop_val, val_cnt,
MAC_PROP_WL_DESIRED_RATES, perm_flags));
}
/* ARGSUSED */
static dladm_status_t
-do_get_rate_mod(prop_desc_t *pdp, datalink_id_t linkid,
+do_get_rate_mod(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
char **prop_val, uint_t *val_cnt, datalink_media_t media,
uint_t flags, uint_t *perm_flags)
{
@@ -1748,15 +1763,16 @@ do_get_rate_mod(prop_desc_t *pdp, datalink_id_t linkid,
return (DLADM_STATUS_NOTSUP);
case DL_WIFI:
- return (do_get_rate_common(pdp, linkid, prop_val, val_cnt,
- MAC_PROP_WL_SUPPORTED_RATES, perm_flags));
+ return (do_get_rate_common(handle, pdp, linkid, prop_val,
+ val_cnt, MAC_PROP_WL_SUPPORTED_RATES, perm_flags));
default:
return (DLADM_STATUS_BADARG);
}
}
static dladm_status_t
-do_set_rate(datalink_id_t linkid, dladm_wlan_rates_t *rates)
+do_set_rate(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_wlan_rates_t *rates)
{
int i;
uint_t len;
@@ -1774,8 +1790,8 @@ do_set_rate(datalink_id_t linkid, dladm_wlan_rates_t *rates)
len = offsetof(wl_rates_t, wl_rates_rates) +
(rates->wr_cnt * sizeof (char)) + WIFI_BUF_OFFSET;
- status = i_dladm_wlan_param(linkid, wrp, MAC_PROP_WL_DESIRED_RATES,
- len, B_TRUE);
+ status = i_dladm_wlan_param(handle, linkid, wrp,
+ MAC_PROP_WL_DESIRED_RATES, len, B_TRUE);
free(wrp);
return (status);
@@ -1783,7 +1799,7 @@ do_set_rate(datalink_id_t linkid, dladm_wlan_rates_t *rates)
/* ARGSUSED */
static dladm_status_t
-do_set_rate_prop(prop_desc_t *pdp, datalink_id_t linkid,
+do_set_rate_prop(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
val_desc_t *vdp, uint_t val_cnt, uint_t flags, datalink_media_t media)
{
dladm_wlan_rates_t rates;
@@ -1801,7 +1817,7 @@ do_set_rate_prop(prop_desc_t *pdp, datalink_id_t linkid,
rates.wr_cnt = 1;
rates.wr_rates[0] = vdp[0].vd_val;
- status = do_set_rate(linkid, &rates);
+ status = do_set_rate(handle, linkid, &rates);
done:
return (status);
@@ -1809,8 +1825,8 @@ done:
/* ARGSUSED */
static dladm_status_t
-do_check_rate(prop_desc_t *pdp, datalink_id_t linkid, char **prop_val,
- uint_t val_cnt, val_desc_t *vdp, datalink_media_t media)
+do_check_rate(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
+ char **prop_val, uint_t val_cnt, val_desc_t *vdp, datalink_media_t media)
{
int i;
uint_t modval_cnt = MAX_SUPPORT_RATES;
@@ -1834,8 +1850,8 @@ do_check_rate(prop_desc_t *pdp, datalink_id_t linkid, char **prop_val,
i * DLADM_STRSIZE;
}
- status = do_get_rate_mod(NULL, linkid, modval, &modval_cnt, media,
- 0, &perm_flags);
+ status = do_get_rate_mod(handle, NULL, linkid, modval, &modval_cnt,
+ media, 0, &perm_flags);
if (status != DLADM_STATUS_OK)
goto done;
@@ -1855,24 +1871,25 @@ done:
}
static dladm_status_t
-do_get_phyconf(datalink_id_t linkid, void *buf, int buflen)
+do_get_phyconf(dladm_handle_t handle, datalink_id_t linkid, void *buf,
+ int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_PHY_CONFIG,
+ return (i_dladm_wlan_param(handle, linkid, buf, MAC_PROP_WL_PHY_CONFIG,
buflen, B_FALSE));
}
/* ARGSUSED */
static dladm_status_t
-do_get_channel_prop(prop_desc_t *pdp, datalink_id_t linkid,
- char **prop_val, uint_t *val_cnt, datalink_media_t media,
- uint_t flags, uint_t *perm_flags)
+do_get_channel_prop(dladm_handle_t handle, prop_desc_t *pdp,
+ datalink_id_t linkid, char **prop_val, uint_t *val_cnt,
+ datalink_media_t media, uint_t flags, uint_t *perm_flags)
{
uint32_t channel;
char buf[WLDP_BUFSIZE];
dladm_status_t status = DLADM_STATUS_OK;
wl_phy_conf_t wl_phy_conf;
- if ((status = do_get_phyconf(linkid, buf, sizeof (buf)))
+ if ((status = do_get_phyconf(handle, linkid, buf, sizeof (buf)))
!= DLADM_STATUS_OK)
goto done;
@@ -1890,24 +1907,25 @@ done:
}
static dladm_status_t
-do_get_powermode(datalink_id_t linkid, void *buf, int buflen)
+do_get_powermode(dladm_handle_t handle, datalink_id_t linkid, void *buf,
+ int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_POWER_MODE,
+ return (i_dladm_wlan_param(handle, linkid, buf, MAC_PROP_WL_POWER_MODE,
buflen, B_FALSE));
}
/* ARGSUSED */
static dladm_status_t
-do_get_powermode_prop(prop_desc_t *pdp, datalink_id_t linkid,
- char **prop_val, uint_t *val_cnt, datalink_media_t media,
- uint_t flags, uint_t *perm_flags)
+do_get_powermode_prop(dladm_handle_t handle, prop_desc_t *pdp,
+ datalink_id_t linkid, char **prop_val, uint_t *val_cnt,
+ datalink_media_t media, uint_t flags, uint_t *perm_flags)
{
wl_ps_mode_t mode;
const char *s;
char buf[WLDP_BUFSIZE];
dladm_status_t status = DLADM_STATUS_OK;
- if ((status = do_get_powermode(linkid, buf, sizeof (buf)))
+ if ((status = do_get_powermode(handle, linkid, buf, sizeof (buf)))
!= DLADM_STATUS_OK)
goto done;
@@ -1934,7 +1952,8 @@ done:
}
static dladm_status_t
-do_set_powermode(datalink_id_t linkid, dladm_wlan_powermode_t *pm)
+do_set_powermode(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_wlan_powermode_t *pm)
{
wl_ps_mode_t ps_mode;
@@ -1953,14 +1972,15 @@ do_set_powermode(datalink_id_t linkid, dladm_wlan_powermode_t *pm)
default:
return (DLADM_STATUS_NOTSUP);
}
- return (i_dladm_wlan_param(linkid, &ps_mode, MAC_PROP_WL_POWER_MODE,
- sizeof (ps_mode), B_TRUE));
+ return (i_dladm_wlan_param(handle, linkid, &ps_mode,
+ MAC_PROP_WL_POWER_MODE, sizeof (ps_mode), B_TRUE));
}
/* ARGSUSED */
static dladm_status_t
-do_set_powermode_prop(prop_desc_t *pdp, datalink_id_t linkid,
- val_desc_t *vdp, uint_t val_cnt, uint_t flags, datalink_media_t media)
+do_set_powermode_prop(dladm_handle_t handle, prop_desc_t *pdp,
+ datalink_id_t linkid, val_desc_t *vdp, uint_t val_cnt, uint_t flags,
+ datalink_media_t media)
{
dladm_wlan_powermode_t powermode = (dladm_wlan_powermode_t)vdp->vd_val;
dladm_status_t status;
@@ -1968,21 +1988,21 @@ do_set_powermode_prop(prop_desc_t *pdp, datalink_id_t linkid,
if (val_cnt != 1)
return (DLADM_STATUS_BADVALCNT);
- status = do_set_powermode(linkid, &powermode);
+ status = do_set_powermode(handle, linkid, &powermode);
return (status);
}
static dladm_status_t
-do_get_radio(datalink_id_t linkid, void *buf, int buflen)
+do_get_radio(dladm_handle_t handle, datalink_id_t linkid, void *buf, int buflen)
{
- return (i_dladm_wlan_param(linkid, buf, MAC_PROP_WL_RADIO, buflen,
- B_FALSE));
+ return (i_dladm_wlan_param(handle, linkid, buf, MAC_PROP_WL_RADIO,
+ buflen, B_FALSE));
}
/* ARGSUSED */
static dladm_status_t
-do_get_radio_prop(prop_desc_t *pdp, datalink_id_t linkid,
+do_get_radio_prop(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
char **prop_val, uint_t *val_cnt, datalink_media_t media,
uint_t flags, uint_t *perm_flags)
{
@@ -1991,7 +2011,7 @@ do_get_radio_prop(prop_desc_t *pdp, datalink_id_t linkid,
char buf[WLDP_BUFSIZE];
dladm_status_t status = DLADM_STATUS_OK;
- if ((status = do_get_radio(linkid, buf, sizeof (buf)))
+ if ((status = do_get_radio(handle, linkid, buf, sizeof (buf)))
!= DLADM_STATUS_OK)
goto done;
@@ -2015,7 +2035,8 @@ done:
}
static dladm_status_t
-do_set_radio(datalink_id_t linkid, dladm_wlan_radio_t *radio)
+do_set_radio(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_wlan_radio_t *radio)
{
wl_radio_t r;
@@ -2029,13 +2050,13 @@ do_set_radio(datalink_id_t linkid, dladm_wlan_radio_t *radio)
default:
return (DLADM_STATUS_NOTSUP);
}
- return (i_dladm_wlan_param(linkid, &r, MAC_PROP_WL_RADIO,
+ return (i_dladm_wlan_param(handle, linkid, &r, MAC_PROP_WL_RADIO,
sizeof (r), B_TRUE));
}
/* ARGSUSED */
static dladm_status_t
-do_set_radio_prop(prop_desc_t *pdp, datalink_id_t linkid,
+do_set_radio_prop(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
val_desc_t *vdp, uint_t val_cnt, uint_t fags, datalink_media_t media)
{
dladm_wlan_radio_t radio = (dladm_wlan_radio_t)vdp->vd_val;
@@ -2044,21 +2065,21 @@ do_set_radio_prop(prop_desc_t *pdp, datalink_id_t linkid,
if (val_cnt != 1)
return (DLADM_STATUS_BADVALCNT);
- status = do_set_radio(linkid, &radio);
+ status = do_set_radio(handle, linkid, &radio);
return (status);
}
static dladm_status_t
-i_dladm_set_linkprop_db(datalink_id_t linkid, const char *prop_name,
- char **prop_val, uint_t val_cnt)
+i_dladm_set_linkprop_db(dladm_handle_t handle, datalink_id_t linkid,
+ const char *prop_name, char **prop_val, uint_t val_cnt)
{
char buf[MAXLINELEN];
int i;
dladm_conf_t conf;
dladm_status_t status;
- status = dladm_read_conf(linkid, &conf);
+ status = dladm_read_conf(handle, linkid, &conf);
if (status != DLADM_STATUS_OK)
return (status);
@@ -2066,9 +2087,9 @@ i_dladm_set_linkprop_db(datalink_id_t linkid, const char *prop_name,
* reset case.
*/
if (val_cnt == 0) {
- status = dladm_unset_conf_field(conf, prop_name);
+ status = dladm_unset_conf_field(handle, conf, prop_name);
if (status == DLADM_STATUS_OK)
- status = dladm_write_conf(conf);
+ status = dladm_write_conf(handle, conf);
goto done;
}
@@ -2079,29 +2100,30 @@ i_dladm_set_linkprop_db(datalink_id_t linkid, const char *prop_name,
(void) strlcat(buf, ",", MAXLINELEN);
}
- status = dladm_set_conf_field(conf, prop_name, DLADM_TYPE_STR, buf);
+ status = dladm_set_conf_field(handle, conf, prop_name, DLADM_TYPE_STR,
+ buf);
if (status == DLADM_STATUS_OK)
- status = dladm_write_conf(conf);
+ status = dladm_write_conf(handle, conf);
done:
- dladm_destroy_conf(conf);
+ dladm_destroy_conf(handle, conf);
return (status);
}
static dladm_status_t
-i_dladm_get_linkprop_db(datalink_id_t linkid, const char *prop_name,
- char **prop_val, uint_t *val_cntp)
+i_dladm_get_linkprop_db(dladm_handle_t handle, datalink_id_t linkid,
+ const char *prop_name, char **prop_val, uint_t *val_cntp)
{
char buf[MAXLINELEN], *str;
uint_t cnt = 0;
dladm_conf_t conf;
dladm_status_t status;
- status = dladm_read_conf(linkid, &conf);
+ status = dladm_read_conf(handle, linkid, &conf);
if (status != DLADM_STATUS_OK)
return (status);
- status = dladm_get_conf_field(conf, prop_name, buf, MAXLINELEN);
+ status = dladm_get_conf_field(handle, conf, prop_name, buf, MAXLINELEN);
if (status != DLADM_STATUS_OK)
goto done;
@@ -2118,7 +2140,7 @@ i_dladm_get_linkprop_db(datalink_id_t linkid, const char *prop_name,
*val_cntp = cnt;
done:
- dladm_destroy_conf(conf);
+ dladm_destroy_conf(handle, conf);
return (status);
}
@@ -2197,8 +2219,9 @@ i_dladm_buf_alloc_by_id(size_t valsize, datalink_id_t linkid,
/* ARGSUSED */
static dladm_status_t
-i_dladm_set_public_prop(prop_desc_t *pdp, datalink_id_t linkid,
- val_desc_t *vdp, uint_t val_cnt, uint_t flags, datalink_media_t media)
+i_dladm_set_public_prop(dladm_handle_t handle, prop_desc_t *pdp,
+ datalink_id_t linkid, val_desc_t *vdp, uint_t val_cnt, uint_t flags,
+ datalink_media_t media)
{
dld_ioc_macprop_t *dip;
dladm_status_t status = DLADM_STATUS_OK;
@@ -2242,7 +2265,7 @@ i_dladm_set_public_prop(prop_desc_t *pdp, datalink_id_t linkid,
else
dip->pr_valsize = 0;
- status = i_dladm_macprop(dip, B_TRUE);
+ status = i_dladm_macprop(handle, dip, B_TRUE);
done:
free(dip);
@@ -2250,25 +2273,20 @@ done:
}
dladm_status_t
-i_dladm_macprop(void *dip, boolean_t set)
+i_dladm_macprop(dladm_handle_t handle, void *dip, boolean_t set)
{
- int fd;
dladm_status_t status = DLADM_STATUS_OK;
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0) {
- status = dladm_errno2status(errno);
- return (status);
- }
- if (ioctl(fd, (set ? DLDIOC_SETMACPROP : DLDIOC_GETMACPROP), dip))
+ if (ioctl(dladm_dld_fd(handle),
+ (set ? DLDIOC_SETMACPROP : DLDIOC_GETMACPROP), dip))
status = dladm_errno2status(errno);
- (void) close(fd);
return (status);
}
static dld_ioc_macprop_t *
-i_dladm_get_public_prop(datalink_id_t linkid, char *prop_name, uint_t flags,
- dladm_status_t *status, uint_t *perm_flags)
+i_dladm_get_public_prop(dladm_handle_t handle, datalink_id_t linkid,
+ char *prop_name, uint_t flags, dladm_status_t *status, uint_t *perm_flags)
{
dld_ioc_macprop_t *dip = NULL;
@@ -2276,7 +2294,7 @@ i_dladm_get_public_prop(datalink_id_t linkid, char *prop_name, uint_t flags,
if (dip == NULL)
return (NULL);
- *status = i_dladm_macprop(dip, B_FALSE);
+ *status = i_dladm_macprop(handle, dip, B_FALSE);
if (*status != DLADM_STATUS_OK) {
free(dip);
return (NULL);
@@ -2289,8 +2307,9 @@ i_dladm_get_public_prop(datalink_id_t linkid, char *prop_name, uint_t flags,
/* ARGSUSED */
static dladm_status_t
-i_dladm_defmtu_check(prop_desc_t *pdp, datalink_id_t linkid,
- char **prop_val, uint_t val_cnt, val_desc_t *v, datalink_media_t media)
+i_dladm_defmtu_check(dladm_handle_t handle, prop_desc_t *pdp,
+ datalink_id_t linkid, char **prop_val, uint_t val_cnt, val_desc_t *v,
+ datalink_media_t media)
{
if (val_cnt != 1)
return (DLADM_STATUS_BADVAL);
@@ -2300,14 +2319,14 @@ i_dladm_defmtu_check(prop_desc_t *pdp, datalink_id_t linkid,
/* ARGSUSED */
static dladm_status_t
-i_dladm_duplex_get(prop_desc_t *pdp, datalink_id_t linkid,
- char **prop_val, uint_t *val_cnt, datalink_media_t media,
- uint_t flags, uint_t *perm_flags)
+i_dladm_duplex_get(dladm_handle_t handle, prop_desc_t *pdp,
+ datalink_id_t linkid, char **prop_val, uint_t *val_cnt,
+ datalink_media_t media, uint_t flags, uint_t *perm_flags)
{
link_duplex_t link_duplex;
dladm_status_t status;
- if ((status = dladm_get_single_mac_stat(linkid, "link_duplex",
+ if ((status = dladm_get_single_mac_stat(handle, linkid, "link_duplex",
KSTAT_DATA_UINT32, &link_duplex)) != 0)
return (status);
@@ -2328,13 +2347,13 @@ i_dladm_duplex_get(prop_desc_t *pdp, datalink_id_t linkid,
/* ARGSUSED */
static dladm_status_t
-i_dladm_speed_get(prop_desc_t *pdp, datalink_id_t linkid,
+i_dladm_speed_get(dladm_handle_t handle, prop_desc_t *pdp, datalink_id_t linkid,
char **prop_val, uint_t *val_cnt, uint_t flags, uint_t *perm_flags)
{
uint64_t ifspeed = 0;
dladm_status_t status;
- if ((status = dladm_get_single_mac_stat(linkid, "ifspeed",
+ if ((status = dladm_get_single_mac_stat(handle, linkid, "ifspeed",
KSTAT_DATA_UINT64, &ifspeed)) != 0)
return (status);
@@ -2352,14 +2371,14 @@ i_dladm_speed_get(prop_desc_t *pdp, datalink_id_t linkid,
/* ARGSUSED */
static dladm_status_t
-i_dladm_status_get(prop_desc_t *pdp, datalink_id_t linkid,
- char **prop_val, uint_t *val_cnt, datalink_media_t media,
- uint_t flags, uint_t *perm_flags)
+i_dladm_status_get(dladm_handle_t handle, prop_desc_t *pdp,
+ datalink_id_t linkid, char **prop_val, uint_t *val_cnt,
+ datalink_media_t media, uint_t flags, uint_t *perm_flags)
{
link_state_t link_state;
dladm_status_t status;
- status = i_dladm_get_state(linkid, &link_state);
+ status = i_dladm_get_state(handle, linkid, &link_state);
if (status != DLADM_STATUS_OK)
return (status);
@@ -2381,14 +2400,14 @@ i_dladm_status_get(prop_desc_t *pdp, datalink_id_t linkid,
/* ARGSUSED */
static dladm_status_t
-i_dladm_binary_get(prop_desc_t *pdp, datalink_id_t linkid,
- char **prop_val, uint_t *val_cnt, datalink_media_t media,
- uint_t flags, uint_t *perm_flags)
+i_dladm_binary_get(dladm_handle_t handle, prop_desc_t *pdp,
+ datalink_id_t linkid, char **prop_val, uint_t *val_cnt,
+ datalink_media_t media, uint_t flags, uint_t *perm_flags)
{
dld_ioc_macprop_t *dip;
dladm_status_t status;
- dip = i_dladm_get_public_prop(linkid, pdp->pd_name, flags,
+ dip = i_dladm_get_public_prop(handle, linkid, pdp->pd_name, flags,
&status, perm_flags);
if (dip == NULL)
return (status);
@@ -2401,16 +2420,16 @@ i_dladm_binary_get(prop_desc_t *pdp, datalink_id_t linkid,
/* ARGSUSED */
static dladm_status_t
-i_dladm_uint32_get(prop_desc_t *pdp, datalink_id_t linkid,
- char **prop_val, uint_t *val_cnt, datalink_media_t media,
- uint_t flags, uint_t *perm_flags)
+i_dladm_uint32_get(dladm_handle_t handle, prop_desc_t *pdp,
+ datalink_id_t linkid, char **prop_val, uint_t *val_cnt,
+ datalink_media_t media, uint_t flags, uint_t *perm_flags)
{
dld_ioc_macprop_t *dip;
uint32_t v = 0;
uchar_t *cp;
dladm_status_t status;
- dip = i_dladm_get_public_prop(linkid, pdp->pd_name, flags,
+ dip = i_dladm_get_public_prop(handle, linkid, pdp->pd_name, flags,
&status, perm_flags);
if (dip == NULL)
return (status);
@@ -2425,16 +2444,16 @@ i_dladm_uint32_get(prop_desc_t *pdp, datalink_id_t linkid,
/* ARGSUSED */
static dladm_status_t
-i_dladm_flowctl_get(prop_desc_t *pdp, datalink_id_t linkid,
- char **prop_val, uint_t *val_cnt, datalink_media_t media,
- uint_t flags, uint_t *perm_flags)
+i_dladm_flowctl_get(dladm_handle_t handle, prop_desc_t *pdp,
+ datalink_id_t linkid, char **prop_val, uint_t *val_cnt,
+ datalink_media_t media, uint_t flags, uint_t *perm_flags)
{
dld_ioc_macprop_t *dip;
link_flowctrl_t v;
dladm_status_t status;
uchar_t *cp;
- dip = i_dladm_get_public_prop(linkid, pdp->pd_name, flags,
+ dip = i_dladm_get_public_prop(handle, linkid, pdp->pd_name, flags,
&status, perm_flags);
if (dip == NULL)
return (status);
@@ -2463,8 +2482,9 @@ i_dladm_flowctl_get(prop_desc_t *pdp, datalink_id_t linkid,
/* ARGSUSED */
static dladm_status_t
-i_dladm_set_prop(datalink_id_t linkid, const char *prop_name,
- char **prop_val, uint_t val_cnt, uint_t flags)
+i_dladm_set_prop(dladm_handle_t handle, datalink_id_t linkid,
+ const char *prop_name, char **prop_val, uint_t val_cnt, uint_t flags)
+
{
int i, slen;
int bufsize = 0;
@@ -2504,7 +2524,7 @@ i_dladm_set_prop(datalink_id_t linkid, const char *prop_name,
slen = 0;
if (prop_val == NULL) {
- status = i_dladm_macprop(dip, B_FALSE);
+ status = i_dladm_macprop(handle, dip, B_FALSE);
} else {
for (i = 0; i < val_cnt; i++) {
int plen = 0;
@@ -2519,7 +2539,7 @@ i_dladm_set_prop(datalink_id_t linkid, const char *prop_name,
dp[slen++] = ',';
dp += (plen + 1);
}
- status = i_dladm_macprop(dip, B_TRUE);
+ status = i_dladm_macprop(handle, dip, B_TRUE);
}
free(dip);
@@ -2527,8 +2547,9 @@ i_dladm_set_prop(datalink_id_t linkid, const char *prop_name,
}
static dladm_status_t
-i_dladm_get_prop(datalink_id_t linkid, const char *prop_name,
- char **prop_val, uint_t *val_cnt, dladm_prop_type_t type, uint_t dld_flags)
+i_dladm_get_prop(dladm_handle_t handle, datalink_id_t linkid,
+ const char *prop_name, char **prop_val, uint_t *val_cnt,
+ dladm_prop_type_t type, uint_t dld_flags)
{
dladm_status_t status = DLADM_STATUS_OK;
dld_ioc_macprop_t *dip = NULL;
@@ -2557,7 +2578,8 @@ i_dladm_get_prop(datalink_id_t linkid, const char *prop_name,
if (dip == NULL)
return (status);
- if ((status = i_dladm_macprop(dip, B_FALSE)) == DLADM_STATUS_OK) {
+ if ((status = i_dladm_macprop(handle, dip, B_FALSE)) ==
+ DLADM_STATUS_OK) {
if (type == DLADM_PROP_VAL_PERM) {
(void) dladm_perm2str(dip->pr_perm_flags, *prop_val);
} else {
@@ -2572,8 +2594,8 @@ i_dladm_get_prop(datalink_id_t linkid, const char *prop_name,
static dladm_status_t
-i_dladm_getset_defval(prop_desc_t *pdp, datalink_id_t linkid,
- datalink_media_t media, uint_t flags)
+i_dladm_getset_defval(dladm_handle_t handle, prop_desc_t *pdp,
+ datalink_id_t linkid, datalink_media_t media, uint_t flags)
{
dladm_status_t status;
char **prop_vals = NULL, *buf;
@@ -2607,12 +2629,12 @@ i_dladm_getset_defval(prop_desc_t *pdp, datalink_id_t linkid,
* libdladm to do a getprop to find the default value and then do
* a setprop to reset the value to default.
*/
- status = pdp->pd_get(pdp, linkid, prop_vals, &cnt, media,
+ status = pdp->pd_get(handle, pdp, linkid, prop_vals, &cnt, media,
MAC_PROP_DEFAULT, &perm_flags);
if (status == DLADM_STATUS_OK) {
if (perm_flags == MAC_PROP_PERM_RW) {
- status = i_dladm_set_single_prop(linkid, pdp->pd_class,
- media, pdp, prop_vals, cnt, flags);
+ status = i_dladm_set_single_prop(handle, linkid,
+ pdp->pd_class, media, pdp, prop_vals, cnt, flags);
}
else
status = DLADM_STATUS_NOTSUP;
@@ -2675,8 +2697,8 @@ macprop_to_wifi(mac_prop_id_t wl_prop)
}
dladm_status_t
-i_dladm_wlan_param(datalink_id_t linkid, void *buf, mac_prop_id_t cmd,
- size_t len, boolean_t set)
+i_dladm_wlan_param(dladm_handle_t handle, datalink_id_t linkid, void *buf,
+ mac_prop_id_t cmd, size_t len, boolean_t set)
{
uint32_t flags;
dladm_status_t status;
@@ -2684,8 +2706,8 @@ i_dladm_wlan_param(datalink_id_t linkid, void *buf, mac_prop_id_t cmd,
dld_ioc_macprop_t *dip;
void *dp;
- if ((status = dladm_datalink_id2info(linkid, &flags, NULL, &media,
- NULL, 0)) != DLADM_STATUS_OK) {
+ if ((status = dladm_datalink_id2info(handle, linkid, &flags, NULL,
+ &media, NULL, 0)) != DLADM_STATUS_OK) {
return (status);
}
@@ -2706,13 +2728,13 @@ i_dladm_wlan_param(datalink_id_t linkid, void *buf, mac_prop_id_t cmd,
if (set)
(void) memcpy(dp, buf, len);
- status = i_dladm_macprop(dip, set);
+ status = i_dladm_macprop(handle, dip, set);
if (status == DLADM_STATUS_NOTSUP) {
if (set) {
- status = i_dladm_wlan_set_legacy_ioctl(linkid,
+ status = i_dladm_wlan_set_legacy_ioctl(handle, linkid,
buf, len, macprop_to_wifi(cmd));
} else {
- status = i_dladm_wlan_get_legacy_ioctl(linkid,
+ status = i_dladm_wlan_get_legacy_ioctl(handle, linkid,
buf, len, macprop_to_wifi(cmd));
}
} else if (status == DLADM_STATUS_OK) {
@@ -2725,8 +2747,8 @@ i_dladm_wlan_param(datalink_id_t linkid, void *buf, mac_prop_id_t cmd,
}
static dladm_status_t
-i_dladm_wlan_get_legacy_ioctl(datalink_id_t linkid, void *buf, uint_t buflen,
- uint_t id)
+i_dladm_wlan_get_legacy_ioctl(dladm_handle_t handle, datalink_id_t linkid,
+ void *buf, uint_t buflen, uint_t id)
{
wldp_t *gbuf;
dladm_status_t status;
@@ -2735,8 +2757,8 @@ i_dladm_wlan_get_legacy_ioctl(datalink_id_t linkid, void *buf, uint_t buflen,
return (DLADM_STATUS_NOMEM);
(void) memset(gbuf, 0, MAX_BUF_LEN);
- status = i_dladm_wlan_legacy_ioctl(linkid, gbuf, id, MAX_BUF_LEN,
- WLAN_GET_PARAM, sizeof (wldp_t));
+ status = i_dladm_wlan_legacy_ioctl(handle, linkid, gbuf, id,
+ MAX_BUF_LEN, WLAN_GET_PARAM, sizeof (wldp_t));
if (status == DLADM_STATUS_OK)
(void) memcpy(buf, gbuf->wldp_buf, buflen);
@@ -2745,8 +2767,8 @@ i_dladm_wlan_get_legacy_ioctl(datalink_id_t linkid, void *buf, uint_t buflen,
}
static dladm_status_t
-i_dladm_wlan_set_legacy_ioctl(datalink_id_t linkid, void *buf, uint_t buflen,
- uint_t id)
+i_dladm_wlan_set_legacy_ioctl(dladm_handle_t handle, datalink_id_t linkid,
+ void *buf, uint_t buflen, uint_t id)
{
wldp_t *gbuf;
dladm_status_t status = DLADM_STATUS_OK;
@@ -2757,7 +2779,7 @@ i_dladm_wlan_set_legacy_ioctl(datalink_id_t linkid, void *buf, uint_t buflen,
(void) memset(gbuf, 0, MAX_BUF_LEN);
(void) memcpy(gbuf->wldp_buf, buf, buflen);
buflen += WIFI_BUF_OFFSET;
- status = i_dladm_wlan_legacy_ioctl(linkid, gbuf, id, buflen,
+ status = i_dladm_wlan_legacy_ioctl(handle, linkid, gbuf, id, buflen,
WLAN_SET_PARAM, buflen);
free(gbuf);
@@ -2806,7 +2828,8 @@ dladm_parse_link_props(char *str, dladm_arg_list_t **listp, boolean_t novalues)
*/
/*ARGSUSED*/
static int
-i_dladm_get_one_prop(datalink_id_t linkid, const char *prop_name, void *arg)
+i_dladm_get_one_prop(dladm_handle_t handle, datalink_id_t linkid,
+ const char *prop_name, void *arg)
{
dladm_arg_list_t *proplist = arg;
dladm_arg_info_t *aip = NULL;
@@ -2818,8 +2841,8 @@ i_dladm_get_one_prop(datalink_id_t linkid, const char *prop_name, void *arg)
*/
aip->ai_name = prop_name;
- (void) dladm_get_linkprop(linkid, DLADM_PROP_VAL_PERSISTENT, prop_name,
- aip->ai_val, &aip->ai_count);
+ (void) dladm_get_linkprop(handle, linkid, DLADM_PROP_VAL_PERSISTENT,
+ prop_name, aip->ai_val, &aip->ai_count);
if (aip->ai_count != 0)
proplist->al_count++;
@@ -2833,7 +2856,8 @@ i_dladm_get_one_prop(datalink_id_t linkid, const char *prop_name, void *arg)
* return a property list.
*/
dladm_status_t
-dladm_link_get_proplist(datalink_id_t linkid, dladm_arg_list_t **listp)
+dladm_link_get_proplist(dladm_handle_t handle, datalink_id_t linkid,
+ dladm_arg_list_t **listp)
{
dladm_arg_list_t *list;
dladm_status_t status = DLADM_STATUS_OK;
@@ -2842,7 +2866,8 @@ dladm_link_get_proplist(datalink_id_t linkid, dladm_arg_list_t **listp)
if (list == NULL)
return (dladm_errno2status(errno));
- status = dladm_walk_linkprop(linkid, list, i_dladm_get_one_prop);
+ status = dladm_walk_linkprop(handle, linkid, list,
+ i_dladm_get_one_prop);
*listp = list;
return (status);
@@ -2853,8 +2878,8 @@ dladm_link_get_proplist(datalink_id_t linkid, dladm_arg_list_t **listp)
* convert to a kernel structure.
*/
static dladm_status_t
-i_dladm_link_proplist_extract_one(dladm_arg_list_t *proplist,
- const char *name, void *val)
+i_dladm_link_proplist_extract_one(dladm_handle_t handle,
+ dladm_arg_list_t *proplist, const char *name, void *val)
{
dladm_status_t status;
dladm_arg_info_t *aip = NULL;
@@ -2887,7 +2912,7 @@ i_dladm_link_proplist_extract_one(dladm_arg_list_t *proplist,
/* Check property value */
if (pdp->pd_check != NULL) {
- status = pdp->pd_check(pdp, 0, aip->ai_val,
+ status = pdp->pd_check(handle, pdp, 0, aip->ai_val,
aip->ai_count, vdp, 0);
} else {
status = DLADM_STATUS_BADARG;
@@ -2924,18 +2949,21 @@ i_dladm_link_proplist_extract_one(dladm_arg_list_t *proplist,
* Extract properties from a proplist and convert to mac_resource_props_t.
*/
dladm_status_t
-dladm_link_proplist_extract(dladm_arg_list_t *proplist,
+dladm_link_proplist_extract(dladm_handle_t handle, dladm_arg_list_t *proplist,
mac_resource_props_t *mrp)
{
dladm_status_t status = DLADM_STATUS_OK;
- status = i_dladm_link_proplist_extract_one(proplist, "maxbw", mrp);
+ status = i_dladm_link_proplist_extract_one(handle, proplist, "maxbw",
+ mrp);
if (status != DLADM_STATUS_OK)
return (status);
- status = i_dladm_link_proplist_extract_one(proplist, "priority", mrp);
+ status = i_dladm_link_proplist_extract_one(handle, proplist, "priority",
+ mrp);
if (status != DLADM_STATUS_OK)
return (status);
- status = i_dladm_link_proplist_extract_one(proplist, "cpus", mrp);
+ status = i_dladm_link_proplist_extract_one(handle, proplist, "cpus",
+ mrp);
if (status != DLADM_STATUS_OK)
return (status);
return (status);
@@ -2951,13 +2979,15 @@ dladm_perm2str(uint_t perm, char *buf)
}
dladm_status_t
-i_dladm_get_state(datalink_id_t linkid, link_state_t *state)
+i_dladm_get_state(dladm_handle_t handle, datalink_id_t linkid,
+ link_state_t *state)
{
dld_ioc_macprop_t *dip;
dladm_status_t status;
uint_t perms;
- dip = i_dladm_get_public_prop(linkid, "state", 0, &status, &perms);
+ dip = i_dladm_get_public_prop(handle, linkid, "state", 0, &status,
+ &perms);
if (status != DLADM_STATUS_OK)
return (status);
(void) memcpy(state, dip->pr_val, sizeof (*state));
diff --git a/usr/src/lib/libdladm/common/mapfile-vers b/usr/src/lib/libdladm/common/mapfile-vers
index fbdcb31521..4dd0bb9c52 100644
--- a/usr/src/lib/libdladm/common/mapfile-vers
+++ b/usr/src/lib/libdladm/common/mapfile-vers
@@ -25,6 +25,10 @@
SUNWprivate_1.1 {
global:
+ dladm_open;
+ dladm_close;
+ dladm_dld_fd;
+ dladm_door_fd;
dladm_info;
dladm_walk;
dladm_setzid;
diff --git a/usr/src/lib/libdladm/common/propfuncs.c b/usr/src/lib/libdladm/common/propfuncs.c
index 74964511eb..d466323604 100644
--- a/usr/src/lib/libdladm/common/propfuncs.c
+++ b/usr/src/lib/libdladm/common/propfuncs.c
@@ -114,8 +114,9 @@ generate_prop_line(const char *name, char *buf,
* will be NULL; a new entry will be generated in this case and it will
* contain only the property information in lsp.
*/
+/* ARGSUSED */
boolean_t
-process_prop_set(prop_db_state_t *lsp, char *buf,
+process_prop_set(dladm_handle_t handle, prop_db_state_t *lsp, char *buf,
prop_db_info_t *listp, dladm_status_t *statusp)
{
dladm_status_t status;
@@ -208,7 +209,7 @@ fail:
*/
/* ARGSUSED */
boolean_t
-process_prop_get(prop_db_state_t *lsp, char *buf,
+process_prop_get(dladm_handle_t handle, prop_db_state_t *lsp, char *buf,
prop_db_info_t *listp, dladm_status_t *statusp)
{
prop_db_info_t *lip = listp;
@@ -254,7 +255,7 @@ process_prop_get(prop_db_state_t *lsp, char *buf,
*/
/* ARGSUSED */
boolean_t
-process_prop_init(prop_db_state_t *lsp, char *buf,
+process_prop_init(dladm_handle_t handle, prop_db_state_t *lsp, char *buf,
prop_db_info_t *listp, dladm_status_t *statusp)
{
dladm_status_t status = DLADM_STATUS_OK;
@@ -281,7 +282,7 @@ process_prop_init(prop_db_state_t *lsp, char *buf,
for (i = 0; i < valcnt; i++, lvp = lvp->lv_nextval)
propval[i] = (char *)lvp->lv_name;
- status = (*lsp->ls_initop)(lsp->ls_name, lip->li_name,
+ status = (*lsp->ls_initop)(handle, lsp->ls_name, lip->li_name,
propval, valcnt, DLADM_OPT_ACTIVE, NULL);
/*
@@ -390,7 +391,7 @@ fail:
}
static boolean_t
-process_prop_line(prop_db_state_t *lsp, char *buf,
+process_prop_line(dladm_handle_t handle, prop_db_state_t *lsp, char *buf,
dladm_status_t *statusp)
{
prop_db_info_t *lip = NULL;
@@ -447,7 +448,7 @@ process_prop_line(prop_db_state_t *lsp, char *buf,
if (parse_props(str, &lip) < 0)
goto fail;
- cont = (*lsp->ls_op)(lsp, buf, lip, statusp);
+ cont = (*lsp->ls_op)(handle, lsp, buf, lip, statusp);
free_props(lip);
if (noname)
lsp->ls_name = NULL;
@@ -466,7 +467,7 @@ fail:
}
dladm_status_t
-process_prop_db(void *arg, FILE *fp, FILE *nfp)
+process_prop_db(dladm_handle_t handle, void *arg, FILE *fp, FILE *nfp)
{
prop_db_state_t *lsp = arg;
dladm_status_t status = DLADM_STATUS_OK;
@@ -484,7 +485,7 @@ process_prop_db(void *arg, FILE *fp, FILE *nfp)
*/
while (fgets(buf, MAXLINELEN, fp) != NULL) {
if (cont)
- cont = process_prop_line(lsp, buf, &status);
+ cont = process_prop_line(handle, lsp, buf, &status);
if (nfp != NULL && buf[0] != '\0' && fputs(buf, nfp) == EOF) {
status = dladm_errno2status(errno);
@@ -500,7 +501,7 @@ process_prop_db(void *arg, FILE *fp, FILE *nfp)
* If the specified name is not found above, we add the
* name and its properties to the configuration file.
*/
- (void) (*lsp->ls_op)(lsp, buf, NULL, &status);
+ (void) (*lsp->ls_op)(handle, lsp, buf, NULL, &status);
if (status == DLADM_STATUS_OK && fputs(buf, nfp) == EOF)
status = dladm_errno2status(errno);
}
@@ -512,7 +513,7 @@ process_prop_db(void *arg, FILE *fp, FILE *nfp)
}
dladm_status_t
-i_dladm_get_prop_temp(const char *name, prop_type_t type,
+i_dladm_get_prop_temp(dladm_handle_t handle, const char *name, prop_type_t type,
const char *prop_name, char **prop_val, uint_t *val_cntp,
prop_table_t *prop_tbl)
{
@@ -537,7 +538,7 @@ i_dladm_get_prop_temp(const char *name, prop_type_t type,
switch (type) {
case DLADM_PROP_VAL_CURRENT:
- status = pdp->pd_get(name, prop_val, val_cntp);
+ status = pdp->pd_get(handle, name, prop_val, val_cntp);
break;
case DLADM_PROP_VAL_DEFAULT:
if (pdp->pd_defval.vd_name == NULL) {
@@ -550,7 +551,8 @@ i_dladm_get_prop_temp(const char *name, prop_type_t type,
case DLADM_PROP_VAL_MODIFIABLE:
if (pdp->pd_getmod != NULL) {
- status = pdp->pd_getmod(name, prop_val, val_cntp);
+ status = pdp->pd_getmod(handle, name, prop_val,
+ val_cntp);
break;
}
cnt = pdp->pd_nmodval;
@@ -575,8 +577,8 @@ i_dladm_get_prop_temp(const char *name, prop_type_t type,
}
static dladm_status_t
-i_dladm_set_one_prop_temp(const char *name, fprop_desc_t *pdp, char **prop_val,
- uint_t val_cnt, uint_t flags)
+i_dladm_set_one_prop_temp(dladm_handle_t handle, const char *name,
+ fprop_desc_t *pdp, char **prop_val, uint_t val_cnt, uint_t flags)
{
dladm_status_t status;
val_desc_t *vdp = NULL;
@@ -609,15 +611,16 @@ i_dladm_set_one_prop_temp(const char *name, fprop_desc_t *pdp, char **prop_val,
cnt = 1;
}
- status = pdp->pd_set(name, vdp, cnt);
+ status = pdp->pd_set(handle, name, vdp, cnt);
free(vdp);
return (status);
}
dladm_status_t
-i_dladm_set_prop_temp(const char *name, const char *prop_name, char **prop_val,
- uint_t val_cnt, uint_t flags, char **errprop, prop_table_t *prop_tbl)
+i_dladm_set_prop_temp(dladm_handle_t handle, const char *name,
+ const char *prop_name, char **prop_val, uint_t val_cnt, uint_t flags,
+ char **errprop, prop_table_t *prop_tbl)
{
int i;
dladm_status_t status = DLADM_STATUS_OK;
@@ -632,8 +635,8 @@ i_dladm_set_prop_temp(const char *name, const char *prop_name, char **prop_val,
continue;
found = B_TRUE;
- s = i_dladm_set_one_prop_temp(name, pdp, prop_val, val_cnt,
- flags);
+ s = i_dladm_set_one_prop_temp(handle, name, pdp, prop_val,
+ val_cnt, flags);
if (prop_name != NULL) {
status = s;
diff --git a/usr/src/lib/libdladm/common/secobj.c b/usr/src/lib/libdladm/common/secobj.c
index cf9b262a9b..0f105c8826 100644
--- a/usr/src/lib/libdladm/common/secobj.c
+++ b/usr/src/lib/libdladm/common/secobj.c
@@ -35,13 +35,14 @@
#include <libdllink.h>
#include <libdladm_impl.h>
-static dladm_status_t i_dladm_set_secobj_db(const char *,
+static dladm_status_t i_dladm_set_secobj_db(dladm_handle_t, const char *,
dladm_secobj_class_t, uint8_t *, uint_t);
-static dladm_status_t i_dladm_get_secobj_db(const char *,
+static dladm_status_t i_dladm_get_secobj_db(dladm_handle_t, const char *,
dladm_secobj_class_t *, uint8_t *, uint_t *);
-static dladm_status_t i_dladm_unset_secobj_db(const char *);
-static dladm_status_t i_dladm_walk_secobj_db(void *,
- boolean_t (*)(void *, const char *));
+static dladm_status_t i_dladm_unset_secobj_db(dladm_handle_t, const char *);
+static dladm_status_t i_dladm_walk_secobj_db(dladm_handle_t, void *,
+ boolean_t (*)(dladm_handle_t, void *,
+ const char *));
typedef struct secobj_class_info {
const char *sc_name;
@@ -122,10 +123,9 @@ dladm_convert_dldsecobjclass(dld_secobj_class_t dldclass,
}
dladm_status_t
-dladm_set_secobj(const char *obj_name, dladm_secobj_class_t class,
- uint8_t *obj_val, uint_t obj_len, uint_t flags)
+dladm_set_secobj(dladm_handle_t handle, const char *obj_name,
+ dladm_secobj_class_t class, uint8_t *obj_val, uint_t obj_len, uint_t flags)
{
- int fd;
dladm_status_t status = DLADM_STATUS_OK;
dld_ioc_secobj_set_t secobj_set;
dld_secobj_t *objp;
@@ -153,30 +153,25 @@ dladm_set_secobj(const char *obj_name, dladm_secobj_class_t class,
if ((flags & DLADM_OPT_CREATE) != 0)
secobj_set.ss_flags = DLD_SECOBJ_OPT_CREATE;
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (dladm_errno2status(errno));
-
- if (ioctl(fd, DLDIOC_SECOBJ_SET, &secobj_set) < 0)
+ if (ioctl(dladm_dld_fd(handle), DLDIOC_SECOBJ_SET, &secobj_set) < 0)
status = dladm_errno2status(errno);
- (void) close(fd);
-
if (status != DLADM_STATUS_OK)
return (status);
persist:
if ((flags & DLADM_OPT_PERSIST) != 0) {
- status = i_dladm_set_secobj_db(obj_name, class,
+ status = i_dladm_set_secobj_db(handle, obj_name, class,
obj_val, obj_len);
}
return (status);
}
dladm_status_t
-dladm_get_secobj(const char *obj_name, dladm_secobj_class_t *classp,
- uint8_t *obj_val, uint_t *obj_lenp, uint_t flags)
+dladm_get_secobj(dladm_handle_t handle, const char *obj_name,
+ dladm_secobj_class_t *classp, uint8_t *obj_val, uint_t *obj_lenp,
+ uint_t flags)
{
- int fd;
dladm_status_t status = DLADM_STATUS_OK;
dld_ioc_secobj_get_t secobj_get;
dld_secobj_t *objp;
@@ -187,7 +182,7 @@ dladm_get_secobj(const char *obj_name, dladm_secobj_class_t *classp,
return (DLADM_STATUS_BADARG);
if ((flags & DLADM_OPT_PERSIST) != 0) {
- return (i_dladm_get_secobj_db(obj_name, classp,
+ return (i_dladm_get_secobj_db(handle, obj_name, classp,
obj_val, obj_lenp));
}
@@ -195,14 +190,10 @@ dladm_get_secobj(const char *obj_name, dladm_secobj_class_t *classp,
objp = &secobj_get.sg_obj;
(void) strlcpy(objp->so_name, obj_name, DLD_SECOBJ_NAME_MAX);
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (dladm_errno2status(errno));
-
secobj_get.sg_size = sizeof (secobj_get);
- if (ioctl(fd, DLDIOC_SECOBJ_GET, &secobj_get) < 0)
+ if (ioctl(dladm_dld_fd(handle), DLDIOC_SECOBJ_GET, &secobj_get) < 0)
status = dladm_errno2status(errno);
- (void) close(fd);
if (objp->so_len > *obj_lenp)
return (DLADM_STATUS_TOOSMALL);
@@ -215,9 +206,8 @@ dladm_get_secobj(const char *obj_name, dladm_secobj_class_t *classp,
}
dladm_status_t
-dladm_unset_secobj(const char *obj_name, uint_t flags)
+dladm_unset_secobj(dladm_handle_t handle, const char *obj_name, uint_t flags)
{
- int fd;
dladm_status_t status = DLADM_STATUS_OK;
dld_ioc_secobj_unset_t secobj_unset;
@@ -230,38 +220,31 @@ dladm_unset_secobj(const char *obj_name, uint_t flags)
bzero(&secobj_unset, sizeof (secobj_unset));
(void) strlcpy(secobj_unset.su_name, obj_name, DLD_SECOBJ_NAME_MAX);
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (dladm_errno2status(errno));
- if (ioctl(fd, DLDIOC_SECOBJ_UNSET, &secobj_unset) < 0)
+ if (ioctl(dladm_dld_fd(handle), DLDIOC_SECOBJ_UNSET, &secobj_unset) < 0)
status = dladm_errno2status(errno);
- (void) close(fd);
if (status != DLADM_STATUS_OK)
return (status);
persist:
if ((flags & DLADM_OPT_PERSIST) != 0)
- status = i_dladm_unset_secobj_db(obj_name);
+ status = i_dladm_unset_secobj_db(handle, obj_name);
return (status);
}
dladm_status_t
-dladm_walk_secobj(void *arg, boolean_t (*func)(void *, const char *),
- uint_t flags)
+dladm_walk_secobj(dladm_handle_t handle, void *arg,
+ boolean_t (*func)(dladm_handle_t, void *, const char *), uint_t flags)
{
- int fd = -1;
dladm_status_t status = DLADM_STATUS_OK;
dld_ioc_secobj_get_t *secobj_getp;
dld_secobj_t *objp;
size_t secobj_bufsz;
if ((flags & DLADM_OPT_PERSIST) != 0)
- return (i_dladm_walk_secobj_db(arg, func));
-
- if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0)
- return (dladm_errno2status(errno));
+ return (i_dladm_walk_secobj_db(handle, arg, func));
/* Start with enough room for 10 objects, increase if necessary. */
secobj_bufsz = sizeof (*secobj_getp) + (10 * sizeof (*objp));
@@ -273,7 +256,7 @@ dladm_walk_secobj(void *arg, boolean_t (*func)(void *, const char *),
tryagain:
secobj_getp->sg_size = secobj_bufsz;
- if (ioctl(fd, DLDIOC_SECOBJ_GET, secobj_getp) < 0) {
+ if (ioctl(dladm_dld_fd(handle), DLDIOC_SECOBJ_GET, secobj_getp) < 0) {
if (errno == ENOSPC) {
/* Increase the buffer size and try again. */
secobj_bufsz *= 2;
@@ -295,13 +278,12 @@ tryagain:
objp = (dld_secobj_t *)(secobj_getp + 1);
while (secobj_getp->sg_count > 0) {
- if (!func(arg, objp->so_name))
+ if (!func(handle, arg, objp->so_name))
goto done;
secobj_getp->sg_count--;
objp++;
}
done:
- (void) close(fd);
free(secobj_getp);
return (status);
}
@@ -323,8 +305,8 @@ typedef struct secobj_name {
typedef struct secobj_db_state secobj_db_state_t;
-typedef boolean_t (*secobj_db_op_t)(struct secobj_db_state *, char *,
- secobj_info_t *, dladm_status_t *);
+typedef boolean_t (*secobj_db_op_t)(dladm_handle_t, struct secobj_db_state *,
+ char *, secobj_info_t *, dladm_status_t *);
struct secobj_db_state {
secobj_db_op_t ss_op;
@@ -337,8 +319,8 @@ struct secobj_db_state {
*/
/* ARGSUSED */
static boolean_t
-process_secobj_set(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
- dladm_status_t *statusp)
+process_secobj_set(dladm_handle_t handle, secobj_db_state_t *ssp, char *buf,
+ secobj_info_t *sip, dladm_status_t *statusp)
{
char tmpbuf[MAXLINELEN];
char classbuf[DLADM_STRSIZE];
@@ -366,8 +348,8 @@ process_secobj_set(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
/* ARGSUSED */
static boolean_t
-process_secobj_get(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
- dladm_status_t *statusp)
+process_secobj_get(dladm_handle_t handle, secobj_db_state_t *ssp, char *buf,
+ secobj_info_t *sip, dladm_status_t *statusp)
{
if (*sip->si_lenp > *ssp->ss_info.si_lenp) {
*statusp = DLADM_STATUS_TOOSMALL;
@@ -381,8 +363,8 @@ process_secobj_get(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
/* ARGSUSED */
static boolean_t
-process_secobj_unset(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
- dladm_status_t *statusp)
+process_secobj_unset(dladm_handle_t handle, secobj_db_state_t *ssp, char *buf,
+ secobj_info_t *sip, dladm_status_t *statusp)
{
/*
* Delete line.
@@ -393,8 +375,8 @@ process_secobj_unset(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
/* ARGSUSED */
static boolean_t
-process_secobj_walk(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
- dladm_status_t *statusp)
+process_secobj_walk(dladm_handle_t handle, secobj_db_state_t *ssp, char *buf,
+ secobj_info_t *sip, dladm_status_t *statusp)
{
secobj_name_t *snp;
@@ -414,11 +396,12 @@ process_secobj_walk(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
/* ARGSUSED */
static boolean_t
-process_secobj_init(secobj_db_state_t *ssp, char *buf, secobj_info_t *sip,
- dladm_status_t *statusp)
+process_secobj_init(dladm_handle_t handle, secobj_db_state_t *ssp, char *buf,
+ secobj_info_t *sip, dladm_status_t *statusp)
{
- *statusp = dladm_set_secobj(sip->si_name, *sip->si_classp, sip->si_val,
- *sip->si_lenp, DLADM_OPT_ACTIVE | DLADM_OPT_CREATE);
+ *statusp = dladm_set_secobj(handle, sip->si_name, *sip->si_classp,
+ sip->si_val, *sip->si_lenp,
+ DLADM_OPT_ACTIVE | DLADM_OPT_CREATE);
return (B_TRUE);
}
@@ -433,7 +416,7 @@ parse_secobj_val(char *buf, secobj_info_t *sip)
}
static boolean_t
-process_secobj_line(secobj_db_state_t *ssp, char *buf,
+process_secobj_line(dladm_handle_t handle, secobj_db_state_t *ssp, char *buf,
dladm_status_t *statusp)
{
secobj_info_t sinfo;
@@ -503,7 +486,7 @@ process_secobj_line(secobj_db_state_t *ssp, char *buf,
if (parse_secobj_val(str, &sinfo) != 0)
goto fail;
- return ((*ssp->ss_op)(ssp, buf, &sinfo, statusp));
+ return ((*ssp->ss_op)(handle, ssp, buf, &sinfo, statusp));
fail:
/*
@@ -514,7 +497,7 @@ fail:
}
static dladm_status_t
-process_secobj_db(void *arg, FILE *fp, FILE *nfp)
+process_secobj_db(dladm_handle_t handle, void *arg, FILE *fp, FILE *nfp)
{
secobj_db_state_t *ssp = arg;
dladm_status_t status = DLADM_STATUS_OK;
@@ -532,7 +515,7 @@ process_secobj_db(void *arg, FILE *fp, FILE *nfp)
*/
while (fgets(buf, MAXLINELEN, fp) != NULL) {
if (cont)
- cont = process_secobj_line(ssp, buf, &status);
+ cont = process_secobj_line(handle, ssp, buf, &status);
if (nfp != NULL && buf[0] != '\0' && fputs(buf, nfp) == EOF) {
status = dladm_errno2status(errno);
@@ -547,7 +530,7 @@ process_secobj_db(void *arg, FILE *fp, FILE *nfp)
* If the specified object is not found above, we add the
* object to the configuration file.
*/
- (void) (*ssp->ss_op)(ssp, buf, NULL, &status);
+ (void) (*ssp->ss_op)(handle, ssp, buf, NULL, &status);
if (status == DLADM_STATUS_OK && fputs(buf, nfp) == EOF)
status = dladm_errno2status(errno);
}
@@ -559,13 +542,13 @@ process_secobj_db(void *arg, FILE *fp, FILE *nfp)
return (status);
}
-#define SECOBJ_RW_DB(statep, writeop) \
- (i_dladm_rw_db("/etc/dladm/secobj.conf", S_IRUSR | S_IWUSR, \
+#define SECOBJ_RW_DB(handle, statep, writeop) \
+ (i_dladm_rw_db(handle, "/etc/dladm/secobj.conf", S_IRUSR | S_IWUSR, \
process_secobj_db, (statep), (writeop)))
static dladm_status_t
-i_dladm_set_secobj_db(const char *obj_name, dladm_secobj_class_t class,
- uint8_t *obj_val, uint_t obj_len)
+i_dladm_set_secobj_db(dladm_handle_t handle, const char *obj_name,
+ dladm_secobj_class_t class, uint8_t *obj_val, uint_t obj_len)
{
secobj_db_state_t state;
@@ -576,12 +559,12 @@ i_dladm_set_secobj_db(const char *obj_name, dladm_secobj_class_t class,
state.ss_info.si_lenp = &obj_len;
state.ss_namelist = NULL;
- return (SECOBJ_RW_DB(&state, B_TRUE));
+ return (SECOBJ_RW_DB(handle, &state, B_TRUE));
}
static dladm_status_t
-i_dladm_get_secobj_db(const char *obj_name, dladm_secobj_class_t *classp,
- uint8_t *obj_val, uint_t *obj_lenp)
+i_dladm_get_secobj_db(dladm_handle_t handle, const char *obj_name,
+ dladm_secobj_class_t *classp, uint8_t *obj_val, uint_t *obj_lenp)
{
secobj_db_state_t state;
@@ -592,11 +575,11 @@ i_dladm_get_secobj_db(const char *obj_name, dladm_secobj_class_t *classp,
state.ss_info.si_lenp = obj_lenp;
state.ss_namelist = NULL;
- return (SECOBJ_RW_DB(&state, B_FALSE));
+ return (SECOBJ_RW_DB(handle, &state, B_FALSE));
}
static dladm_status_t
-i_dladm_unset_secobj_db(const char *obj_name)
+i_dladm_unset_secobj_db(dladm_handle_t handle, const char *obj_name)
{
secobj_db_state_t state;
@@ -607,11 +590,12 @@ i_dladm_unset_secobj_db(const char *obj_name)
state.ss_info.si_lenp = NULL;
state.ss_namelist = NULL;
- return (SECOBJ_RW_DB(&state, B_TRUE));
+ return (SECOBJ_RW_DB(handle, &state, B_TRUE));
}
static dladm_status_t
-i_dladm_walk_secobj_db(void *arg, boolean_t (*func)(void *, const char *))
+i_dladm_walk_secobj_db(dladm_handle_t handle, void *arg,
+ boolean_t (*func)(dladm_handle_t, void *, const char *))
{
secobj_db_state_t state;
secobj_name_t *snp = NULL, *fsnp;
@@ -625,7 +609,7 @@ i_dladm_walk_secobj_db(void *arg, boolean_t (*func)(void *, const char *))
state.ss_info.si_lenp = NULL;
state.ss_namelist = &snp;
- status = SECOBJ_RW_DB(&state, B_FALSE);
+ status = SECOBJ_RW_DB(handle, &state, B_FALSE);
if (status != DLADM_STATUS_OK)
return (status);
@@ -633,7 +617,7 @@ i_dladm_walk_secobj_db(void *arg, boolean_t (*func)(void *, const char *))
fsnp = snp;
snp = snp->sn_next;
if (cont)
- cont = func(arg, fsnp->sn_name);
+ cont = func(handle, arg, fsnp->sn_name);
free(fsnp->sn_name);
free(fsnp);
}
@@ -641,7 +625,7 @@ i_dladm_walk_secobj_db(void *arg, boolean_t (*func)(void *, const char *))
}
dladm_status_t
-dladm_init_secobj(void)
+dladm_init_secobj(dladm_handle_t handle)
{
secobj_db_state_t state;
@@ -652,7 +636,7 @@ dladm_init_secobj(void)
state.ss_info.si_lenp = NULL;
state.ss_namelist = NULL;
- return (SECOBJ_RW_DB(&state, B_FALSE));
+ return (SECOBJ_RW_DB(handle, &state, B_FALSE));
}
boolean_t
diff --git a/usr/src/lib/libdlpi/common/libdlpi.c b/usr/src/lib/libdlpi/common/libdlpi.c
index f53abef44e..14c4451081 100644
--- a/usr/src/lib/libdlpi/common/libdlpi.c
+++ b/usr/src/lib/libdlpi/common/libdlpi.c
@@ -96,6 +96,7 @@ dlpi_walk(dlpi_walkfunc_t *fn, void *arg, uint_t flags)
struct i_dlpi_walklink_arg warg;
struct dirent *d;
DIR *dp;
+ dladm_handle_t handle;
warg.fn = fn;
warg.arg = arg;
@@ -114,8 +115,18 @@ dlpi_walk(dlpi_walkfunc_t *fn, void *arg, uint_t flags)
(void) closedir(dp);
} else {
- (void) dladm_walk(i_dlpi_walk_link, &warg, DATALINK_CLASS_ALL,
- DATALINK_ANY_MEDIATYPE, DLADM_OPT_ACTIVE);
+ /*
+ * Rather than have libdlpi take the libdladm handle,
+ * open the handle here.
+ */
+ if (dladm_open(&handle) != DLADM_STATUS_OK)
+ return;
+
+ (void) dladm_walk(i_dlpi_walk_link, handle, &warg,
+ DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE,
+ DLADM_OPT_ACTIVE);
+
+ dladm_close(handle);
}
}
@@ -1062,6 +1073,7 @@ i_dlpi_open(const char *provider, int *fd, uint_t flags, boolean_t style1)
char device[DLPI_LINKNAME_MAX];
datalink_id_t linkid;
uint_t ppa;
+ dladm_handle_t handle;
/*
* This is not a valid style-1 name. It could be "ip" module
@@ -1095,14 +1107,22 @@ i_dlpi_open(const char *provider, int *fd, uint_t flags, boolean_t style1)
(void) snprintf(device, DLPI_LINKNAME_MAX, "%s%d", driver,
ppa >= 1000 ? ppa % 1000 : ppa);
- if (dladm_dev2linkid(device, &linkid) == DLADM_STATUS_OK) {
+ /* open libdladm handle rather than taking it as input */
+ if (dladm_open(&handle) != DLADM_STATUS_OK)
+ return (DLPI_FAILURE);
+
+ if (dladm_dev2linkid(handle, device, &linkid) ==
+ DLADM_STATUS_OK) {
dladm_phys_attr_t dpa;
- if ((dladm_phys_info(linkid, &dpa, DLADM_OPT_ACTIVE)) ==
- DLADM_STATUS_OK && !dpa.dp_novanity) {
+ if ((dladm_phys_info(handle, linkid, &dpa,
+ DLADM_OPT_ACTIVE)) == DLADM_STATUS_OK &&
+ !dpa.dp_novanity) {
+ dladm_close(handle);
return (DLPI_ENOTSTYLE2);
}
}
+ dladm_close(handle);
}
fallback: