Support vlan insertion in vxlan header

Signed-off-by: Allen Chen <[email protected]>

---
After vxlan encapsulation,an underlay packet becomes vxlan packet.
OVS will report an debug info if a vlan is inserted in vxlan header after vxlan 
encapsulation.
We can find the debug info "unsupported nested action inside clone(),action 
type:4" by
"cat /var/log/openvswitch/ovs-vswitchd.log",so the ovs flow can not be 
offloaded successfully.

For example,an underlay packet can be:Eth header/IP header/Payload,
after vxlan encapsulation,it can be:Outer Eth header/Outer IP header/Outer 
UDP/Vxlan header/Inner Eth header/Inner IP header/Payload,
after vlan insertion,it can be:Outer Eth header/Vlan header/Outer IP 
header/Outer UDP/Vxlan header/Inner Eth header/Inner IP header/Payload.(the 
debug info occur at this point)

This commit can fix the problem in this case.

The ovs configuration is listed:
ovs-vsctl add-br br-jmnd -- set bridge br-jmnd datapath_type=netdev -- 
br-set-external-id br-jmnd bridge-id br-jmnd -- set bridge br-jmnd 
fail-mode=standalone
ovs-vsctl add-br br-ext -- set bridge br-ext datapath_type=netdev -- 
br-set-external-id br-ext bridge-id br-ext -- set bridge br-ext 
fail-mode=standalone
ovs-vsctl add-port br-ext dpdk0 -- set Interface dpdk0 type=dpdk 
options:dpdk-devargs=0000:01:00.0 options:n_txq=8 options:n_rxq=8 
options:n_rxq_desc=2048 options:n_txq_desc=2048 ofport_request=1
ovs-vsctl add-port br-jmnd vxlan0 -- set interface vxlan0 type=vxlan 
options:{remote_ip="192.188.2.222",local_ip="192.188.2.210",in_key=100,out_key=100}
ovs-vsctl add-port br-jmnd net0 -- set Interface net0 type=dpdk 
options:{dpdk-devargs="net_jmnd0,iface=/tmp/sock0,client=1,queues=8",n_rxq="8",n_rxq_desc="256",n_txq_desc="256"}
ovs-vsctl set Bridge br-ext other_config:hwaddr="02:02:03:04:05:06"
ovs-appctl tnl/arp/set br-ext 192.188.2.222 0A:00:27:00:00:0C
ovs-ofctl del-flows br-jmnd
ovs-ofctl add-flow br-jmnd in_port=vxlan0,action=output:net0
ovs-ofctl add-flow br-jmnd 
in_port=net0,ip,nw_src=172.0.1.2/32,nw_dst=172.0.1.1/32,action=output:vxlan0
ifconfig br-ext 192.188.2.210
ovs-vsctl set o . other_config:max-idle=5000
ifconfig br-ext up
ifconfig br-jmnd up
ovs-ofctl add-flow br-ext 
priority=1,ip,udp,nw_src=192.188.2.210,nw_dst=192.188.2.222,actions=mod_vlan_vid:3001,output:dpdk0
---
 lib/netdev-offload-dpdk.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
index b1c848f4d..d0b0d4c62 100644
--- a/lib/netdev-offload-dpdk.c
+++ b/lib/netdev-offload-dpdk.c
@@ -2137,6 +2137,9 @@ parse_clone_actions(struct netdev *netdev,
             if (add_output_action(netdev, actions, ca)) {
                 return -1;
             }
+        } else if (clone_type == OVS_ACTION_ATTR_PUSH_VLAN) {
+            const struct ovs_action_push_vlan *vlan = nl_attr_get(ca);
+            parse_vlan_push_action(actions, vlan);
         } else {
             VLOG_DBG_RL(&rl,
                         "Unsupported nested action inside clone(), "
-- 
2.33.0.windows.2

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to