All of lore.kernel.org
 help / color / mirror / Atom feed
From: Murali Karicheri <m-karicheri2@ti.com>
To: <davem@davemloft.net>, <kuba@kernel.org>,
	<netdev@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<nsekhar@ti.com>, <grygorii.strashko@ti.com>
Subject: Re: [PATCH net-next 0/1] Support for VLAN interface over HSR/PRP
Date: Wed, 2 Sep 2020 12:14:23 -0400	[thread overview]
Message-ID: <d93fbc54-1721-ebec-39ca-dc8b45e6e534@ti.com> (raw)
In-Reply-To: <20200901195415.4840-1-m-karicheri2@ti.com>

All,

On 9/1/20 3:54 PM, Murali Karicheri wrote:
> This series add support for creating VLAN interface over HSR or
> PRP interface. Typically industrial networks uses VLAN in
> deployment and this capability is needed to support these
> networks.
> 
> This is tested using two TI AM572x IDK boards connected back
> to back over CPSW  ports (eth0 and eth1).
> 
> Following is the setup
> 
>                  Physical Setup
>                  ++++++++++++++
>                        
>   _______________    (CPSW)     _______________
>   |              |----eth0-----|               |
>   |TI AM572x IDK1|             | TI AM572x IDK2|
>   |______________|----eth1-----|_______________|
> 
> 
>                  Network Topolgy
>                  +++++++++++++++
> 
>                         TI AM571x IDK  TI AM572x IDK
> 
>                                    
> 192.168.100.10                 CPSW ports                 192.168.100.20
>               IDK-1                                        IDK-2
> hsr0/prp0.100--| 192.168.2.10  |--eth0--| 192.168.2.20 |--hsr0/prp0.100
>                 |----hsr0/prp0--|        |---hsr0/prp0--|
> hsr0/prp0.101--|               |--eth1--|              |--hsr0/prp0/101
> 
> 192.168.101.10                                            192.168.101.20
> 
> Following tests:-
>   - create hsr or prp interface and ping the interface IP address
>     and verify ping is successful.
>   - Create 2 VLANs over hsr or prp interface on both IDKs (VID 100 and
>     101). Ping between the IP address of the VLAN interfaces
>   - Do iperf UDP traffic test with server on one IDK and client on the
>     other. Do this using 100 and 101 subnet IP addresses
>   - Dump /proc/net/vlan/{hsr|prp}0.100 and verify frames are transmitted
>     and received at these interfaces.
>   - Delete the vlan and hsr/prp interface and verify interfaces are
>     removed cleanly.
> 
> Logs for IDK-1 at https://pastebin.ubuntu.com/p/NxF83yZFDX/
> Logs for IDK-2 at https://pastebin.ubuntu.com/p/YBXBcsPgVK/
> 
> Murali Karicheri (1):
>    net: hsr/prp: add vlan support
> 
>   net/hsr/hsr_device.c  |  4 ----
>   net/hsr/hsr_forward.c | 16 +++++++++++++---
>   2 files changed, 13 insertions(+), 7 deletions(-)
> 
I am not sure if the packet flow is right for this?

VLAN over HSR frame format is like this.

<Start of Frame><VLAN tag><HSR Tag><IP><CRC>

My ifconfig stats shows both hsr and hsr0.100 interfaces receiving
frames.

So I did a WARN_ON() in HSR driver before frame is forwarded to upper
layer.

a0868495local@uda0868495:~/Projects/upstream-kernel$ git diff
diff --git a/net/hsr/hsr_forward.c b/net/hsr/hsr_forward.c
index de21df30b0d9..545a3cd8c71b 100644
--- a/net/hsr/hsr_forward.c
+++ b/net/hsr/hsr_forward.c
@@ -415,9 +415,11 @@ static void hsr_forward_do(struct hsr_frame_info 
*frame)
                 }

                 skb->dev = port->dev;
-               if (port->type == HSR_PT_MASTER)
+               if (port->type == HSR_PT_MASTER) {
+                       if (skb_vlan_tag_present(skb))
+                               WARN_ON(1);
                         hsr_deliver_master(skb, port->dev, 
frame->node_src);
-               else
+               } else
                         hsr_xmit(skb, port, frame);
         }
  }

And I get the trace shown below.

