#define KMSG_COMPONENT …
#define pr_fmt(fmt) …
#include <linux/ip.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/skbuff.h>
#include <linux/hash.h>
#include <net/ip_vs.h>
struct ip_vs_dh_bucket { … };
#ifndef CONFIG_IP_VS_DH_TAB_BITS
#define CONFIG_IP_VS_DH_TAB_BITS …
#endif
#define IP_VS_DH_TAB_BITS …
#define IP_VS_DH_TAB_SIZE …
#define IP_VS_DH_TAB_MASK …
struct ip_vs_dh_state { … };
static inline unsigned int ip_vs_dh_hashkey(int af, const union nf_inet_addr *addr)
{ … }
static inline struct ip_vs_dest *
ip_vs_dh_get(int af, struct ip_vs_dh_state *s, const union nf_inet_addr *addr)
{ … }
static int
ip_vs_dh_reassign(struct ip_vs_dh_state *s, struct ip_vs_service *svc)
{ … }
static void ip_vs_dh_flush(struct ip_vs_dh_state *s)
{ … }
static int ip_vs_dh_init_svc(struct ip_vs_service *svc)
{ … }
static void ip_vs_dh_done_svc(struct ip_vs_service *svc)
{ … }
static int ip_vs_dh_dest_changed(struct ip_vs_service *svc,
struct ip_vs_dest *dest)
{ … }
static inline int is_overloaded(struct ip_vs_dest *dest)
{ … }
static struct ip_vs_dest *
ip_vs_dh_schedule(struct ip_vs_service *svc, const struct sk_buff *skb,
struct ip_vs_iphdr *iph)
{ … }
static struct ip_vs_scheduler ip_vs_dh_scheduler = …;
static int __init ip_vs_dh_init(void)
{ … }
static void __exit ip_vs_dh_cleanup(void)
{ … }
module_init(…) …;
module_exit(ip_vs_dh_cleanup);
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;