From nobody Fri Apr 26 19:00:14 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 1534230079934483.7012249985265; Tue, 14 Aug 2018 00:01:19 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5A1EC30001E5; Tue, 14 Aug 2018 07:01:17 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 76BD770A18; Tue, 14 Aug 2018 07:01:16 +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 DFD9718037EF; Tue, 14 Aug 2018 07:01:15 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w7E71E0G004968 for ; Tue, 14 Aug 2018 03:01:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id A925B10694D7; Tue, 14 Aug 2018 07:01:14 +0000 (UTC) Received: from mx1.redhat.com (ext-mx19.extmail.prod.ext.phx2.redhat.com [10.5.110.48]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9F68210694E1 for ; Tue, 14 Aug 2018 07:01:14 +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 D9A4F307D861 for ; Tue, 14 Aug 2018 07:01:07 +0000 (UTC) Received: from localhost.localdomain ([58.56.27.130]) by mail.gmx.com (mrgmx101 [212.227.17.174]) with ESMTPSA (Nemesis) id 0MUDXS-1fOQ0w2Zes-00R0Wo; Tue, 14 Aug 2018 09:01:06 +0200 From: Shi Lei To: libvir-list@redhat.com Date: Tue, 14 Aug 2018 15:00:50 +0800 Message-Id: <1534230052-10359-2-git-send-email-shilei.massclouds@gmx.com> In-Reply-To: <1534230052-10359-1-git-send-email-shilei.massclouds@gmx.com> References: <1534230052-10359-1-git-send-email-shilei.massclouds@gmx.com> X-Provags-ID: V03:K1:pN/VexoGPG7IArNLIuA15a3R+oEPrW4H6qKcrlYRrrQg48Pjp7F DEIp3C7jz187zVtcxTEjPMqot3BzYMRKH3S/BZ88SzvHHnVVKCLHiD26vt88DrHHh64Qgpt 6xRDwOK33Xls7AWdLHXlj8y8tDAMxTgF8AdFm344oYAJS6a1dP/R0HC3JHa1Wb55G7kxfCl nAwc6LzCIuirOCDVqNczg== X-UI-Out-Filterresults: notjunk:1;V01:K0:+Kn03a+VXWw=:SBj2j9biKppXXcSiFCpjEl T55YIq5+daX44j+pMhMLOxN6WRmdcFTlhDsNjG1bqKJ0EFdUtg1OvNrA6d+bTHILS91qLT4Q+ rk4k8tzZAtQ0PyXJ/Ra9s/TODLJp3NQqft5YL3dMUCjbetPz4EVx/ProZgk09bIIjDNr2aTZq +UJqvehH70XPNZeCK5IpQl2KgEIsI2GlZezjIsmJrgjCT2XIaqMCleRISYrC6jHWJ49zJWEzM wJkMT+FAihRj4cUq9DTZhkFcaKRl6Q7X6LDHQ6UPqSe5kDkeyLUxh/hJLyRNWWJ6kexJnzouA 4Twh1TlOQwIUnO/WTy6/Hssdz8Hmhv+7GFWctZkpuXQeIm4Er+9lFwnPIJjcxGIvEfVM1CmZq A9MSJPFq+xavEyzDXE2Ro/oShSpRDqcbzpaHcT2dZNWVfXlg6eSdv/dolw9Ot1ufpAXZr9NHD dEXZVZE7vqrMvz/syyb3ry6EWgnBbf14VYwGZsX6sVpI957l8xZAPsulqo83OW/UiTHmqVAQf dtULVYX1K2ofMDXXkIUJt8LjL1VSsNBgr0OSo8D9BNFSRg7WmupO+OGBaL7qZPaL/Y6vf6yNv P9HKD8DKChQzkndeRJiIGjACF4ZofeMIUMvYQSM1O+l1wjpspEuKZ2gY4261aTDBS7tSMptA8 5q1gdfflNO0ihoUxArkIjJYS7a/UlDvE3A6f9mADiczzMMonqWqrFNzuh1VDHUyEIj9TZmsFf Zqx5BoiX6CIW36WU9EK1hhXIxw7WgmIA/ixAtdRfp4gt59V6LRqQZwKd0Pc= X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 212 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.48]); Tue, 14 Aug 2018 07:01:08 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.48]); Tue, 14 Aug 2018 07:01:08 +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.48 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com Cc: Shi Lei Subject: [libvirt] [PATCHv2 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.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Tue, 14 Aug 2018 07:01: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 | 6 ++ src/libvirt_private.syms | 4 + src/util/virnetdev.c | 203 +++++++++++++++++++++++++++++++++++++++++++= ++++ src/util/virnetdev.h | 18 +++++ 4 files changed, 231 insertions(+) diff --git a/configure.ac b/configure.ac index da940e3..5f2ea12 100644 --- a/configure.ac +++ b/configure.ac @@ -784,6 +784,12 @@ AM_CONDITIONAL([WITH_NODE_DEVICES], [test "$with_noded= ev" =3D "yes"]) dnl GET_VLAN_VID_CMD is required for virNetDevGetVLanID AC_CHECK_DECLS([GET_VLAN_VID_CMD], [], [], [[#include ]]) =20 +dnl ADD_VLAN_CMD is required for virNetDevCreateVLanDev +AC_CHECK_DECLS([ADD_VLAN_CMD], [], [], [[#include ]]) + +dnl DEL_VLAN_CMD is required for virNetDevDestroyVLanDev +AC_CHECK_DECLS([DEL_VLAN_CMD], [], [], [[#include ]]) + # Check for Linux vs. BSD ifreq members AC_CHECK_MEMBERS([struct ifreq.ifr_newname, struct ifreq.ifr_ifindex, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index ca4a192..f41fa43 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2267,7 +2267,9 @@ virModuleLoad; =20 # util/virnetdev.h virNetDevAddMulti; +virNetDevCreateVLanDev; virNetDevDelMulti; +virNetDevDestroyVLanDev; virNetDevExists; virNetDevFeatureTypeFromString; virNetDevFeatureTypeToString; @@ -2288,10 +2290,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 8eac419..5425a41 100644 --- a/src/util/virnetdev.c +++ b/src/util/virnetdev.c @@ -43,6 +43,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 @@ -1054,6 +1055,208 @@ 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 +controlVlanDev(unsigned int cmd, + const char *ifname, + unsigned int vlanid, + const char *vdname) +{ + int fd; + struct vlan_ioctl_args if_request; + + if (!ifname || strlen(ifname) =3D=3D 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Interface name not provided")); + return -1; + } + + memset(&if_request, 0, sizeof(struct vlan_ioctl_args)); + if_request.cmd =3D cmd; + if (cmd =3D=3D ADD_VLAN_CMD) { + /* for vlan_ioctl_args.devices1[24] */ + if (strlen(ifname) > 24) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Interface name '%s' too long"), + ifname); + return -1; + } + strcpy(if_request.device1, ifname); + if_request.u.VID =3D vlanid; + } else if (cmd =3D=3D DEL_VLAN_CMD) { + if (!vdname) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("vlan-device name not provided")); + return -1; + } + /* for vlan_ioctl_args.devices1[24] */ + if (strlen(vdname) > 24) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("vlan-device name '%s' too long"), + vdname); + return -1; + } + strcpy(if_request.device1, vdname); + } else { + virReportSystemError(ENOSYS, + _("unsupported command option: %d"), + cmd); + return -1; + } + + if ((fd =3D socket(AF_INET, SOCK_STREAM, 0)) < 0) { + virReportSystemError(errno, "%s", + _("unable to open VLAN 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; +} + + +/** + * virNetDevGetVLanDevName: + * @ifname: name of interface vlan-device depends on + * @vlanid: VLAN ID + * @vdname: used to return the name of vlan-device + * + * Get the name of the vlan-device + * + * Returns 0 on success, -1 on failure + */ +int +virNetDevGetVLanDevName(const char *ifname, unsigned int vlanid, char **vd= name) +{ + if (!ifname || strlen(ifname) =3D=3D 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Interface name not provided")); + return -1; + } + if (virAsprintf(vdname, "%s.%d", ifname, vlanid) < 0) + return -1; + return 0; +} + + +/** + * virNetDevLoad8021Q: + * + * Load 8021q module (since kernel v2.6) + * + * Returns 0 on success, -1 on failure + */ +int +virNetDevLoad8021Q(void) +{ + if (!virFileExists(PROC_NET_VLAN_CONFIG)) { + VIR_AUTOFREE(char *) errbuf =3D NULL; + if ((errbuf =3D virKModLoad(MODULE_8021Q, false))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Failed to load 8021q module")); + return -1; + } + if (!virFileExists(PROC_NET_VLAN_CONFIG)) { + 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 + * + * Create vlan-device which based on 8021q module. + * + * Returns 0 on success, -1 on failure + */ +int +virNetDevCreateVLanDev(const char *ifname, unsigned int vlanid, char **vdn= ame) +{ + if (controlVlanDev(ADD_VLAN_CMD, ifname, vlanid, NULL) < 0) + return -1; + return virNetDevGetVLanDevName(ifname, vlanid, vdname); +} + + +/** + * virNetDevDestroyVLanDev: + * @ifname: name of interface vlan-device depends on + * @vlanid: VLAN ID + * @vdname: the name of vlan-device + * + * Destroy vlan-device whick has created by virNetDevCreateVLanDev. + */ +void +virNetDevDestroyVLanDev(const char *ifname, + unsigned int vlanid, + const char *vdname) +{ + ignore_value(controlVlanDev(DEL_VLAN_CMD, ifname, vlanid, vdname)); +} + +#else /* !HAVE_STRUCT_IFREQ */ + +int +virNetDevGetVLanDevName(const char *ifname ATTRIBUTE_UNUSED, + unsigned int vlanid ATTRIBUTE_UNUSED, + char **vdname ATTRIBUTE_UNUSED) +{ + virReportSystemError(ENOSYS, "%s", + _("Unable to get vlan-dev name on this platform")= ); + return -1; +} + + +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) +{ + virReportSystemError(ENOSYS, "%s", + _("Unable to create vlan-dev on this platform")); + return -1; +} + + +void +virNetDevDestroyVLanDev(const char *ifname ATTRIBUTE_UNUSED, + unsigned int vlanid ATTRIBUTE_UNUSED, + const char *vdname ATTRIBUTE_UNUSED) +{ + virReportSystemError(ENOSYS, "%s", + _("Unable to destroy vlan-dev on this platform")); +} + +#endif /* HAVE_STRUCT_IFREQ */ + + /** * virNetDevValidateConfig: * @ifname: Name of the interface diff --git a/src/util/virnetdev.h b/src/util/virnetdev.h index 8860ea1..d1fb58e 100644 --- a/src/util/virnetdev.h +++ b/src/util/virnetdev.h @@ -207,6 +207,24 @@ 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 virNetDevGetVLanDevName(const char *ifname, + unsigned int vlanid, + char **vdname) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK; + +int virNetDevLoad8021Q(void) + ATTRIBUTE_RETURN_CHECK; + +int virNetDevCreateVLanDev(const char *ifname, + unsigned int vlanid, + char **vdname) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK; + +void virNetDevDestroyVLanDev(const char *ifname, + unsigned int vlanid, + const char *vdname) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3); + 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 Fri Apr 26 19:00:14 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 1534230091006366.931173807508; Tue, 14 Aug 2018 00:01:31 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9A0E83082129; Tue, 14 Aug 2018 07:01:28 +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 ECE093001A51; Tue, 14 Aug 2018 07:01:27 +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 773E64A465; Tue, 14 Aug 2018 07:01:27 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w7E71G4G005007 for ; Tue, 14 Aug 2018 03:01:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 350683001647; Tue, 14 Aug 2018 07:01:16 +0000 (UTC) Received: from mx1.redhat.com (ext-mx20.extmail.prod.ext.phx2.redhat.com [10.5.110.49]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2BD483001648 for ; Tue, 14 Aug 2018 07:01:13 +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 53EFC3086247 for ; Tue, 14 Aug 2018 07:01:10 +0000 (UTC) Received: from localhost.localdomain ([58.56.27.130]) by mail.gmx.com (mrgmx101 [212.227.17.174]) with ESMTPSA (Nemesis) id 0MgGDK-1fTvnR1m6g-00Nf14; Tue, 14 Aug 2018 09:01:09 +0200 From: Shi Lei To: libvir-list@redhat.com Date: Tue, 14 Aug 2018 15:00:51 +0800 Message-Id: <1534230052-10359-3-git-send-email-shilei.massclouds@gmx.com> In-Reply-To: <1534230052-10359-1-git-send-email-shilei.massclouds@gmx.com> References: <1534230052-10359-1-git-send-email-shilei.massclouds@gmx.com> X-Provags-ID: V03:K1:yZ7qbJsXz+4YOuC5WcXyYyPEHmBlu+SdHENPQ6dO7BqCCENy56D Z0P66jgFOMfxxRCLgL6TgdDJwazFs69ZSpbAxD/PEVcvquUEokyVtS7GYmI1KfoWRdcDv1f TkgLHSRmP8daE/9l0ilyebTVXVTAgLqIW+Q0dHsmvDuGTH6YHTaf2zfmohSWWwkpQGI0QBM Q7OprE5eE6NvjldCT4tqQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:Qt6ZdoRGm4E=:YCRkjuOggaEkkGesFhYRrp lkEAch8z1rHMFWBoGcc2YRuyCio1u6R3IoJsPhjqXBkGjCrqharHSFCqZQm9FOtidx+plfWGH tGoWwYehErMvAICo0hJgF93J0AWUoo3ow7k4BV1EGU6MnhkFNENqA+ng6eyg6FanTJEyea8dA mlIFWVH4IHLoFhL/VGmC1ycJNk4FiISTtH4iYrf37gtDCRQif1YH4vVotkveFastG1hg+QeR/ 3RrkzB6608HR8CLC0e9KFe81c/bfV3CbGZbFZzbTHeyrSCt0+RWkx4nDxLvpbyFKkMIxshFqJ 6T7aXWniA/WD9jmmTW8/3On8Cev7+V78I/QbEj/TkKLdBbI7EpOFy+5KRpzj0kOC1Lc8bFLX2 7R/chk3vwpG4DccwQJvb0AWZaAFWY8azMU5jcGJThVepGPlyihhUbJbqurbSfwhMzTKHilB+A H2z9wICJPYUci6C7uB4L2cJtJyBZoCPC1TgMLVcObd/Vn6V1BGzIZG8uWNyJrdsxAmsh5AFHf qLuG0Wck+Mconn20j/O/amzocfV/eGnh887Dmtq14fEqg/ufrwQFW/ATB98/apVgsCeCo6+kF LbFB0rJhZ52P7gpdGy4Qfg0kwA+jN3bghPVTc1je65LUIal1u6Ku9oFJsMsD8UI+KnNX/Qvyt ENhbAukfnDSYKvd//aBTZiZHJAQtJbciUujmtO+RnRA2rzJ+DiUuWHo/5B7+8efYktH1TBZ/4 SkllG6CitwBxQUEZx2C6Ct4WEc4+1ZZem1J5FXB1GaSavCN0NDK35vgRX/w= X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 212 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Tue, 14 Aug 2018 07:01:11 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Tue, 14 Aug 2018 07:01:11 +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.49 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.26 X-loop: libvir-list@redhat.com Cc: Shi Lei Subject: [libvirt] [PATCHv2 2/3] support new forward mode '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.84 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Tue, 14 Aug 2018 07:01:29 +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/network_conf.c | 24 +++++++++++++++++-- src/conf/network_conf.h | 1 + src/conf/virnetworkobj.c | 1 + src/esx/esx_network_driver.c | 1 + src/network/bridge_driver.c | 55 ++++++++++++++++++++++++++++++++++++++++= ++-- src/qemu/qemu_process.c | 1 + 7 files changed, 80 insertions(+), 4 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 77cc737..0b6d247 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -30369,6 +30369,7 @@ virDomainNetResolveActualType(virDomainNetDefPtr if= ace) case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case 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 diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index c08456b..cb51c7b 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, @@ -1914,6 +1914,24 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) } break; =20 + case VIR_NETWORK_FORWARD_VLAN: + if (def->forward.nifs !=3D 1 || + strlen(def->forward.ifs[0].device.dev) =3D=3D 0) { + virReportError(VIR_ERR_XML_ERROR, + _("network '%s' in forward mode 'vlan' requests= " + "one and only one interface"), + def->name); + goto error; + } + if (def->vlan.nTags !=3D 1 || def->vlan.tag[0] >=3D 4096) { + virReportError(VIR_ERR_XML_ERROR, + _("network '%s' in forward mode 'vlan' requests= " + "one and only one VLan-Tag"), + def->name); + goto error; + } + break; + case VIR_NETWORK_FORWARD_PRIVATE: case VIR_NETWORK_FORWARD_VEPA: case VIR_NETWORK_FORWARD_PASSTHROUGH: @@ -1970,6 +1988,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case VIR_NETWORK_FORWARD_VLAN: break; =20 case VIR_NETWORK_FORWARD_BRIDGE: @@ -1978,7 +1997,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) case VIR_NETWORK_FORWARD_PASSTHROUGH: case VIR_NETWORK_FORWARD_HOSTDEV: virReportError(VIR_ERR_XML_ERROR, - _("mtu size only allowed in open, route, nat, " + _("mtu size only allowed in open, route, nat, v= lan " "and isolated mode, not in %s (network '%s')"= ), virNetworkForwardTypeToString(def->forward.type= ), def->name); @@ -2494,6 +2513,7 @@ virNetworkDefFormatBuf(virBufferPtr buf, case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case VIR_NETWORK_FORWARD_VLAN: hasbridge =3D true; break; =20 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/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index b13e5a7..fd5c268 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -1014,6 +1014,7 @@ virNetworkLoadConfig(virNetworkObjListPtr nets, case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case VIR_NETWORK_FORWARD_VLAN: if (!def->mac_specified) { virNetworkSetBridgeMacAddr(def); virNetworkSaveConfig(configDir, def); diff --git a/src/esx/esx_network_driver.c b/src/esx/esx_network_driver.c index 31bceb7..8f91ae9 100644 --- a/src/esx/esx_network_driver.c +++ b/src/esx/esx_network_driver.c @@ -334,6 +334,7 @@ esxNetworkDefineXML(virConnectPtr conn, const char *xml) case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case VIR_NETWORK_FORWARD_VLAN: case VIR_NETWORK_FORWARD_PRIVATE: case VIR_NETWORK_FORWARD_VEPA: case VIR_NETWORK_FORWARD_PASSTHROUGH: diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index 588b0d1..2e203f5 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); @@ -2099,6 +2100,7 @@ networkRefreshDaemonsHelper(virNetworkObjPtr obj, case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case 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 @@ -2155,6 +2157,7 @@ networkReloadFirewallRulesHelper(virNetworkObjPtr obj, case VIR_NETWORK_FORWARD_NONE: case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: + case 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 @@ -2552,6 +2555,29 @@ 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) { + /* ifs[0].device.dev and vlan.tag[0] have been validated + * in virNetworkDefParseXML + */ + VIR_AUTOFREE(char *) vlanDevName =3D NULL; + if (virNetDevCreateVLanDev(def->forward.ifs[0].device.dev, def->vl= an.tag[0], + &vlanDevName) < 0) + goto err5; + + if (virNetDevBridgeAddPort(def->bridge, vlanDevName) < 0) { + virNetDevDestroyVLanDev(def->forward.ifs[0].device.dev, + def->vlan.tag[0], vlanDevName); + goto err5; + } + + if (virNetDevSetOnline(vlanDevName, true) < 0) { + ignore_value(virNetDevBridgeRemovePort(def->bridge, vlanDevNam= e)); + virNetDevDestroyVLanDev(def->forward.ifs[0].device.dev, + def->vlan.tag[0], vlanDevName); + goto err5; + } + } + VIR_FREE(macTapIfName); VIR_FREE(macMapFile); =20 @@ -2616,6 +2642,17 @@ networkShutdownNetworkVirtual(virNetworkDriverStateP= tr driver, pid_t radvdPid; pid_t dnsmasqPid; =20 + if (def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN) { + VIR_AUTOFREE(char *) vlanDevName =3D NULL; + if (!virNetDevGetVLanDevName(def->forward.ifs[0].device.dev, + def->vlan.tag[0], &vlanDevName)) { + ignore_value(virNetDevSetOnline(vlanDevName, false)); + ignore_value(virNetDevBridgeRemovePort(def->bridge, vlanDevNam= e)); + virNetDevDestroyVLanDev(def->forward.ifs[0].device.dev, + def->vlan.tag[0], vlanDevName); + } + } + if (def->bandwidth) virNetDevBandwidthClear(def->bridge); =20 @@ -2759,6 +2796,7 @@ networkCreateInterfacePool(virNetworkDefPtr netdef) case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case VIR_NETWORK_FORWARD_VLAN: /* by definition these will never be encountered here */ break; =20 @@ -2861,6 +2899,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; @@ -2948,6 +2987,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 @@ -3332,6 +3372,7 @@ networkValidate(virNetworkDriverStatePtr driver, case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case VIR_NETWORK_FORWARD_VLAN: /* if no bridge name was given in the config, find a name * unused by any other libvirt networks and assign it. */ @@ -3510,11 +3551,12 @@ networkValidate(virNetworkDriverStatePtr driver, =20 /* The only type of networks that currently support transparent * vlan configuration are those using hostdev sr-iov devices from - * a pool, and those using an Open vSwitch bridge. + * a pool, and those using an Open vSwitch bridge or based on 8021q. */ =20 vlanAllowed =3D (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_VLAN || (def->forward.type =3D=3D VIR_NETWORK_FORWARD_BRIDGE && def->virtPortProfile && def->virtPortProfile->virtPortType @@ -3596,6 +3638,11 @@ networkValidate(virNetworkDriverStatePtr driver, } } } + + if (def->forward.type =3D=3D VIR_NETWORK_FORWARD_VLAN) { + if (virNetDevLoad8021Q() < 0) + return -1; + } return 0; } =20 @@ -3825,6 +3872,7 @@ networkUpdate(virNetworkPtr net, case VIR_NETWORK_FORWARD_NONE: case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: + case VIR_NETWORK_FORWARD_VLAN: switch (section) { case VIR_NETWORK_SECTION_FORWARD: case VIR_NETWORK_SECTION_FORWARD_INTERFACE: @@ -4531,6 +4579,7 @@ networkAllocateActualDevice(virDomainDefPtr dom, case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case 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 @@ -4792,7 +4841,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) || @@ -5133,6 +5183,7 @@ networkReleaseActualDevice(virDomainDefPtr dom, case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: + case VIR_NETWORK_FORWARD_VLAN: if (iface->data.network.actual && networkUnplugBandwidth(obj, ifac= e) < 0) goto error; break; diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 02fdc55..ae725a8 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4550,6 +4550,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 From nobody Fri Apr 26 19:00:14 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 1534230090845568.0044059778712; Tue, 14 Aug 2018 00:01:30 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 77C28317C3F7; Tue, 14 Aug 2018 07:01:28 +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 305CA10694D7; Tue, 14 Aug 2018 07:01:28 +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 AB2384A464; Tue, 14 Aug 2018 07:01:27 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w7E71KeW005314 for ; Tue, 14 Aug 2018 03:01:20 -0400 Received: by smtp.corp.redhat.com (Postfix) id F35085D761; Tue, 14 Aug 2018 07:01:19 +0000 (UTC) Received: from mx1.redhat.com (ext-mx19.extmail.prod.ext.phx2.redhat.com [10.5.110.48]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E914B5D750 for ; Tue, 14 Aug 2018 07:01:16 +0000 (UTC) Received: from mout-xforward.gmx.net (mout-xforward.gmx.net [82.165.159.41]) (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 809C9307D853 for ; Tue, 14 Aug 2018 07:01:13 +0000 (UTC) Received: from localhost.localdomain ([58.56.27.130]) by mail.gmx.com (mrgmx101 [212.227.17.174]) with ESMTPSA (Nemesis) id 0MaW7Z-1faGvX09sH-00K5qb; Tue, 14 Aug 2018 09:01:11 +0200 From: Shi Lei To: libvir-list@redhat.com Date: Tue, 14 Aug 2018 15:00:52 +0800 Message-Id: <1534230052-10359-4-git-send-email-shilei.massclouds@gmx.com> In-Reply-To: <1534230052-10359-1-git-send-email-shilei.massclouds@gmx.com> References: <1534230052-10359-1-git-send-email-shilei.massclouds@gmx.com> X-Provags-ID: V03:K1:JSO91F3qWhbGXB/pn0TSwo7KgobW0GeeE17s4186kru32WSRtcD tHfJtB2Eg1d4x2E7NeR9Ftkg7NaUDj7+aRSAoc3Ig++IhGzF1SJguIueFzuvFw4pAbmMvS2 tdiXQuqciea/EXO0mM04EpP/59tJE4jEx7hVQhAHyLKS/rmtP5g3KczVWqb4mpmFJPHXotG tj07mfR3r5SNFmn2mq68w== X-UI-Out-Filterresults: junk:10;V01:K0:k9zkAjajNBg=:a6dhiAfmShPc1kzkcUSC/cS/ iCbJ4rCZZoFpXqliHbiWwriWdrg96ClAv3h7XEXYDviQgaalA08TsYE0aBHxmV6lTIa7WTW7w wbkyOm6O9uGmwa+oTUscBHcM4obQkphsrt0mO10jtfmoKPfpCr1EGT9NTJgEQ2RkksP/w38zy zpnjMZk2AU0PSPs68mXKX3vQBFwVLykHNEwmIQGWuj6B+XryVos5N9DC8wzTkkHpYGwr0nDK+ FOstWwqGRRO18zVR6wuDoereFWtIzjiSnM5mwFrMK3Mxd16SK/HEERBQpvrJz0uawG+BjjtRq OE/jP8u4dYB6KvhGumrTt2jhIZh7UBTAUWHRL6ix6+8REcXgbO/8LY6gZ5xL3hgcdU7fsTJm1 lEykThdxHTFjVLlh0TBx4cXHotqp1aaTFpED/Vc6ZBui+fX9lVnfCODV3atmcXLqV73bEsL0R syga1wK0dtshdQcto6IY9i7iX/4wklKls3HyFJ7jHyUMrfssxuDn34/0iZ1mFS8JUO1og9lLB uFnx9c+udnrkrZkBHx0ry/Z0e1U+zXWEaswqarDQK8Y1hgEsGwoirH5rjrki8g/4yyscqh/bp SUEC4Lu1CMB2Oyf80z6oZ6nHqo7X+s9AXZTTQ6sjHkOz5fmDCwLrVVE/n8oNEv6HEOGIifFyf 96J59MISezVsx+uWTEEbtQ3ySEas5WuRL38FMNOpwdvICbpXcSaBntHJ6lhxAASFndKrMpVhL kMJJswuYGkJZK180PQXTYoAh/OrwOxA+cl0g1olgNAQ5wd1ZYuT/CNcKw/Q8tOiXzL6MJ1WCG 8hp/1NHqj9Rpkfka2l/zOgsytYoxvBeJvvj6FPGeVxvo3LopFB0YZ2KbtjszsZI1w+TkzuIaS jMSA9xk7iQbdUstT/yGwdeRQ4gy0LAZHmtcRU7BcnSv80J0Mj9iD63iOF9zT X-Greylist: Sender passed SPF test, ACL 232 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.48]); Tue, 14 Aug 2018 07:01:14 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.48]); Tue, 14 Aug 2018 07:01:14 +0000 (UTC) for IP:'82.165.159.41' DOMAIN:'mout-xforward.gmx.net' HELO:'mout-xforward.gmx.net' FROM:'shilei.massclouds@gmx.com' RCPT:'' X-RedHat-Spam-Score: 0 (FREEMAIL_FROM, SPF_PASS) 82.165.159.41 mout-xforward.gmx.net 82.165.159.41 mout-xforward.gmx.net X-Scanned-By: MIMEDefang 2.84 on 10.5.110.48 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Cc: Shi Lei Subject: [libvirt] [PATCHv2 3/3] tests and docs for new forward mode '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.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.41]); Tue, 14 Aug 2018 07:01:29 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Shi Lei --- docs/formatnetwork.html.in | 27 ++++++++++++++++++= +++- docs/schemas/network.rng | 1 + tests/networkxml2confdata/vlan-network.conf | 16 +++++++++++++ tests/networkxml2confdata/vlan-network.xml | 13 +++++++++++ tests/networkxml2conftest.c | 1 + .../vlan-network-multi-vlan-tag.xml | 11 +++++++++ .../vlan-network-no-forward-dev.xml | 10 ++++++++ tests/networkxml2xmlin/vlan-network-with-dhcp.xml | 15 ++++++++++++ tests/networkxml2xmlin/vlan-network.xml | 10 ++++++++ tests/networkxml2xmlout/vlan-network-with-dhcp.xml | 17 ++++++++++++++ tests/networkxml2xmlout/vlan-network.xml | 12 ++++++++++ tests/networkxml2xmltest.c | 5 ++++ 12 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 tests/networkxml2confdata/vlan-network.conf create mode 100644 tests/networkxml2confdata/vlan-network.xml create mode 100644 tests/networkxml2xmlin/vlan-network-multi-vlan-tag.xml create mode 100644 tests/networkxml2xmlin/vlan-network-no-forward-dev.xml create mode 100644 tests/networkxml2xmlin/vlan-network-with-dhcp.xml create mode 100644 tests/networkxml2xmlin/vlan-network.xml create mode 100644 tests/networkxml2xmlout/vlan-network-with-dhcp.xml create mode 100644 tests/networkxml2xmlout/vlan-network.xml diff --git a/docs/formatnetwork.html.in b/docs/formatnetwork.html.in index 363a72b..294256c 100644 --- a/docs/formatnetwork.html.in +++ b/docs/formatnetwork.html.in @@ -156,7 +156,7 @@ =20
mtu
- The size attribute of the mtu> + The size attribute of the mtu element specifies the Maximum Transmission Unit (MTU) for the network. Since 3.1.0. In the case of a libvirt-managed network (one with forward mode @@ -299,6 +299,31 @@ Since 2.2.0
=20 +
vlan
+
+ All guests linked to this network will belong to a VLan. + Guests communicate with each other directly and communicate + with outside network via this network. Egress traffic from + this network will be tagged transparently by the VLan-Tag; + ingress traffic will be untagged and transport into this + network only if traffic has the same VLan-Tag, or be dropped. + The dev attribute must be set to specify the + host's interface which forwards traffice between this network + and outside. The vlan element and its tag + element must be one and only, and the id attribute + specifies the tag of this VLan. The bridge element + can be ignored since it is a internal bridge. This network + supports ip and dhcp. + Since 4.7.0 +
+...
+  <forward mode=3D'vlan' dev=3D'eth1'/>
+  <vlan>
+    <tag id=3D"20"/>
+  </vlan>
+...
+
+
bridge
This network describes either 1) an existing host bridge diff --git a/docs/schemas/network.rng b/docs/schemas/network.rng index f37c422..046f6dd 100644 --- a/docs/schemas/network.rng +++ b/docs/schemas/network.rng @@ -114,6 +114,7 @@ private vepa hostdev + vlan diff --git a/tests/networkxml2confdata/vlan-network.conf b/tests/networkxml= 2confdata/vlan-network.conf new file mode 100644 index 0000000..5d1d091 --- /dev/null +++ b/tests/networkxml2confdata/vlan-network.conf @@ -0,0 +1,16 @@ +##WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE +##OVERWRITTEN AND LOST. Changes to this configuration should be made usin= g: +## virsh net-edit vlanB +## or other application using the libvirt API. +## +## dnsmasq conf file created by libvirt +strict-order +except-interface=3Dlo +bind-dynamic +interface=3Dvirbr1 +dhcp-range=3D192.168.126.60,192.168.126.69 +dhcp-no-override +dhcp-authoritative +dhcp-lease-max=3D10 +dhcp-hostsfile=3D/var/lib/libvirt/dnsmasq/vlanB.hostsfile +addn-hosts=3D/var/lib/libvirt/dnsmasq/vlanB.addnhosts diff --git a/tests/networkxml2confdata/vlan-network.xml b/tests/networkxml2= confdata/vlan-network.xml new file mode 100644 index 0000000..0faa7bb --- /dev/null +++ b/tests/networkxml2confdata/vlan-network.xml @@ -0,0 +1,13 @@ + + vlanB + + + + + + + + + + + diff --git a/tests/networkxml2conftest.c b/tests/networkxml2conftest.c index 8e7751e..d106c6a 100644 --- a/tests/networkxml2conftest.c +++ b/tests/networkxml2conftest.c @@ -144,6 +144,7 @@ mymain(void) DO_TEST("dhcp6-nat-network", dhcpv6); DO_TEST("dhcp6host-routed-network", dhcpv6); DO_TEST("ptr-domains-auto", dhcpv6); + DO_TEST("vlan-network", full); =20 virObjectUnref(dhcpv6); virObjectUnref(full); diff --git a/tests/networkxml2xmlin/vlan-network-multi-vlan-tag.xml b/tests= /networkxml2xmlin/vlan-network-multi-vlan-tag.xml new file mode 100644 index 0000000..328e9a4 --- /dev/null +++ b/tests/networkxml2xmlin/vlan-network-multi-vlan-tag.xml @@ -0,0 +1,11 @@ + + vlanB + d29b765a-896c-450c-b94a-1b6b21c340db + + + + + + + + diff --git a/tests/networkxml2xmlin/vlan-network-no-forward-dev.xml b/tests= /networkxml2xmlin/vlan-network-no-forward-dev.xml new file mode 100644 index 0000000..c8384cf --- /dev/null +++ b/tests/networkxml2xmlin/vlan-network-no-forward-dev.xml @@ -0,0 +1,10 @@ + + vlanB + d29b765a-896c-450c-b94a-1b6b21c340db + + + + + + + diff --git a/tests/networkxml2xmlin/vlan-network-with-dhcp.xml b/tests/netw= orkxml2xmlin/vlan-network-with-dhcp.xml new file mode 100644 index 0000000..e51eaeb --- /dev/null +++ b/tests/networkxml2xmlin/vlan-network-with-dhcp.xml @@ -0,0 +1,15 @@ + + vlanB + d29b765a-896c-450c-b94a-1b6b21c340db + + + + + + + + + + + + diff --git a/tests/networkxml2xmlin/vlan-network.xml b/tests/networkxml2xml= in/vlan-network.xml new file mode 100644 index 0000000..3bf075a --- /dev/null +++ b/tests/networkxml2xmlin/vlan-network.xml @@ -0,0 +1,10 @@ + + vlanB + d29b765a-896c-450c-b94a-1b6b21c340db + + + + + + + diff --git a/tests/networkxml2xmlout/vlan-network-with-dhcp.xml b/tests/net= workxml2xmlout/vlan-network-with-dhcp.xml new file mode 100644 index 0000000..58ab96d --- /dev/null +++ b/tests/networkxml2xmlout/vlan-network-with-dhcp.xml @@ -0,0 +1,17 @@ + + vlanB + d29b765a-896c-450c-b94a-1b6b21c340db + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlout/vlan-network.xml b/tests/networkxml2xm= lout/vlan-network.xml new file mode 100644 index 0000000..e19ce49 --- /dev/null +++ b/tests/networkxml2xmlout/vlan-network.xml @@ -0,0 +1,12 @@ + + vlanB + d29b765a-896c-450c-b94a-1b6b21c340db + + + + + + + + + diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c index eb7db76..72957c7 100644 --- a/tests/networkxml2xmltest.c +++ b/tests/networkxml2xmltest.c @@ -44,6 +44,7 @@ testCompareXMLToXMLFiles(const char *inxml, const char *o= utxml, result =3D TEST_COMPARE_NET_XML2XML_RESULT_FAIL_FORMAT; goto cleanup; } + if (expectResult =3D=3D TEST_COMPARE_NET_XML2XML_RESULT_FAIL_FORMAT) goto cleanup; =20 @@ -160,6 +161,10 @@ mymain(void) DO_TEST_PARSE_ERROR("passthrough-duplicate"); DO_TEST("metadata"); DO_TEST("set-mtu"); + DO_TEST("vlan-network"); + DO_TEST("vlan-network-with-dhcp"); + DO_TEST_PARSE_ERROR("vlan-network-no-forward-dev"); + DO_TEST_PARSE_ERROR("vlan-network-multi-vlan-tag"); =20 return ret =3D=3D 0 ? EXIT_SUCCESS : EXIT_FAILURE; } --=20 2.7.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list