If a packet arrives on a tunnel port and is again transmitted on a tunnel
port, the packet needs to be encapsulated.

Eg:
Sample flow which arrives on a tunnel port and gets encapsulated again.

eth(src=00:15:5d:ae:b7:b1,dst=ff:ff:ff:ff:ff:ff),in_port(5),eth_type(0x0806),
arp(sip=192.168.1.12,tip=192.168.1.78,op=1,sha=00:15:5d:ae:b7:b1,tha=00:00:00:00:00:00),
tunnel(tun_id=0x5b88,dst=192.165.226.191,src=192.166.255.253,tos=0,ttl=63,
geneve({class=0x104,type=0x80,len=4,0x11680100}),flags(key))

actions:set(tunnel(tun_id=0x5b88,dst=192.165.226.190,ttl=64,
    geneve({class=0x104,type=0x80,len=4,0x1680100}),flags(df|csum|key))),5,4

Signed-off-by: Sairam Venugopal <vsai...@vmware.com>
---
 datapath-windows/ovsext/Actions.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/datapath-windows/ovsext/Actions.c 
b/datapath-windows/ovsext/Actions.c
index 722a2a8..f46309a 100644
--- a/datapath-windows/ovsext/Actions.c
+++ b/datapath-windows/ovsext/Actions.c
@@ -311,7 +311,7 @@ OvsDetectTunnelPkt(OvsForwardingContext *ovsFwdCtx,
          * - a VIF port
          * - a bridge-internal port (packets generated from userspace)
          * - no port.
-         *
+         * - tunnel port
          * If the packet will not be encapsulated, consume the tunnel context
          * by clearing it.
          */
@@ -322,7 +322,8 @@ OvsDetectTunnelPkt(OvsForwardingContext *ovsFwdCtx,
 
             if (!vport ||
                 (vport->ovsType != OVS_VPORT_TYPE_NETDEV &&
-                 !OvsIsBridgeInternalVport(vport))) {
+                 !OvsIsBridgeInternalVport(vport) &&
+                 !OvsIsTunnelVportType(vport->ovsType))) {
                 ovsFwdCtx->tunKey.dst = 0;
             }
         }
-- 
2.9.0.windows.1

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to