net: hsr: Provide RedBox support (HSR-SAN)
Introduce RedBox support (HSR-SAN to be more precise) for HSR networks.
Following traffic reduction optimizations have been implemented:
- Do not send HSR supervisory frames to Port C (interlink)
- Do not forward to HSR ring frames addressed to Port C
- Do not forward to Port C frames from HSR ring
- Do not send duplicate HSR frame to HSR ring when destination is Port C
The corresponding patch to modify iptable2 sources has already been sent:
https://lore.kernel.org/netdev/20240308145729.490863-1-lukma@denx.de/T/
Testing procedure (veth and netns):
-----------------------------------
One shall run:
linux-vanila/tools/testing/selftests/net/hsr/hsr_redbox.sh
(Detailed description of the setup one can find in the test
script file).
Testing procedure (real hardware):
----------------------------------
The EVB-KSZ9477 has been used for testing on net-next branch
(SHA1: 5fc68320c1
).
Ports 4/5 were used for SW managed HSR (hsr1) as first hsr0 for ports 1/2
(with HW offloading for ksz9477) was created. Port 3 has been used as
interlink port (single USB-ETH dongle).
Configuration - RedBox (EVB-KSZ9477):
if link set lan1 down;ip link set lan2 down
ip link add name hsr0 type hsr slave1 lan1 slave2 lan2 supervision 45 version 1
ip link add name hsr1 type hsr slave1 lan4 slave2 lan5 interlink lan3 supervision 45 version 1
ip link set lan4 up;ip link set lan5 up
ip link set lan3 up
ip addr add 192.168.0.11/24 dev hsr1
ip link set hsr1 up
Configuration - DAN-H (EVB-KSZ9477):
ip link set lan1 down;ip link set lan2 down
ip link add name hsr0 type hsr slave1 lan1 slave2 lan2 supervision 45 version 1
ip link add name hsr1 type hsr slave1 lan4 slave2 lan5 supervision 45 version 1
ip link set lan4 up;ip link set lan5 up
ip addr add 192.168.0.12/24 dev hsr1
ip link set hsr1 up
This approach uses only SW based HSR devices (hsr1).
-------------- ----------------- ------------
DAN-H Port5 | <------> | Port5 | |
Port4 | <------> | Port4 Port3 | <---> | PC
| | (RedBox) | | (USB-ETH)
EVB-KSZ9477 | | EVB-KSZ9477 | |
-------------- ----------------- ------------
Signed-off-by: Lukasz Majewski <lukma@denx.de>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
af0cb3fa3f
commit
5055cccfc2
@ -21,6 +21,7 @@
|
||||
*/
|
||||
#define HSR_LIFE_CHECK_INTERVAL 2000 /* ms */
|
||||
#define HSR_NODE_FORGET_TIME 60000 /* ms */
|
||||
#define HSR_PROXY_NODE_FORGET_TIME 60000 /* ms */
|
||||
#define HSR_ANNOUNCE_INTERVAL 100 /* ms */
|
||||
#define HSR_ENTRY_FORGET_TIME 400 /* ms */
|
||||
|
||||
@ -35,6 +36,7 @@
|
||||
* HSR_NODE_FORGET_TIME?
|
||||
*/
|
||||
#define PRUNE_PERIOD 3000 /* ms */
|
||||
#define PRUNE_PROXY_PERIOD 3000 /* ms */
|
||||
#define HSR_TLV_EOT 0 /* End of TLVs */
|
||||
#define HSR_TLV_ANNOUNCE 22
|
||||
#define HSR_TLV_LIFE_CHECK 23
|
||||
@ -192,11 +194,14 @@ struct hsr_priv {
|
||||
struct rcu_head rcu_head;
|
||||
struct list_head ports;
|
||||
struct list_head node_db; /* Known HSR nodes */
|
||||
struct list_head proxy_node_db; /* RedBox HSR proxy nodes */
|
||||
struct hsr_self_node __rcu *self_node; /* MACs of slaves */
|
||||
struct timer_list announce_timer; /* Supervision frame dispatch */
|
||||
struct timer_list prune_timer;
|
||||
struct timer_list prune_proxy_timer;
|
||||
int announce_count;
|
||||
u16 sequence_nr;
|
||||
u16 interlink_sequence_nr; /* Interlink port seq_nr */
|
||||
u16 sup_sequence_nr; /* For HSRv1 separate seq_nr for supervision */
|
||||
enum hsr_version prot_version; /* Indicate if HSRv0, HSRv1 or PRPv1 */
|
||||
spinlock_t seqnr_lock; /* locking for sequence_nr */
|
||||
@ -209,6 +214,8 @@ struct hsr_priv {
|
||||
* of lan_id
|
||||
*/
|
||||
bool fwd_offloaded; /* Forwarding offloaded to HW */
|
||||
bool redbox; /* Device supports HSR RedBox */
|
||||
unsigned char macaddress_redbox[ETH_ALEN];
|
||||
unsigned char sup_multicast_addr[ETH_ALEN] __aligned(sizeof(u16));
|
||||
/* Align to u16 boundary to avoid unaligned access
|
||||
* in ether_addr_equal
|
||||
|
Reference in New Issue
Block a user