Message ID | 0324dc4a3a7740e4766e16539f4ed41b356f991d.1372764542.git.yamahata@valinux.co.jp |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Isaku Yamahata <yamahata@valinux.co.jp> Date: Tue, 2 Jul 2013 20:30:10 +0900 > The dev_forward_skb() assignment of pkt_type should be done > after the call to eth_type_trans(). > > ip-encapsulated packets can be handled by localhost. But skb->pkt_type > can be PACKET_OTHERHOST when packet comes via veth into ip tunnel device. > In that case, the packet is dropped by ip_rcv(). > Although this example uses gretap. l2tp-eth also has same issue. > For l2tp-eth case, add dummy device for ip address and ip l2tp command. ... > Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Applied, but I had to adjust the patch because in net-next we use a new helper function (skb_scrub_packet()) to clear things out from dev_forward_skb(). -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Le 03/07/2013 01:00, David Miller a écrit : > From: Isaku Yamahata <yamahata@valinux.co.jp> > Date: Tue, 2 Jul 2013 20:30:10 +0900 > >> The dev_forward_skb() assignment of pkt_type should be done >> after the call to eth_type_trans(). >> >> ip-encapsulated packets can be handled by localhost. But skb->pkt_type >> can be PACKET_OTHERHOST when packet comes via veth into ip tunnel device. >> In that case, the packet is dropped by ip_rcv(). >> Although this example uses gretap. l2tp-eth also has same issue. >> For l2tp-eth case, add dummy device for ip address and ip l2tp command. > ... >> Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> > > Applied, but I had to adjust the patch because in net-next we use > a new helper function (skb_scrub_packet()) to clear things out from > dev_forward_skb(). What about calling skb_scrub_packet() after eth_type_trans()? I wonder if the same problem may happen the day gre will support x-netns, because skb_scrub_packet() is also called before eth_type_trans() in ip_tunnel_rcv(). -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Nicolas Dichtel <nicolas.dichtel@6wind.com> Date: Wed, 03 Jul 2013 16:53:52 +0200 > Le 03/07/2013 01:00, David Miller a écrit : >> From: Isaku Yamahata <yamahata@valinux.co.jp> >> Date: Tue, 2 Jul 2013 20:30:10 +0900 >> >>> The dev_forward_skb() assignment of pkt_type should be done >>> after the call to eth_type_trans(). >>> >>> ip-encapsulated packets can be handled by localhost. But skb->pkt_type >>> can be PACKET_OTHERHOST when packet comes via veth into ip tunnel >>> device. >>> In that case, the packet is dropped by ip_rcv(). >>> Although this example uses gretap. l2tp-eth also has same issue. >>> For l2tp-eth case, add dummy device for ip address and ip l2tp >>> command. >> ... >>> Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> >> >> Applied, but I had to adjust the patch because in net-next we use >> a new helper function (skb_scrub_packet()) to clear things out from >> dev_forward_skb(). > What about calling skb_scrub_packet() after eth_type_trans()? > > I wonder if the same problem may happen the day gre will support > x-netns, > because skb_scrub_packet() is also called before eth_type_trans() in > ip_tunnel_rcv(). That's a fine suggestion, I was just being overly conservative in my forward-porting of his patch. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Le 04/07/2013 23:57, David Miller a écrit : > From: Nicolas Dichtel <nicolas.dichtel@6wind.com> > Date: Wed, 03 Jul 2013 16:53:52 +0200 > >> Le 03/07/2013 01:00, David Miller a écrit : >>> From: Isaku Yamahata <yamahata@valinux.co.jp> >>> Date: Tue, 2 Jul 2013 20:30:10 +0900 >>> >>>> The dev_forward_skb() assignment of pkt_type should be done >>>> after the call to eth_type_trans(). >>>> >>>> ip-encapsulated packets can be handled by localhost. But skb->pkt_type >>>> can be PACKET_OTHERHOST when packet comes via veth into ip tunnel >>>> device. >>>> In that case, the packet is dropped by ip_rcv(). >>>> Although this example uses gretap. l2tp-eth also has same issue. >>>> For l2tp-eth case, add dummy device for ip address and ip l2tp >>>> command. >>> ... >>>> Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> >>> >>> Applied, but I had to adjust the patch because in net-next we use >>> a new helper function (skb_scrub_packet()) to clear things out from >>> dev_forward_skb(). >> What about calling skb_scrub_packet() after eth_type_trans()? >> >> I wonder if the same problem may happen the day gre will support >> x-netns, >> because skb_scrub_packet() is also called before eth_type_trans() in >> ip_tunnel_rcv(). > > That's a fine suggestion, I was just being overly conservative in my > forward-porting of his patch. > Ok, I will wait that net-next opens to submit this patch. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/core/dev.c b/net/core/dev.c index 722f633..b179b8a 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1662,8 +1662,12 @@ int dev_forward_skb(struct net_device *dev, struct sk_buff *skb) skb->skb_iif = 0; skb_dst_drop(skb); skb->tstamp.tv64 = 0; - skb->pkt_type = PACKET_HOST; skb->protocol = eth_type_trans(skb, dev); + /* + * eth_type_trans() can set pkt_type. + * clear pkt_type _after_ calling eth_type_trans() + */ + skb->pkt_type = PACKET_HOST; skb->mark = 0; secpath_reset(skb); nf_reset(skb);