Thank you again for you comments, Julian
On Sat, Aug 15, 2015 at 8:18 AM, Julian Anastasov <ja@xxxxxx> wrote:
>
> What is missing in this patchset is a change to ip_vs_sh.c
+1 -- I'll add it.
>
> Patch 1:
> - we always provide offset 0 here:
> IP_VS_DBG_PKT(7, af, pp, skb, 0, "unhandled fragment");
>
> We may need to add 'offset' field to struct ip_vs_iphdr,
> so that we can provide valid offset to the IP_VS_DBG_PKT and
> IP_VS_DBG_RL_PKT macros. We do not provide inverse flag to the
> pp->debug_packet handler but it is not so fatal.
I'll bump this to patch 3 and then add the offset field for these debug macros.
> Patch 2:
>
> - ip_vs_out_icmp_v6: first args of ip_vs_fill_iph_skb_off can be on
> same line
I'm used the other style, but I'll do this.
> - ip_vs_in_icmp: any good reason the ip_vs_fill_iph_skb_off call to
> be moved early? Better to keep it at the ip_vs_fill_ip4hdr's place.
> It is still before the conn_in_get call.
I misunderstand the offset/offset2 swapping that was happening here.
>
> - ip_vs_in_icmp: this line should not be removed:
> "- offset = ciph.len;"
>
> because offset is used later as arg to ip_vs_icmp_xmit.
> offset provides offset to header but we later need to
> skip this header and to reach the ports in transport header.
>
> - ip_vs_in_icmp_v6: we better to rename offs_ciph to offset and
> later to use it where 'writable' is used, then code will look like
> ip_vs_in_icmp
I'll incorporate this
> Patch 3:
>
> - breaks compilation of net/netfilter/ipvs/ip_vs_pe_sip.c and
> net/netfilter/xt_ipvs.c
>
> - do not forget that net/netfilter/xt_ipvs.c has calls to
> ip_vs_fill_iph_skb and conn_out_get, include it in your .config
> for building:
> make net/netfilter/ipvs/ net/netfilter/xt_ipvs.o
>
> - ip_vs_fill_iph_skb_off: if we later add more flags? Should we
> provide instead just a hdr_flags arg with IP_VS_HDR_* mask?
Yeah I went with the booleans at first because providing the flags I'll do this.
> - ip_vs_out_icmp_v6: first args for ip_vs_fill_iph_skb_icmp
> should be on same line
>
> - ip_vs_in_icmp_v6: first args for ip_vs_fill_iph_skb_icmp
> should be on same line
>
> - ip_vs_in_icmp_v6: I now see that this check from
> commit 2f74713d1436 ("ipvs: Complete IPv6 fragment handling for IPVS")
> '(hooknum == NF_INET_LOCAL_OUT) ? 0 : 1' is simply wrong for
> local clients, we should always use 'true' instead of
> (hooknum != NF_INET_LOCAL_OUT).
Ah cool, that makes a lot more sense.
>
> Patch 4:
>
> - breaks compilation of net/netfilter/xt_ipvs.c
>
> - ip_vs_schedule: first hunk shows that we provide inverse=1
> to conn_in_get. This is the only odd place that does such
> inverse check. May be we can change the bit before and after
> conn_in_get?:
>
> if (!skb->dev || skb->dev->flags & IFF_LOOPBACK) {
> iph->hdr_flags ^= IP_VS_HDR_INVERSE;
> cp = pp->conn_in_get(svc->af, skb, iph);
> iph->hdr_flags ^= IP_VS_HDR_INVERSE;
> if (cp) {
> IP_VS_DBG_PKT(12, svc->af, pp, skb, 0,
> "Not scheduling reply for existing "
> "connection");
> __ip_vs_conn_put(cp);
> return NULL;
> }
> }
>
> Patch 5:
>
> - ip_vs_schedule: we should provide iph->offset as arg to IP_VS_DBG_PKT
>
> Patch 6: OK
>
> Patch 7: OK
>
> Patch 8:
>
> - ip_vs_in_icmp: may be we can avoid 2nd !cp check as follows?:
> if (!cp) {
> int v;
>
> if (!sysctl_schedule_icmp(net_ipvs(net)))
> return NF_ACCEPT;
> if (!ip_vs_try_to_schedule(AF_INET, skb, pd, &v, &cp, &ciph))
> return v;
> new_cp = true;
> }
>
> - same for ip_vs_in_icmp_v6
>
Yeah I can do this.
new patch set coming. Thanks again for the thorough review!
cheers,
--
Alex Gartrell <agartrell@xxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe lvs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
|