[libvirt] [PATCH v5] openvswitch: Add new port VLAN mode "802.1ad"

John Ferlan jferlan at redhat.com
Fri Mar 8 13:34:14 UTC 2019



On 2/24/19 9:15 AM, ZhiPeng LU wrote:
> This patch adds functionality to allow libvirt to configure the '802.1ad'
> modes(802.1ad double-tagged) on openvswitch networks.
> For example:
>   <interface type='bridge'>
>     <mac address='2c:da:41:1d:05:42'/>
>     <source bridge='ovs0'/>
>     <vlan>
>       <tag id='41' nativeMode='dot1q-tunnel'/>
>     </vlan>
>     <virtualport type='openvswitch'>
>       <parameters interfaceid='6401a152-0b99-40b5-92be-858810aa6d37'/>
>     </virtualport>
>     <model type='virtio'/>
>     <driver name='vhost'/>
>     <alias name='net0'/>
>   </interface>
> 
> Signed-off-by: ZhiPeng Lu <luzhipeng at uniudc.com>
> ---
> v1->v2:
>   1. Fix "make syntax-check" failure
> v2->v3:
>   1. remove other_config when updating vlan
> v3->v4:
>   1. add commit message that has a brief description of the new
>       feature
>   2. add tests for 'dot1q-tunnel' vlan mode
> v4->v5:
>   1. modify some description and format
> 
> v4-resend:
>   https://www.redhat.com/archives/libvir-list/2019-February/msg00988.html
> 
>  docs/formatdomain.html.in                          | 33 +++++++++++++++-------
>  docs/formatnetwork.html.in                         | 26 ++++++++++-------
>  docs/schemas/networkcommon.rng                     |  1 +
>  src/conf/netdev_vlan_conf.c                        |  2 +-
>  src/util/virnetdevopenvswitch.c                    |  7 +++++
>  src/util/virnetdevvlan.h                           |  1 +
>  tests/networkxml2xmlin/openvswitch-net.xml         |  9 ++++++
>  tests/networkxml2xmlout/openvswitch-net.xml        |  9 ++++++
>  .../openvswitch-net-modified.xml                   |  9 ++++++
>  .../openvswitch-net-more-portgroups.xml            |  9 ++++++
>  .../openvswitch-net-without-alice.xml              |  9 ++++++
>  11 files changed, 94 insertions(+), 21 deletions(-)
> 

Apart from now needing to indicate support in 5.2.0 for the
format*.html.in files and the need for a docs/news.xml note this seems
fine to me and covers what Laine had originally reviewed. I can modify
those two before pushing.

Also, I've CC'd Laine in hopes he can also take a look for sanity's sake
to ensure I didn't misinterpret something he requested previously!

I'll also add a followup patch to update docs/news.xml with the
following text:

+      <change>
+        <summary>
+          Add support for "802.1ad" VLAN mode
+        </summary>
+        <description>
+          Add support for the 802.ad double-tagged modes on openvswitch
+          networks.
+        </description>
+      </change>

Please let me know if you believe that's enough wording or would like
any modifications...

Reviewed-by: John Ferlan <jferlan at redhat.com>

John

> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> index b848e53..253f329 100644
> --- a/docs/formatdomain.html.in
> +++ b/docs/formatdomain.html.in
> @@ -6097,6 +6097,13 @@ qemu-kvm -net nic,model=? /dev/null
>      <b></vlan></b>
>      ...
>    </interface>
> +  <interface type='bridge'>
> +    <b><vlan trunk='yes'></b>
> +      <b><tag id='42'/></b>
> +      <b><tag id='555' nativeMode='802.1ad'/></b>
> +    <b></vlan></b>
> +    ...
> +  </interface>
>  </devices>
>  ...</pre>
>  
> @@ -6132,16 +6139,22 @@ qemu-kvm -net nic,model=? /dev/null
>      </p>
>      <p>
>        For network connections using Open vSwitch it is also possible
> -      to configure 'native-tagged' and 'native-untagged' VLAN modes
> -      <span class="since">Since 1.1.0.</span> This is done with the
> -      optional <code>nativeMode</code> attribute on
> -      the <code><tag></code> subelement: <code>nativeMode</code>
> -      may be set to 'tagged' or 'untagged'. The <code>id</code>
> -      attribute of the <code><tag></code> subelement
> -      containing <code>nativeMode</code> sets which VLAN is considered
> -      to be the "native" VLAN for this interface, and
> -      the <code>nativeMode</code> attribute determines whether or not
> -      traffic for that VLAN will be tagged.
> +      to configure the following VLAN modes:
> +    </p>
> +      <ul>
> +        <li>'tagged' <span class="since">Since 1.1.0.</span></li>
> +        <li>'untagged' <span class="since">Since 1.1.0.</span></li>
> +        <li>'802.1ad' <span class="since">Since 5.1.0.</span></li>
> +      </ul>
> +    <p>
> +      This is done with the optional <code>nativeMode</code> attribute
> +      on the <code><tag></code> subelement. The attribute may be
> +      set to a string from the above list. The <code>id</code> attribute
> +      of the <code><tag></code> subelement containing
> +      <code>nativeMode</code> sets which VLAN is considered to be the
> +      "native" VLAN for this interface and the <code>nativeMode</code>
> +      attribute determines whether or not traffic for that VLAN will be
> +      tagged or 802.1ad double tagged.
>      </p>
>  
>      <h5><a id="elementLink">Modifying virtual link state</a></h5>
> diff --git a/docs/formatnetwork.html.in b/docs/formatnetwork.html.in
> index 509cca9..eea86f4 100644
> --- a/docs/formatnetwork.html.in
> +++ b/docs/formatnetwork.html.in
> @@ -705,16 +705,22 @@
>      </p>
>      <p>
>        For network connections using Open vSwitch it is also possible
> -      to configure 'native-tagged' and 'native-untagged' VLAN modes
> -      <span class="since">Since 1.1.0.</span> This is done with the
> -      optional <code>nativeMode</code> attribute on
> -      the <code><tag></code> subelement: <code>nativeMode</code>
> -      may be set to 'tagged' or 'untagged'. The <code>id</code>
> -      attribute of the <code><tag></code> subelement
> -      containing <code>nativeMode</code> sets which VLAN is considered
> -      to be the "native" VLAN for this interface, and
> -      the <code>nativeMode</code> attribute determines whether or not
> -      traffic for that VLAN will be tagged.
> +      to configure the following VLAN modes:
> +    </p>
> +      <ul>
> +        <li>'tagged' <span class="since">Since 1.1.0.</span></li>
> +        <li>'untagged' <span class="since">Since 1.1.0.</span></li>
> +        <li>'802.1ad' <span class="since">Since 5.1.0.</span></li>
> +      </ul>
> +    <p>
> +      This is done with the optional <code>nativeMode</code> attribute
> +      on the <code><tag></code> subelement. The attribute may be
> +      set to a string from the above list. The <code>id</code> attribute
> +      of the <code><tag></code> subelement containing
> +      <code>nativeMode</code> sets which VLAN is considered to be the
> +      "native" VLAN for this interface and the <code>nativeMode</code>
> +      attribute determines whether or not traffic for that VLAN will be
> +      tagged or 802.1ad double tagged.
>      </p>
>      <p>
>        <code><vlan></code> elements can also be specified in
> diff --git a/docs/schemas/networkcommon.rng b/docs/schemas/networkcommon.rng
> index 2699555..7262783 100644
> --- a/docs/schemas/networkcommon.rng
> +++ b/docs/schemas/networkcommon.rng
> @@ -223,6 +223,7 @@
>                <choice>
>                  <value>tagged</value>
>                  <value>untagged</value>
> +                <value>802.1ad</value>
>                </choice>
>              </attribute>
>            </optional>
> diff --git a/src/conf/netdev_vlan_conf.c b/src/conf/netdev_vlan_conf.c
> index 57d73ed..54e2b02 100644
> --- a/src/conf/netdev_vlan_conf.c
> +++ b/src/conf/netdev_vlan_conf.c
> @@ -25,7 +25,7 @@
>  #define VIR_FROM_THIS VIR_FROM_NONE
>  
>  VIR_ENUM_IMPL(virNativeVlanMode, VIR_NATIVE_VLAN_MODE_LAST,
> -              "default", "tagged", "untagged",
> +              "default", "tagged", "untagged", "802.1ad",
>  );
>  
>  int
> diff --git a/src/util/virnetdevopenvswitch.c b/src/util/virnetdevopenvswitch.c
> index 4fa3a57..d8268bc 100644
> --- a/src/util/virnetdevopenvswitch.c
> +++ b/src/util/virnetdevopenvswitch.c
> @@ -85,6 +85,11 @@ virNetDevOpenvswitchConstructVlans(virCommandPtr cmd, virNetDevVlanPtr virtVlan)
>          virCommandAddArg(cmd, "vlan_mode=native-untagged");
>          virCommandAddArgFormat(cmd, "tag=%d", virtVlan->nativeTag);
>          break;
> +    case VIR_NATIVE_VLAN_MODE_8021AD:
> +        virCommandAddArg(cmd, "vlan_mode=dot1q-tunnel");
> +        virCommandAddArg(cmd, "other_config:qinq-ethtype=802.1q");
> +        virCommandAddArgFormat(cmd, "tag=%d", virtVlan->nativeTag);
> +        break;
>      case VIR_NATIVE_VLAN_MODE_DEFAULT:
>      default:
>          break;
> @@ -498,6 +503,8 @@ int virNetDevOpenvswitchUpdateVlan(const char *ifname,
>                           "--", "--if-exists", "clear", "Port", ifname, "tag",
>                           "--", "--if-exists", "clear", "Port", ifname, "trunk",
>                           "--", "--if-exists", "clear", "Port", ifname, "vlan_mode",
> +                         "--", "--if-exists", "remove", "Port", ifname,
> +                         "other_config", "qinq-ethtype",
>                           "--", "--if-exists", "set", "Port", ifname, NULL);
>  
>      if (virNetDevOpenvswitchConstructVlans(cmd, virtVlan) < 0)
> diff --git a/src/util/virnetdevvlan.h b/src/util/virnetdevvlan.h
> index 2a13759..54109c6 100644
> --- a/src/util/virnetdevvlan.h
> +++ b/src/util/virnetdevvlan.h
> @@ -27,6 +27,7 @@ typedef enum {
>      VIR_NATIVE_VLAN_MODE_DEFAULT = 0,
>      VIR_NATIVE_VLAN_MODE_TAGGED,
>      VIR_NATIVE_VLAN_MODE_UNTAGGED,
> +    VIR_NATIVE_VLAN_MODE_8021AD,
>  
>      VIR_NATIVE_VLAN_MODE_LAST
>  } virNativeVlanMode;
> diff --git a/tests/networkxml2xmlin/openvswitch-net.xml b/tests/networkxml2xmlin/openvswitch-net.xml
> index 2f6084d..5734d36 100644
> --- a/tests/networkxml2xmlin/openvswitch-net.xml
> +++ b/tests/networkxml2xmlin/openvswitch-net.xml
> @@ -30,4 +30,13 @@
>        <parameters profileid='native-profile'/>
>      </virtualport>
>    </portgroup>
> +  <portgroup name='8021ad'>
> +    <vlan trunk='yes'>
> +      <tag id='555' nativeMode='802.1ad'/>
> +      <tag id='666'/>
> +    </vlan>
> +    <virtualport>
> +      <parameters profileid='8021ad-profile'/>
> +    </virtualport>
> +  </portgroup>
>  </network>
> diff --git a/tests/networkxml2xmlout/openvswitch-net.xml b/tests/networkxml2xmlout/openvswitch-net.xml
> index 2f6084d..5734d36 100644
> --- a/tests/networkxml2xmlout/openvswitch-net.xml
> +++ b/tests/networkxml2xmlout/openvswitch-net.xml
> @@ -30,4 +30,13 @@
>        <parameters profileid='native-profile'/>
>      </virtualport>
>    </portgroup>
> +  <portgroup name='8021ad'>
> +    <vlan trunk='yes'>
> +      <tag id='555' nativeMode='802.1ad'/>
> +      <tag id='666'/>
> +    </vlan>
> +    <virtualport>
> +      <parameters profileid='8021ad-profile'/>
> +    </virtualport>
> +  </portgroup>
>  </network>
> diff --git a/tests/networkxml2xmlupdateout/openvswitch-net-modified.xml b/tests/networkxml2xmlupdateout/openvswitch-net-modified.xml
> index cc0c344..ed605bf 100644
> --- a/tests/networkxml2xmlupdateout/openvswitch-net-modified.xml
> +++ b/tests/networkxml2xmlupdateout/openvswitch-net-modified.xml
> @@ -30,4 +30,13 @@
>        <parameters profileid='native-profile'/>
>      </virtualport>
>    </portgroup>
> +  <portgroup name='8021ad'>
> +    <vlan trunk='yes'>
> +      <tag id='555' nativeMode='802.1ad'/>
> +      <tag id='666'/>
> +    </vlan>
> +    <virtualport>
> +      <parameters profileid='8021ad-profile'/>
> +    </virtualport>
> +  </portgroup>
>  </network>
> diff --git a/tests/networkxml2xmlupdateout/openvswitch-net-more-portgroups.xml b/tests/networkxml2xmlupdateout/openvswitch-net-more-portgroups.xml
> index 7c19ad9..0237e42 100644
> --- a/tests/networkxml2xmlupdateout/openvswitch-net-more-portgroups.xml
> +++ b/tests/networkxml2xmlupdateout/openvswitch-net-more-portgroups.xml
> @@ -41,4 +41,13 @@
>        <parameters profileid='native-profile'/>
>      </virtualport>
>    </portgroup>
> +  <portgroup name='8021ad'>
> +    <vlan trunk='yes'>
> +      <tag id='555' nativeMode='802.1ad'/>
> +      <tag id='666'/>
> +    </vlan>
> +    <virtualport>
> +      <parameters profileid='8021ad-profile'/>
> +    </virtualport>
> +  </portgroup>
>  </network>
> diff --git a/tests/networkxml2xmlupdateout/openvswitch-net-without-alice.xml b/tests/networkxml2xmlupdateout/openvswitch-net-without-alice.xml
> index 4104424..cb9d12d 100644
> --- a/tests/networkxml2xmlupdateout/openvswitch-net-without-alice.xml
> +++ b/tests/networkxml2xmlupdateout/openvswitch-net-without-alice.xml
> @@ -20,4 +20,13 @@
>        <parameters profileid='native-profile'/>
>      </virtualport>
>    </portgroup>
> +  <portgroup name='8021ad'>
> +    <vlan trunk='yes'>
> +      <tag id='555' nativeMode='802.1ad'/>
> +      <tag id='666'/>
> +    </vlan>
> +    <virtualport>
> +      <parameters profileid='8021ad-profile'/>
> +    </virtualport>
> +  </portgroup>
>  </network>
> 




More information about the libvir-list mailing list