[  275.125431] WARNING: CPU: 0 PID: 0 at net/hsr/hsr_forward.c:420 
hsr_forward_skb+0x460/0x564
[  275.133822] Modules linked in: snd_soc_omap_hdmi snd_soc_ti_sdma 
snd_soc_core snd_pcm_dmaengine snd_pcm snd_time4
[  275.199705] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G        W 
5.9.0-rc1-00658-g473e463812c2-dirty #8
[  275.209573] Hardware name: Generic DRA74X (Flattened Device Tree)
[  275.215703] [<c011177c>] (unwind_backtrace) from [<c010b6f0>] 
(show_stack+0x10/0x14)
[  275.223487] [<c010b6f0>] (show_stack) from [<c055690c>] 
(dump_stack+0xc4/0xe4)
[  275.230747] [<c055690c>] (dump_stack) from [<c01386ac>] 
(__warn+0xc0/0xf4)
[  275.237656] [<c01386ac>] (__warn) from [<c0138a3c>] 
(warn_slowpath_fmt+0x58/0xb8)
[  275.245177] [<c0138a3c>] (warn_slowpath_fmt) from [<c09564bc>] 
(hsr_forward_skb+0x460/0x564)
[  275.253657] [<c09564bc>] (hsr_forward_skb) from [<c0955534>] 
(hsr_handle_frame+0x15c/0x190)
[  275.262047] [<c0955534>] (hsr_handle_frame) from [<c07c6704>] 
(__netif_receive_skb_core+0x23c/0xc88)
[  275.271223] [<c07c6704>] (__netif_receive_skb_core) from [<c07c7180>] 
(__netif_receive_skb_one_core+0x30/0x74)
[  275.281266] [<c07c7180>] (__netif_receive_skb_one_core) from 
[<c07c72a4>] (netif_receive_skb+0x50/0x1c4)
[  275.290793] [<c07c72a4>] (netif_receive_skb) from [<c071a55c>] 
(cpsw_rx_handler+0x230/0x308)
[  275.299272] [<c071a55c>] (cpsw_rx_handler) from [<c0715ee8>] 
(__cpdma_chan_process+0xf4/0x188)
[  275.307925] [<c0715ee8>] (__cpdma_chan_process) from [<c0717294>] 
(cpdma_chan_process+0x3c/0x5c)
[  275.316754] [<c0717294>] (cpdma_chan_process) from [<c071dd14>] 
(cpsw_rx_mq_poll+0x44/0x98)
[  275.325145] [<c071dd14>] (cpsw_rx_mq_poll) from [<c07c8ae0>] 
(net_rx_action+0xf0/0x400)
[  275.333185] [<c07c8ae0>] (net_rx_action) from [<c0101370>] 
(__do_softirq+0xf0/0x3ac)
[  275.340965] [<c0101370>] (__do_softirq) from [<c013f5ec>] 
(irq_exit+0xa8/0xe4)
[  275.348224] [<c013f5ec>] (irq_exit) from [<c0199344>] 
(__handle_domain_irq+0x6c/0xe0)
[  275.356093] [<c0199344>] (__handle_domain_irq) from [<c056f8fc>] 
(gic_handle_irq+0x4c/0xa8)
[  275.364481] [<c056f8fc>] (gic_handle_irq) from [<c0100b6c>] 
(__irq_svc+0x6c/0x90)
[  275.371996] Exception stack(0xc0e01f18 to 0xc0e01f60)

Shouldn't it show vlan_do_receive() ?

	if (skb_vlan_tag_present(skb)) {
		if (pt_prev) {
			ret = deliver_skb(skb, pt_prev, orig_dev);
			pt_prev = NULL;
		}
		if (vlan_do_receive(&skb))
			goto another_round;
		else if (unlikely(!skb))
			goto out;
	}

Thanks

-- 
Murali Karicheri
Texas Instruments

  parent reply	other threads:[~2020-09-02 16:15 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-01 19:54 [PATCH net-next 0/1] Support for VLAN interface over HSR/PRP Murali Karicheri
2020-09-01 19:54 ` [PATCH net-next 1/1] net: hsr/prp: add vlan support Murali Karicheri
2020-09-04 15:45   ` Willem de Bruijn
2020-09-08 16:38     ` Murali Karicheri
2020-09-08 17:34       ` Willem de Bruijn
2020-09-02 16:14 ` Murali Karicheri [this message]
2020-09-02 22:29   ` [PATCH net-next 0/1] Support for VLAN interface over HSR/PRP Murali Karicheri
2020-09-04 15:52     ` Willem de Bruijn
2020-09-08 16:55       ` Murali Karicheri
2020-09-08 17:51         ` Willem de Bruijn
2020-09-08 18:50           ` Willem de Bruijn
2020-09-09 16:08           ` Murali Karicheri

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=d93fbc54-1721-ebec-39ca-dc8b45e6e534@ti.com \
    --to=m-karicheri2@ti.com \
    --cc=davem@davemloft.net \
    --cc=grygorii.strashko@ti.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nsekhar@ti.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.