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