#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 <net/ip_vs.h>
#include <net/tcp.h>
#include <linux/udp.h>
#include <linux/sctp.h>
struct ip_vs_sh_bucket { … };
#ifndef CONFIG_IP_VS_SH_TAB_BITS
#define CONFIG_IP_VS_SH_TAB_BITS …
#endif
#define IP_VS_SH_TAB_BITS …
#define IP_VS_SH_TAB_SIZE …
#define IP_VS_SH_TAB_MASK …
struct ip_vs_sh_state { … };
static inline bool is_unavailable(struct ip_vs_dest *dest)
{ … }
static inline unsigned int
ip_vs_sh_hashkey(int af, const union nf_inet_addr *addr,
__be16 port, unsigned int offset)
{ … }
static inline struct ip_vs_dest *
ip_vs_sh_get(struct ip_vs_service *svc, struct ip_vs_sh_state *s,
const union nf_inet_addr *addr, __be16 port)
{ … }
static inline struct ip_vs_dest *
ip_vs_sh_get_fallback(struct ip_vs_service *svc, struct ip_vs_sh_state *s,
const union nf_inet_addr *addr, __be16 port)
{ … }
static int
ip_vs_sh_reassign(struct ip_vs_sh_state *s, struct ip_vs_service *svc)
{ … }
static void ip_vs_sh_flush(struct ip_vs_sh_state *s)
{ … }
static int ip_vs_sh_init_svc(struct ip_vs_service *svc)
{ … }
static void ip_vs_sh_done_svc(struct ip_vs_service *svc)
{ … }
static int ip_vs_sh_dest_changed(struct ip_vs_service *svc,
struct ip_vs_dest *dest)
{ … }
static inline __be16
ip_vs_sh_get_port(const struct sk_buff *skb, struct ip_vs_iphdr *iph)
{ … }
static struct ip_vs_dest *
ip_vs_sh_schedule(struct ip_vs_service *svc, const struct sk_buff *skb,
struct ip_vs_iphdr *iph)
{ … }
static struct ip_vs_scheduler ip_vs_sh_scheduler = …;
static int __init ip_vs_sh_init(void)
{ … }
static void __exit ip_vs_sh_cleanup(void)
{ … }
module_init(…) …;
module_exit(ip_vs_sh_cleanup);
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;