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;