LVS
lvs-users
Google
 
Web LinuxVirtualServer.org

Re: trouble about IP Fragmentation by using the Linux Virtual Server

To: lvs-users@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: trouble about IP Fragmentation by using the Linux Virtual Server
From: Roberto Nibali <ratz@xxxxxxxxxxxx>
Date: Wed, 18 Sep 2002 11:58:56 +0200
Hey Julian,

Thanks a bunch for the nice explanation. It almost totally makes sense to me.

- if netfilter connection tracking is used, ip_send_check is called
after ip_defrag and LVS has packet with valid IP csum.

Hey, I think with the new {nf|ct}-netlink framework you could ask for that and then do your conditional check. But I doubt if it will be faster then.

- while the stopgap in nf_hook_slow exists we can not notice that
the packet was fragmented, so it depends whether netfilter done
the job for us

        Now, after introducing the Layer 8 factor (Julian) who

LOL! Maybe someone should update some RFC with OSI-L8 then :).

decided to test by removing the stopgap in nf_hook_slow(), you
see the result, with unpatched kernels the skbs are always linearized,
no matter ip_defrag is called for them.
        So, we add unconditional ip_send_check when we know the
packet will be forwarded to another host. We can not know that
someone fixed the csum after ip_defrag.

2 Questions:

o Wouldn't it be nicer to have a bitfield in the struct skbuff which
  indicates the csum status? But I guess then netfilter would need to
  adapt a lot of code. But I see some nice unused fields in skbuff :)

o Shouldn't we do a conditional check for skb->summed? For example if it
  is for the LOCAL_NODE feature.

We should really put the LVS hook out of the netfilter misery and call it directly from the FIB :)

BTW, Julian, do you know how to export a struct to the slabinfo so it doesn't show up in on of the size-{32,64,...} slabs? If I have multiple size-128 slabs, I would like to differentiate them. For example like arp_cache or skbuff_head_cache.

Best regards,
Roberto Nibali, ratz
--
echo '[q]sa[ln0=aln256%Pln256/snlbx]sb3135071790101768542287578439snlbxq'|dc



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