Print this page
usr/src/cmd/dlmgmtd/dlmgmt_door.c
*** 19,28 ****
--- 19,29 ----
* CDDL HEADER END
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2016 Joyent, Inc.
+ * Copyright 2023 Oxide Computer Company
*/
#include <door.h>
#include <errno.h>
#include <assert.h>
*** 121,130 ****
--- 122,143 ----
!(flags & (DLADM_OPT_ACTIVE | DLADM_OPT_PERSIST)) ||
linkidp == NULL) {
return (DLADM_STATUS_BADARG);
}
+ if (getzoneid() != GLOBAL_ZONEID) {
+ /*
+ * If we're creating this link in a non-global zone, then do
+ * not allow it to be persistent, and flag it as transient so
+ * that it will be automatically cleaned up on zone shutdown,
+ * rather than being moved to the GZ.
+ */
+ if (flags & DLADM_OPT_PERSIST)
+ return (DLADM_STATUS_TEMPONLY);
+ flags |= DLADM_OPT_TRANSIENT;
+ }
+
dlmgmt_flags = (flags & DLADM_OPT_ACTIVE) ? DLMGMT_ACTIVE : 0;
dlmgmt_flags |= (flags & DLADM_OPT_PERSIST) ? DLMGMT_PERSIST : 0;
dlmgmt_flags |= (flags & DLADM_OPT_TRANSIENT) ? DLMGMT_TRANSIENT : 0;
(void) strlcpy(createid.ld_link, link, MAXLINKNAMELEN);
*** 579,591 ****
}
if (linkidp != NULL)
*linkidp = linkid;
if (flagp != NULL) {
! *flagp = retval.lr_flags & DLMGMT_ACTIVE ? DLADM_OPT_ACTIVE : 0;
*flagp |= (retval.lr_flags & DLMGMT_PERSIST) ?
DLADM_OPT_PERSIST : 0;
}
if (classp != NULL)
*classp = retval.lr_class;
if (mediap != NULL)
*mediap = retval.lr_media;
--- 592,607 ----
}
if (linkidp != NULL)
*linkidp = linkid;
if (flagp != NULL) {
! *flagp = (retval.lr_flags & DLMGMT_ACTIVE) ?
! DLADM_OPT_ACTIVE : 0;
*flagp |= (retval.lr_flags & DLMGMT_PERSIST) ?
DLADM_OPT_PERSIST : 0;
+ *flagp |= (retval.lr_flags & DLMGMT_TRANSIENT) ?
+ DLADM_OPT_TRANSIENT : 0;
}
if (classp != NULL)
*classp = retval.lr_class;
if (mediap != NULL)
*mediap = retval.lr_media;