Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
1a0c8330
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1a0c8330
编写于
3月 20, 2011
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nf-2.6
上级
a769f496
961ed183
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
73 addition
and
104 deletion
+73
-104
include/linux/netfilter/ipset/ip_set_getport.h
include/linux/netfilter/ipset/ip_set_getport.h
+10
-0
net/ipv4/netfilter/ip_tables.c
net/ipv4/netfilter/ip_tables.c
+2
-2
net/ipv4/netfilter/ipt_CLUSTERIP.c
net/ipv4/netfilter/ipt_CLUSTERIP.c
+4
-1
net/ipv6/netfilter/ip6_tables.c
net/ipv6/netfilter/ip6_tables.c
+2
-2
net/netfilter/ipset/ip_set_core.c
net/netfilter/ipset/ip_set_core.c
+17
-5
net/netfilter/ipset/ip_set_hash_ipport.c
net/netfilter/ipset/ip_set_hash_ipport.c
+10
-24
net/netfilter/ipset/ip_set_hash_ipportip.c
net/netfilter/ipset/ip_set_hash_ipportip.c
+10
-24
net/netfilter/ipset/ip_set_hash_ipportnet.c
net/netfilter/ipset/ip_set_hash_ipportnet.c
+10
-24
net/netfilter/ipset/ip_set_hash_netport.c
net/netfilter/ipset/ip_set_hash_netport.c
+8
-22
未找到文件。
include/linux/netfilter/ipset/ip_set_getport.h
浏览文件 @
1a0c8330
...
...
@@ -18,4 +18,14 @@ static inline bool ip_set_get_ip6_port(const struct sk_buff *skb, bool src,
extern
bool
ip_set_get_ip_port
(
const
struct
sk_buff
*
skb
,
u8
pf
,
bool
src
,
__be16
*
port
);
static
inline
bool
ip_set_proto_with_ports
(
u8
proto
)
{
switch
(
proto
)
{
case
IPPROTO_TCP
:
case
IPPROTO_UDP
:
return
true
;
}
return
false
;
}
#endif
/*_IP_SET_GETPORT_H*/
net/ipv4/netfilter/ip_tables.c
浏览文件 @
1a0c8330
...
...
@@ -387,7 +387,7 @@ ipt_do_table(struct sk_buff *skb,
verdict
=
(
unsigned
)(
-
v
)
-
1
;
break
;
}
if
(
*
stackptr
==
0
)
{
if
(
*
stackptr
<=
origptr
)
{
e
=
get_entry
(
table_base
,
private
->
underflow
[
hook
]);
pr_debug
(
"Underflow (this is normal) "
...
...
@@ -427,10 +427,10 @@ ipt_do_table(struct sk_buff *skb,
/* Verdict */
break
;
}
while
(
!
acpar
.
hotdrop
);
xt_info_rdunlock_bh
();
pr_debug
(
"Exiting %s; resetting sp from %u to %u
\n
"
,
__func__
,
*
stackptr
,
origptr
);
*
stackptr
=
origptr
;
xt_info_rdunlock_bh
();
#ifdef DEBUG_ALLOW_ALL
return
NF_ACCEPT
;
#else
...
...
net/ipv4/netfilter/ipt_CLUSTERIP.c
浏览文件 @
1a0c8330
...
...
@@ -664,8 +664,11 @@ static ssize_t clusterip_proc_write(struct file *file, const char __user *input,
char
buffer
[
PROC_WRITELEN
+
1
];
unsigned
long
nodenum
;
if
(
copy_from_user
(
buffer
,
input
,
PROC_WRITELEN
))
if
(
size
>
PROC_WRITELEN
)
return
-
EIO
;
if
(
copy_from_user
(
buffer
,
input
,
size
))
return
-
EFAULT
;
buffer
[
size
]
=
0
;
if
(
*
buffer
==
'+'
)
{
nodenum
=
simple_strtoul
(
buffer
+
1
,
NULL
,
10
);
...
...
net/ipv6/netfilter/ip6_tables.c
浏览文件 @
1a0c8330
...
...
@@ -410,7 +410,7 @@ ip6t_do_table(struct sk_buff *skb,
verdict
=
(
unsigned
)(
-
v
)
-
1
;
break
;
}
if
(
*
stackptr
==
0
)
if
(
*
stackptr
<=
origptr
)
e
=
get_entry
(
table_base
,
private
->
underflow
[
hook
]);
else
...
...
@@ -441,8 +441,8 @@ ip6t_do_table(struct sk_buff *skb,
break
;
}
while
(
!
acpar
.
hotdrop
);
xt_info_rdunlock_bh
();
*
stackptr
=
origptr
;
xt_info_rdunlock_bh
();
#ifdef DEBUG_ALLOW_ALL
return
NF_ACCEPT
;
...
...
net/netfilter/ipset/ip_set_core.c
浏览文件 @
1a0c8330
...
...
@@ -94,16 +94,28 @@ static int
find_set_type_get
(
const
char
*
name
,
u8
family
,
u8
revision
,
struct
ip_set_type
**
found
)
{
struct
ip_set_type
*
type
;
int
err
;
rcu_read_lock
();
*
found
=
find_set_type
(
name
,
family
,
revision
);
if
(
*
found
)
{
int
err
=
!
try_module_get
((
*
found
)
->
me
);
rcu_read_unlock
();
return
err
?
-
EFAULT
:
0
;
err
=
!
try_module_get
((
*
found
)
->
me
)
?
-
EFAULT
:
0
;
goto
unlock
;
}
/* Make sure the type is loaded but we don't support the revision */
list_for_each_entry_rcu
(
type
,
&
ip_set_type_list
,
list
)
if
(
STREQ
(
type
->
name
,
name
))
{
err
=
-
IPSET_ERR_FIND_TYPE
;
goto
unlock
;
}
rcu_read_unlock
();
return
try_to_load_type
(
name
);
unlock:
rcu_read_unlock
();
return
err
;
}
/* Find a given set type by name and family.
...
...
@@ -116,7 +128,7 @@ find_set_type_minmax(const char *name, u8 family, u8 *min, u8 *max)
struct
ip_set_type
*
type
;
bool
found
=
false
;
*
min
=
*
max
=
0
;
*
min
=
255
;
*
max
=
0
;
rcu_read_lock
();
list_for_each_entry_rcu
(
type
,
&
ip_set_type_list
,
list
)
if
(
STREQ
(
type
->
name
,
name
)
&&
...
...
@@ -124,7 +136,7 @@ find_set_type_minmax(const char *name, u8 family, u8 *min, u8 *max)
found
=
true
;
if
(
type
->
revision
<
*
min
)
*
min
=
type
->
revision
;
else
if
(
type
->
revision
>
*
max
)
if
(
type
->
revision
>
*
max
)
*
max
=
type
->
revision
;
}
rcu_read_unlock
();
...
...
net/netfilter/ipset/ip_set_hash_ipport.c
浏览文件 @
1a0c8330
...
...
@@ -150,6 +150,7 @@ hash_ipport4_uadt(struct ip_set *set, struct nlattr *tb[],
struct
hash_ipport4_elem
data
=
{
};
u32
ip
,
ip_to
,
p
,
port
,
port_to
;
u32
timeout
=
h
->
timeout
;
bool
with_ports
=
false
;
int
ret
;
if
(
unlikely
(
!
tb
[
IPSET_ATTR_IP
]
||
...
...
@@ -172,21 +173,15 @@ hash_ipport4_uadt(struct ip_set *set, struct nlattr *tb[],
if
(
tb
[
IPSET_ATTR_PROTO
])
{
data
.
proto
=
nla_get_u8
(
tb
[
IPSET_ATTR_PROTO
]);
with_ports
=
ip_set_proto_with_ports
(
data
.
proto
);
if
(
data
.
proto
==
0
)
return
-
IPSET_ERR_INVALID_PROTO
;
}
else
return
-
IPSET_ERR_MISSING_PROTO
;
switch
(
data
.
proto
)
{
case
IPPROTO_UDP
:
case
IPPROTO_TCP
:
case
IPPROTO_ICMP
:
break
;
default:
if
(
!
(
with_ports
||
data
.
proto
==
IPPROTO_ICMP
))
data
.
port
=
0
;
break
;
}
if
(
tb
[
IPSET_ATTR_TIMEOUT
])
{
if
(
!
with_timeout
(
h
->
timeout
))
...
...
@@ -195,7 +190,6 @@ hash_ipport4_uadt(struct ip_set *set, struct nlattr *tb[],
}
if
(
adt
==
IPSET_TEST
||
!
(
data
.
proto
==
IPPROTO_TCP
||
data
.
proto
==
IPPROTO_UDP
)
||
!
(
tb
[
IPSET_ATTR_IP_TO
]
||
tb
[
IPSET_ATTR_CIDR
]
||
tb
[
IPSET_ATTR_PORT_TO
]))
{
ret
=
adtfn
(
set
,
&
data
,
timeout
);
...
...
@@ -219,13 +213,12 @@ hash_ipport4_uadt(struct ip_set *set, struct nlattr *tb[],
}
else
ip_to
=
ip
;
port
=
ntohs
(
data
.
port
);
if
(
tb
[
IPSET_ATTR_PORT_TO
])
{
port
_to
=
port
=
ntohs
(
data
.
port
);
if
(
with_ports
&&
tb
[
IPSET_ATTR_PORT_TO
])
{
port_to
=
ip_set_get_h16
(
tb
[
IPSET_ATTR_PORT_TO
]);
if
(
port
>
port_to
)
swap
(
port
,
port_to
);
}
else
port_to
=
port
;
}
for
(;
!
before
(
ip_to
,
ip
);
ip
++
)
for
(
p
=
port
;
p
<=
port_to
;
p
++
)
{
...
...
@@ -361,6 +354,7 @@ hash_ipport6_uadt(struct ip_set *set, struct nlattr *tb[],
struct
hash_ipport6_elem
data
=
{
};
u32
port
,
port_to
;
u32
timeout
=
h
->
timeout
;
bool
with_ports
=
false
;
int
ret
;
if
(
unlikely
(
!
tb
[
IPSET_ATTR_IP
]
||
...
...
@@ -385,21 +379,15 @@ hash_ipport6_uadt(struct ip_set *set, struct nlattr *tb[],
if
(
tb
[
IPSET_ATTR_PROTO
])
{
data
.
proto
=
nla_get_u8
(
tb
[
IPSET_ATTR_PROTO
]);
with_ports
=
ip_set_proto_with_ports
(
data
.
proto
);
if
(
data
.
proto
==
0
)
return
-
IPSET_ERR_INVALID_PROTO
;
}
else
return
-
IPSET_ERR_MISSING_PROTO
;
switch
(
data
.
proto
)
{
case
IPPROTO_UDP
:
case
IPPROTO_TCP
:
case
IPPROTO_ICMPV6
:
break
;
default:
if
(
!
(
with_ports
||
data
.
proto
==
IPPROTO_ICMPV6
))
data
.
port
=
0
;
break
;
}
if
(
tb
[
IPSET_ATTR_TIMEOUT
])
{
if
(
!
with_timeout
(
h
->
timeout
))
...
...
@@ -407,9 +395,7 @@ hash_ipport6_uadt(struct ip_set *set, struct nlattr *tb[],
timeout
=
ip_set_timeout_uget
(
tb
[
IPSET_ATTR_TIMEOUT
]);
}
if
(
adt
==
IPSET_TEST
||
!
(
data
.
proto
==
IPPROTO_TCP
||
data
.
proto
==
IPPROTO_UDP
)
||
!
tb
[
IPSET_ATTR_PORT_TO
])
{
if
(
adt
==
IPSET_TEST
||
!
with_ports
||
!
tb
[
IPSET_ATTR_PORT_TO
])
{
ret
=
adtfn
(
set
,
&
data
,
timeout
);
return
ip_set_eexist
(
ret
,
flags
)
?
0
:
ret
;
}
...
...
net/netfilter/ipset/ip_set_hash_ipportip.c
浏览文件 @
1a0c8330
...
...
@@ -154,6 +154,7 @@ hash_ipportip4_uadt(struct ip_set *set, struct nlattr *tb[],
struct
hash_ipportip4_elem
data
=
{
};
u32
ip
,
ip_to
,
p
,
port
,
port_to
;
u32
timeout
=
h
->
timeout
;
bool
with_ports
=
false
;
int
ret
;
if
(
unlikely
(
!
tb
[
IPSET_ATTR_IP
]
||
!
tb
[
IPSET_ATTR_IP2
]
||
...
...
@@ -180,21 +181,15 @@ hash_ipportip4_uadt(struct ip_set *set, struct nlattr *tb[],
if
(
tb
[
IPSET_ATTR_PROTO
])
{
data
.
proto
=
nla_get_u8
(
tb
[
IPSET_ATTR_PROTO
]);
with_ports
=
ip_set_proto_with_ports
(
data
.
proto
);
if
(
data
.
proto
==
0
)
return
-
IPSET_ERR_INVALID_PROTO
;
}
else
return
-
IPSET_ERR_MISSING_PROTO
;
switch
(
data
.
proto
)
{
case
IPPROTO_UDP
:
case
IPPROTO_TCP
:
case
IPPROTO_ICMP
:
break
;
default:
if
(
!
(
with_ports
||
data
.
proto
==
IPPROTO_ICMP
))
data
.
port
=
0
;
break
;
}
if
(
tb
[
IPSET_ATTR_TIMEOUT
])
{
if
(
!
with_timeout
(
h
->
timeout
))
...
...
@@ -203,7 +198,6 @@ hash_ipportip4_uadt(struct ip_set *set, struct nlattr *tb[],
}
if
(
adt
==
IPSET_TEST
||
!
(
data
.
proto
==
IPPROTO_TCP
||
data
.
proto
==
IPPROTO_UDP
)
||
!
(
tb
[
IPSET_ATTR_IP_TO
]
||
tb
[
IPSET_ATTR_CIDR
]
||
tb
[
IPSET_ATTR_PORT_TO
]))
{
ret
=
adtfn
(
set
,
&
data
,
timeout
);
...
...
@@ -227,13 +221,12 @@ hash_ipportip4_uadt(struct ip_set *set, struct nlattr *tb[],
}
else
ip_to
=
ip
;
port
=
ntohs
(
data
.
port
);
if
(
tb
[
IPSET_ATTR_PORT_TO
])
{
port
_to
=
port
=
ntohs
(
data
.
port
);
if
(
with_ports
&&
tb
[
IPSET_ATTR_PORT_TO
])
{
port_to
=
ip_set_get_h16
(
tb
[
IPSET_ATTR_PORT_TO
]);
if
(
port
>
port_to
)
swap
(
port
,
port_to
);
}
else
port_to
=
port
;
}
for
(;
!
before
(
ip_to
,
ip
);
ip
++
)
for
(
p
=
port
;
p
<=
port_to
;
p
++
)
{
...
...
@@ -375,6 +368,7 @@ hash_ipportip6_uadt(struct ip_set *set, struct nlattr *tb[],
struct
hash_ipportip6_elem
data
=
{
};
u32
port
,
port_to
;
u32
timeout
=
h
->
timeout
;
bool
with_ports
=
false
;
int
ret
;
if
(
unlikely
(
!
tb
[
IPSET_ATTR_IP
]
||
!
tb
[
IPSET_ATTR_IP2
]
||
...
...
@@ -403,21 +397,15 @@ hash_ipportip6_uadt(struct ip_set *set, struct nlattr *tb[],
if
(
tb
[
IPSET_ATTR_PROTO
])
{
data
.
proto
=
nla_get_u8
(
tb
[
IPSET_ATTR_PROTO
]);
with_ports
=
ip_set_proto_with_ports
(
data
.
proto
);
if
(
data
.
proto
==
0
)
return
-
IPSET_ERR_INVALID_PROTO
;
}
else
return
-
IPSET_ERR_MISSING_PROTO
;
switch
(
data
.
proto
)
{
case
IPPROTO_UDP
:
case
IPPROTO_TCP
:
case
IPPROTO_ICMPV6
:
break
;
default:
if
(
!
(
with_ports
||
data
.
proto
==
IPPROTO_ICMPV6
))
data
.
port
=
0
;
break
;
}
if
(
tb
[
IPSET_ATTR_TIMEOUT
])
{
if
(
!
with_timeout
(
h
->
timeout
))
...
...
@@ -425,9 +413,7 @@ hash_ipportip6_uadt(struct ip_set *set, struct nlattr *tb[],
timeout
=
ip_set_timeout_uget
(
tb
[
IPSET_ATTR_TIMEOUT
]);
}
if
(
adt
==
IPSET_TEST
||
!
(
data
.
proto
==
IPPROTO_TCP
||
data
.
proto
==
IPPROTO_UDP
)
||
!
tb
[
IPSET_ATTR_PORT_TO
])
{
if
(
adt
==
IPSET_TEST
||
!
with_ports
||
!
tb
[
IPSET_ATTR_PORT_TO
])
{
ret
=
adtfn
(
set
,
&
data
,
timeout
);
return
ip_set_eexist
(
ret
,
flags
)
?
0
:
ret
;
}
...
...
net/netfilter/ipset/ip_set_hash_ipportnet.c
浏览文件 @
1a0c8330
...
...
@@ -174,6 +174,7 @@ hash_ipportnet4_uadt(struct ip_set *set, struct nlattr *tb[],
struct
hash_ipportnet4_elem
data
=
{
.
cidr
=
HOST_MASK
};
u32
ip
,
ip_to
,
p
,
port
,
port_to
;
u32
timeout
=
h
->
timeout
;
bool
with_ports
=
false
;
int
ret
;
if
(
unlikely
(
!
tb
[
IPSET_ATTR_IP
]
||
!
tb
[
IPSET_ATTR_IP2
]
||
...
...
@@ -208,21 +209,15 @@ hash_ipportnet4_uadt(struct ip_set *set, struct nlattr *tb[],
if
(
tb
[
IPSET_ATTR_PROTO
])
{
data
.
proto
=
nla_get_u8
(
tb
[
IPSET_ATTR_PROTO
]);
with_ports
=
ip_set_proto_with_ports
(
data
.
proto
);
if
(
data
.
proto
==
0
)
return
-
IPSET_ERR_INVALID_PROTO
;
}
else
return
-
IPSET_ERR_MISSING_PROTO
;
switch
(
data
.
proto
)
{
case
IPPROTO_UDP
:
case
IPPROTO_TCP
:
case
IPPROTO_ICMP
:
break
;
default:
if
(
!
(
with_ports
||
data
.
proto
==
IPPROTO_ICMP
))
data
.
port
=
0
;
break
;
}
if
(
tb
[
IPSET_ATTR_TIMEOUT
])
{
if
(
!
with_timeout
(
h
->
timeout
))
...
...
@@ -231,7 +226,6 @@ hash_ipportnet4_uadt(struct ip_set *set, struct nlattr *tb[],
}
if
(
adt
==
IPSET_TEST
||
!
(
data
.
proto
==
IPPROTO_TCP
||
data
.
proto
==
IPPROTO_UDP
)
||
!
(
tb
[
IPSET_ATTR_IP_TO
]
||
tb
[
IPSET_ATTR_CIDR
]
||
tb
[
IPSET_ATTR_PORT_TO
]))
{
ret
=
adtfn
(
set
,
&
data
,
timeout
);
...
...
@@ -255,13 +249,12 @@ hash_ipportnet4_uadt(struct ip_set *set, struct nlattr *tb[],
}
else
ip_to
=
ip
;
port
=
ntohs
(
data
.
port
);
if
(
tb
[
IPSET_ATTR_PORT_TO
])
{
port
_to
=
port
=
ntohs
(
data
.
port
);
if
(
with_ports
&&
tb
[
IPSET_ATTR_PORT_TO
])
{
port_to
=
ip_set_get_h16
(
tb
[
IPSET_ATTR_PORT_TO
]);
if
(
port
>
port_to
)
swap
(
port
,
port_to
);
}
else
port_to
=
port
;
}
for
(;
!
before
(
ip_to
,
ip
);
ip
++
)
for
(
p
=
port
;
p
<=
port_to
;
p
++
)
{
...
...
@@ -429,6 +422,7 @@ hash_ipportnet6_uadt(struct ip_set *set, struct nlattr *tb[],
struct
hash_ipportnet6_elem
data
=
{
.
cidr
=
HOST_MASK
};
u32
port
,
port_to
;
u32
timeout
=
h
->
timeout
;
bool
with_ports
=
false
;
int
ret
;
if
(
unlikely
(
!
tb
[
IPSET_ATTR_IP
]
||
!
tb
[
IPSET_ATTR_IP2
]
||
...
...
@@ -465,21 +459,15 @@ hash_ipportnet6_uadt(struct ip_set *set, struct nlattr *tb[],
if
(
tb
[
IPSET_ATTR_PROTO
])
{
data
.
proto
=
nla_get_u8
(
tb
[
IPSET_ATTR_PROTO
]);
with_ports
=
ip_set_proto_with_ports
(
data
.
proto
);
if
(
data
.
proto
==
0
)
return
-
IPSET_ERR_INVALID_PROTO
;
}
else
return
-
IPSET_ERR_MISSING_PROTO
;
switch
(
data
.
proto
)
{
case
IPPROTO_UDP
:
case
IPPROTO_TCP
:
case
IPPROTO_ICMPV6
:
break
;
default:
if
(
!
(
with_ports
||
data
.
proto
==
IPPROTO_ICMPV6
))
data
.
port
=
0
;
break
;
}
if
(
tb
[
IPSET_ATTR_TIMEOUT
])
{
if
(
!
with_timeout
(
h
->
timeout
))
...
...
@@ -487,9 +475,7 @@ hash_ipportnet6_uadt(struct ip_set *set, struct nlattr *tb[],
timeout
=
ip_set_timeout_uget
(
tb
[
IPSET_ATTR_TIMEOUT
]);
}
if
(
adt
==
IPSET_TEST
||
!
(
data
.
proto
==
IPPROTO_TCP
||
data
.
proto
==
IPPROTO_UDP
)
||
!
tb
[
IPSET_ATTR_PORT_TO
])
{
if
(
adt
==
IPSET_TEST
||
!
with_ports
||
!
tb
[
IPSET_ATTR_PORT_TO
])
{
ret
=
adtfn
(
set
,
&
data
,
timeout
);
return
ip_set_eexist
(
ret
,
flags
)
?
0
:
ret
;
}
...
...
net/netfilter/ipset/ip_set_hash_netport.c
浏览文件 @
1a0c8330
...
...
@@ -170,6 +170,7 @@ hash_netport4_uadt(struct ip_set *set, struct nlattr *tb[],
struct
hash_netport4_elem
data
=
{
.
cidr
=
HOST_MASK
};
u32
port
,
port_to
;
u32
timeout
=
h
->
timeout
;
bool
with_ports
=
false
;
int
ret
;
if
(
unlikely
(
!
tb
[
IPSET_ATTR_IP
]
||
...
...
@@ -198,21 +199,15 @@ hash_netport4_uadt(struct ip_set *set, struct nlattr *tb[],
if
(
tb
[
IPSET_ATTR_PROTO
])
{
data
.
proto
=
nla_get_u8
(
tb
[
IPSET_ATTR_PROTO
]);
with_ports
=
ip_set_proto_with_ports
(
data
.
proto
);
if
(
data
.
proto
==
0
)
return
-
IPSET_ERR_INVALID_PROTO
;
}
else
return
-
IPSET_ERR_MISSING_PROTO
;
switch
(
data
.
proto
)
{
case
IPPROTO_UDP
:
case
IPPROTO_TCP
:
case
IPPROTO_ICMP
:
break
;
default:
if
(
!
(
with_ports
||
data
.
proto
==
IPPROTO_ICMP
))
data
.
port
=
0
;
break
;
}
if
(
tb
[
IPSET_ATTR_TIMEOUT
])
{
if
(
!
with_timeout
(
h
->
timeout
))
...
...
@@ -220,9 +215,7 @@ hash_netport4_uadt(struct ip_set *set, struct nlattr *tb[],
timeout
=
ip_set_timeout_uget
(
tb
[
IPSET_ATTR_TIMEOUT
]);
}
if
(
adt
==
IPSET_TEST
||
!
(
data
.
proto
==
IPPROTO_TCP
||
data
.
proto
==
IPPROTO_UDP
)
||
!
tb
[
IPSET_ATTR_PORT_TO
])
{
if
(
adt
==
IPSET_TEST
||
!
with_ports
||
!
tb
[
IPSET_ATTR_PORT_TO
])
{
ret
=
adtfn
(
set
,
&
data
,
timeout
);
return
ip_set_eexist
(
ret
,
flags
)
?
0
:
ret
;
}
...
...
@@ -390,6 +383,7 @@ hash_netport6_uadt(struct ip_set *set, struct nlattr *tb[],
struct
hash_netport6_elem
data
=
{
.
cidr
=
HOST_MASK
};
u32
port
,
port_to
;
u32
timeout
=
h
->
timeout
;
bool
with_ports
=
false
;
int
ret
;
if
(
unlikely
(
!
tb
[
IPSET_ATTR_IP
]
||
...
...
@@ -418,21 +412,15 @@ hash_netport6_uadt(struct ip_set *set, struct nlattr *tb[],
if
(
tb
[
IPSET_ATTR_PROTO
])
{
data
.
proto
=
nla_get_u8
(
tb
[
IPSET_ATTR_PROTO
]);
with_ports
=
ip_set_proto_with_ports
(
data
.
proto
);
if
(
data
.
proto
==
0
)
return
-
IPSET_ERR_INVALID_PROTO
;
}
else
return
-
IPSET_ERR_MISSING_PROTO
;
switch
(
data
.
proto
)
{
case
IPPROTO_UDP
:
case
IPPROTO_TCP
:
case
IPPROTO_ICMPV6
:
break
;
default:
if
(
!
(
with_ports
||
data
.
proto
==
IPPROTO_ICMPV6
))
data
.
port
=
0
;
break
;
}
if
(
tb
[
IPSET_ATTR_TIMEOUT
])
{
if
(
!
with_timeout
(
h
->
timeout
))
...
...
@@ -440,9 +428,7 @@ hash_netport6_uadt(struct ip_set *set, struct nlattr *tb[],
timeout
=
ip_set_timeout_uget
(
tb
[
IPSET_ATTR_TIMEOUT
]);
}
if
(
adt
==
IPSET_TEST
||
!
(
data
.
proto
==
IPPROTO_TCP
||
data
.
proto
==
IPPROTO_UDP
)
||
!
tb
[
IPSET_ATTR_PORT_TO
])
{
if
(
adt
==
IPSET_TEST
||
!
with_ports
||
!
tb
[
IPSET_ATTR_PORT_TO
])
{
ret
=
adtfn
(
set
,
&
data
,
timeout
);
return
ip_set_eexist
(
ret
,
flags
)
?
0
:
ret
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录