diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-03-09 12:13:17 +0000 |
---|---|---|
committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-03-09 12:13:17 +0000 |
commit | 7986d0138f7b2fc2fe4a12dce758b443d9aa448f (patch) | |
tree | a90f1cd8b010f8cd18408a0441514b36ca7a1f22 /usr/src/lib/libdladm | |
parent | c9d5215bf1b67592fb838367435fe20cfd079dd2 (diff) | |
parent | 4e4d1bad19e83eed004cbbbec13ba7d42ae7d17a (diff) | |
download | illumos-joyent-7986d0138f7b2fc2fe4a12dce758b443d9aa448f.tar.gz |
[illumos-gate merge]
commit 4e4d1bad19e83eed004cbbbec13ba7d42ae7d17a
12356 Update hwdata to 2020.02.22
commit 86b2c59a1c0693176ce8e6e5347f533716a6fcb0
12354 It should not be possible to create persistent VNICs over temporary objects
commit f11c6b604a17df4ddc8c4987e50f5b8d8a945516
12364 mdb trips assertion related to autowrap
commit ebb7c6fd4f966f94af3e235242b8a39b7a53664a
12204 want driver for Mellanox ConnectX-4/5/6 NICs
commit da40b2648878aa9434c7199422846fe5a7032714
12203 FMA fault ASRUs missing FMRI annotations
commit 12eb87fbfbcd9e0abde89898daa0a87c695807e4
12205 want generic NIC transceiver fault events
commit a23b3b1bb4e08abaac9fb78fea486e678ce6d6de
12319 ipsecah/ipsecesp: smatch errors
commit ab82c29b6e890d0f1241f9cd0cefda3430f46bd5
12173 ip: variable may be used uninitialized in this function
Conflicts:
usr/src/lib/libdladm/common/libdladm.h
usr/src/lib/libdladm/common/libdladm.c
Diffstat (limited to 'usr/src/lib/libdladm')
-rw-r--r-- | usr/src/lib/libdladm/common/libdladm.c | 3 | ||||
-rw-r--r-- | usr/src/lib/libdladm/common/libdladm.h | 5 | ||||
-rw-r--r-- | usr/src/lib/libdladm/common/libdlvnic.c | 27 |
3 files changed, 26 insertions, 9 deletions
diff --git a/usr/src/lib/libdladm/common/libdladm.c b/usr/src/lib/libdladm/common/libdladm.c index 5f98de4e70..446a15893b 100644 --- a/usr/src/lib/libdladm/common/libdladm.c +++ b/usr/src/lib/libdladm/common/libdladm.c @@ -456,6 +456,9 @@ dladm_status2str(dladm_status_t status, char *buf) case DLADM_STATUS_BAD_ENCAP: s = "invalid encapsulation protocol"; break; + case DLADM_STATUS_PERSIST_ON_TEMP: + s = "can't create persistent object on top of temporary object"; + break; default: s = "<unknown error>"; break; diff --git a/usr/src/lib/libdladm/common/libdladm.h b/usr/src/lib/libdladm/common/libdladm.h index f5ae0e6ace..685356fa64 100644 --- a/usr/src/lib/libdladm/common/libdladm.h +++ b/usr/src/lib/libdladm/common/libdladm.h @@ -24,7 +24,7 @@ */ /* - * Copyright 2019 OmniOS Community Edition (OmniOSce) Association + * Copyright 2020 OmniOS Community Edition (OmniOSce) Association */ #ifndef _LIBDLADM_H @@ -185,7 +185,8 @@ typedef enum { DLADM_STATUS_INVALID_PKEY_TBL_SIZE, DLADM_STATUS_PORT_NOPROTO, DLADM_STATUS_INVALID_MTU, - DLADM_STATUS_BAD_ENCAP + DLADM_STATUS_BAD_ENCAP, + DLADM_STATUS_PERSIST_ON_TEMP } dladm_status_t; typedef enum { diff --git a/usr/src/lib/libdladm/common/libdlvnic.c b/usr/src/lib/libdladm/common/libdlvnic.c index 47d007a1e2..7ff0cd5530 100644 --- a/usr/src/lib/libdladm/common/libdlvnic.c +++ b/usr/src/lib/libdladm/common/libdlvnic.c @@ -21,6 +21,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2015, Joyent Inc. + * Copyright 2020 OmniOS Community Edition (OmniOSce) Association. */ #include <stdio.h> @@ -406,6 +407,7 @@ dladm_vnic_create(dladm_handle_t handle, const char *vnic, datalink_id_t linkid, datalink_id_t vnic_id; datalink_class_t class; uint32_t media = DL_ETHER; + uint32_t link_flags; char name[MAXLINKNAMELEN]; uchar_t tmp_addr[MAXMACADDRLEN]; dladm_status_t status; @@ -421,6 +423,15 @@ dladm_vnic_create(dladm_handle_t handle, const char *vnic, datalink_id_t linkid, if ((flags & DLADM_OPT_ACTIVE) == 0) return (DLADM_STATUS_NOTSUP); + /* + * It's an anchor VNIC - linkid must be set to DATALINK_INVALID_LINKID + * and the VLAN id must be 0 + */ + if ((flags & DLADM_OPT_ANCHOR) != 0 && + (linkid != DATALINK_INVALID_LINKID || vid != 0)) { + return (DLADM_STATUS_BADARG); + } + is_vlan = ((flags & DLADM_OPT_VLAN) != 0); if (is_vlan && ((vid < 1 || vid > 4094))) return (DLADM_STATUS_VIDINVAL); @@ -430,18 +441,20 @@ dladm_vnic_create(dladm_handle_t handle, const char *vnic, datalink_id_t linkid, if (!dladm_vnic_macaddrtype2str(mac_addr_type)) return (DLADM_STATUS_INVALIDMACADDRTYPE); - if ((flags & DLADM_OPT_ANCHOR) == 0) { - if ((status = dladm_datalink_id2info(handle, linkid, NULL, - &class, &media, NULL, 0)) != DLADM_STATUS_OK) + if (!is_etherstub) { + if ((status = dladm_datalink_id2info(handle, linkid, + &link_flags, &class, &media, NULL, 0)) != DLADM_STATUS_OK) return (status); + /* Disallow persistent objects on top of temporary ones */ + if ((flags & DLADM_OPT_PERSIST) != 0 && + (link_flags & DLMGMT_PERSIST) == 0) + return (DLADM_STATUS_PERSIST_ON_TEMP); + + /* Links cannot be created on top of these object types */ if (class == DATALINK_CLASS_VNIC || class == DATALINK_CLASS_VLAN) return (DLADM_STATUS_BADARG); - } else { - /* it's an anchor VNIC */ - if (linkid != DATALINK_INVALID_LINKID || vid != 0) - return (DLADM_STATUS_BADARG); } /* |