| 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 { | 
| YOSHIFUJI Hideaki | f7d5745 | 2007-02-09 23:24:29 +0900 | [diff] [blame] | 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; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 29 | } in_cache_entry; | 
|  | 30 |  | 
|  | 31 | struct in_cache_ops{ | 
| YOSHIFUJI Hideaki | f7d5745 | 2007-02-09 23:24:29 +0900 | [diff] [blame] | 32 | in_cache_entry *(*add_entry)(__be32 dst_ip, | 
|  | 33 | struct mpoa_client *client); | 
|  | 34 | in_cache_entry *(*get)(__be32 dst_ip, struct mpoa_client *client); | 
|  | 35 | in_cache_entry *(*get_with_mask)(__be32 dst_ip, | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 36 | struct mpoa_client *client, | 
| Al Viro | 30d492d | 2006-11-14 21:11:29 -0800 | [diff] [blame] | 37 | __be32 mask); | 
| YOSHIFUJI Hideaki | f7d5745 | 2007-02-09 23:24:29 +0900 | [diff] [blame] | 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, | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 42 | struct mpoa_client *client ); | 
| YOSHIFUJI Hideaki | f7d5745 | 2007-02-09 23:24:29 +0900 | [diff] [blame] | 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); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 49 | }; | 
|  | 50 |  | 
|  | 51 | typedef struct eg_cache_entry{ | 
| YOSHIFUJI Hideaki | f7d5745 | 2007-02-09 23:24:29 +0900 | [diff] [blame] | 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 | __be32             latest_ip_addr;    /* The src IP address of the last packet */ | 
|  | 60 | struct eg_ctrl_info  ctrl_info; | 
|  | 61 | atomic_t             use; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 62 | } eg_cache_entry; | 
|  | 63 |  | 
|  | 64 | struct eg_cache_ops{ | 
| YOSHIFUJI Hideaki | f7d5745 | 2007-02-09 23:24:29 +0900 | [diff] [blame] | 65 | eg_cache_entry *(*add_entry)(struct k_message *msg, struct mpoa_client *client); | 
|  | 66 | eg_cache_entry *(*get_by_cache_id)(__be32 cache_id, struct mpoa_client *client); | 
|  | 67 | eg_cache_entry *(*get_by_tag)(__be32 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)(__be32 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); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
| YOSHIFUJI Hideaki | f7d5745 | 2007-02-09 23:24:29 +0900 | [diff] [blame] | 88 | #define CLOSED 0 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |