Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
5aa04d3a
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
5aa04d3a
编写于
6月 12, 2012
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://1984.lsi.us.es/net
上级
e3d62d7e
d109e9af
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
48 addition
and
34 deletion
+48
-34
include/linux/netfilter/xt_HMARK.h
include/linux/netfilter/xt_HMARK.h
+5
-0
net/netfilter/nf_conntrack_h323_main.c
net/netfilter/nf_conntrack_h323_main.c
+2
-3
net/netfilter/xt_HMARK.c
net/netfilter/xt_HMARK.c
+41
-31
未找到文件。
include/linux/netfilter/xt_HMARK.h
浏览文件 @
5aa04d3a
...
...
@@ -27,7 +27,12 @@ union hmark_ports {
__u16
src
;
__u16
dst
;
}
p16
;
struct
{
__be16
src
;
__be16
dst
;
}
b16
;
__u32
v32
;
__be32
b32
;
};
struct
xt_hmark_info
{
...
...
net/netfilter/nf_conntrack_h323_main.c
浏览文件 @
5aa04d3a
...
...
@@ -270,9 +270,8 @@ static int expect_rtp_rtcp(struct sk_buff *skb, struct nf_conn *ct,
return
0
;
/* RTP port is even */
port
&=
htons
(
~
1
);
rtp_port
=
port
;
rtcp_port
=
htons
(
ntohs
(
port
)
+
1
);
rtp_port
=
port
&
~
htons
(
1
);
rtcp_port
=
port
|
htons
(
1
);
/* Create expect for RTP */
if
((
rtp_exp
=
nf_ct_expect_alloc
(
ct
))
==
NULL
)
...
...
net/netfilter/xt_HMARK.c
浏览文件 @
5aa04d3a
...
...
@@ -32,13 +32,13 @@ MODULE_ALIAS("ipt_HMARK");
MODULE_ALIAS
(
"ip6t_HMARK"
);
struct
hmark_tuple
{
u
32
src
;
u
32
dst
;
__be
32
src
;
__be
32
dst
;
union
hmark_ports
uports
;
u
int8_t
proto
;
u
8
proto
;
};
static
inline
u32
hmark_addr6_mask
(
const
__u32
*
addr32
,
const
__u
32
*
mask
)
static
inline
__be32
hmark_addr6_mask
(
const
__be32
*
addr32
,
const
__be
32
*
mask
)
{
return
(
addr32
[
0
]
&
mask
[
0
])
^
(
addr32
[
1
]
&
mask
[
1
])
^
...
...
@@ -46,8 +46,8 @@ static inline u32 hmark_addr6_mask(const __u32 *addr32, const __u32 *mask)
(
addr32
[
3
]
&
mask
[
3
]);
}
static
inline
u
32
hmark_addr_mask
(
int
l3num
,
const
__
u32
*
addr32
,
const
__u
32
*
mask
)
static
inline
__be
32
hmark_addr_mask
(
int
l3num
,
const
__
be32
*
addr32
,
const
__be
32
*
mask
)
{
switch
(
l3num
)
{
case
AF_INET
:
...
...
@@ -58,6 +58,22 @@ hmark_addr_mask(int l3num, const __u32 *addr32, const __u32 *mask)
return
0
;
}
static
inline
void
hmark_swap_ports
(
union
hmark_ports
*
uports
,
const
struct
xt_hmark_info
*
info
)
{
union
hmark_ports
hp
;
u16
src
,
dst
;
hp
.
b32
=
(
uports
->
b32
&
info
->
port_mask
.
b32
)
|
info
->
port_set
.
b32
;
src
=
ntohs
(
hp
.
b16
.
src
);
dst
=
ntohs
(
hp
.
b16
.
dst
);
if
(
dst
>
src
)
uports
->
v32
=
(
dst
<<
16
)
|
src
;
else
uports
->
v32
=
(
src
<<
16
)
|
dst
;
}
static
int
hmark_ct_set_htuple
(
const
struct
sk_buff
*
skb
,
struct
hmark_tuple
*
t
,
const
struct
xt_hmark_info
*
info
)
...
...
@@ -74,22 +90,19 @@ hmark_ct_set_htuple(const struct sk_buff *skb, struct hmark_tuple *t,
otuple
=
&
ct
->
tuplehash
[
IP_CT_DIR_ORIGINAL
].
tuple
;
rtuple
=
&
ct
->
tuplehash
[
IP_CT_DIR_REPLY
].
tuple
;
t
->
src
=
hmark_addr_mask
(
otuple
->
src
.
l3num
,
otuple
->
src
.
u3
.
all
,
info
->
src_mask
.
all
);
t
->
dst
=
hmark_addr_mask
(
otuple
->
src
.
l3num
,
rtuple
->
src
.
u3
.
all
,
info
->
dst_mask
.
all
);
t
->
src
=
hmark_addr_mask
(
otuple
->
src
.
l3num
,
otuple
->
src
.
u3
.
ip6
,
info
->
src_mask
.
ip6
);
t
->
dst
=
hmark_addr_mask
(
otuple
->
src
.
l3num
,
rtuple
->
src
.
u3
.
ip6
,
info
->
dst_mask
.
ip6
);
if
(
info
->
flags
&
XT_HMARK_FLAG
(
XT_HMARK_METHOD_L3
))
return
0
;
t
->
proto
=
nf_ct_protonum
(
ct
);
if
(
t
->
proto
!=
IPPROTO_ICMP
)
{
t
->
uports
.
p16
.
src
=
otuple
->
src
.
u
.
all
;
t
->
uports
.
p16
.
dst
=
rtuple
->
src
.
u
.
all
;
t
->
uports
.
v32
=
(
t
->
uports
.
v32
&
info
->
port_mask
.
v32
)
|
info
->
port_set
.
v32
;
if
(
t
->
uports
.
p16
.
dst
<
t
->
uports
.
p16
.
src
)
swap
(
t
->
uports
.
p16
.
dst
,
t
->
uports
.
p16
.
src
);
t
->
uports
.
b16
.
src
=
otuple
->
src
.
u
.
all
;
t
->
uports
.
b16
.
dst
=
rtuple
->
src
.
u
.
all
;
hmark_swap_ports
(
&
t
->
uports
,
info
);
}
return
0
;
...
...
@@ -98,15 +111,19 @@ hmark_ct_set_htuple(const struct sk_buff *skb, struct hmark_tuple *t,
#endif
}
/* This hash function is endian independent, to ensure consistent hashing if
* the cluster is composed of big and little endian systems. */
static
inline
u32
hmark_hash
(
struct
hmark_tuple
*
t
,
const
struct
xt_hmark_info
*
info
)
{
u32
hash
;
u32
src
=
ntohl
(
t
->
src
);
u32
dst
=
ntohl
(
t
->
dst
);
if
(
t
->
dst
<
t
->
src
)
swap
(
t
->
src
,
t
->
dst
);
if
(
dst
<
src
)
swap
(
src
,
dst
);
hash
=
jhash_3words
(
t
->
src
,
t
->
dst
,
t
->
uports
.
v32
,
info
->
hashrnd
);
hash
=
jhash_3words
(
src
,
dst
,
t
->
uports
.
v32
,
info
->
hashrnd
);
hash
=
hash
^
(
t
->
proto
&
info
->
proto_mask
);
return
(((
u64
)
hash
*
info
->
hmodulus
)
>>
32
)
+
info
->
hoffset
;
...
...
@@ -126,11 +143,7 @@ hmark_set_tuple_ports(const struct sk_buff *skb, unsigned int nhoff,
if
(
skb_copy_bits
(
skb
,
nhoff
,
&
t
->
uports
,
sizeof
(
t
->
uports
))
<
0
)
return
;
t
->
uports
.
v32
=
(
t
->
uports
.
v32
&
info
->
port_mask
.
v32
)
|
info
->
port_set
.
v32
;
if
(
t
->
uports
.
p16
.
dst
<
t
->
uports
.
p16
.
src
)
swap
(
t
->
uports
.
p16
.
dst
,
t
->
uports
.
p16
.
src
);
hmark_swap_ports
(
&
t
->
uports
,
info
);
}
#if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
...
...
@@ -178,8 +191,8 @@ hmark_pkt_set_htuple_ipv6(const struct sk_buff *skb, struct hmark_tuple *t,
return
-
1
;
}
noicmp:
t
->
src
=
hmark_addr6_mask
(
ip6
->
saddr
.
s6_addr32
,
info
->
src_mask
.
all
);
t
->
dst
=
hmark_addr6_mask
(
ip6
->
daddr
.
s6_addr32
,
info
->
dst_mask
.
all
);
t
->
src
=
hmark_addr6_mask
(
ip6
->
saddr
.
s6_addr32
,
info
->
src_mask
.
ip6
);
t
->
dst
=
hmark_addr6_mask
(
ip6
->
daddr
.
s6_addr32
,
info
->
dst_mask
.
ip6
);
if
(
info
->
flags
&
XT_HMARK_FLAG
(
XT_HMARK_METHOD_L3
))
return
0
;
...
...
@@ -255,11 +268,8 @@ hmark_pkt_set_htuple_ipv4(const struct sk_buff *skb, struct hmark_tuple *t,
}
}
t
->
src
=
(
__force
u32
)
ip
->
saddr
;
t
->
dst
=
(
__force
u32
)
ip
->
daddr
;
t
->
src
&=
info
->
src_mask
.
ip
;
t
->
dst
&=
info
->
dst_mask
.
ip
;
t
->
src
=
ip
->
saddr
&
info
->
src_mask
.
ip
;
t
->
dst
=
ip
->
daddr
&
info
->
dst_mask
.
ip
;
if
(
info
->
flags
&
XT_HMARK_FLAG
(
XT_HMARK_METHOD_L3
))
return
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录