1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* Copyright 2011-2014 Autronica Fire and Security AS 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Author(s): 5*4882a593Smuzhiyun * 2011-2014 Arvid Brodin, arvid.brodin@alten.se 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * include file for HSR and PRP. 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef __HSR_FRAMEREG_H 11*4882a593Smuzhiyun #define __HSR_FRAMEREG_H 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #include "hsr_main.h" 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun struct hsr_node; 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun struct hsr_frame_info { 18*4882a593Smuzhiyun struct sk_buff *skb_std; 19*4882a593Smuzhiyun struct sk_buff *skb_hsr; 20*4882a593Smuzhiyun struct sk_buff *skb_prp; 21*4882a593Smuzhiyun struct hsr_port *port_rcv; 22*4882a593Smuzhiyun struct hsr_node *node_src; 23*4882a593Smuzhiyun u16 sequence_nr; 24*4882a593Smuzhiyun bool is_supervision; 25*4882a593Smuzhiyun bool is_vlan; 26*4882a593Smuzhiyun bool is_local_dest; 27*4882a593Smuzhiyun bool is_local_exclusive; 28*4882a593Smuzhiyun bool is_from_san; 29*4882a593Smuzhiyun }; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun void hsr_del_self_node(struct hsr_priv *hsr); 32*4882a593Smuzhiyun void hsr_del_nodes(struct list_head *node_db); 33*4882a593Smuzhiyun struct hsr_node *hsr_get_node(struct hsr_port *port, struct list_head *node_db, 34*4882a593Smuzhiyun struct sk_buff *skb, bool is_sup, 35*4882a593Smuzhiyun enum hsr_port_type rx_port); 36*4882a593Smuzhiyun void hsr_handle_sup_frame(struct hsr_frame_info *frame); 37*4882a593Smuzhiyun bool hsr_addr_is_self(struct hsr_priv *hsr, unsigned char *addr); 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun void hsr_addr_subst_source(struct hsr_node *node, struct sk_buff *skb); 40*4882a593Smuzhiyun void hsr_addr_subst_dest(struct hsr_node *node_src, struct sk_buff *skb, 41*4882a593Smuzhiyun struct hsr_port *port); 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun void hsr_register_frame_in(struct hsr_node *node, struct hsr_port *port, 44*4882a593Smuzhiyun u16 sequence_nr); 45*4882a593Smuzhiyun int hsr_register_frame_out(struct hsr_port *port, struct hsr_node *node, 46*4882a593Smuzhiyun u16 sequence_nr); 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun void hsr_prune_nodes(struct timer_list *t); 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun int hsr_create_self_node(struct hsr_priv *hsr, 51*4882a593Smuzhiyun unsigned char addr_a[ETH_ALEN], 52*4882a593Smuzhiyun unsigned char addr_b[ETH_ALEN]); 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun void *hsr_get_next_node(struct hsr_priv *hsr, void *_pos, 55*4882a593Smuzhiyun unsigned char addr[ETH_ALEN]); 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun int hsr_get_node_data(struct hsr_priv *hsr, 58*4882a593Smuzhiyun const unsigned char *addr, 59*4882a593Smuzhiyun unsigned char addr_b[ETH_ALEN], 60*4882a593Smuzhiyun unsigned int *addr_b_ifindex, 61*4882a593Smuzhiyun int *if1_age, 62*4882a593Smuzhiyun u16 *if1_seq, 63*4882a593Smuzhiyun int *if2_age, 64*4882a593Smuzhiyun u16 *if2_seq); 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun void prp_handle_san_frame(bool san, enum hsr_port_type port, 67*4882a593Smuzhiyun struct hsr_node *node); 68*4882a593Smuzhiyun void prp_update_san_info(struct hsr_node *node, bool is_sup); 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun struct hsr_node { 71*4882a593Smuzhiyun struct list_head mac_list; 72*4882a593Smuzhiyun unsigned char macaddress_A[ETH_ALEN]; 73*4882a593Smuzhiyun unsigned char macaddress_B[ETH_ALEN]; 74*4882a593Smuzhiyun /* Local slave through which AddrB frames are received from this node */ 75*4882a593Smuzhiyun enum hsr_port_type addr_B_port; 76*4882a593Smuzhiyun unsigned long time_in[HSR_PT_PORTS]; 77*4882a593Smuzhiyun bool time_in_stale[HSR_PT_PORTS]; 78*4882a593Smuzhiyun unsigned long time_out[HSR_PT_PORTS]; 79*4882a593Smuzhiyun /* if the node is a SAN */ 80*4882a593Smuzhiyun bool san_a; 81*4882a593Smuzhiyun bool san_b; 82*4882a593Smuzhiyun u16 seq_out[HSR_PT_PORTS]; 83*4882a593Smuzhiyun struct rcu_head rcu_head; 84*4882a593Smuzhiyun }; 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun #endif /* __HSR_FRAMEREG_H */ 87