From: Eric Dumazet <eric.dumazet@gmail.com>
To: Isaku Yamahata <yamahata@valinux.co.jp>
Cc: netdev@vger.kernel.org, murphy.mccauley@gmail.com,
Pravin B Shelar <pshelar@nicira.com>,
Jesse Gross <jesse@nicira.com>,
dev@openvswitch.org
Subject: Re: [PATCH] loopback: set pkt_type to PACKET_HOST explicitly
Date: Wed, 26 Jun 2013 01:40:22 -0700 [thread overview]
Message-ID: <1372236022.3301.128.camel@edumazet-glaptop> (raw)
In-Reply-To: <0cd1047a2432736459fabbe97a8fb81c449fd827.1372232028.git.yamahata@valinux.co.jp>
On Wed, 2013-06-26 at 16:34 +0900, Isaku Yamahata wrote:
> Reset pkt_type to PACKET_HOST when loopback device receives packet
> before calling eth_type_trans()
>
> ip-encapsulated packets can be handled by localhost. But skb->pkt_type
> can be PACKET_OTHERHOST when packet comes into ip tunnel device. In that case,
> the packet is dropped by ip_rcv() because loopback_xmit() doesn't set
> skb->pkt_type to PACKET_HOST.
>
> netns A | root netns | netns B
> veth<->veth=bridge=gretap <-loop back-> gretap=bridge=veth<->veth
>
> arp packet ->
> pkt_type
> BROADCAST----loopback_xmit()-->ip_rcv()------------------->
>
> <- arp reply
> pkt_type
> ip_rcv()<---loopback_xmit()-----OTHERHOST
> drop
>
> sample operations
> ip link add tapa type gretap remote 172.17.107.4 local 172.17.107.3
> ip link add tapb type gretap remote 172.17.107.3 local 172.17.107.4
> ip link set tapa up
> ip link set tapb up
> ip address add 172.17.107.3 dev tapa
> ip address add 172.17.107.4 dev tapb
> ip route get 172.17.107.3
> > local 172.17.107.3 dev lo src 172.17.107.3
> > cache <local>
> ip route get 172.17.107.4
> > local 172.17.107.4 dev lo src 172.17.107.4
> > cache <local>
> ip link add vetha type veth peer name vetha-peer
> ip link add vethb type veth peer name vethb-peer
> brctl addbr bra
> brctl addbr brb
> brctl addif bra tapa
> brctl addif bra vetha-peer
> brctl addif brb tapb
> brctl addif brb vethb-peer
> brctl show
> > bridge name bridge id STP enabled interfaces
> > bra 8000.6ea21e758ff1 no tapa
> > vetha-peer
> > brb 8000.420020eb92d5 no tapb
> > vethb-peer
> ip link set vetha-peer up
> ip link set vethb-peer up
> ip link set bra up
> ip link set brb up
> ip netns add a
> ip netns add b
> ip link set vetha netns a
> ip link set vethb netns b
> ip netns exec a ip address add 10.0.0.3/24 dev vetha
> ip netns exec b ip address add 10.0.0.4/24 dev vethb
> ip netns exec a ip link set vetha up
> ip netns exec b ip link set vethb up
> ip netns exec a arping -I vetha 10.0.0.4
> ARPING 10.0.0.4 from 10.0.0.3 vetha
> ^CSent 2 probes (2 broadcast(s))
> Received 0 response(s)
>
> Cc: Pravin B Shelar <pshelar@nicira.com>
> Cc: Jesse Gross <jesse@nicira.com>
> Cc: dev@openvswitch.org
> Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
> ---
> drivers/net/loopback.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c
> index fcbf680..2694638 100644
> --- a/drivers/net/loopback.c
> +++ b/drivers/net/loopback.c
> @@ -82,6 +82,12 @@ static netdev_tx_t loopback_xmit(struct sk_buff *skb,
> */
> skb_dst_force(skb);
>
> + /* pkt_type is not always PACKET_HOST because
> + * this skb comes from other components.
> + * Since eth_type_trans() sets pkt_type _except_ PACKET_HOST case,
> + * set it explicitly.
> + */
> + skb->pkt_type = PACKET_HOST;
> skb->protocol = eth_type_trans(skb, dev);
>
> /* it's OK to use per_cpu_ptr() because BHs are off */
It sounds really strange to me.
This is not loopback duty to change pkt_type.
Where (and why) exactly pkt_type is set to PACKET_OTHERHOST ?
next prev parent reply other threads:[~2013-06-26 8:40 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-26 7:34 [PATCH] loopback: set pkt_type to PACKET_HOST explicitly Isaku Yamahata
2013-06-26 8:40 ` Eric Dumazet [this message]
2013-06-26 9:37 ` Isaku Yamahata
2013-06-26 22:29 ` David Miller
2013-06-27 5:29 ` Isaku Yamahata
2013-06-27 8:50 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1372236022.3301.128.camel@edumazet-glaptop \
--to=eric.dumazet@gmail.com \
--cc=dev@openvswitch.org \
--cc=jesse@nicira.com \
--cc=murphy.mccauley@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pshelar@nicira.com \
--cc=yamahata@valinux.co.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox