cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hsr_framereg.h (2757B)


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