Reset skb->pkt_type when sending tunneled packets. Packet can have pkt_type of PACKET_OTHERHOST when coming to ovs bridge. If such packets are handled by loopback device, the packet is dropped by ip_rcv(). On the other hand when flow rule isn't installed in kernel datapath, OVS_ACTION_ATTR_OUTPUT is used to send the packet. In that case, packet isn't dropped.
netns A | root netns | netns B veth<->veth=ovs bridge=gre<-loop back->gre=ovs bridge=veth<->veth arp packet -> pkt_type BROADCAST------------>ip_rcv()------------------------> <- arp reply pkt_type rule exists ip_rcv()<-----------------OTHERHOST drop <--------------------ip_rcv()<--- PACKET_HOST rule doesn't exists pass ^ | | |upcall | V OVS_ACTION_ATTR_OUTPUT ovs-switchd Signed-off-by: Isaku Yamahata <yamah...@valinux.co.jp> --- datapath/tunnel.c | 1 + 1 file changed, 1 insertion(+) diff --git a/datapath/tunnel.c b/datapath/tunnel.c index 8c93e18..1975c7b 100644 --- a/datapath/tunnel.c +++ b/datapath/tunnel.c @@ -275,6 +275,7 @@ int ovs_tnl_send(struct vport *vport, struct sk_buff *skb, skb_dst_set(skb, dst_clone(&rt_dst(rt))); else skb_dst_set(skb, &rt_dst(rt)); + skb->pkt_type = PACKET_HOST; /* Push Tunnel header. */ build_header(vport, skb, tunnel_hlen); -- 1.7.10.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev