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);