<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/include/net/ip_vs.h, branch v3.8</title>
<subtitle>Mirror of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
</subtitle>
<id>https://git.shady.money/linux/atom?h=v3.8</id>
<link rel='self' href='https://git.shady.money/linux/atom?h=v3.8'/>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/'/>
<updated>2012-10-23T00:23:40Z</updated>
<entry>
<title>ipvs: fix build errors related to config option combinations</title>
<updated>2012-10-23T00:23:40Z</updated>
<author>
<name>Jesper Dangaard Brouer</name>
<email>brouer@redhat.com</email>
</author>
<published>2012-10-22T19:22:45Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=54d83efa44aac87983f973abb42c508a25a2b554'/>
<id>urn:sha1:54d83efa44aac87983f973abb42c508a25a2b554</id>
<content type='text'>
Fix two build error introduced by commit 63dca2c0:
 "ipvs: Fix faulty IPv6 extension header handling in IPVS"

First build error was fairly trivial and can occur, when
CONFIG_IP_VS_IPV6 is disabled.

The second build error was tricky, and can occur when deselecting
both all Netfilter and IPVS, but selecting CONFIG_IPV6.  This is
caused by "kernel/sysctl_binary.c" including "net/ip_vs.h", which
includes "linux/netfilter_ipv6/ip6_tables.h" causing include
of "include/linux/netfilter/x_tables.h" which then cannot find
the typedef nf_hookfn.

Fix this by only including "linux/netfilter_ipv6/ip6_tables.h" in
case of CONFIG_IP_VS_IPV6 as its already used to guard the usage
of ipv6_find_hdr().

Reported-by: Fengguang Wu &lt;fengguang.wu@intel.com&gt;
Reported-by: Yuanhan Liu &lt;yuanhan.liu@linux.intel.com&gt;
Signed-off-by: Jesper Dangaard Brouer &lt;brouer@redhat.com&gt;
Signed-off-by: Simon Horman &lt;horms@verge.net.au&gt;
</content>
</entry>
<entry>
<title>ipvs: API change to avoid rescan of IPv6 exthdr</title>
<updated>2012-09-28T02:34:33Z</updated>
<author>
<name>Jesper Dangaard Brouer</name>
<email>brouer@redhat.com</email>
</author>
<published>2012-09-26T12:07:17Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=d4383f04d145cce8b855c463f40020639ef83ea0'/>
<id>urn:sha1:d4383f04d145cce8b855c463f40020639ef83ea0</id>
<content type='text'>
Reduce the number of times we scan/skip the IPv6 exthdrs.

This patch contains a lot of API changes.  This is done, to avoid
repeating the scan of finding the IPv6 headers, via ipv6_find_hdr(),
which is called by ip_vs_fill_iph_skb().

Finding the IPv6 headers is done as early as possible, and passed on
as a pointer "struct ip_vs_iphdr *" to the affected functions.

This patch reduce/removes 19 calls to ip_vs_fill_iph_skb().

Notice, I have choosen, not to change the API of function
pointer "(*schedule)" (in struct ip_vs_scheduler) as it can be
used by external schedulers, via {un,}register_ip_vs_scheduler.
Only 4 out of 10 schedulers use info from ip_vs_iphdr*, and when
they do, they are only interested in iph-&gt;{s,d}addr.

Signed-off-by: Jesper Dangaard Brouer &lt;brouer@redhat.com&gt;
Acked-by: Julian Anastasov &lt;ja@ssi.bg&gt;
Signed-off-by: Simon Horman &lt;horms@verge.net.au&gt;
</content>
</entry>
<entry>
<title>ipvs: Complete IPv6 fragment handling for IPVS</title>
<updated>2012-09-28T02:34:24Z</updated>
<author>
<name>Jesper Dangaard Brouer</name>
<email>brouer@redhat.com</email>
</author>
<published>2012-09-26T12:06:59Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=2f74713d1436b7d2d0506ba1bc5f10915a73bbec'/>
<id>urn:sha1:2f74713d1436b7d2d0506ba1bc5f10915a73bbec</id>
<content type='text'>
IPVS now supports fragmented packets, with support from nf_conntrack_reasm.c

Based on patch from: Hans Schillstrom.

IPVS do like conntrack i.e. use the skb-&gt;nfct_reasm
(i.e. when all fragments is collected, nf_ct_frag6_output()
starts a "re-play" of all fragments into the interrupted
PREROUTING chain at prio -399 (NF_IP6_PRI_CONNTRACK_DEFRAG+1)
with nfct_reasm pointing to the assembled packet.)

Notice, module nf_defrag_ipv6 must be loaded for this to work.
Report unhandled fragments, and recommend user to load nf_defrag_ipv6.

To handle fw-mark for fragments.  Add a new IPVS hook into prerouting
chain at prio -99 (NF_IP6_PRI_NAT_DST+1) to catch fragments, and copy
fw-mark info from the first packet with an upper layer header.

IPv6 fragment handling should be the last thing on the IPVS IPv6
missing support list.

Signed-off-by: Jesper Dangaard Brouer &lt;brouer@redhat.com&gt;
Signed-off-by: Hans Schillstrom &lt;hans@schillstrom.com&gt;
Acked-by: Julian Anastasov &lt;ja@ssi.bg&gt;
Signed-off-by: Simon Horman &lt;horms@verge.net.au&gt;
</content>
</entry>
<entry>
<title>ipvs: Fix faulty IPv6 extension header handling in IPVS</title>
<updated>2012-09-28T02:34:15Z</updated>
<author>
<name>Jesper Dangaard Brouer</name>
<email>brouer@redhat.com</email>
</author>
<published>2012-09-26T12:06:41Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=63dca2c0b0e7a92cb39d1b1ecefa32ffda201975'/>
<id>urn:sha1:63dca2c0b0e7a92cb39d1b1ecefa32ffda201975</id>
<content type='text'>
IPv6 packets can contain extension headers, thus its wrong to assume
that the transport/upper-layer header, starts right after (struct
ipv6hdr) the IPv6 header.  IPVS uses this false assumption, and will
write SNAT &amp; DNAT modifications at a fixed pos which will corrupt the
message.

To fix this, proper header position must be found before modifying
packets.  Introducing ip_vs_fill_iph_skb(), which uses ipv6_find_hdr()
to skip the exthdrs. It finds (1) the transport header offset, (2) the
protocol, and (3) detects if the packet is a fragment.

Note, that fragments in IPv6 is represented via an exthdr.  Thus, this
is detected while skipping through the exthdrs.

This patch depends on commit 84018f55a:
 "netfilter: ip6_tables: add flags parameter to ipv6_find_hdr()"
This also adds a dependency to ip6_tables.

Originally based on patch from: Hans Schillstrom

kABI notes:
Changing struct ip_vs_iphdr is a potential minor kABI breaker,
because external modules can be compiled with another version of
this struct.  This should not matter, as they would most-likely
be using a compiled-in version of ip_vs_fill_iphdr().  When
recompiled, they will notice ip_vs_fill_iphdr() no longer exists,
and they have to used ip_vs_fill_iph_skb() instead.

Signed-off-by: Jesper Dangaard Brouer &lt;brouer@redhat.com&gt;
Acked-by: Julian Anastasov &lt;ja@ssi.bg&gt;
Signed-off-by: Simon Horman &lt;horms@verge.net.au&gt;
</content>
</entry>
<entry>
<title>ipvs: Use config macro IS_ENABLED()</title>
<updated>2012-09-28T02:34:05Z</updated>
<author>
<name>Jesper Dangaard Brouer</name>
<email>brouer@redhat.com</email>
</author>
<published>2012-09-26T12:06:20Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=a638e51437f5efd00c4579df56cfd4d497ed51a8'/>
<id>urn:sha1:a638e51437f5efd00c4579df56cfd4d497ed51a8</id>
<content type='text'>
Cleanup patch.

