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