#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 {
	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;
} in_cache_entry;

struct in_cache_ops{
	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,
					 struct mpoa_client *client,
					 __be32 mask);
	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,
					struct mpoa_client *client );
	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);
};

typedef struct eg_cache_entry{
	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;
} eg_cache_entry;

struct eg_cache_ops{
	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);
};


/* 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
#define CLOSED 0

/* Egress cache entry states */

#define EGRESS_RESOLVED 2
#define EGRESS_PURGE    1
#define EGRESS_INVALID  0

#endif
