16 #define KMSG_COMPONENT "IPVS"
17 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
19 #include <linux/module.h>
20 #include <linux/kernel.h>
28 #include <linux/stat.h>
40 #define IP_VS_PROTO_TAB_SIZE 32
41 #define IP_VS_PROTO_HASH(proto) ((proto) & (IP_VS_PROTO_TAB_SIZE-1))
54 ip_vs_proto_table[
hash] =
pp;
102 pp_p = &ip_vs_proto_table[
hash];
103 for (; *pp_p; pp_p = &(*pp_p)->
next) {
126 for (; *pd_p; pd_p = &(*pd_p)->
next) {
129 if (pd->
pp->exit_netns !=
NULL)
130 pd->
pp->exit_netns(net, pd);
147 for (pp = ip_vs_proto_table[hash];
pp; pp = pp->
next) {
166 if (pd->
pp->protocol == proto)
178 return __ipvs_proto_data_get(ipvs, proto);
192 if (pd->
pp->timeout_change)
193 pd->
pp->timeout_change(pd, flags);
211 const char *
name,
int to)
215 if (!table || !name || !to)
218 for (i = 0; i < num; i++) {
219 if (
strcmp(names[i], name))
233 return (
IPPROTO_IP == proto) ?
"NONE" :
"ERR!";
245 struct iphdr _iph, *ih;
247 ih = skb_header_pointer(skb, offset,
sizeof(_iph), &_iph);
255 pptr = skb_header_pointer(skb, offset + ih->ihl*4,
256 sizeof(_ports), _ports);
258 sprintf(buf,
"TRUNCATED %pI4->%pI4",
261 sprintf(buf,
"%pI4:%u->%pI4:%u",
269 #ifdef CONFIG_IP_VS_IPV6
279 ih = skb_header_pointer(skb, offset,
sizeof(_iph), &_iph);
287 pptr = skb_header_pointer(skb, offset +
sizeof(
struct ipv6hdr),
288 sizeof(_ports), _ports);
290 sprintf(buf,
"TRUNCATED %pI6->%pI6",
293 sprintf(buf,
"%pI6:%u->%pI6:%u",
309 #ifdef CONFIG_IP_VS_IPV6
311 ip_vs_tcpudp_debug_packet_v6(pp, skb, offset, msg);
314 ip_vs_tcpudp_debug_packet_v4(pp, skb, offset, msg);
324 #ifdef CONFIG_IP_VS_PROTO_TCP
327 #ifdef CONFIG_IP_VS_PROTO_UDP
330 #ifdef CONFIG_IP_VS_PROTO_SCTP
333 #ifdef CONFIG_IP_VS_PROTO_AH
336 #ifdef CONFIG_IP_VS_PROTO_ESP
342 ret = register_ip_vs_proto_netns(net, protos[i]);
362 unregister_ip_vs_proto_netns(net, pd);
369 #define REGISTER_PROTOCOL(p) \
371 register_ip_vs_protocol(p); \
372 strcat(protocols, ", "); \
373 strcat(protocols, (p)->name); \
378 #ifdef CONFIG_IP_VS_PROTO_TCP
381 #ifdef CONFIG_IP_VS_PROTO_UDP
384 #ifdef CONFIG_IP_VS_PROTO_SCTP
387 #ifdef CONFIG_IP_VS_PROTO_AH
390 #ifdef CONFIG_IP_VS_PROTO_ESP
393 pr_info(
"Registered protocols (%s)\n", &protocols[2]);
406 while ((pp = ip_vs_proto_table[i]) !=
NULL)
407 unregister_ip_vs_protocol(pp);