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