LVS
lvs-users
Google
 
Web LinuxVirtualServer.org

Re: One-packet scheduling for kernel 2.6

To: Nicolas Baradakis <nbk@xxxxxxxxxxxxx>
Subject: Re: One-packet scheduling for kernel 2.6
Cc: lvs-users@xxxxxxxxxxxxxxxxxxxxxx
Cc: Wensong Zhang <wensong@xxxxxxxxxxxx>
Cc: Horms <horms@xxxxxxxxxxxx>
From: Julian Anastasov <ja@xxxxxx>
Date: Fri, 30 Sep 2005 09:23:28 +0300 (EEST)
        Hello,

On Thu, 29 Sep 2005, Nicolas Baradakis wrote:

> The RADIUS protocol per RFC 2865 is based on UDP: each request is a
> single independant packet. Many RADIUS implementations use only a
> single UDP socket to send their requests, and LVS mistakenly think it
> is a persistant connection. Things are worse when using a RADIUS
> proxy: there is only one source IP and all the packets go to the same
> real server.

        Are they accounting packets, without reply packets?

> Now I'd like to upgrade my LVS servers to kernel 2.6.13, that's why I
> had to port the set of patches to newer versions of the kernel and
> related utilities.
>
> New patches are in attachement, in hope they can be useful to other
> people. Please consider merging them in LVS sources, too.

        I agree that this feature can be included in 2.6.15+ if
Wensong and Horms agree, they should comment for the changes and
especially for the user part. Just some comments from me:

- Starting from 2.6.13 ip_vs_conn_expire_now does not need cp reference
for callers, so the change in ip_vs_conn_put() should just alter the
2nd arg when calling mod_timer, depending on IP_VS_CONN_F_ONE_PACKET,
sort of:

void ip_vs_conn_put(struct ip_vs_conn *cp)
{
        unsigned long t = (cp->flags & IP_VS_CONN_F_ONE_PACKET) ?
                0 : cp->timeout;
        mod_timer(&cp->timer, jiffies+t);

        __ip_vs_conn_put(cp);
}

- In the following change to ipvsadm you are missing '!':

@@ -960,10 +972,15 @@
        if (ce.cmd == CMD_ADD || ce.cmd == CMD_EDIT) {
                /* Make sure that port zero service is persistent */
                if (!ce.svc.fwmark && !ce.svc.port &&
-                   (ce.svc.flags != IP_VS_SVC_F_PERSISTENT))
+                   (ce.svc.flags & IP_VS_SVC_F_PERSISTENT))
                        fail(2, "Zero port specified "
                             "for non-persistent service");


Regards

--
Julian Anastasov <ja@xxxxxx>

<Prev in Thread] Current Thread [Next in Thread>