#define KMSG_COMPONENT …
#define pr_fmt(fmt) …
#include <linux/ip.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/skbuff.h>
#include <linux/jiffies.h>
#include <linux/list.h>
#include <linux/slab.h>
#include <linux/hash.h>
#include <linux/fs.h>
#include <linux/sysctl.h>
#include <net/net_namespace.h>
#include <net/ip_vs.h>
#define CHECK_EXPIRE_INTERVAL …
#define ENTRY_TIMEOUT …
#define DEFAULT_EXPIRATION …
#define COUNT_FOR_FULL_EXPIRATION …
#ifndef CONFIG_IP_VS_LBLCR_TAB_BITS
#define CONFIG_IP_VS_LBLCR_TAB_BITS …
#endif
#define IP_VS_LBLCR_TAB_BITS …
#define IP_VS_LBLCR_TAB_SIZE …
#define IP_VS_LBLCR_TAB_MASK …
struct ip_vs_dest_set_elem { … };
struct ip_vs_dest_set { … };
static void ip_vs_dest_set_insert(struct ip_vs_dest_set *set,
struct ip_vs_dest *dest, bool check)
{ … }
static void ip_vs_lblcr_elem_rcu_free(struct rcu_head *head)
{ … }
static void
ip_vs_dest_set_erase(struct ip_vs_dest_set *set, struct ip_vs_dest *dest)
{ … }
static void ip_vs_dest_set_eraseall(struct ip_vs_dest_set *set)
{ … }
static inline struct ip_vs_dest *ip_vs_dest_set_min(struct ip_vs_dest_set *set)
{ … }
static inline struct ip_vs_dest *ip_vs_dest_set_max(struct ip_vs_dest_set *set)
{ … }
struct ip_vs_lblcr_entry { … };
struct ip_vs_lblcr_table { … };
#ifdef CONFIG_SYSCTL
static struct ctl_table vs_vars_table[] = …;
#endif
static inline void ip_vs_lblcr_free(struct ip_vs_lblcr_entry *en)
{ … }
static inline unsigned int
ip_vs_lblcr_hashkey(int af, const union nf_inet_addr *addr)
{ … }
static void
ip_vs_lblcr_hash(struct ip_vs_lblcr_table *tbl, struct ip_vs_lblcr_entry *en)
{ … }
static inline struct ip_vs_lblcr_entry *
ip_vs_lblcr_get(int af, struct ip_vs_lblcr_table *tbl,
const union nf_inet_addr *addr)
{ … }
static inline struct ip_vs_lblcr_entry *
ip_vs_lblcr_new(struct ip_vs_lblcr_table *tbl, const union nf_inet_addr *daddr,
u16 af, struct ip_vs_dest *dest)
{ … }
static void ip_vs_lblcr_flush(struct ip_vs_service *svc)
{ … }
static int sysctl_lblcr_expiration(struct ip_vs_service *svc)
{ … }
static inline void ip_vs_lblcr_full_check(struct ip_vs_service *svc)
{ … }
static void ip_vs_lblcr_check_expire(struct timer_list *t)
{ … }
static int ip_vs_lblcr_init_svc(struct ip_vs_service *svc)
{ … }
static void ip_vs_lblcr_done_svc(struct ip_vs_service *svc)
{ … }
static inline struct ip_vs_dest *
__ip_vs_lblcr_schedule(struct ip_vs_service *svc)
{ … }
static inline int
is_overloaded(struct ip_vs_dest *dest, struct ip_vs_service *svc)
{ … }
static struct ip_vs_dest *
ip_vs_lblcr_schedule(struct ip_vs_service *svc, const struct sk_buff *skb,
struct ip_vs_iphdr *iph)
{ … }
static struct ip_vs_scheduler ip_vs_lblcr_scheduler = …;
#ifdef CONFIG_SYSCTL
static int __net_init __ip_vs_lblcr_init(struct net *net)
{ … }
static void __net_exit __ip_vs_lblcr_exit(struct net *net)
{ … }
#else
static int __net_init __ip_vs_lblcr_init(struct net *net) { return 0; }
static void __net_exit __ip_vs_lblcr_exit(struct net *net) { }
#endif
static struct pernet_operations ip_vs_lblcr_ops = …;
static int __init ip_vs_lblcr_init(void)
{ … }
static void __exit ip_vs_lblcr_cleanup(void)
{ … }
module_init(…) …;
module_exit(ip_vs_lblcr_cleanup);
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;