[ovs-dev] [PATCH 20/31] fixup: Clarify how legacy L3 tunnels work.

Jan Scheurich jan.scheurich at ericsson.com
Wed Jun 14 22:50:02 UTC 2017


See my response to patch 15/31.

> -----Original Message-----
> From: ovs-dev-bounces at openvswitch.org [mailto:ovs-dev-bounces at openvswitch.org] On Behalf Of Ben Pfaff
> Sent: Tuesday, 13 June, 2017 00:29
> To: dev at openvswitch.org
> Cc: Ben Pfaff <blp at ovn.org>
> Subject: [ovs-dev] [PATCH 20/31] fixup: Clarify how legacy L3 tunnels work.
> 
> Signed-off-by: Ben Pfaff <blp at ovn.org>
> ---
>  ofproto/ofproto-dpif-xlate.c |  2 +-
>  ofproto/tunnel.c             | 17 ++++--------
>  ofproto/tunnel.h             |  2 +-
>  vswitchd/vswitch.xml         | 62 ++++++++++++++++++++++++++++++++++++--------
>  4 files changed, 58 insertions(+), 25 deletions(-)
> 
> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
> index 623b7a0ee6c5..d18d58c87c20 100644
> --- a/ofproto/ofproto-dpif-xlate.c
> +++ b/ofproto/ofproto-dpif-xlate.c
> @@ -6154,7 +6154,7 @@ xlate_wc_init(struct xlate_ctx *ctx)
>          netflow_mask_wc(&ctx->xin->flow, ctx->wc);
>      }
> 
> -    tnl_wc_init(&ctx->xin->flow, ctx->wc, ctx->xbridge->packet_type_aware);
> +    tnl_wc_init(&ctx->xin->flow, ctx->wc);
>  }
> 
>  static void
> diff --git a/ofproto/tunnel.c b/ofproto/tunnel.c
> index caf01be5f14b..0bde801993a5 100644
> --- a/ofproto/tunnel.c
> +++ b/ofproto/tunnel.c
> @@ -361,8 +361,7 @@ tnl_process_ecn(struct flow *flow)
>  }
> 
>  void
> -tnl_wc_init(struct flow *flow, struct flow_wildcards *wc,
> -            bool packet_type_aware)
> +tnl_wc_init(struct flow *flow, struct flow_wildcards *wc)
>  {
>      if (tnl_port_should_receive(flow)) {
>          wc->masks.tunnel.tun_id = OVS_BE64_MAX;
> @@ -387,10 +386,6 @@ tnl_wc_init(struct flow *flow, struct flow_wildcards *wc,
>              && IP_ECN_is_ce(flow->tunnel.ip_tos)) {
>              wc->masks.nw_tos |= IP_ECN_MASK;
>          }
> -        if (!packet_type_aware) {
> -            /* Match on packet_type for tunneled packets.*/
> -            wc->masks.packet_type = OVS_BE32_MAX;
> -        }
>      }
>  }
> 
> @@ -570,19 +565,17 @@ tnl_find(const struct flow *flow) OVS_REQ_RDLOCK(rwlock)
>                      match.ip_dst_flow = ip_dst_flow;
>                      match.ip_src_flow = ip_src == IP_SRC_FLOW;
> 
> -                    /* If it's about a Non-ethernet packet then we look for a
> -                     * layer3 tunnel port first, as it would be attached to a
> -                     * non-PTAP bridge. Then for a versatile tunnel port as it
> -                     * would be attached to a PTAP bridge. */
> +                    /* If it's about a non-Ethernet packet, look for a layer-3
> +                     * tunnel port first. */
>                      if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
> -                        /* Try to find a layer3 port first. */
>                          match.is_layer3 = true;
>                          tnl_port = tnl_find_exact(&match, map);
>                          if (tnl_port) {
>                              return tnl_port;
>                          }
>                      }
> -                    /* Check for a non-layer3 or versatile tunnel port. */
> +
> +                    /* Then check for a non-layer3 or versatile tunnel port. */
>                      match.is_layer3 = false;
>                      tnl_port = tnl_find_exact(&match, map);
>                      if (tnl_port) {
> diff --git a/ofproto/tunnel.h b/ofproto/tunnel.h
> index dc004cc18b66..b0ec67c2bd74 100644
> --- a/ofproto/tunnel.h
> +++ b/ofproto/tunnel.h
> @@ -39,7 +39,7 @@ int tnl_port_add(const struct ofport_dpif *, const struct netdev *,
>  void tnl_port_del(const struct ofport_dpif *);
> 
>  const struct ofport_dpif *tnl_port_receive(const struct flow *);
> -void tnl_wc_init(struct flow *, struct flow_wildcards *, bool);
> +void tnl_wc_init(struct flow *, struct flow_wildcards *);
>  bool tnl_process_ecn(struct flow *);
>  odp_port_t tnl_port_send(const struct ofport_dpif *, struct flow *,
>                           struct flow_wildcards *wc);
> diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
> index dc97d75dc113..b3d818e5a72a 100644
> --- a/vswitchd/vswitch.xml
> +++ b/vswitchd/vswitch.xml
> @@ -2402,21 +2402,46 @@
>                <code>gpe</code>: Support for Generic Protocol Encapsulation in
>                accordance with IETF draft
>                <code>https://tools.ietf.org/html/draft-ietf-nvo3-vxlan-gpe</code>.
> +              Without this option, a VXLAN packet always encapsulates an
> +              Ethernet frame.  With this option, an VXLAN packet may also
> +              encapsulate an IPv4, IPv6, NSH, or MPLS packet.
>              </li>
>            </ul>
>          </column>
> 
>          <column name="options" key="layer3" type='{"type": "boolean"}'>
>            <p>
> -            By default, or if set to false, the tunnel carries L2 packets (with
> -            an Ethernet header).  If set to true, the tunnel carries L3 packets
> -            (without an Ethernet header present).
> +            Unless <ref column="options" key="exts"/> enables the
> +            <code>gpe</code> extension, this option is ignored.  In this case,
> +            then the tunnel sends and receives only Ethernet frames.
>            </p>
> 
>            <p>
> -            To set this option to true, the <code>gpe</code> extension must
> -            also be enabled in <ref column="options" key="exts"/>.
> +            When <ref column="options" key="exts"/> enables <code>gpe</code>,
> +            and <ref column="options" key="layer3"/> is <code>true</code>,
> +            then the tunnel sends and receives only IPv4 and IPv6 packets.
>            </p>
> +
> +          <p>
> +            When <ref column="options" key="exts"/> enables <code>gpe</code>,
> +            and <ref column="options" key="layer3"/> is missing or
> +            <code>false</code>, then the meaning of this column depends on <ref
> +            column="other_config" key="legacy-l3-tunnel"/> in the <ref
> +            table="Bridge"/> table:
> +          </p>
> +
> +          <ul>
> +            <li>
> +              If legacy L3 tunneling behavior is enabled, then the tunnel sends
> +              and receives only Ethernet packets.  (Open vSwitch 2.7 and
> +              earlier only supported this mode.)
> +            </li>
> +
> +            <li>
> +              If legacy L3 tunneling behavior is disabled, then the tunnel
> +              sends and receives any kind of packet supported by VXLAN-GPE.
> +            </li>
> +          </ul>
>          </column>
>        </group>
> 
> @@ -2427,15 +2452,30 @@
> 
>          <column name="options" key="layer3" type='{"type": "boolean"}'>
>            <p>
> -            By default, or if set to false, the tunnel carries L2 packets (with
> -            an Ethernet header).  If set to true, the tunnel carries L3 packets
> -            (without an Ethernet header present).
> +            When missing or <code>false</code>, the meaning of this column
> +            depends on <ref column="other_config" key="legacy-l3-tunnel"/> in
> +            the <ref table="Bridge"/> table:
>            </p>
> 
> +          <ul>
> +            <li>
> +              If legacy L3 tunneling behavior is enabled, then the tunnel sends
> +              and receives only Ethernet packets.  (Open vSwitch 2.7 and
> +              earlier only supported this mode.)
> +            </li>
> +
> +            <li>
> +              If legacy L3 tunneling behavior is disabled, then the tunnel
> +              sends and receives any kind of packet.
> +            </li>
> +          </ul>
> +
>            <p>
> -            A single GRE tunnel cannot carry both L2 and L3 packets, but the
> -            same effect can be realized by creating two tunnels with different
> -            <code>layer3</code> settings and otherwise the same configuration.
> +            When <code>true</code>, then the tunnel sends and receives only
> +            non-Ethernet packets.  (When legacy L3 tunneling is enabled,
> +            Ethernet packets through the same tunnel are handled by a similar
> +            port with this column set to <code>false</code>, if one is
> +            configured.)
>            </p>
>          </column>
>        </group>
> --
> 2.10.2
> 
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev


More information about the dev mailing list