IPVS: Add struct ip_vs_pe
Signed-off-by: Simon Horman <horms@verge.net.au> Acked-by: Julian Anastasov <ja@ssi.bg>
This commit is contained in:
@ -364,6 +364,10 @@ struct ip_vs_conn_param {
|
||||
__be16 vport;
|
||||
__u16 protocol;
|
||||
u16 af;
|
||||
|
||||
const struct ip_vs_pe *pe;
|
||||
char *pe_data;
|
||||
__u8 pe_data_len;
|
||||
};
|
||||
|
||||
/*
|
||||
@ -416,6 +420,9 @@ struct ip_vs_conn {
|
||||
void *app_data; /* Application private data */
|
||||
struct ip_vs_seq in_seq; /* incoming seq. struct */
|
||||
struct ip_vs_seq out_seq; /* outgoing seq. struct */
|
||||
|
||||
char *pe_data;
|
||||
__u8 pe_data_len;
|
||||
};
|
||||
|
||||
|
||||
@ -486,6 +493,9 @@ struct ip_vs_service {
|
||||
struct ip_vs_scheduler *scheduler; /* bound scheduler object */
|
||||
rwlock_t sched_lock; /* lock sched_data */
|
||||
void *sched_data; /* scheduler application data */
|
||||
|
||||
/* alternate persistence engine */
|
||||
struct ip_vs_pe *pe;
|
||||
};
|
||||
|
||||
|
||||
@ -549,6 +559,20 @@ struct ip_vs_scheduler {
|
||||
const struct sk_buff *skb);
|
||||
};
|
||||
|
||||
/* The persistence engine object */
|
||||
struct ip_vs_pe {
|
||||
struct list_head n_list; /* d-linked list head */
|
||||
char *name; /* scheduler name */
|
||||
atomic_t refcnt; /* reference counter */
|
||||
struct module *module; /* THIS_MODULE/NULL */
|
||||
|
||||
/* get the connection template, if any */
|
||||
int (*fill_param)(struct ip_vs_conn_param *p, struct sk_buff *skb);
|
||||
bool (*ct_match)(const struct ip_vs_conn_param *p,
|
||||
struct ip_vs_conn *ct);
|
||||
u32 (*hashkey_raw)(const struct ip_vs_conn_param *p, u32 initval,
|
||||
bool inverse);
|
||||
};
|
||||
|
||||
/*
|
||||
* The application module object (a.k.a. app incarnation)
|
||||
@ -648,6 +672,8 @@ static inline void ip_vs_conn_fill_param(int af, int protocol,
|
||||
p->cport = cport;
|
||||
p->vaddr = vaddr;
|
||||
p->vport = vport;
|
||||
p->pe = NULL;
|
||||
p->pe_data = NULL;
|
||||
}
|
||||
|
||||
struct ip_vs_conn *ip_vs_conn_in_get(const struct ip_vs_conn_param *p);
|
||||
@ -803,7 +829,7 @@ extern int ip_vs_unbind_scheduler(struct ip_vs_service *svc);
|
||||
extern struct ip_vs_scheduler *ip_vs_scheduler_get(const char *sched_name);
|
||||
extern void ip_vs_scheduler_put(struct ip_vs_scheduler *scheduler);
|
||||
extern struct ip_vs_conn *
|
||||
ip_vs_schedule(struct ip_vs_service *svc, const struct sk_buff *skb);
|
||||
ip_vs_schedule(struct ip_vs_service *svc, struct sk_buff *skb);
|
||||
extern int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,
|
||||
struct ip_vs_protocol *pp);
|
||||
|
||||
|
Reference in New Issue
Block a user