Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/net/atm/mpoa_caches.h
15112 views
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 {
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;
29
} in_cache_entry;
30
31
struct in_cache_ops{
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,
36
struct mpoa_client *client,
37
__be32 mask);
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,
42
struct mpoa_client *client );
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);
49
};
50
51
typedef struct eg_cache_entry{
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;
62
} eg_cache_entry;
63
64
struct eg_cache_ops{
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);
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
88
#define CLOSED 0
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
97
98