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 13 struct mpoa_client; 14 15 void atm_mpoa_init_cache(struct mpoa_client *mpc); 16 17 typedef 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 34 struct 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 54 typedef 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 67 struct 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 100