From: Ryan Nowakowski <ryan@britestream•com>
To: netdev@vger•kernel.org
Cc: lvs-users@LinuxVirtualServer•org, clozano@andago•com
Subject: [PATCH] ipvs loopback connection
Date: Fri, 13 Oct 2006 15:12:41 -0500 [thread overview]
Message-ID: <20061013201241.GD14789@britestream.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 635 bytes --]
This is a port of Carlos Lozano's 2.4 patch[1] to 2.6.16. I believe
Carlos's comments about the original 2.4 patch still pertain here:
We have a machine that must be both a client and director. The
two problems to solve are:
* ipvs doesn't handle loopback packets
* the return packets are handled by ip_vs_in, and not
by ip_vs_out.
With kernel 2.6 there's an additional problem to solve:
* there's a shortcut used to recompute the tcp checksum that doesn't
work in this case
The attached patch fixes the problems listed above.
1. http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.LVS-NAT.html#carlos_solution
[-- Attachment #2: ipvs_loopback.patch --]
[-- Type: text/plain, Size: 2192 bytes --]
diff -Naur linux-source-2.6.16/net/ipv4/ipvs/ip_vs_core.c linux-source-2.6.16-ipvs_loopback/net/ipv4/ipvs/ip_vs_core.c
--- linux-source-2.6.16/net/ipv4/ipvs/ip_vs_core.c 2006-03-19 23:53:29.000000000 -0600
+++ linux-source-2.6.16-ipvs_loopback/net/ipv4/ipvs/ip_vs_core.c 2006-10-02 17:28:18.000000000 -0500
@@ -953,7 +953,7 @@
* ... don't know why 1st test DOES NOT include 2nd (?)
*/
if (unlikely(skb->pkt_type != PACKET_HOST
- || skb->dev == &loopback_dev || skb->sk)) {
+ || skb->sk)) {
IP_VS_DBG(12, "packet type=%d proto=%d daddr=%d.%d.%d.%d ignored\n",
skb->pkt_type,
skb->nh.iph->protocol,
@@ -978,6 +978,14 @@
ihl = iph->ihl << 2;
+ cp = pp->conn_out_get(skb, pp, iph, ihl, 0);
+
+ if (cp) {
+ __ip_vs_conn_put(cp);
+
+ return (ip_vs_out(hooknum,pskb,in,out,okfn));
+ }
+
/*
* Check if the packet belongs to an existing connection entry
*/
diff -Naur linux-source-2.6.16/net/ipv4/ipvs/ip_vs_proto_tcp.c linux-source-2.6.16-ipvs_loopback/net/ipv4/ipvs/ip_vs_proto_tcp.c
--- linux-source-2.6.16/net/ipv4/ipvs/ip_vs_proto_tcp.c 2006-03-19 23:53:29.000000000 -0600
+++ linux-source-2.6.16-ipvs_loopback/net/ipv4/ipvs/ip_vs_proto_tcp.c 2006-10-02 17:27:08.000000000 -0500
@@ -200,23 +200,15 @@
/*
* Adjust TCP checksums
*/
- if (!cp->app) {
- /* Only port and addr are changed, do fast csum update */
- tcp_fast_csum_update(tcph, cp->vaddr, cp->daddr,
- cp->vport, cp->dport);
- if ((*pskb)->ip_summed == CHECKSUM_HW)
- (*pskb)->ip_summed = CHECKSUM_NONE;
- } else {
- /* full checksum calculation */
- tcph->check = 0;
- (*pskb)->csum = skb_checksum(*pskb, tcphoff,
- (*pskb)->len - tcphoff, 0);
- tcph->check = csum_tcpudp_magic(cp->caddr, cp->daddr,
- (*pskb)->len - tcphoff,
- cp->protocol,
- (*pskb)->csum);
- (*pskb)->ip_summed = CHECKSUM_UNNECESSARY;
- }
+ /* full checksum calculation */
+ tcph->check = 0;
+ (*pskb)->csum = skb_checksum(*pskb, tcphoff,
+ (*pskb)->len - tcphoff, 0);
+ tcph->check = csum_tcpudp_magic(cp->caddr, cp->daddr,
+ (*pskb)->len - tcphoff,
+ cp->protocol,
+ (*pskb)->csum);
+ (*pskb)->ip_summed = CHECKSUM_UNNECESSARY;
return 1;
}
reply other threads:[~2006-10-13 20:13 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061013201241.GD14789@britestream.com \
--to=ryan@britestream$(echo .)com \
--cc=clozano@andago$(echo .)com \
--cc=lvs-users@LinuxVirtualServer$(echo .)org \
--cc=netdev@vger$(echo .)kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox