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

mpoa_caches.h (3137B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef MPOA_CACHES_H
      3#define MPOA_CACHES_H
      4
      5#include <linux/time64.h>
      6#include <linux/netdevice.h>
      7#include <linux/types.h>
      8#include <linux/atm.h>
      9#include <linux/atmdev.h>
     10#include <linux/atmmpc.h>
     11#include <linux/refcount.h>
     12
     13struct mpoa_client;
     14
     15void atm_mpoa_init_cache(struct mpoa_client *mpc);
     16
     17typedef struct in_cache_entry {
     18	struct in_cache_entry *next;
     19	struct in_cache_entry *prev;
     20	time64_t  time;
     21	time64_t  reply_wait;
     22	time64_t  hold_down;
     23	uint32_t  packets_fwded;
     24	uint16_t  entry_state;
     25	uint32_t retry_time;
     26	uint32_t refresh_time;
     27	uint32_t count;
     28	struct   atm_vcc *shortcut;
     29	uint8_t  MPS_ctrl_ATM_addr[ATM_ESA_LEN];
     30	struct   in_ctrl_info ctrl_info;
     31	refcount_t use;
     32} in_cache_entry;
     33
     34struct in_cache_ops{
     35	in_cache_entry *(*add_entry)(__be32 dst_ip,
     36				      struct mpoa_client *client);
     37	in_cache_entry *(*get)(__be32 dst_ip, struct mpoa_client *client);
     38	in_cache_entry *(*get_with_mask)(__be32 dst_ip,
     39					 struct mpoa_client *client,
     40					 __be32 mask);
     41	in_cache_entry *(*get_by_vcc)(struct atm_vcc *vcc,
     42				      struct mpoa_client *client);
     43	void            (*put)(in_cache_entry *entry);
     44	void            (*remove_entry)(in_cache_entry *delEntry,
     45					struct mpoa_client *client );
     46	int             (*cache_hit)(in_cache_entry *entry,
     47				     struct mpoa_client *client);
     48	void            (*clear_count)(struct mpoa_client *client);
     49	void            (*check_resolving)(struct mpoa_client *client);
     50	void            (*refresh)(struct mpoa_client *client);
     51	void            (*destroy_cache)(struct mpoa_client *mpc);
     52};
     53
     54typedef struct eg_cache_entry{
     55	struct               eg_cache_entry *next;
     56	struct               eg_cache_entry *prev;
     57	time64_t	     time;
     58	uint8_t              MPS_ctrl_ATM_addr[ATM_ESA_LEN];
     59	struct atm_vcc       *shortcut;
     60	uint32_t             packets_rcvd;
     61	uint16_t             entry_state;
     62	__be32             latest_ip_addr;    /* The src IP address of the last packet */
     63	struct eg_ctrl_info  ctrl_info;
     64	refcount_t             use;
     65} eg_cache_entry;
     66
     67struct eg_cache_ops{
     68	eg_cache_entry *(*add_entry)(struct k_message *msg, struct mpoa_client *client);
     69	eg_cache_entry *(*get_by_cache_id)(__be32 cache_id, struct mpoa_client *client);
     70	eg_cache_entry *(*get_by_tag)(__be32 cache_id, struct mpoa_client *client);
     71	eg_cache_entry *(*get_by_vcc)(struct atm_vcc *vcc, struct mpoa_client *client);
     72	eg_cache_entry *(*get_by_src_ip)(__be32 ipaddr, struct mpoa_client *client);
     73	void            (*put)(eg_cache_entry *entry);
     74	void            (*remove_entry)(eg_cache_entry *entry, struct mpoa_client *client);
     75	void            (*update)(eg_cache_entry *entry, uint16_t holding_time);
     76	void            (*clear_expired)(struct mpoa_client *client);
     77	void            (*destroy_cache)(struct mpoa_client *mpc);
     78};
     79
     80
     81/* Ingress cache entry states */
     82
     83#define INGRESS_REFRESHING 3
     84#define INGRESS_RESOLVED   2
     85#define INGRESS_RESOLVING  1
     86#define INGRESS_INVALID    0
     87
     88/* VCC states */
     89
     90#define OPEN   1
     91#define CLOSED 0
     92
     93/* Egress cache entry states */
     94
     95#define EGRESS_RESOLVED 2
     96#define EGRESS_PURGE    1
     97#define EGRESS_INVALID  0
     98
     99#endif