| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #ifndef MPOA_CACHES_H
 | 
					
						
							|  |  |  | #define MPOA_CACHES_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/netdevice.h>
 | 
					
						
							|  |  |  | #include <linux/types.h>
 | 
					
						
							|  |  |  | #include <linux/atm.h>
 | 
					
						
							|  |  |  | #include <linux/atmdev.h>
 | 
					
						
							|  |  |  | #include <linux/atmmpc.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct mpoa_client; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void atm_mpoa_init_cache(struct mpoa_client *mpc); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct in_cache_entry { | 
					
						
							| 
									
										
										
										
											2007-02-09 23:24:29 +09:00
										 |  |  | 	struct in_cache_entry *next; | 
					
						
							|  |  |  | 	struct in_cache_entry *prev; | 
					
						
							|  |  |  | 	struct timeval  tv; | 
					
						
							|  |  |  | 	struct timeval  reply_wait; | 
					
						
							|  |  |  | 	struct timeval  hold_down; | 
					
						
							|  |  |  | 	uint32_t  packets_fwded; | 
					
						
							|  |  |  | 	uint16_t  entry_state; | 
					
						
							|  |  |  | 	uint32_t retry_time; | 
					
						
							|  |  |  | 	uint32_t refresh_time; | 
					
						
							|  |  |  | 	uint32_t count; | 
					
						
							|  |  |  | 	struct   atm_vcc *shortcut; | 
					
						
							|  |  |  | 	uint8_t  MPS_ctrl_ATM_addr[ATM_ESA_LEN]; | 
					
						
							|  |  |  | 	struct   in_ctrl_info ctrl_info; | 
					
						
							|  |  |  | 	atomic_t use; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } in_cache_entry; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct in_cache_ops{ | 
					
						
							| 
									
										
										
										
											2007-02-09 23:24:29 +09:00
										 |  |  | 	in_cache_entry *(*add_entry)(__be32 dst_ip, | 
					
						
							|  |  |  | 				      struct mpoa_client *client); | 
					
						
							|  |  |  | 	in_cache_entry *(*get)(__be32 dst_ip, struct mpoa_client *client); | 
					
						
							|  |  |  | 	in_cache_entry *(*get_with_mask)(__be32 dst_ip, | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 					 struct mpoa_client *client, | 
					
						
							| 
									
										
										
										
											2006-11-14 21:11:29 -08:00
										 |  |  | 					 __be32 mask); | 
					
						
							| 
									
										
										
										
											2007-02-09 23:24:29 +09:00
										 |  |  | 	in_cache_entry *(*get_by_vcc)(struct atm_vcc *vcc, | 
					
						
							|  |  |  | 				      struct mpoa_client *client); | 
					
						
							|  |  |  | 	void            (*put)(in_cache_entry *entry); | 
					
						
							|  |  |  | 	void            (*remove_entry)(in_cache_entry *delEntry, | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 					struct mpoa_client *client ); | 
					
						
							| 
									
										
										
										
											2007-02-09 23:24:29 +09:00
										 |  |  | 	int             (*cache_hit)(in_cache_entry *entry, | 
					
						
							|  |  |  | 				     struct mpoa_client *client); | 
					
						
							|  |  |  | 	void            (*clear_count)(struct mpoa_client *client); | 
					
						
							|  |  |  | 	void            (*check_resolving)(struct mpoa_client *client); | 
					
						
							|  |  |  | 	void            (*refresh)(struct mpoa_client *client); | 
					
						
							|  |  |  | 	void            (*destroy_cache)(struct mpoa_client *mpc); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct eg_cache_entry{ | 
					
						
							| 
									
										
										
										
											2007-02-09 23:24:29 +09:00
										 |  |  | 	struct               eg_cache_entry *next; | 
					
						
							|  |  |  | 	struct               eg_cache_entry *prev; | 
					
						
							|  |  |  | 	struct               timeval  tv; | 
					
						
							|  |  |  | 	uint8_t              MPS_ctrl_ATM_addr[ATM_ESA_LEN]; | 
					
						
							|  |  |  | 	struct atm_vcc       *shortcut; | 
					
						
							|  |  |  | 	uint32_t             packets_rcvd; | 
					
						
							|  |  |  | 	uint16_t             entry_state; | 
					
						
							|  |  |  | 	__be32             latest_ip_addr;    /* The src IP address of the last packet */ | 
					
						
							|  |  |  | 	struct eg_ctrl_info  ctrl_info; | 
					
						
							|  |  |  | 	atomic_t             use; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } eg_cache_entry; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct eg_cache_ops{ | 
					
						
							| 
									
										
										
										
											2007-02-09 23:24:29 +09:00
										 |  |  | 	eg_cache_entry *(*add_entry)(struct k_message *msg, struct mpoa_client *client); | 
					
						
							|  |  |  | 	eg_cache_entry *(*get_by_cache_id)(__be32 cache_id, struct mpoa_client *client); | 
					
						
							|  |  |  | 	eg_cache_entry *(*get_by_tag)(__be32 cache_id, struct mpoa_client *client); | 
					
						
							|  |  |  | 	eg_cache_entry *(*get_by_vcc)(struct atm_vcc *vcc, struct mpoa_client *client); | 
					
						
							|  |  |  | 	eg_cache_entry *(*get_by_src_ip)(__be32 ipaddr, struct mpoa_client *client); | 
					
						
							|  |  |  | 	void            (*put)(eg_cache_entry *entry); | 
					
						
							|  |  |  | 	void            (*remove_entry)(eg_cache_entry *entry, struct mpoa_client *client); | 
					
						
							|  |  |  | 	void            (*update)(eg_cache_entry *entry, uint16_t holding_time); | 
					
						
							|  |  |  | 	void            (*clear_expired)(struct mpoa_client *client); | 
					
						
							|  |  |  | 	void            (*destroy_cache)(struct mpoa_client *mpc); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Ingress cache entry states */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define INGRESS_REFRESHING 3
 | 
					
						
							|  |  |  | #define INGRESS_RESOLVED   2
 | 
					
						
							|  |  |  | #define INGRESS_RESOLVING  1
 | 
					
						
							|  |  |  | #define INGRESS_INVALID    0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* VCC states */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define OPEN   1
 | 
					
						
							| 
									
										
										
										
											2007-02-09 23:24:29 +09:00
										 |  |  | #define CLOSED 0
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* Egress cache entry states */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define EGRESS_RESOLVED 2
 | 
					
						
							|  |  |  | #define EGRESS_PURGE    1
 | 
					
						
							|  |  |  | #define EGRESS_INVALID  0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |