Print this page
OS-406
OS-249
*** 18,27 ****
--- 18,28 ----
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, Joyent Inc. All rights reserved.
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
*** 537,567 ****
if (status != DLADM_STATUS_OK)
goto done;
vnic_created = B_TRUE;
/* Save vnic configuration and its properties */
! if (!(flags & DLADM_OPT_PERSIST))
! goto done;
!
status = dladm_vnic_persist_conf(handle, name, &attr, class);
! if (status != DLADM_STATUS_OK)
! goto done;
conf_set = B_TRUE;
! if (proplist != NULL) {
for (i = 0; i < proplist->al_count; i++) {
dladm_arg_info_t *aip = &proplist->al_info[i];
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;
}
}
- done:
if (status != DLADM_STATUS_OK) {
if (conf_set)
(void) dladm_remove_conf(handle, vnic_id);
if (vnic_created)
(void) i_dladm_vnic_delete_sys(handle, vnic_id);
--- 538,576 ----
if (status != DLADM_STATUS_OK)
goto done;
vnic_created = B_TRUE;
/* Save vnic configuration and its properties */
! if (flags & DLADM_OPT_PERSIST) {
status = dladm_vnic_persist_conf(handle, name, &attr, class);
! if (status == DLADM_STATUS_OK)
conf_set = B_TRUE;
+ }
! done:
! if (status == DLADM_STATUS_OK && proplist != NULL) {
! uint32_t flg;
!
! flg = (flags & DLADM_OPT_PERSIST) ?
! DLADM_OPT_PERSIST : DLADM_OPT_ACTIVE;
!
for (i = 0; i < proplist->al_count; i++) {
dladm_arg_info_t *aip = &proplist->al_info[i];
+ if (strcmp(aip->ai_name, "zone") == 0 &&
+ flags & DLADM_OPT_TRANSIENT)
+ flg |= DLADM_OPT_TRANSIENT;
+ else
+ flg &= ~DLADM_OPT_TRANSIENT;
+
status = dladm_set_linkprop(handle, vnic_id,
! aip->ai_name, aip->ai_val, aip->ai_count, flg);
if (status != DLADM_STATUS_OK)
break;
}
}
if (status != DLADM_STATUS_OK) {
if (conf_set)
(void) dladm_remove_conf(handle, vnic_id);
if (vnic_created)
(void) i_dladm_vnic_delete_sys(handle, vnic_id);