提交 160eb5a6 编写于 作者: D David S. Miller

ipv4: Kill early demux method return value.

It's completely unnecessary.
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 1d1e34dd
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
/* This is used to register protocols. */ /* This is used to register protocols. */
struct net_protocol { struct net_protocol {
int (*early_demux)(struct sk_buff *skb); void (*early_demux)(struct sk_buff *skb);
int (*handler)(struct sk_buff *skb); int (*handler)(struct sk_buff *skb);
void (*err_handler)(struct sk_buff *skb, u32 info); void (*err_handler)(struct sk_buff *skb, u32 info);
int (*gso_send_check)(struct sk_buff *skb); int (*gso_send_check)(struct sk_buff *skb);
......
...@@ -325,7 +325,7 @@ extern void tcp_v4_err(struct sk_buff *skb, u32); ...@@ -325,7 +325,7 @@ extern void tcp_v4_err(struct sk_buff *skb, u32);
extern void tcp_shutdown (struct sock *sk, int how); extern void tcp_shutdown (struct sock *sk, int how);
extern int tcp_v4_early_demux(struct sk_buff *skb); extern void tcp_v4_early_demux(struct sk_buff *skb);
extern int tcp_v4_rcv(struct sk_buff *skb); extern int tcp_v4_rcv(struct sk_buff *skb);
extern struct inet_peer *tcp_v4_get_peer(struct sock *sk); extern struct inet_peer *tcp_v4_get_peer(struct sock *sk);
......
...@@ -320,33 +320,29 @@ static int ip_rcv_finish(struct sk_buff *skb) ...@@ -320,33 +320,29 @@ static int ip_rcv_finish(struct sk_buff *skb)
const struct iphdr *iph = ip_hdr(skb); const struct iphdr *iph = ip_hdr(skb);
struct rtable *rt; struct rtable *rt;
if (sysctl_ip_early_demux && !skb_dst(skb)) {
const struct net_protocol *ipprot;
int protocol = iph->protocol;
rcu_read_lock();
ipprot = rcu_dereference(inet_protos[protocol]);
if (ipprot && ipprot->early_demux)
ipprot->early_demux(skb);
rcu_read_unlock();
}
/* /*
* Initialise the virtual path cache for the packet. It describes * Initialise the virtual path cache for the packet. It describes
* how the packet travels inside Linux networking. * how the packet travels inside Linux networking.
*/ */
if (skb_dst(skb) == NULL) { if (!skb_dst(skb)) {
int err = -ENOENT; int err = ip_route_input_noref(skb, iph->daddr, iph->saddr,
iph->tos, skb->dev);
if (sysctl_ip_early_demux) { if (unlikely(err)) {
const struct net_protocol *ipprot; if (err == -EXDEV)
int protocol = iph->protocol; NET_INC_STATS_BH(dev_net(skb->dev),
LINUX_MIB_IPRPFILTER);
rcu_read_lock(); goto drop;
ipprot = rcu_dereference(inet_protos[protocol]);
if (ipprot && ipprot->early_demux)
err = ipprot->early_demux(skb);
rcu_read_unlock();
}
if (err) {
err = ip_route_input_noref(skb, iph->daddr, iph->saddr,
iph->tos, skb->dev);
if (unlikely(err)) {
if (err == -EXDEV)
NET_INC_STATS_BH(dev_net(skb->dev),
LINUX_MIB_IPRPFILTER);
goto drop;
}
} }
} }
......
...@@ -1673,30 +1673,28 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) ...@@ -1673,30 +1673,28 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
} }
EXPORT_SYMBOL(tcp_v4_do_rcv); EXPORT_SYMBOL(tcp_v4_do_rcv);
int tcp_v4_early_demux(struct sk_buff *skb) void tcp_v4_early_demux(struct sk_buff *skb)
{ {
struct net *net = dev_net(skb->dev); struct net *net = dev_net(skb->dev);
const struct iphdr *iph; const struct iphdr *iph;
const struct tcphdr *th; const struct tcphdr *th;
struct net_device *dev; struct net_device *dev;
struct sock *sk; struct sock *sk;
int err;
err = -ENOENT;
if (skb->pkt_type != PACKET_HOST) if (skb->pkt_type != PACKET_HOST)
goto out_err; return;
if (!pskb_may_pull(skb, ip_hdrlen(skb) + sizeof(struct tcphdr))) if (!pskb_may_pull(skb, ip_hdrlen(skb) + sizeof(struct tcphdr)))
goto out_err; return;
iph = ip_hdr(skb); iph = ip_hdr(skb);
th = (struct tcphdr *) ((char *)iph + ip_hdrlen(skb)); th = (struct tcphdr *) ((char *)iph + ip_hdrlen(skb));
if (th->doff < sizeof(struct tcphdr) / 4) if (th->doff < sizeof(struct tcphdr) / 4)
goto out_err; return;
if (!pskb_may_pull(skb, ip_hdrlen(skb) + th->doff * 4)) if (!pskb_may_pull(skb, ip_hdrlen(skb) + th->doff * 4))
goto out_err; return;
dev = skb->dev; dev = skb->dev;
sk = __inet_lookup_established(net, &tcp_hashinfo, sk = __inet_lookup_established(net, &tcp_hashinfo,
...@@ -1713,16 +1711,11 @@ int tcp_v4_early_demux(struct sk_buff *skb) ...@@ -1713,16 +1711,11 @@ int tcp_v4_early_demux(struct sk_buff *skb)
if (dst) { if (dst) {
struct rtable *rt = (struct rtable *) dst; struct rtable *rt = (struct rtable *) dst;
if (rt->rt_iif == dev->ifindex) { if (rt->rt_iif == dev->ifindex)
skb_dst_set_noref(skb, dst); skb_dst_set_noref(skb, dst);
err = 0;
}
} }
} }
} }
out_err:
return err;
} }
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册