* [PATCH net-next] netfilter: xt_socket: use IP early demux
@ 2013-05-22 21:01 Eric Dumazet
2013-05-22 21:27 ` David Miller
0 siblings, 1 reply; 3+ messages in thread
From: Eric Dumazet @ 2013-05-22 21:01 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netdev, netfilter-devel, Patrick McHardy
From: Eric Dumazet <edumazet@google.com>
With IP early demux added in linux-3.6, we perform TCP lookup in IP
layer before iptables hooks.
We can avoid doing a second lookup in xt_socket.
Signed-off-by: Eric Dumazet <edumazet@google.com>
---
net/netfilter/xt_socket.c | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/net/netfilter/xt_socket.c b/net/netfilter/xt_socket.c
index 63b2bdb..0270424 100644
--- a/net/netfilter/xt_socket.c
+++ b/net/netfilter/xt_socket.c
@@ -107,7 +107,7 @@ socket_match(const struct sk_buff *skb, struct xt_action_param *par,
{
const struct iphdr *iph = ip_hdr(skb);
struct udphdr _hdr, *hp = NULL;
- struct sock *sk;
+ struct sock *sk = skb->sk;
__be32 uninitialized_var(daddr), uninitialized_var(saddr);
__be16 uninitialized_var(dport), uninitialized_var(sport);
u8 uninitialized_var(protocol);
@@ -155,9 +155,11 @@ socket_match(const struct sk_buff *skb, struct xt_action_param *par,
}
#endif
- sk = nf_tproxy_get_sock_v4(dev_net(skb->dev), protocol,
- saddr, daddr, sport, dport, par->in, NFT_LOOKUP_ANY);
- if (sk != NULL) {
+ if (!sk)
+ sk = nf_tproxy_get_sock_v4(dev_net(skb->dev), protocol,
+ saddr, daddr, sport, dport,
+ par->in, NFT_LOOKUP_ANY);
+ if (sk) {
bool wildcard;
bool transparent = true;
@@ -173,7 +175,8 @@ socket_match(const struct sk_buff *skb, struct xt_action_param *par,
(sk->sk_state == TCP_TIME_WAIT &&
inet_twsk(sk)->tw_transparent));
- xt_socket_put_sk(sk);
+ if (sk != skb->sk)
+ xt_socket_put_sk(sk);
if (wildcard || !transparent)
sk = NULL;
@@ -260,7 +263,7 @@ socket_mt6_v1(const struct sk_buff *skb, struct xt_action_param *par)
{
struct ipv6hdr *iph = ipv6_hdr(skb);
struct udphdr _hdr, *hp = NULL;
- struct sock *sk;
+ struct sock *sk = skb->sk;
struct in6_addr *daddr = NULL, *saddr = NULL;
__be16 uninitialized_var(dport), uninitialized_var(sport);
int thoff = 0, uninitialized_var(tproto);
@@ -291,9 +294,11 @@ socket_mt6_v1(const struct sk_buff *skb, struct xt_action_param *par)
return false;
}
- sk = nf_tproxy_get_sock_v6(dev_net(skb->dev), tproto,
- saddr, daddr, sport, dport, par->in, NFT_LOOKUP_ANY);
- if (sk != NULL) {
+ if (!sk)
+ sk = nf_tproxy_get_sock_v6(dev_net(skb->dev), tproto,
+ saddr, daddr, sport, dport,
+ par->in, NFT_LOOKUP_ANY);
+ if (sk) {
bool wildcard;
bool transparent = true;
@@ -309,7 +314,8 @@ socket_mt6_v1(const struct sk_buff *skb, struct xt_action_param *par)
(sk->sk_state == TCP_TIME_WAIT &&
inet_twsk(sk)->tw_transparent));
- xt_socket_put_sk(sk);
+ if (sk != skb->sk)
+ xt_socket_put_sk(sk);
if (wildcard || !transparent)
sk = NULL;
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH net-next] netfilter: xt_socket: use IP early demux
2013-05-22 21:01 [PATCH net-next] netfilter: xt_socket: use IP early demux Eric Dumazet
@ 2013-05-22 21:27 ` David Miller
2013-05-23 10:53 ` Pablo Neira Ayuso
0 siblings, 1 reply; 3+ messages in thread
From: David Miller @ 2013-05-22 21:27 UTC (permalink / raw)
To: eric.dumazet; +Cc: pablo, netdev, netfilter-devel, kaber
From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Wed, 22 May 2013 14:01:06 -0700
> From: Eric Dumazet <edumazet@google.com>
>
> With IP early demux added in linux-3.6, we perform TCP lookup in IP
> layer before iptables hooks.
>
> We can avoid doing a second lookup in xt_socket.
>
> Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: David S. Miller <davem@davemloft.net>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net-next] netfilter: xt_socket: use IP early demux
2013-05-22 21:27 ` David Miller
@ 2013-05-23 10:53 ` Pablo Neira Ayuso
0 siblings, 0 replies; 3+ messages in thread
From: Pablo Neira Ayuso @ 2013-05-23 10:53 UTC (permalink / raw)
To: David Miller; +Cc: eric.dumazet, netdev, netfilter-devel, kaber
On Wed, May 22, 2013 at 02:27:33PM -0700, David Miller wrote:
> From: Eric Dumazet <eric.dumazet@gmail.com>
> Date: Wed, 22 May 2013 14:01:06 -0700
>
> > From: Eric Dumazet <edumazet@google.com>
> >
> > With IP early demux added in linux-3.6, we perform TCP lookup in IP
> > layer before iptables hooks.
> >
> > We can avoid doing a second lookup in xt_socket.
> >
> > Signed-off-by: Eric Dumazet <edumazet@google.com>
>
> Acked-by: David S. Miller <davem@davemloft.net>
Applied to nf-next, thanks!
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-05-23 10:53 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-05-22 21:01 [PATCH net-next] netfilter: xt_socket: use IP early demux Eric Dumazet
2013-05-22 21:27 ` David Miller
2013-05-23 10:53 ` Pablo Neira Ayuso
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).