xref: /openbmc/linux/net/atm/mpoa_caches.h (revision 552c69b36ebd966186573b9c7a286b390935cce1)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds #ifndef MPOA_CACHES_H
31da177e4SLinus Torvalds #define MPOA_CACHES_H
41da177e4SLinus Torvalds 
5*d750dbdcSTina Ruchandani #include <linux/time64.h>
61da177e4SLinus Torvalds #include <linux/netdevice.h>
71da177e4SLinus Torvalds #include <linux/types.h>
81da177e4SLinus Torvalds #include <linux/atm.h>
91da177e4SLinus Torvalds #include <linux/atmdev.h>
101da177e4SLinus Torvalds #include <linux/atmmpc.h>
1193714912SReshetova, Elena #include <linux/refcount.h>
121da177e4SLinus Torvalds 
131da177e4SLinus Torvalds struct mpoa_client;
141da177e4SLinus Torvalds 
151da177e4SLinus Torvalds void atm_mpoa_init_cache(struct mpoa_client *mpc);
161da177e4SLinus Torvalds 
171da177e4SLinus Torvalds typedef struct in_cache_entry {
181da177e4SLinus Torvalds 	struct in_cache_entry *next;
191da177e4SLinus Torvalds 	struct in_cache_entry *prev;
20*d750dbdcSTina Ruchandani 	time64_t  time;
21*d750dbdcSTina Ruchandani 	time64_t  reply_wait;
22*d750dbdcSTina Ruchandani 	time64_t  hold_down;
231da177e4SLinus Torvalds 	uint32_t  packets_fwded;
241da177e4SLinus Torvalds 	uint16_t  entry_state;
251da177e4SLinus Torvalds 	uint32_t retry_time;
261da177e4SLinus Torvalds 	uint32_t refresh_time;
271da177e4SLinus Torvalds 	uint32_t count;
281da177e4SLinus Torvalds 	struct   atm_vcc *shortcut;
291da177e4SLinus Torvalds 	uint8_t  MPS_ctrl_ATM_addr[ATM_ESA_LEN];
301da177e4SLinus Torvalds 	struct   in_ctrl_info ctrl_info;
3193714912SReshetova, Elena 	refcount_t use;
321da177e4SLinus Torvalds } in_cache_entry;
331da177e4SLinus Torvalds 
341da177e4SLinus Torvalds struct in_cache_ops{
3530d492daSAl Viro 	in_cache_entry *(*add_entry)(__be32 dst_ip,
361da177e4SLinus Torvalds 				      struct mpoa_client *client);
3730d492daSAl Viro 	in_cache_entry *(*get)(__be32 dst_ip, struct mpoa_client *client);
3830d492daSAl Viro 	in_cache_entry *(*get_with_mask)(__be32 dst_ip,
391da177e4SLinus Torvalds 					 struct mpoa_client *client,
4030d492daSAl Viro 					 __be32 mask);
411da177e4SLinus Torvalds 	in_cache_entry *(*get_by_vcc)(struct atm_vcc *vcc,
421da177e4SLinus Torvalds 				      struct mpoa_client *client);
431da177e4SLinus Torvalds 	void            (*put)(in_cache_entry *entry);
441da177e4SLinus Torvalds 	void            (*remove_entry)(in_cache_entry *delEntry,
451da177e4SLinus Torvalds 					struct mpoa_client *client );
461da177e4SLinus Torvalds 	int             (*cache_hit)(in_cache_entry *entry,
471da177e4SLinus Torvalds 				     struct mpoa_client *client);
481da177e4SLinus Torvalds 	void            (*clear_count)(struct mpoa_client *client);
491da177e4SLinus Torvalds 	void            (*check_resolving)(struct mpoa_client *client);
501da177e4SLinus Torvalds 	void            (*refresh)(struct mpoa_client *client);
511da177e4SLinus Torvalds 	void            (*destroy_cache)(struct mpoa_client *mpc);
521da177e4SLinus Torvalds };
531da177e4SLinus Torvalds 
541da177e4SLinus Torvalds typedef struct eg_cache_entry{
551da177e4SLinus Torvalds 	struct               eg_cache_entry *next;
561da177e4SLinus Torvalds 	struct               eg_cache_entry *prev;
57*d750dbdcSTina Ruchandani 	time64_t	     time;
581da177e4SLinus Torvalds 	uint8_t              MPS_ctrl_ATM_addr[ATM_ESA_LEN];
591da177e4SLinus Torvalds 	struct atm_vcc       *shortcut;
601da177e4SLinus Torvalds 	uint32_t             packets_rcvd;
611da177e4SLinus Torvalds 	uint16_t             entry_state;
6230d492daSAl Viro 	__be32             latest_ip_addr;    /* The src IP address of the last packet */
631da177e4SLinus Torvalds 	struct eg_ctrl_info  ctrl_info;
64e00bdbefSReshetova, Elena 	refcount_t             use;
651da177e4SLinus Torvalds } eg_cache_entry;
661da177e4SLinus Torvalds 
671da177e4SLinus Torvalds struct eg_cache_ops{
681da177e4SLinus Torvalds 	eg_cache_entry *(*add_entry)(struct k_message *msg, struct mpoa_client *client);
6930d492daSAl Viro 	eg_cache_entry *(*get_by_cache_id)(__be32 cache_id, struct mpoa_client *client);
7030d492daSAl Viro 	eg_cache_entry *(*get_by_tag)(__be32 cache_id, struct mpoa_client *client);
711da177e4SLinus Torvalds 	eg_cache_entry *(*get_by_vcc)(struct atm_vcc *vcc, struct mpoa_client *client);
7230d492daSAl Viro 	eg_cache_entry *(*get_by_src_ip)(__be32 ipaddr, struct mpoa_client *client);
731da177e4SLinus Torvalds 	void            (*put)(eg_cache_entry *entry);
741da177e4SLinus Torvalds 	void            (*remove_entry)(eg_cache_entry *entry, struct mpoa_client *client);
751da177e4SLinus Torvalds 	void            (*update)(eg_cache_entry *entry, uint16_t holding_time);
761da177e4SLinus Torvalds 	void            (*clear_expired)(struct mpoa_client *client);
771da177e4SLinus Torvalds 	void            (*destroy_cache)(struct mpoa_client *mpc);
781da177e4SLinus Torvalds };
791da177e4SLinus Torvalds 
801da177e4SLinus Torvalds 
811da177e4SLinus Torvalds /* Ingress cache entry states */
821da177e4SLinus Torvalds 
831da177e4SLinus Torvalds #define INGRESS_REFRESHING 3
841da177e4SLinus Torvalds #define INGRESS_RESOLVED   2
851da177e4SLinus Torvalds #define INGRESS_RESOLVING  1
861da177e4SLinus Torvalds #define INGRESS_INVALID    0
871da177e4SLinus Torvalds 
881da177e4SLinus Torvalds /* VCC states */
891da177e4SLinus Torvalds 
901da177e4SLinus Torvalds #define OPEN   1
911da177e4SLinus Torvalds #define CLOSED 0
921da177e4SLinus Torvalds 
931da177e4SLinus Torvalds /* Egress cache entry states */
941da177e4SLinus Torvalds 
951da177e4SLinus Torvalds #define EGRESS_RESOLVED 2
961da177e4SLinus Torvalds #define EGRESS_PURGE    1
971da177e4SLinus Torvalds #define EGRESS_INVALID  0
981da177e4SLinus Torvalds 
991da177e4SLinus Torvalds #endif
100