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

br_private_cfm.h (4445B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2
      3#ifndef _BR_PRIVATE_CFM_H_
      4#define _BR_PRIVATE_CFM_H_
      5
      6#include "br_private.h"
      7#include <uapi/linux/cfm_bridge.h>
      8
      9struct br_cfm_mep_create {
     10	enum br_cfm_domain domain; /* Domain for this MEP */
     11	enum br_cfm_mep_direction direction; /* Up or Down MEP direction */
     12	u32 ifindex; /* Residence port */
     13};
     14
     15int br_cfm_mep_create(struct net_bridge *br,
     16		      const u32 instance,
     17		      struct br_cfm_mep_create *const create,
     18		      struct netlink_ext_ack *extack);
     19
     20int br_cfm_mep_delete(struct net_bridge *br,
     21		      const u32 instance,
     22		      struct netlink_ext_ack *extack);
     23
     24struct br_cfm_mep_config {
     25	u32 mdlevel;
     26	u32 mepid; /* MEPID for this MEP */
     27	struct mac_addr unicast_mac; /* The MEP unicast MAC */
     28};
     29
     30int br_cfm_mep_config_set(struct net_bridge *br,
     31			  const u32 instance,
     32			  const struct br_cfm_mep_config *const config,
     33			  struct netlink_ext_ack *extack);
     34
     35struct br_cfm_maid {
     36	u8 data[CFM_MAID_LENGTH];
     37};
     38
     39struct br_cfm_cc_config {
     40	/* Expected received CCM PDU MAID. */
     41	struct br_cfm_maid exp_maid;
     42
     43	/* Expected received CCM PDU interval. */
     44	/* Transmitting CCM PDU interval when CCM tx is enabled. */
     45	enum br_cfm_ccm_interval exp_interval;
     46
     47	bool enable; /* Enable/disable CCM PDU handling */
     48};
     49
     50int br_cfm_cc_config_set(struct net_bridge *br,
     51			 const u32 instance,
     52			 const struct br_cfm_cc_config *const config,
     53			 struct netlink_ext_ack *extack);
     54
     55int br_cfm_cc_peer_mep_add(struct net_bridge *br, const u32 instance,
     56			   u32 peer_mep_id,
     57			   struct netlink_ext_ack *extack);
     58int br_cfm_cc_peer_mep_remove(struct net_bridge *br, const u32 instance,
     59			      u32 peer_mep_id,
     60			      struct netlink_ext_ack *extack);
     61
     62/* Transmitted CCM Remote Defect Indication status set.
     63 * This RDI is inserted in transmitted CCM PDUs if CCM transmission is enabled.
     64 * See br_cfm_cc_ccm_tx() with interval != BR_CFM_CCM_INTERVAL_NONE
     65 */
     66int br_cfm_cc_rdi_set(struct net_bridge *br, const u32 instance,
     67		      const bool rdi, struct netlink_ext_ack *extack);
     68
     69/* OAM PDU Tx information */
     70struct br_cfm_cc_ccm_tx_info {
     71	struct mac_addr dmac;
     72	/* The CCM will be transmitted for this period in seconds.
     73	 * Call br_cfm_cc_ccm_tx before timeout to keep transmission alive.
     74	 * When period is zero any ongoing transmission will be stopped.
     75	 */
     76	u32 period;
     77
     78	bool seq_no_update; /* Update Tx CCM sequence number */
     79	bool if_tlv; /* Insert Interface Status TLV */
     80	u8 if_tlv_value; /* Interface Status TLV value */
     81	bool port_tlv; /* Insert Port Status TLV */
     82	u8 port_tlv_value; /* Port Status TLV value */
     83	/* Sender ID TLV ??
     84	 * Organization-Specific TLV ??
     85	 */
     86};
     87
     88int br_cfm_cc_ccm_tx(struct net_bridge *br, const u32 instance,
     89		     const struct br_cfm_cc_ccm_tx_info *const tx_info,
     90		     struct netlink_ext_ack *extack);
     91
     92struct br_cfm_mep_status {
     93	/* Indications that an OAM PDU has been seen. */
     94	bool opcode_unexp_seen; /* RX of OAM PDU with unexpected opcode */
     95	bool version_unexp_seen; /* RX of OAM PDU with unexpected version */
     96	bool rx_level_low_seen; /* Rx of OAM PDU with level low */
     97};
     98
     99struct br_cfm_cc_peer_status {
    100	/* This CCM related status is based on the latest received CCM PDU. */
    101	u8 port_tlv_value; /* Port Status TLV value */
    102	u8 if_tlv_value; /* Interface Status TLV value */
    103
    104	/* CCM has not been received for 3.25 intervals */
    105	u8 ccm_defect:1;
    106
    107	/* (RDI == 1) for last received CCM PDU */
    108	u8 rdi:1;
    109
    110	/* Indications that a CCM PDU has been seen. */
    111	u8 seen:1; /* CCM PDU received */
    112	u8 tlv_seen:1; /* CCM PDU with TLV received */
    113	/* CCM PDU with unexpected sequence number received */
    114	u8 seq_unexp_seen:1;
    115};
    116
    117struct br_cfm_mep {
    118	/* list header of MEP instances */
    119	struct hlist_node		head;
    120	u32				instance;
    121	struct br_cfm_mep_create	create;
    122	struct br_cfm_mep_config	config;
    123	struct br_cfm_cc_config		cc_config;
    124	struct br_cfm_cc_ccm_tx_info	cc_ccm_tx_info;
    125	/* List of multiple peer MEPs */
    126	struct hlist_head		peer_mep_list;
    127	struct net_bridge_port __rcu	*b_port;
    128	unsigned long			ccm_tx_end;
    129	struct delayed_work		ccm_tx_dwork;
    130	u32				ccm_tx_snumber;
    131	u32				ccm_rx_snumber;
    132	struct br_cfm_mep_status	status;
    133	bool				rdi;
    134	struct rcu_head			rcu;
    135};
    136
    137struct br_cfm_peer_mep {
    138	struct hlist_node		head;
    139	struct br_cfm_mep		*mep;
    140	struct delayed_work		ccm_rx_dwork;
    141	u32				mepid;
    142	struct br_cfm_cc_peer_status	cc_status;
    143	u32				ccm_rx_count_miss;
    144	struct rcu_head			rcu;
    145};
    146
    147#endif /* _BR_PRIVATE_CFM_H_ */