netfilter: ipv6: avoid indirect calls for IPV6=y case
indirect calls are only needed if ipv6 is a module. Add helpers to abstract the v6ops indirections and use them instead. fragment, reroute and route_input are kept as indirect calls. The first two are not not used in hot path and route_input is only used by bridge netfilter. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
committed by
Pablo Neira Ayuso
parent
960587285a
commit
ac02bcf9cc
@@ -162,7 +162,7 @@ EXPORT_SYMBOL_GPL(nf_checksum_partial);
|
||||
int nf_route(struct net *net, struct dst_entry **dst, struct flowi *fl,
|
||||
bool strict, unsigned short family)
|
||||
{
|
||||
const struct nf_ipv6_ops *v6ops;
|
||||
const struct nf_ipv6_ops *v6ops __maybe_unused;
|
||||
int ret = 0;
|
||||
|
||||
switch (family) {
|
||||
@@ -170,9 +170,7 @@ int nf_route(struct net *net, struct dst_entry **dst, struct flowi *fl,
|
||||
ret = nf_ip_route(net, dst, fl, strict);
|
||||
break;
|
||||
case AF_INET6:
|
||||
v6ops = rcu_dereference(nf_ipv6_ops);
|
||||
if (v6ops)
|
||||
ret = v6ops->route(net, dst, fl, strict);
|
||||
ret = nf_ip6_route(net, dst, fl, strict);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user