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 |