Use the IS_ENABLED macro, instead of having to check
both the build and the module CONFIG_ option.

Signed-off-by: Jesper Dangaard Brouer &lt;brouer@redhat.com&gt;
Acked-by: Julian Anastasov &lt;ja@ssi.bg&gt;
Signed-off-by: Simon Horman &lt;horms@verge.net.au&gt;
</content>
</entry>
<entry>
<title>ipvs: Trivial changes, use compressed IPv6 address in output</title>
<updated>2012-09-28T02:33:52Z</updated>
<author>
<name>Jesper Dangaard Brouer</name>
<email>brouer@redhat.com</email>
</author>
<published>2012-09-26T12:05:53Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=120b9c14f464c445b20c05e81221ef83fdb5e55e'/>
<id>urn:sha1:120b9c14f464c445b20c05e81221ef83fdb5e55e</id>
<content type='text'>
Have not converted the proc file output to compressed IPv6 addresses.

Signed-off-by: Jesper Dangaard Brouer &lt;brouer@redhat.com&gt;
Acked-by: Julian Anastasov &lt;ja@ssi.bg&gt;
Signed-off-by: Simon Horman &lt;horms@verge.net.au&gt;
</content>
</entry>
<entry>
<title>ipvs: add pmtu_disc option to disable IP DF for TUN packets</title>
<updated>2012-08-10T01:35:07Z</updated>
<author>
<name>Julian Anastasov</name>
<email>ja@ssi.bg</email>
</author>
<published>2012-07-20T08:59:53Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=3654e61137db891f5312e6dd813b961484b5fdf3'/>
<id>urn:sha1:3654e61137db891f5312e6dd813b961484b5fdf3</id>
<content type='text'>
	Disabling PMTU discovery can increase the output packet
rate but some users have enough resources and prefer to fragment
than to drop traffic. By default, we copy the DF bit but if
pmtu_disc is disabled we do not send FRAG_NEEDED messages anymore.

Signed-off-by: Julian Anastasov &lt;ja@ssi.bg&gt;
Signed-off-by: Simon Horman &lt;horms@verge.net.au&gt;
</content>
</entry>
<entry>
<title>ipvs: generalize app registration in netns</title>
<updated>2012-08-10T01:34:51Z</updated>
<author>
<name>Julian Anastasov</name>
<email>ja@ssi.bg</email>
</author>
<published>2012-07-12T20:06:20Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=be97fdb5fbcc828240c51769cd28cba609158703'/>
<id>urn:sha1:be97fdb5fbcc828240c51769cd28cba609158703</id>
<content type='text'>
	Get rid of the ftp_app pointer and allow applications
to be registered without adding fields in the netns_ipvs structure.

v2: fix coding style as suggested by Pablo Neira Ayuso &lt;pablo@netfilter.org&gt;

Signed-off-by: Julian Anastasov &lt;ja@ssi.bg&gt;
Signed-off-by: Simon Horman &lt;horms@verge.net.au&gt;
</content>
</entry>
<entry>
<title>ipvs: fix oops on NAT reply in br_nf context</title>
<updated>2012-07-17T10:00:46Z</updated>
<author>
<name>Lin Ming</name>
<email>mlin@ss.pku.edu.cn</email>
</author>
<published>2012-07-07T10:26:10Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=9e33ce453f8ac8452649802bee1f410319408f4b'/>
<id>urn:sha1:9e33ce453f8ac8452649802bee1f410319408f4b</id>
<content type='text'>
IPVS should not reset skb-&gt;nf_bridge in FORWARD hook
by calling nf_reset for NAT replies. It triggers oops in
br_nf_forward_finish.

