From nobody Thu May 16 11:42:38 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1530848299072703.2059378317009; Thu, 5 Jul 2018 20:38:19 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E90C130E4EB8; Fri, 6 Jul 2018 03:38:17 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B08112010CBF; Fri, 6 Jul 2018 03:38:17 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 66F584A469; Fri, 6 Jul 2018 03:38:17 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w663bFTC032713 for ; Thu, 5 Jul 2018 23:37:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id BB1886838B; Fri, 6 Jul 2018 03:37:15 +0000 (UTC) Received: from mx1.redhat.com (ext-mx18.extmail.prod.ext.phx2.redhat.com [10.5.110.47]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B01446838A for ; Fri, 6 Jul 2018 03:37:09 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D2FAF30820E2 for ; Fri, 6 Jul 2018 03:37:07 +0000 (UTC) Received: from localhost.localdomain ([58.56.27.130]) by mail.gmx.com (mrgmx101 [212.227.17.174]) with ESMTPSA (Nemesis) id 0LcnRD-1g08NL25F1-00k5uz; Fri, 06 Jul 2018 05:37:05 +0200 From: Shi Lei To: libvir-list@redhat.com Date: Fri, 6 Jul 2018 11:36:45 +0800 Message-Id: <1530848207-20731-2-git-send-email-shilei.massclouds@gmx.com> In-Reply-To: <1530848207-20731-1-git-send-email-shilei.massclouds@gmx.com> References: <1530848207-20731-1-git-send-email-shilei.massclouds@gmx.com> X-Provags-ID: V03:K1:TtVRosofur46wqE9vBt4PRSQQ9rAMipS0+AUjYLe9+96K9rWSY5 17J8O4JBtUV47mxcH1oPofCbH8ZNEvAPAPWzGS0N8LPUPN/Ry/IxmmTKxIJKXdVXiJcCIEC W1RBBhhIfhr97T0ZmF2X9HOVtzGR/XCeftHAJpVsZCFQC4JCCTOgbjq0ZsErWigZckAA73y rUzz952WGzR3Ibm6ZFzmw== X-UI-Out-Filterresults: notjunk:1;V01:K0:2lz06N3Pg+Q=:mUoyD9aLjSyUOc9F1HE5eT MFLMxv78Qal8hVUNEQ8u9IVEu1lb9Z+/XCEKN1LfUtU6kbo+/ZVj+PrLsS9OiBIlOudUesgx6 q9naVL1ueRuy31klu+cvV8PSDm49z52k6JeUIocy1D0fWT36lxwSUfhv8X5dE2wAGqWaDkGN1 H7MbtBcj+aWRxKit3L4Mztf2NeZrh1JiWTv9myQeO4PuzCnfphW9E7ZSdoIhFHE7pS6Mac9dx wTpLwLW+jDfsqUJptInr4Y/mnQom7F02Vx7tSMTvGOAxou3QoBgvWZyX6nKf4V4RRtd39o2gA VLQTVBpPsZbAY9eMEcFLmeuMdz5YqaaRniTVUmLp5nPBxCdV0yybPZkiCaXt3AnQBo9ia9Err 9bjT8CdnZU84xeRdO5rc6TXmcTYSWJ+ZpWhEn038idruTbS2ZdHKbfYULZTek0bgYwgCywPSI LqsTngQuI9C2LTclLevRts0GstCA+amUZhhaz+tz9DfKlwBn1BIMfznE/ccs7oQhSsoyfTcCM 2L2cXa9v30x9spkxrMVR68IX+Qs3Opi1HI3401D5S7/MlHFu5dJ6+rTcce2mjaXSF9lmAf0/L PZfZh0OJbeUmsAy9LffDTo+nKVuZ1E8oDTAxBazLkBFIW1qoWkB2yvtp/HvIi/KbmNoapH148 0TFSZypX6G6X541M8pFcYKFgDBQVqQH3aCg06b55cupgQezTc4gYC4fMdFkZ/QnOg7fszq/+U UpBxNgaZZMhKInn3bV7BDR3ExPfXM12GymWj/Tm1wrz3mD913Nb7adYnJWw= X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 207 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Fri, 06 Jul 2018 03:37:08 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Fri, 06 Jul 2018 03:37:08 +0000 (UTC) for IP:'212.227.17.22' DOMAIN:'mout.gmx.net' HELO:'mout.gmx.net' FROM:'shilei.massclouds@gmx.com' RCPT:'' X-RedHat-Spam-Score: -0.7 (FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS) 212.227.17.22 mout.gmx.net 212.227.17.22 mout.gmx.net X-Scanned-By: MIMEDefang 2.84 on 10.5.110.47 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Cc: Shi Lei Subject: [libvirt] [PATCH 1/3] add functions: load 8021q module, create/destroy vlan-dev X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.25 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Fri, 06 Jul 2018 03:38:18 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Shi Lei --- configure.ac | 5 +- src/libvirt_private.syms | 4 + src/util/virnetdev.c | 195 +++++++++++++++++++++++++++++++++++++++++++= ++++ src/util/virnetdev.h | 14 ++++ 4 files changed, 216 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 59d2d09..141d5b2 100644 --- a/configure.ac +++ b/configure.ac @@ -769,8 +769,9 @@ then fi AM_CONDITIONAL([WITH_NODE_DEVICES], [test "$with_nodedev" =3D "yes"]) =20 -dnl GET_VLAN_VID_CMD is required for virNetDevGetVLanID -AC_CHECK_DECLS([GET_VLAN_VID_CMD], [], [], [[#include ]]) +dnl GET_VLAN_VID_CMD, ADD_VLAN_CMD, DEL_VLAN_CMD is required +AC_CHECK_DECLS([GET_VLAN_VID_CMD, ADD_VLAN_CMD, DEL_VLAN_CMD], + [], [], [[#include ]]) =20 # Check for Linux vs. BSD ifreq members AC_CHECK_MEMBERS([struct ifreq.ifr_newname, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 3e30490..a61ba02 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2266,7 +2266,9 @@ virModuleLoad; =20 # util/virnetdev.h virNetDevAddMulti; +virNetDevCreateVLanDev; virNetDevDelMulti; +virNetDevDestroyVLanDev; virNetDevExists; virNetDevFeatureTypeFromString; virNetDevFeatureTypeToString; @@ -2287,10 +2289,12 @@ virNetDevGetRxFilter; virNetDevGetVirtualFunctionIndex; virNetDevGetVirtualFunctionInfo; virNetDevGetVirtualFunctions; +virNetDevGetVLanDevName; virNetDevGetVLanID; virNetDevIfStateTypeFromString; virNetDevIfStateTypeToString; virNetDevIsVirtualFunction; +virNetDevLoad8021Q; virNetDevPFGetVF; virNetDevReadNetConfig; virNetDevRunEthernetScript; diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c index c20022f..50a81d2 100644 --- a/src/util/virnetdev.c +++ b/src/util/virnetdev.c @@ -44,6 +44,7 @@ # include # include # define VIR_NETDEV_FAMILY AF_UNIX +# include "virkmod.h" #elif defined(HAVE_STRUCT_IFREQ) && defined(AF_LOCAL) # define VIR_NETDEV_FAMILY AF_LOCAL #else @@ -1048,6 +1049,200 @@ int virNetDevGetVLanID(const char *ifname ATTRIBUTE= _UNUSED, #endif /* ! SIOCGIFVLAN */ =20 =20 +#if defined(HAVE_STRUCT_IFREQ) + +# define MODULE_8021Q "8021q" +# define PROC_NET_VLAN_CONFIG "/proc/net/vlan/config" + +static int +validate8021Q(void) +{ + int fd; + if ((fd =3D open(PROC_NET_VLAN_CONFIG, O_RDONLY)) < 0) + return -1; + VIR_FORCE_CLOSE(fd); + return 0; +} + +static int +getVlanDevName(const char *ifname, unsigned int vlanid, + char vdname[], size_t vdname_size) +{ + if (!vdname || vdname_size < IFNAMSIZ) + return -1; + if (snprintf(vdname, IFNAMSIZ, "%s.%d", ifname, vlanid) >=3D IFNAMSIZ) + return -1; + return 0; +} + +static int +controlVlanDev(unsigned int cmd, + const char *ifname, unsigned int vlanid) +{ + int fd; + struct vlan_ioctl_args if_request; + memset(&if_request, 0, sizeof(struct vlan_ioctl_args)); + if_request.cmd =3D cmd; + + if (cmd =3D=3D ADD_VLAN_CMD) { + strcpy(if_request.device1, ifname); + if_request.u.VID =3D vlanid; + } else if (cmd =3D=3D DEL_VLAN_CMD) { + char vdname[IFNAMSIZ]; + if (getVlanDevName(ifname, vlanid, vdname, sizeof(vdname)) < 0) + return -1; + strcpy(if_request.device1, vdname); + } else { + virReportSystemError(ENOSYS, + _("unsupport cmd: %d"), cmd); + return -1; + } + + if ((fd =3D socket(AF_INET, SOCK_STREAM, 0)) < 0) { + virReportSystemError(errno, "%s", + _("unable to open control socket")); + return -1; + } + + if (ioctl(fd, SIOCSIFVLAN, &if_request) < 0) { + virReportSystemError(errno, "%s", + _("control VLAN device error")); + VIR_FORCE_CLOSE(fd); + return -1; + } + + VIR_FORCE_CLOSE(fd); + return 0; +} + +/** + * virNetDevLoad8021Q: + * + * Load 8021q module (since kernel v2.6) + * + * Returns 0 on success, -1 on failure + */ +int +virNetDevLoad8021Q(void) +{ + if (validate8021Q() < 0) { + char *errbuf =3D NULL; + if ((errbuf =3D virKModLoad(MODULE_8021Q, false))) { + VIR_FREE(errbuf); + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Failed to load 8021q module")); + return -1; + } + if (validate8021Q() < 0) { + virReportError(VIR_ERR_NO_SUPPORT, "%s", + _("cannot load 8021q module")); + return -1; + } + } + return 0; +} + +/** + * virNetDevCreateVLanDev: + * @ifname: name of interface we will create vlan-device on + * @vlanid: VLAN ID + * @vdname: used to return the name of vlan-device + * (it should be pre-defined on stack and its type is char[]) + * @vdname_size: size of the vlan-device's name (do not less than IFNAMSIZ) + * + * Create vlan-device which based on 8021q module. + * + * Returns 0 on success, -1 on failure + */ +int +virNetDevCreateVLanDev(const char *ifname, unsigned int vlanid, + char vdname[], size_t vdname_size) +{ + if (controlVlanDev(ADD_VLAN_CMD, ifname, vlanid) < 0) + return -1; + return getVlanDevName(ifname, vlanid, vdname, vdname_size); +} + +/** + * virNetDevDestroyVLanDev: + * @ifname: name of interface vlan-device depends on + * @vlanid: VLAN ID + * + * Destroy vlan-device whick has created by virNetDevCreateVLanDev. + * + * Returns 0 on success, -1 on failure + */ +int +virNetDevDestroyVLanDev(const char *ifname, unsigned int vlanid) +{ + if (controlVlanDev(DEL_VLAN_CMD, ifname, vlanid) < 0) + return -1; + return 0; +} + +/** + * virNetDevGetVLanDevName: + * @ifname: name of interface vlan-device depends on + * @vlanid: VLAN ID + * @vdname: used to return the name of vlan-device + * (it should be pre-defined on stack and its type is char[]) + * @vdname_size: size of the vlan-device's name (do not less than IFNAMSIZ) + * + * Get the name of the vlan-device + * + * Returns 0 on success, -1 on failure + */ +int +virNetDevGetVLanDevName(const char *ifname, unsigned int vlanid, + char vdname[], size_t vdname_size) +{ + return getVlanDevName(ifname, vlanid, vdname, vdname_size); +} + +#else /* !HAVE_STRUCT_IFREQ */ + +int +virNetDevLoad8021Q(void) +{ + virReportSystemError(ENOSYS, "%s", + _("Unable to load 8021q module on this platform")= ); + return -1; +} + +int +virNetDevCreateVLanDev(const char *ifname ATTRIBUTE_UNUSED, + unsigned int vlanid ATTRIBUTE_UNUSED, + char *vdname[] ATTRIBUTE_UNUSED, + size_t vdname_size ATTRIBUTE_UNUSED) +{ + virReportSystemError(ENOSYS, "%s", + _("Unable to create vlan-dev on this platform")); + return -1; +} + +int +virNetDevDestroyVLanDev(const char *ifname ATTRIBUTE_UNUSED, + unsigned int vlanid ATTRIBUTE_UNUSED) +{ + virReportSystemError(ENOSYS, "%s", + _("Unable to destroy vlan-dev on this platform")); + return -1; +} + +int +virNetDevGetVLanDevName(const char *ifname ATTRIBUTE_UNUSED, + unsigned int vlanid ATTRIBUTE_UNUSED, + char vdname[] ATTRIBUTE_UNUSED, + size_t vdname_size ATTRIBUTE_UNUSED) +{ + virReportSystemError(ENOSYS, "%s", + _("Unable to destroy vlan-dev on this platform")); + return -1; +} + +#endif /* HAVE_STRUCT_IFREQ */ + + /** * virNetDevValidateConfig: * @ifname: Name of the interface diff --git a/src/util/virnetdev.h b/src/util/virnetdev.h index 71eaf45..40fb6ee 100644 --- a/src/util/virnetdev.h +++ b/src/util/virnetdev.h @@ -206,6 +206,20 @@ int virNetDevGetIndex(const char *ifname, int *ifindex) int virNetDevGetVLanID(const char *ifname, int *vlanid) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; =20 +int virNetDevLoad8021Q(void) + ATTRIBUTE_RETURN_CHECK; + +int virNetDevCreateVLanDev(const char *ifname, unsigned int vlanid, + char vdname[], size_t vdname_size) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK; + +int virNetDevDestroyVLanDev(const char *ifname, unsigned int vlanid) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; + +int virNetDevGetVLanDevName(const char *ifname, unsigned int vlanid, + char vdname[], size_t vdname_size) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK; + int virNetDevGetMaster(const char *ifname, char **master) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; =20 --=20 2.7.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 16 11:42:38 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1530848264503913.6686210981322; Thu, 5 Jul 2018 20:37:44 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C924A307CF2D; Fri, 6 Jul 2018 03:37:36 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 433B67A51B; Fri, 6 Jul 2018 03:37:35 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 15B3A4A460; Fri, 6 Jul 2018 03:37:32 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w663bTRI032735 for ; Thu, 5 Jul 2018 23:37:29 -0400 Received: by smtp.corp.redhat.com (Postfix) id 985DE7A48F; Fri, 6 Jul 2018 03:37:29 +0000 (UTC) Received: from mx1.redhat.com (ext-mx13.extmail.prod.ext.phx2.redhat.com [10.5.110.42]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8BFCA7A4E0 for ; Fri, 6 Jul 2018 03:37:11 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E58963082155 for ; Fri, 6 Jul 2018 03:37:09 +0000 (UTC) Received: from localhost.localdomain ([58.56.27.130]) by mail.gmx.com (mrgmx101 [212.227.17.174]) with ESMTPSA (Nemesis) id 0LeiJ8-1ftHp62uf0-00qRZY; Fri, 06 Jul 2018 05:37:07 +0200 From: Shi Lei To: libvir-list@redhat.com Date: Fri, 6 Jul 2018 11:36:46 +0800 Message-Id: <1530848207-20731-3-git-send-email-shilei.massclouds@gmx.com> In-Reply-To: <1530848207-20731-1-git-send-email-shilei.massclouds@gmx.com> References: <1530848207-20731-1-git-send-email-shilei.massclouds@gmx.com> X-Provags-ID: V03:K1:f0sCB4Vuw8gXziUJaMzzyjRsQpldh8y1meydpwNHjmo0saMyri0 xpufAS7X+ugidppxKjsusgq09xXruM1vLsvPJYVvIn/JvrT/O+HdGEhdNx7a6VlJjpHXYqJ Oe6BjslDL36atO9C6C+7YZ+l1uoimybr8w9PxPEzPyjbLYEjpDjrl6f7lu+O7dKO05fQqXU 02JGuPwzcBS4ZlAtpNx0Q== X-UI-Out-Filterresults: notjunk:1;V01:K0:q/cNNMAqtDA=:TSvH2ngEHnV8qi+myGHjel Abq9vMQKrSXVb8O7/gt3PssVPweV0w/C3KBI0rK7FigqSPg/mihVEA2bsPyrVdRtyFuG/BQbE s+4OV0oROHoBDD1az+AIYlUM+346ZjTJ0bytoG60I1TdzDz2DKJtMzLR4DPNpiUGq0Jjd4+ww ELH+ts4bBnk1qhmydBuVtRkIUZWH37CRJ2ULB/QyYkcSUDlxaGKjZVfnBpn0ay+qcoPsaboNH 2qFikan3D/L6jbl5J9VRRHZBUrxiQFr8XBT8nOdqkWn4/ia2vkl3QJZEKXxJzuKXZcE/F6ML8 E7hmoOD7hO+JPOX25e5nCDTb+j4UDqpSOUg1Wh+lg1L85O1622sIyJIJu6GveykjIjxylf6jN hWx/Yvr9GpssqgX+vC521iR92NTQUXvU7s86Xzxsb+ij0qVth7ThSqv4jf1PmGMV+oo0w98LU P2v17OX7zyPN6wAw+XU1c54vNj66BeqqvnsOy37/6veZU8nzXGzQrXY9ZDBauSQrgjLJiRLk8 WZuKOpK1+a+DZ3VbtX3Wdj9iJ7Do2fCqbBqIfdyFiHB++rlnPnm2x4RrQI8qjcIw5no3+n/WQ XAwp1dAYiIHeUYAKUmn7pX6twqqnFrFqi9jDWkeOV8xdyxnmu9hlSJSnEsJ9vXaUtVNKKyrU7 Me8y1LbIhJoMFDWAuPaHGzJTWJwiLwDX51TaPstjKay2aOVOfAaAAttmSDTFsBpZ0TJJKX/zK 3ppzpeHzlwXR9JRu0QVBJL0zFKhEjMAD6s6aL9KFscclIWRV0RCuDgNOBv4= X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 207 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Fri, 06 Jul 2018 03:37:10 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Fri, 06 Jul 2018 03:37:10 +0000 (UTC) for IP:'212.227.17.20' DOMAIN:'mout.gmx.net' HELO:'mout.gmx.net' FROM:'shilei.massclouds@gmx.com' RCPT:'' X-RedHat-Spam-Score: -0.7 (FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS) 212.227.17.20 mout.gmx.net 212.227.17.20 mout.gmx.net X-Scanned-By: MIMEDefang 2.84 on 10.5.110.42 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Cc: Shi Lei Subject: [libvirt] [PATCH 2/3] support new forward mode of vlan for virtual network X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Fri, 06 Jul 2018 03:37:40 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Shi Lei --- src/conf/network_conf.c | 12 ++++--- src/conf/network_conf.h | 1 + src/network/bridge_driver.c | 80 +++++++++++++++++++++++++++++++++++++++++= ---- 3 files changed, 82 insertions(+), 11 deletions(-) diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 630a87f..6e1de6c 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -50,7 +50,7 @@ VIR_ENUM_IMPL(virNetworkForward, VIR_NETWORK_FORWARD_LAST, "none", "nat", "route", "open", "bridge", "private", "vepa", "passthrough", - "hostdev") + "hostdev", "vlan") =20 VIR_ENUM_IMPL(virNetworkBridgeMACTableManager, VIR_NETWORK_BRIDGE_MAC_TABLE_MANAGER_LAST, @@ -1876,6 +1876,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) */ switch (def->forward.type) { case VIR_NETWORK_FORWARD_NONE: + case VIR_NETWORK_FORWARD_VLAN: break; =20 case VIR_NETWORK_FORWARD_ROUTE: @@ -1963,9 +1964,10 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) (def->forward.type !=3D VIR_NETWORK_FORWARD_NONE && def->forward.type !=3D VIR_NETWORK_FORWARD_NAT && def->forward.type !=3D VIR_NETWORK_FORWARD_ROUTE && - def->forward.type !=3D VIR_NETWORK_FORWARD_OPEN)) { + def->forward.type !=3D VIR_NETWORK_FORWARD_OPEN && + def->forward.type !=3D VIR_NETWORK_FORWARD_VLAN)) { virReportError(VIR_ERR_XML_ERROR, - _("mtu size only allowed in open, route, nat, " + _("mtu size only allowed in open, route, nat, vlan " "and isolated mode, not in %s (network '%s')"), virNetworkForwardTypeToString(def->forward.type), def->name); @@ -2474,6 +2476,7 @@ virNetworkDefFormatBuf(virBufferPtr buf, def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT || def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE || def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN || + def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN || def->bridge || def->macTableManager) { =20 virBufferAddLit(buf, "forward.type =3D=3D VIR_NETWORK_FORWARD_NONE || def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT || def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE || - def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN) { + def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN || + def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN) { virBufferAsprintf(buf, " stp=3D'%s' delay=3D'%ld'", def->stp ? "on" : "off", def->delay); } diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h index 54c8ed1..47bb83e 100644 --- a/src/conf/network_conf.h +++ b/src/conf/network_conf.h @@ -53,6 +53,7 @@ typedef enum { VIR_NETWORK_FORWARD_VEPA, VIR_NETWORK_FORWARD_PASSTHROUGH, VIR_NETWORK_FORWARD_HOSTDEV, + VIR_NETWORK_FORWARD_VLAN, =20 VIR_NETWORK_FORWARD_LAST, } virNetworkForwardType; diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index da3c32e..314f78c 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -451,6 +451,7 @@ networkUpdateState(virNetworkObjPtr obj, case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case VIR_NETWORK_FORWARD_VLAN: /* If bridge doesn't exist, then mark it inactive */ if (!(def->bridge && virNetDevExists(def->bridge) =3D=3D 1)) virNetworkObjSetActive(obj, false); @@ -2092,7 +2093,8 @@ networkRefreshDaemonsHelper(virNetworkObjPtr obj, ((def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE) || (def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT) || (def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE) || - (def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN))) { + (def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN) || + (def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN))) { /* Only the three L3 network types that are configured by * libvirt will have a dnsmasq or radvd daemon associated * with them. Here we send a SIGHUP to an existing @@ -2131,7 +2133,8 @@ networkReloadFirewallRulesHelper(virNetworkObjPtr obj, if (virNetworkObjIsActive(obj) && ((def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE) || (def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT) || - (def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE))) { + (def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE) || + (def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN))) { /* Only three of the L3 network types that are configured by * libvirt need to have iptables rules reloaded. The 4th L3 * network type, forward=3D'open', doesn't need this because it @@ -2513,6 +2516,27 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr = driver, if (virNetDevBandwidthSet(def->bridge, def->bandwidth, true, true) < 0) goto err5; =20 + if (def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN) { + char vlanDevName[IFNAMSIZ]; + /* ifs[0].device.dev and vlan.tag[0] have been validated in networ= kValidate() */ + if (virNetDevCreateVLanDev(def->forward.ifs[0].device.dev, def->vl= an.tag[0], + vlanDevName, sizeof(vlanDevName)) < 0) + goto err5; + + if (virNetDevBridgeAddPort(def->bridge, vlanDevName) < 0) { + ignore_value(virNetDevDestroyVLanDev(def->forward.ifs[0].devic= e.dev, + def->vlan.tag[0])); + goto err5; + } + + if (virNetDevSetOnline(vlanDevName, true) < 0) { + ignore_value(virNetDevBridgeRemovePort(def->bridge, vlanDevNam= e)); + ignore_value(virNetDevDestroyVLanDev(def->forward.ifs[0].devic= e.dev, + def->vlan.tag[0])); + goto err5; + } + } + VIR_FREE(macTapIfName); VIR_FREE(macMapFile); =20 @@ -2576,6 +2600,18 @@ networkShutdownNetworkVirtual(virNetworkDriverStateP= tr driver, pid_t radvdPid; pid_t dnsmasqPid; =20 + if (def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN) { + char vlanDevName[IFNAMSIZ]; + ignore_value(virNetDevGetVLanDevName(def->forward.ifs[0].device.de= v, + def->vlan.tag[0], + vlanDevName, sizeof(vlanDevNa= me))); + + ignore_value(virNetDevSetOnline(vlanDevName, false)); + ignore_value(virNetDevBridgeRemovePort(def->bridge, vlanDevName)); + ignore_value(virNetDevDestroyVLanDev(def->forward.ifs[0].device.de= v, + def->vlan.tag[0])); + } + if (def->bandwidth) virNetDevBandwidthClear(def->bridge); =20 @@ -2719,6 +2755,7 @@ networkCreateInterfacePool(virNetworkDefPtr netdef) case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case VIR_NETWORK_FORWARD_VLAN: case VIR_NETWORK_FORWARD_LAST: /* by definition these will never be encountered here */ break; @@ -2817,6 +2854,7 @@ networkStartNetwork(virNetworkDriverStatePtr driver, case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case VIR_NETWORK_FORWARD_VLAN: if (networkStartNetworkVirtual(driver, obj) < 0) goto cleanup; break; @@ -2899,6 +2937,7 @@ networkShutdownNetwork(virNetworkDriverStatePtr drive= r, case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case VIR_NETWORK_FORWARD_VLAN: ret =3D networkShutdownNetworkVirtual(driver, obj); break; =20 @@ -3276,7 +3315,8 @@ networkValidate(virNetworkDriverStatePtr driver, if (def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE || def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT || def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE || - def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN) { + def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN || + def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN) { =20 /* if no bridge name was given in the config, find a name * unused by any other libvirt networks and assign it. @@ -3447,7 +3487,8 @@ networkValidate(virNetworkDriverStatePtr driver, * a pool, and those using an Open vSwitch bridge. */ =20 - vlanAllowed =3D (def->forward.type =3D=3D VIR_NETWORK_FORWARD_HOSTDEV = || + vlanAllowed =3D (def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN || + def->forward.type =3D=3D VIR_NETWORK_FORWARD_HOSTDEV || def->forward.type =3D=3D VIR_NETWORK_FORWARD_PASSTHROUG= H || (def->forward.type =3D=3D VIR_NETWORK_FORWARD_BRIDGE && def->virtPortProfile && @@ -3530,6 +3571,28 @@ networkValidate(virNetworkDriverStatePtr driver, } } } + + if (def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN) { + if (virNetDevLoad8021Q() < 0) + return -1; + + if (def->forward.nifs !=3D 1 || + strlen(def->forward.ifs[0].device.dev) =3D=3D 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("invalid dev in " + "of network '%s' with forward mode=3D'%s'"), + def->name, virNetworkForwardTypeToString(def->f= orward.type)); + return -1; + } + if (def->vlan.nTags !=3D 1 || def->vlan.tag[0] >=3D 4096) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unsupported vlan config. check " + "of network '%s' with forward mode=3D'%s'"), + def->name, virNetworkForwardTypeToString(def->f= orward.type)); + return -1; + } + } + return 0; } =20 @@ -3757,7 +3820,8 @@ networkUpdate(virNetworkPtr net, */ if (def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE || def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT || - def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE) { + def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE || + def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN) { switch (section) { case VIR_NETWORK_SECTION_FORWARD: case VIR_NETWORK_SECTION_FORWARD_INTERFACE: @@ -4443,7 +4507,8 @@ networkAllocateActualDevice(virDomainDefPtr dom, if ((netdef->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE) || (netdef->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT) || (netdef->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE) || - (netdef->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN)) { + (netdef->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN) || + (netdef->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN)) { /* for these forward types, the actual net type really *is* * NETWORK; we just keep the info from the portgroup in * iface->data.network.actual @@ -4701,7 +4766,8 @@ networkAllocateActualDevice(virDomainDefPtr dom, * mode) and openvswitch bridges. Otherwise log an error and * fail */ - if (!(actualType =3D=3D VIR_DOMAIN_NET_TYPE_HOSTDEV || + if (!(netdef->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN || + actualType =3D=3D VIR_DOMAIN_NET_TYPE_HOSTDEV || (actualType =3D=3D VIR_DOMAIN_NET_TYPE_DIRECT && virDomainNetGetActualDirectMode(iface) =3D=3D VIR_NETDEV_MACVLAN_MODE_PASSTHRU) || --=20 2.7.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 16 11:42:38 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1530848294884742.382598576649; Thu, 5 Jul 2018 20:38:14 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 89427307C706; Fri, 6 Jul 2018 03:38:13 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4DFC917B21; Fri, 6 Jul 2018 03:38:13 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 06AEA4A464; Fri, 6 Jul 2018 03:38:13 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w663bFcE032704 for ; Thu, 5 Jul 2018 23:37:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id 5B4F017786; Fri, 6 Jul 2018 03:37:15 +0000 (UTC) Received: from mx1.redhat.com (ext-mx17.extmail.prod.ext.phx2.redhat.com [10.5.110.46]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5231D171DB for ; Fri, 6 Jul 2018 03:37:13 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 425BC30E687E for ; Fri, 6 Jul 2018 03:37:11 +0000 (UTC) Received: from localhost.localdomain ([58.56.27.130]) by mail.gmx.com (mrgmx101 [212.227.17.174]) with ESMTPSA (Nemesis) id 0MPppG-1fWLby3vkY-004yGK; Fri, 06 Jul 2018 05:37:09 +0200 From: Shi Lei To: libvir-list@redhat.com Date: Fri, 6 Jul 2018 11:36:47 +0800 Message-Id: <1530848207-20731-4-git-send-email-shilei.massclouds@gmx.com> In-Reply-To: <1530848207-20731-1-git-send-email-shilei.massclouds@gmx.com> References: <1530848207-20731-1-git-send-email-shilei.massclouds@gmx.com> X-Provags-ID: V03:K1:rSt7GDUM8JJ38DPi/a+lkTRsdcE/CL8653aaxGeOf3iiBXLypZW 1nFnD1Dt2/EOZ3RgL/CssPyaw1IW+pvTEABkKhcro0CprCbr10c5hUr39/mlMacCoA+sClt RcvLy4T/9yyxBj3nCDLaeSJMw9qSfkRwh8TDl/BgnPR0N0kfPDU8jpU/to1DoHvlJevMPb9 7ENMjO/shLxDA5aJ0jCcA== X-UI-Out-Filterresults: notjunk:1;V01:K0:8MUhUbeeLgk=:IlAc2iXrXfskw8qMf9Mz2m zK8Vzk75oD1See25vyZqRcg+7sjDqcKRadbleCxZuiv7vLXnKvFGUjgUYRADu3B/+YysQVsNd 34jOE5k6K2qxPmJZjgYX8AKxryADx/kvZ4oTYGAqbeasYzyG3pJeyYPRLYLTR9vhGMT/2/NvC h0k3LdkLZjzcmIJJ6NVsgGw3rDSx0ajBUrhL2X6z1+/fF+aIthd1SyLgiJ6rlVXS5tfIFN7ut iWExxz0P+FVu5/Q6NqlNMmcHG2O1IXb118/dF2ZGZnTNQJ5Sx+DpR+kYGqcNATrto1fgKEuml UMGgV92rz3ykltRi7KDCz70/L9b84IZ9oZCXetiN9TE6N6GXg+tluXpThg/8brS//soIGndue 3Izbw3OYo3+zaeftAWnuZPDTnDSQ+IMONr2kABV6j37pA/dtdE15oK2kf6/cvX8xJExumvTRd R+GewUBhuhAYROkTzqj4pwSiCWnLT01vj5rOJQ14UsxA71BLd/aGddkq23h+Ad0QPkIssN31m riXhP99asSTQpmNgSwoYJvGGa6rkZwWgKk0ED+0Ow8QRchBmmiW4hXgSciXkjbvrmCVWvoSkv +uwHAzbpNSrugYL14WJHvnuQNTLnWoFa8ooGe7CfMhxjsxyBQ2eWWXfh4XOh7QNl9KDZqZaoX DcAWSQsHfekDVfbKmBjJJSftmo7Qwqey9xvam//OjkbaPfcEcwPL1vB4t6oMFdkZs9XUGoi4Z f9h3PShmE/MGF/dCKop2+CZHIoOu0srk6F0ypYzSTpJP6Vm870eLoWmimzY= X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 207 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Fri, 06 Jul 2018 03:37:11 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Fri, 06 Jul 2018 03:37:11 +0000 (UTC) for IP:'212.227.17.20' DOMAIN:'mout.gmx.net' HELO:'mout.gmx.net' FROM:'shilei.massclouds@gmx.com' RCPT:'' X-RedHat-Spam-Score: -0.7 (FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS) 212.227.17.20 mout.gmx.net 212.227.17.20 mout.gmx.net X-Scanned-By: MIMEDefang 2.84 on 10.5.110.46 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-loop: libvir-list@redhat.com Cc: Shi Lei Subject: [libvirt] [PATCH 3/3] fix other functions to add VIR_NETWORK_FORWARD_VLAN X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Fri, 06 Jul 2018 03:38:14 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Shi Lei --- src/conf/domain_conf.c | 1 + src/conf/virnetworkobj.c | 1 + src/qemu/qemu_process.c | 1 + 3 files changed, 3 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index f4e59f6..bd8b050 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -29912,6 +29912,7 @@ virDomainNetResolveActualType(virDomainNetDefPtr if= ace) if ((def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE) || (def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT) || (def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE) || + (def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN) || (def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN)) { /* for these forward types, the actual net type really *is* * NETWORK; we just keep the info from the portgroup in diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index e00c8a7..3869021 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -1012,6 +1012,7 @@ virNetworkLoadConfig(virNetworkObjListPtr nets, if (def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE || def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT || def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE || + def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN || def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN) { =20 if (!def->mac_specified) { diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 40d35cb..0e3e1af 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4434,6 +4434,7 @@ qemuProcessGetNetworkAddress(const char *netname, case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case VIR_NETWORK_FORWARD_VLAN: ipdef =3D virNetworkDefGetIPByIndex(netdef, AF_UNSPEC, 0); if (!ipdef) { virReportError(VIR_ERR_INTERNAL_ERROR, --=20 2.7.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list