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