diff mbox series

[net] net: hsr: add support for EntryForgetTime

Message ID 20210224094653.1440-1-marco.wenzel@a-eberle.de
State New
Headers show
Series [net] net: hsr: add support for EntryForgetTime | expand

Commit Message

Wenzel, Marco Feb. 24, 2021, 9:46 a.m. UTC
In IEC 62439-3 EntryForgetTime is defined with a value of 400 ms. When a
node does not send any frame within this time, the sequence number check
for can be ignored. This solves communication issues with Cisco IE 2000
in Redbox mode.

Fixes: f421436a591d ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)")
Signed-off-by: Marco Wenzel <marco.wenzel@a-eberle.de>
Reviewed-by: George McCollister <george.mccollister@gmail.com>
Tested-by: George McCollister <george.mccollister@gmail.com>
---
 net/hsr/hsr_framereg.c | 9 +++++++--
 net/hsr/hsr_framereg.h | 1 +
 net/hsr/hsr_main.h     | 1 +
 3 files changed, 9 insertions(+), 2 deletions(-)

Comments

Andrew Lunn Feb. 24, 2021, 1:55 p.m. UTC | #1
On Wed, Feb 24, 2021 at 10:46:49AM +0100, Marco Wenzel wrote:
> In IEC 62439-3 EntryForgetTime is defined with a value of 400 ms. When a
> node does not send any frame within this time, the sequence number check
> for can be ignored. This solves communication issues with Cisco IE 2000
> in Redbox mode.
> 
> Fixes: f421436a591d ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)")
> Signed-off-by: Marco Wenzel <marco.wenzel@a-eberle.de>
> Reviewed-by: George McCollister <george.mccollister@gmail.com>
> Tested-by: George McCollister <george.mccollister@gmail.com>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew
Jakub Kicinski Feb. 25, 2021, 5:49 p.m. UTC | #2
On Wed, 24 Feb 2021 14:55:17 +0100 Andrew Lunn wrote:
> On Wed, Feb 24, 2021 at 10:46:49AM +0100, Marco Wenzel wrote:

> > In IEC 62439-3 EntryForgetTime is defined with a value of 400 ms. When a

> > node does not send any frame within this time, the sequence number check

> > for can be ignored. This solves communication issues with Cisco IE 2000

> > in Redbox mode.

> > 

> > Fixes: f421436a591d ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)")

> > Signed-off-by: Marco Wenzel <marco.wenzel@a-eberle.de>

> > Reviewed-by: George McCollister <george.mccollister@gmail.com>

> > Tested-by: George McCollister <george.mccollister@gmail.com>  

> 

> Reviewed-by: Andrew Lunn <andrew@lunn.ch>


Applied, thanks!
Wenzel, Marco Feb. 26, 2021, 7:23 a.m. UTC | #3
On Thu, Feb 25, 2021 at 6:49 PM Jakub Kicinski <kuba@kernel.org> wrote:
> 
> On Wed, 24 Feb 2021 14:55:17 +0100 Andrew Lunn wrote:
> > On Wed, Feb 24, 2021 at 10:46:49AM +0100, Marco Wenzel wrote:
> > > In IEC 62439-3 EntryForgetTime is defined with a value of 400 ms.
> > > When a node does not send any frame within this time, the sequence
> > > number check for can be ignored. This solves communication issues
> > > with Cisco IE 2000 in Redbox mode.
> > >
> > > Fixes: f421436a591d ("net/hsr: Add support for the High-availability
> > > Seamless Redundancy protocol (HSRv0)")
> > > Signed-off-by: Marco Wenzel <marco.wenzel@a-eberle.de>
> > > Reviewed-by: George McCollister <george.mccollister@gmail.com>
> > > Tested-by: George McCollister <george.mccollister@gmail.com>
> >
> > Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> 
> Applied, thanks!

Thank you all for supporting me during the submission of my first kernel patch!

Best regards,
Marco
diff mbox series

Patch

diff --git a/net/hsr/hsr_framereg.c b/net/hsr/hsr_framereg.c
index f9a8cc82ae2e..bb1351c38397 100644
--- a/net/hsr/hsr_framereg.c
+++ b/net/hsr/hsr_framereg.c
@@ -164,8 +164,10 @@  static struct hsr_node *hsr_add_node(struct hsr_priv *hsr,
 	 * as initialization. (0 could trigger an spurious ring error warning).
 	 */
 	now = jiffies;
-	for (i = 0; i < HSR_PT_PORTS; i++)
+	for (i = 0; i < HSR_PT_PORTS; i++) {
 		new_node->time_in[i] = now;
+		new_node->time_out[i] = now;
+	}
 	for (i = 0; i < HSR_PT_PORTS; i++)
 		new_node->seq_out[i] = seq_out;
 
@@ -413,9 +415,12 @@  void hsr_register_frame_in(struct hsr_node *node, struct hsr_port *port,
 int hsr_register_frame_out(struct hsr_port *port, struct hsr_node *node,
 			   u16 sequence_nr)
 {
-	if (seq_nr_before_or_eq(sequence_nr, node->seq_out[port->type]))
+	if (seq_nr_before_or_eq(sequence_nr, node->seq_out[port->type]) &&
+	    time_is_after_jiffies(node->time_out[port->type] +
+	    msecs_to_jiffies(HSR_ENTRY_FORGET_TIME)))
 		return 1;
 
+	node->time_out[port->type] = jiffies;
 	node->seq_out[port->type] = sequence_nr;
 	return 0;
 }
diff --git a/net/hsr/hsr_framereg.h b/net/hsr/hsr_framereg.h
index 86b43f539f2c..d9628e7a5f05 100644
--- a/net/hsr/hsr_framereg.h
+++ b/net/hsr/hsr_framereg.h
@@ -75,6 +75,7 @@  struct hsr_node {
 	enum hsr_port_type	addr_B_port;
 	unsigned long		time_in[HSR_PT_PORTS];
 	bool			time_in_stale[HSR_PT_PORTS];
+	unsigned long		time_out[HSR_PT_PORTS];
 	/* if the node is a SAN */
 	bool			san_a;
 	bool			san_b;
diff --git a/net/hsr/hsr_main.h b/net/hsr/hsr_main.h
index a169808ee78a..8f264672b70b 100644
--- a/net/hsr/hsr_main.h
+++ b/net/hsr/hsr_main.h
@@ -22,6 +22,7 @@ 
 #define HSR_LIFE_CHECK_INTERVAL		 2000 /* ms */
 #define HSR_NODE_FORGET_TIME		60000 /* ms */
 #define HSR_ANNOUNCE_INTERVAL		  100 /* ms */
+#define HSR_ENTRY_FORGET_TIME		  400 /* ms */
 
 /* By how much may slave1 and slave2 timestamps of latest received frame from
  * each node differ before we notify of communication problem?