2019-04-05 20:31:34 +03:00
/* SPDX-License-Identifier: GPL-2.0 */
2014-07-05 01:34:38 +04:00
/* Copyright 2011-2014 Autronica Fire and Security AS
2013-10-31 00:10:47 +04:00
*
* Author ( s ) :
2014-07-05 01:34:38 +04:00
* 2011 - 2014 Arvid Brodin , arvid . brodin @ alten . se
2013-10-31 00:10:47 +04:00
*/
2014-07-05 01:34:38 +04:00
# ifndef __HSR_FRAMEREG_H
# define __HSR_FRAMEREG_H
2013-10-31 00:10:47 +04:00
# include "hsr_main.h"
2014-07-05 01:34:38 +04:00
struct hsr_node ;
2013-10-31 00:10:47 +04:00
2019-12-22 14:26:54 +03:00
void hsr_del_self_node ( struct hsr_priv * hsr ) ;
2019-07-04 03:21:13 +03:00
void hsr_del_nodes ( struct list_head * node_db ) ;
2017-06-12 22:06:26 +03:00
struct hsr_node * hsr_get_node ( struct hsr_port * port , struct sk_buff * skb ,
2014-07-05 01:41:03 +04:00
bool is_sup ) ;
void hsr_handle_sup_frame ( struct sk_buff * skb , struct hsr_node * node_curr ,
struct hsr_port * port ) ;
bool hsr_addr_is_self ( struct hsr_priv * hsr , unsigned char * addr ) ;
void hsr_addr_subst_source ( struct hsr_node * node , struct sk_buff * skb ) ;
void hsr_addr_subst_dest ( struct hsr_node * node_src , struct sk_buff * skb ,
2014-07-05 01:38:05 +04:00
struct hsr_port * port ) ;
2013-10-31 00:10:47 +04:00
2014-07-05 01:41:03 +04:00
void hsr_register_frame_in ( struct hsr_node * node , struct hsr_port * port ,
u16 sequence_nr ) ;
int hsr_register_frame_out ( struct hsr_port * port , struct hsr_node * node ,
u16 sequence_nr ) ;
2013-10-31 00:10:47 +04:00
2017-10-24 11:46:16 +03:00
void hsr_prune_nodes ( struct timer_list * t ) ;
2013-10-31 00:10:47 +04:00
2019-12-22 14:26:54 +03:00
int hsr_create_self_node ( struct hsr_priv * hsr ,
2013-10-31 00:10:47 +04:00
unsigned char addr_a [ ETH_ALEN ] ,
unsigned char addr_b [ ETH_ALEN ] ) ;
2014-07-05 01:34:38 +04:00
void * hsr_get_next_node ( struct hsr_priv * hsr , void * _pos ,
2013-10-31 00:10:47 +04:00
unsigned char addr [ ETH_ALEN ] ) ;
2014-07-05 01:34:38 +04:00
int hsr_get_node_data ( struct hsr_priv * hsr ,
2013-10-31 00:10:47 +04:00
const unsigned char * addr ,
unsigned char addr_b [ ETH_ALEN ] ,
unsigned int * addr_b_ifindex ,
int * if1_age ,
u16 * if1_seq ,
int * if2_age ,
u16 * if2_seq ) ;
2019-04-05 20:31:35 +03:00
struct hsr_node {
struct list_head mac_list ;
unsigned char macaddress_A [ ETH_ALEN ] ;
unsigned char macaddress_B [ ETH_ALEN ] ;
/* Local slave through which AddrB frames are received from this node */
enum hsr_port_type addr_B_port ;
unsigned long time_in [ HSR_PT_PORTS ] ;
bool time_in_stale [ HSR_PT_PORTS ] ;
u16 seq_out [ HSR_PT_PORTS ] ;
struct rcu_head rcu_head ;
} ;
2014-07-05 01:34:38 +04:00
# endif /* __HSR_FRAMEREG_H */