Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
ece639ca
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
ece639ca
编写于
2月 19, 2011
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nf-2.6
上级
0cc9d525
0af320fb
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
45 addition
and
31 deletion
+45
-31
include/net/netfilter/nf_tproxy_core.h
include/net/netfilter/nf_tproxy_core.h
+1
-11
net/ipv6/netfilter/ip6t_LOG.c
net/ipv6/netfilter/ip6t_LOG.c
+1
-1
net/netfilter/nf_tproxy_core.c
net/netfilter/nf_tproxy_core.c
+12
-15
net/netfilter/xt_TPROXY.c
net/netfilter/xt_TPROXY.c
+20
-2
net/netfilter/xt_socket.c
net/netfilter/xt_socket.c
+11
-2
未找到文件。
include/net/netfilter/nf_tproxy_core.h
浏览文件 @
ece639ca
...
...
@@ -201,18 +201,8 @@ nf_tproxy_get_sock_v6(struct net *net, const u8 protocol,
}
#endif
static
inline
void
nf_tproxy_put_sock
(
struct
sock
*
sk
)
{
/* TIME_WAIT inet sockets have to be handled differently */
if
((
sk
->
sk_protocol
==
IPPROTO_TCP
)
&&
(
sk
->
sk_state
==
TCP_TIME_WAIT
))
inet_twsk_put
(
inet_twsk
(
sk
));
else
sock_put
(
sk
);
}
/* assign a socket to the skb -- consumes sk */
int
void
nf_tproxy_assign_sock
(
struct
sk_buff
*
skb
,
struct
sock
*
sk
);
#endif
net/ipv6/netfilter/ip6t_LOG.c
浏览文件 @
ece639ca
...
...
@@ -410,7 +410,7 @@ static void dump_mac_header(struct sbuff *m,
if
(
p
!=
NULL
)
{
sb_add
(
m
,
"%02x"
,
*
p
++
);
for
(
i
=
1
;
i
<
len
;
i
++
)
sb_add
(
m
,
":%02x"
,
p
[
i
]
);
sb_add
(
m
,
":%02x"
,
*
p
++
);
}
sb_add
(
m
,
" "
);
...
...
net/netfilter/nf_tproxy_core.c
浏览文件 @
ece639ca
...
...
@@ -28,26 +28,23 @@ nf_tproxy_destructor(struct sk_buff *skb)
skb
->
destructor
=
NULL
;
if
(
sk
)
nf_tproxy_put_sock
(
sk
);
sock_put
(
sk
);
}
/* consumes sk */
int
void
nf_tproxy_assign_sock
(
struct
sk_buff
*
skb
,
struct
sock
*
sk
)
{
bool
transparent
=
(
sk
->
sk_state
==
TCP_TIME_WAIT
)
?
inet_twsk
(
sk
)
->
tw_transparent
:
inet_sk
(
sk
)
->
transparent
;
if
(
transparent
)
{
skb_orphan
(
skb
);
skb
->
sk
=
sk
;
skb
->
destructor
=
nf_tproxy_destructor
;
return
1
;
}
else
nf_tproxy_put_sock
(
sk
);
return
0
;
/* assigning tw sockets complicates things; most
* skb->sk->X checks would have to test sk->sk_state first */
if
(
sk
->
sk_state
==
TCP_TIME_WAIT
)
{
inet_twsk_put
(
inet_twsk
(
sk
));
return
;
}
skb_orphan
(
skb
);
skb
->
sk
=
sk
;
skb
->
destructor
=
nf_tproxy_destructor
;
}
EXPORT_SYMBOL_GPL
(
nf_tproxy_assign_sock
);
...
...
net/netfilter/xt_TPROXY.c
浏览文件 @
ece639ca
...
...
@@ -33,6 +33,20 @@
#include <net/netfilter/nf_tproxy_core.h>
#include <linux/netfilter/xt_TPROXY.h>
static
bool
tproxy_sk_is_transparent
(
struct
sock
*
sk
)
{
if
(
sk
->
sk_state
!=
TCP_TIME_WAIT
)
{
if
(
inet_sk
(
sk
)
->
transparent
)
return
true
;
sock_put
(
sk
);
}
else
{
if
(
inet_twsk
(
sk
)
->
tw_transparent
)
return
true
;
inet_twsk_put
(
inet_twsk
(
sk
));
}
return
false
;
}
static
inline
__be32
tproxy_laddr4
(
struct
sk_buff
*
skb
,
__be32
user_laddr
,
__be32
daddr
)
{
...
...
@@ -141,7 +155,7 @@ tproxy_tg4(struct sk_buff *skb, __be32 laddr, __be16 lport,
skb
->
dev
,
NFT_LOOKUP_LISTENER
);
/* NOTE: assign_sock consumes our sk reference */
if
(
sk
&&
nf_tproxy_assign_sock
(
skb
,
sk
))
{
if
(
sk
&&
tproxy_sk_is_transparent
(
sk
))
{
/* This should be in a separate target, but we don't do multiple
targets on the same rule yet */
skb
->
mark
=
(
skb
->
mark
&
~
mark_mask
)
^
mark_value
;
...
...
@@ -149,6 +163,8 @@ tproxy_tg4(struct sk_buff *skb, __be32 laddr, __be16 lport,
pr_debug
(
"redirecting: proto %hhu %pI4:%hu -> %pI4:%hu, mark: %x
\n
"
,
iph
->
protocol
,
&
iph
->
daddr
,
ntohs
(
hp
->
dest
),
&
laddr
,
ntohs
(
lport
),
skb
->
mark
);
nf_tproxy_assign_sock
(
skb
,
sk
);
return
NF_ACCEPT
;
}
...
...
@@ -306,7 +322,7 @@ tproxy_tg6_v1(struct sk_buff *skb, const struct xt_action_param *par)
par
->
in
,
NFT_LOOKUP_LISTENER
);
/* NOTE: assign_sock consumes our sk reference */
if
(
sk
&&
nf_tproxy_assign_sock
(
skb
,
sk
))
{
if
(
sk
&&
tproxy_sk_is_transparent
(
sk
))
{
/* This should be in a separate target, but we don't do multiple
targets on the same rule yet */
skb
->
mark
=
(
skb
->
mark
&
~
tgi
->
mark_mask
)
^
tgi
->
mark_value
;
...
...
@@ -314,6 +330,8 @@ tproxy_tg6_v1(struct sk_buff *skb, const struct xt_action_param *par)
pr_debug
(
"redirecting: proto %hhu %pI6:%hu -> %pI6:%hu, mark: %x
\n
"
,
tproto
,
&
iph
->
saddr
,
ntohs
(
hp
->
source
),
laddr
,
ntohs
(
lport
),
skb
->
mark
);
nf_tproxy_assign_sock
(
skb
,
sk
);
return
NF_ACCEPT
;
}
...
...
net/netfilter/xt_socket.c
浏览文件 @
ece639ca
...
...
@@ -35,6 +35,15 @@
#include <net/netfilter/nf_conntrack.h>
#endif
static
void
xt_socket_put_sk
(
struct
sock
*
sk
)
{
if
(
sk
->
sk_state
==
TCP_TIME_WAIT
)
inet_twsk_put
(
inet_twsk
(
sk
));
else
sock_put
(
sk
);
}
static
int
extract_icmp4_fields
(
const
struct
sk_buff
*
skb
,
u8
*
protocol
,
...
...
@@ -164,7 +173,7 @@ socket_match(const struct sk_buff *skb, struct xt_action_param *par,
(
sk
->
sk_state
==
TCP_TIME_WAIT
&&
inet_twsk
(
sk
)
->
tw_transparent
));
nf_tproxy_put_soc
k
(
sk
);
xt_socket_put_s
k
(
sk
);
if
(
wildcard
||
!
transparent
)
sk
=
NULL
;
...
...
@@ -298,7 +307,7 @@ socket_mt6_v1(const struct sk_buff *skb, struct xt_action_param *par)
(
sk
->
sk_state
==
TCP_TIME_WAIT
&&
inet_twsk
(
sk
)
->
tw_transparent
));
nf_tproxy_put_soc
k
(
sk
);
xt_socket_put_s
k
(
sk
);
if
(
wildcard
||
!
transparent
)
sk
=
NULL
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录