[ovs-dev] [PATCH] datapath/tunnel: reset skb->pkt_type when sending tunneled packets.

Isaku Yamahata yamahata at valinux.co.jp
Tue Jun 25 08:25:01 UTC 2013


I think the upstream kernel has a similar issue with tunneling.
I'm preparing a patch.

thanks,

On Tue, Jun 25, 2013 at 05:11:47PM +0900, Isaku Yamahata wrote:
> 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 <yamahata at 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 at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
> 

-- 
yamahata



More information about the dev mailing list