From: Roland Dreier <rdreier@cisco.com>
To: David Miller <davem@davemloft.net>
Cc: kazunori@miyazawa.org, miika@iki.fi, Diego.Beltrami@hiit.fi,
herbert@gondor.apana.org.au, netdev@vger.kernel.org,
usagi-core@linux-ipv6.org, mst@mellanox.co.il
Subject: depending on IPv6 symbols (was: [RFC][PATCH][IPSEC][0/3]inter address family ipsec tunnel)
Date: Tue, 06 Feb 2007 14:43:15 -0800 [thread overview]
Message-ID: <adaodo6sy9o.fsf_-_@cisco.com> (raw)
In-Reply-To: <20070206.142407.48395902.davem@davemloft.net> (David Miller's message of "Tue, 06 Feb 2007 14:24:07 -0800 (PST)")
David> We see so many issues with ipv6 symbols dependencies in
David> various subsystems (netfilter, xfrm, etc.). It is a sign
David> that we need some kind of long range plan to deal with this
David> problem. Since the ipv6 module can't be unloaded anyways,
David> and it's been broken like that forever, it might make sense
David> to make ipv6 only available non-modular. I know people
David> would dislike this, but the current situation isn't good
David> either.
Yes, coincidentally I just ran into this problem. In the context of
reviewing a patch (IPoIB connected mode, which has to deal with
getting too-big packets for a given path) that basically wants to do
#ifdef CONFIG_IPV6
if (...)
icmpv6_send(...TOOBIG...)
#endif
I noticed that this exact problem already appears in
net/ipv4/ip_gre.c, which has exactly the same type of code:
#ifdef CONFIG_IPV6
else if (skb->protocol == htons(ETH_P_IPV6)) {
struct rt6_info *rt6 = (struct rt6_info*)skb->dst;
if (rt6 && mtu < dst_mtu(skb->dst) && mtu >= IPV6_MIN_MTU) {
if ((tunnel->parms.iph.daddr && !MULTICAST(tunnel->parms.iph.daddr)) ||
rt6->rt6i_dst.plen == 128) {
rt6->rt6i_flags |= RTF_MODIFIED;
skb->dst->metrics[RTAX_MTU-1] = mtu;
}
}
if (mtu >= IPV6_MIN_MTU && mtu < skb->len - tunnel->hlen + gre_hlen) {
icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, dev);
ip_rt_put(rt);
goto tx_error;
}
}
#endif
now obviously this means that if ipv6 is built modular, then the
correct handling for too-big packets will never be used. But on the
other hand, if we convert the test to
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
then building with CONFIG_NET_IPGRE=y and CONFIG_IPV6=m will break,
because icmpv6_send() is no longer built in. And obviously making
NET_IPGRE depend on IPV6 doesn't make sense.
So I hope we can come up with a short-range plan to deal with the
possibility of built-in code calling icmpv6_send() at least... As you
said, should we just convert IPV6 to a bool instead of a tristate?
Thanks,
Roland
next prev parent reply other threads:[~2007-02-06 22:43 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-29 5:47 [RFC][PATCH][IPSEC][0/3]inter address family ipsec tunnel Kazunori MIYAZAWA
2007-02-06 22:24 ` David Miller
2007-02-06 22:43 ` Roland Dreier [this message]
2007-02-06 22:49 ` depending on IPv6 symbols David Miller
2007-02-06 22:53 ` Roland Dreier
2007-02-06 23:33 ` David Miller
2007-02-07 0:07 ` Roland Dreier
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=adaodo6sy9o.fsf_-_@cisco.com \
--to=rdreier@cisco.com \
--cc=Diego.Beltrami@hiit.fi \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=kazunori@miyazawa.org \
--cc=miika@iki.fi \
--cc=mst@mellanox.co.il \
--cc=netdev@vger.kernel.org \
--cc=usagi-core@linux-ipv6.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.