[  579.781508] BUG: unable to handle kernel NULL pointer dereference at 0000000000000004
[  579.781669] IP: [&lt;ffffffff817b1ca5&gt;] br_nf_forward_finish+0x58/0x112
[  579.781792] PGD 218f9067 PUD 0
[  579.781865] Oops: 0000 [#1] SMP
[  579.781945] CPU 0
[  579.781983] Modules linked in:
[  579.782047]
[  579.782080]
[  579.782114] Pid: 4644, comm: qemu Tainted: G        W    3.5.0-rc5-00006-g95e69f9 #282 Hewlett-Packard  /30E8
[  579.782300] RIP: 0010:[&lt;ffffffff817b1ca5&gt;]  [&lt;ffffffff817b1ca5&gt;] br_nf_forward_finish+0x58/0x112
[  579.782455] RSP: 0018:ffff88007b003a98  EFLAGS: 00010287
[  579.782541] RAX: 0000000000000008 RBX: ffff8800762ead00 RCX: 000000000001670a
[  579.782653] RDX: 0000000000000000 RSI: 000000000000000a RDI: ffff8800762ead00
[  579.782845] RBP: ffff88007b003ac8 R08: 0000000000016630 R09: ffff88007b003a90
[  579.782957] R10: ffff88007b0038e8 R11: ffff88002da37540 R12: ffff88002da01a02
[  579.783066] R13: ffff88002da01a80 R14: ffff88002d83c000 R15: ffff88002d82a000
[  579.783177] FS:  0000000000000000(0000) GS:ffff88007b000000(0063) knlGS:00000000f62d1b70
[  579.783306] CS:  0010 DS: 002b ES: 002b CR0: 000000008005003b
[  579.783395] CR2: 0000000000000004 CR3: 00000000218fe000 CR4: 00000000000027f0
[  579.783505] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[  579.783684] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[  579.783795] Process qemu (pid: 4644, threadinfo ffff880021b20000, task ffff880021aba760)
[  579.783919] Stack:
[  579.783959]  ffff88007693cedc ffff8800762ead00 ffff88002da01a02 ffff8800762ead00
[  579.784110]  ffff88002da01a02 ffff88002da01a80 ffff88007b003b18 ffffffff817b26c7
[  579.784260]  ffff880080000000 ffffffff81ef59f0 ffff8800762ead00 ffffffff81ef58b0
[  579.784477] Call Trace:
[  579.784523]  &lt;IRQ&gt;
[  579.784562]
[  579.784603]  [&lt;ffffffff817b26c7&gt;] br_nf_forward_ip+0x275/0x2c8
[  579.784707]  [&lt;ffffffff81704b58&gt;] nf_iterate+0x47/0x7d
[  579.784797]  [&lt;ffffffff817ac32e&gt;] ? br_dev_queue_push_xmit+0xae/0xae
[  579.784906]  [&lt;ffffffff81704bfb&gt;] nf_hook_slow+0x6d/0x102
[  579.784995]  [&lt;ffffffff817ac32e&gt;] ? br_dev_queue_push_xmit+0xae/0xae
[  579.785175]  [&lt;ffffffff8187fa95&gt;] ? _raw_write_unlock_bh+0x19/0x1b
[  579.785179]  [&lt;ffffffff817ac417&gt;] __br_forward+0x97/0xa2
[  579.785179]  [&lt;ffffffff817ad366&gt;] br_handle_frame_finish+0x1a6/0x257
[  579.785179]  [&lt;ffffffff817b2386&gt;] br_nf_pre_routing_finish+0x26d/0x2cb
[  579.785179]  [&lt;ffffffff817b2cf0&gt;] br_nf_pre_routing+0x55d/0x5c1
[  579.785179]  [&lt;ffffffff81704b58&gt;] nf_iterate+0x47/0x7d
[  579.785179]  [&lt;ffffffff817ad1c0&gt;] ? br_handle_local_finish+0x44/0x44
[  579.785179]  [&lt;ffffffff81704bfb&gt;] nf_hook_slow+0x6d/0x102
[  579.785179]  [&lt;ffffffff817ad1c0&gt;] ? br_handle_local_finish+0x44/0x44
[  579.785179]  [&lt;ffffffff81551525&gt;] ? sky2_poll+0xb35/0xb54
[  579.785179]  [&lt;ffffffff817ad62a&gt;] br_handle_frame+0x213/0x229
[  579.785179]  [&lt;ffffffff817ad417&gt;] ? br_handle_frame_finish+0x257/0x257
[  579.785179]  [&lt;ffffffff816e3b47&gt;] __netif_receive_skb+0x2b4/0x3f1
[  579.785179]  [&lt;ffffffff816e69fc&gt;] process_backlog+0x99/0x1e2
[  579.785179]  [&lt;ffffffff816e6800&gt;] net_rx_action+0xdf/0x242
[  579.785179]  [&lt;ffffffff8107e8a8&gt;] __do_softirq+0xc1/0x1e0
[  579.785179]  [&lt;ffffffff8135a5ba&gt;] ? trace_hardirqs_off_thunk+0x3a/0x6c
[  579.785179]  [&lt;ffffffff8188812c&gt;] call_softirq+0x1c/0x30

The steps to reproduce as follow,

1. On Host1, setup brige br0(192.168.1.106)
2. Boot a kvm guest(192.168.1.105) on Host1 and start httpd
3. Start IPVS service on Host1
   ipvsadm -A -t 192.168.1.106:80 -s rr
   ipvsadm -a -t 192.168.1.106:80 -r 192.168.1.105:80 -m
4. Run apache benchmark on Host2(192.168.1.101)
   ab -n 1000 http://192.168.1.106/

ip_vs_reply4
  ip_vs_out
    handle_response
      ip_vs_notrack
        nf_reset()
        {
          skb-&gt;nf_bridge = NULL;
        }

Actually, IPVS wants in this case just to replace nfct
with untracked version. So replace the nf_reset(skb) call
in ip_vs_notrack() with a nf_conntrack_put(skb-&gt;nfct) call.

Signed-off-by: Lin Ming &lt;mlin@ss.pku.edu.cn&gt;
Signed-off-by: Julian Anastasov &lt;ja@ssi.bg&gt;
Signed-off-by: Simon Horman &lt;horms@verge.net.au&gt;
Signed-off-by: Pablo Neira Ayuso &lt;pablo@netfilter.org&gt;
</content>
</entry>
<entry>
<title>ipvs: add support for sync threads</title>
<updated>2012-05-08T17:40:33Z</updated>
<author>
<name>Pablo Neira Ayuso</name>
<email>pablo@netfilter.org</email>
</author>
<published>2012-05-08T17:40:30Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=f73181c8288fc38747ec4f0f3e8a9052ab785cd5'/>
<id>urn:sha1:f73181c8288fc38747ec4f0f3e8a9052ab785cd5</id>
<content type='text'>
	Allow master and backup servers to use many threads
for sync traffic. Add sysctl var "sync_ports" to define the
number of threads. Every thread will use single UDP port,
thread 0 will use the default port 8848 while last thread
will use port 8848+sync_ports-1.

	The sync traffic for connections is scheduled to many
master threads based on the cp address but one connection is
always assigned to same thread to avoid reordering of the
sync messages.

	Remove ip_vs_sync_switch_mode because this check
for sync mode change is still risky. Instead, check for mode
change under sync_buff_lock.

	Make sure the backup socks do not block on reading.

Special thanks to Aleksey Chudov for helping in all tests.

Signed-off-by: Julian Anastasov &lt;ja@ssi.bg&gt;
Tested-by: Aleksey Chudov &lt;aleksey.chudov@gmail.com&gt;
Signed-off-by: Simon Horman &lt;horms@verge.net.au&gt;
</content>
</entry>
</feed>
