Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
f11c179e
K
Kernel
项目概览
openeuler
/
Kernel
12 个月 前同步成功
通知
5
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f11c179e
编写于
2月 25, 2009
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/wireless/orinoco/orinoco.c
上级
4545a3f2
0c9a3aaa
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
206 addition
and
77 deletion
+206
-77
drivers/net/usb/asix.c
drivers/net/usb/asix.c
+8
-0
drivers/net/wireless/ath9k/main.c
drivers/net/wireless/ath9k/main.c
+17
-7
drivers/net/wireless/orinoco/main.c
drivers/net/wireless/orinoco/main.c
+15
-4
drivers/net/wireless/rtl818x/rtl8187_dev.c
drivers/net/wireless/rtl818x/rtl8187_dev.c
+12
-0
include/linux/netfilter/xt_NFLOG.h
include/linux/netfilter/xt_NFLOG.h
+1
-1
include/net/netfilter/nf_conntrack_core.h
include/net/netfilter/nf_conntrack_core.h
+1
-1
net/ipv4/tcp_scalable.c
net/ipv4/tcp_scalable.c
+1
-1
net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c
net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c
+3
-2
net/netfilter/nfnetlink_log.c
net/netfilter/nfnetlink_log.c
+5
-3
net/netfilter/x_tables.c
net/netfilter/x_tables.c
+142
-57
net/netfilter/xt_recent.c
net/netfilter/xt_recent.c
+1
-1
未找到文件。
drivers/net/usb/asix.c
浏览文件 @
f11c179e
...
...
@@ -1451,6 +1451,14 @@ static const struct usb_device_id products [] = {
// Cables-to-Go USB Ethernet Adapter
USB_DEVICE
(
0x0b95
,
0x772a
),
.
driver_info
=
(
unsigned
long
)
&
ax88772_info
,
},
{
// ABOCOM for pci
USB_DEVICE
(
0x14ea
,
0xab11
),
.
driver_info
=
(
unsigned
long
)
&
ax88178_info
,
},
{
// ASIX 88772a
USB_DEVICE
(
0x0db0
,
0xa877
),
.
driver_info
=
(
unsigned
long
)
&
ax88772_info
,
},
{
},
// END
};
...
...
drivers/net/wireless/ath9k/main.c
浏览文件 @
f11c179e
...
...
@@ -1558,6 +1558,7 @@ static int ath_init(u16 devid, struct ath_softc *sc)
bad:
if
(
ah
)
ath9k_hw_detach
(
ah
);
ath9k_exit_debug
(
sc
);
return
error
;
}
...
...
@@ -1565,7 +1566,7 @@ static int ath_init(u16 devid, struct ath_softc *sc)
int
ath_attach
(
u16
devid
,
struct
ath_softc
*
sc
)
{
struct
ieee80211_hw
*
hw
=
sc
->
hw
;
int
error
=
0
;
int
error
=
0
,
i
;
DPRINTF
(
sc
,
ATH_DBG_CONFIG
,
"Attach ATH hw
\n
"
);
...
...
@@ -1617,11 +1618,11 @@ int ath_attach(u16 devid, struct ath_softc *sc)
/* initialize tx/rx engine */
error
=
ath_tx_init
(
sc
,
ATH_TXBUF
);
if
(
error
!=
0
)
goto
de
tach
;
goto
error_at
tach
;
error
=
ath_rx_init
(
sc
,
ATH_RXBUF
);
if
(
error
!=
0
)
goto
de
tach
;
goto
error_at
tach
;
#if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE)
/* Initialze h/w Rfkill */
...
...
@@ -1629,8 +1630,9 @@ int ath_attach(u16 devid, struct ath_softc *sc)
INIT_DELAYED_WORK
(
&
sc
->
rf_kill
.
rfkill_poll
,
ath_rfkill_poll
);
/* Initialize s/w rfkill */
if
(
ath_init_sw_rfkill
(
sc
))
goto
detach
;
error
=
ath_init_sw_rfkill
(
sc
);
if
(
error
)
goto
error_attach
;
#endif
if
(
ath9k_is_world_regd
(
sc
->
sc_ah
))
{
...
...
@@ -1664,8 +1666,16 @@ int ath_attach(u16 devid, struct ath_softc *sc)
return
0
;
detach:
ath_detach
(
sc
);
error_attach:
/* cleanup tx queues */
for
(
i
=
0
;
i
<
ATH9K_NUM_TX_QUEUES
;
i
++
)
if
(
ATH_TXQ_SETUP
(
sc
,
i
))
ath_tx_cleanupq
(
sc
,
&
sc
->
tx
.
txq
[
i
]);
ath9k_hw_detach
(
sc
->
sc_ah
);
ath9k_exit_debug
(
sc
);
return
error
;
}
...
...
drivers/net/wireless/orinoco/main.c
浏览文件 @
f11c179e
...
...
@@ -2076,8 +2076,20 @@ static int orinoco_pm_notifier(struct notifier_block *notifier,
return
NOTIFY_DONE
;
}
static
void
orinoco_register_pm_notifier
(
struct
orinoco_private
*
priv
)
{
priv
->
pm_notifier
.
notifier_call
=
orinoco_pm_notifier
;
register_pm_notifier
(
&
priv
->
pm_notifier
);
}
static
void
orinoco_unregister_pm_notifier
(
struct
orinoco_private
*
priv
)
{
unregister_pm_notifier
(
&
priv
->
pm_notifier
);
}
#else
/* !PM_SLEEP || HERMES_CACHE_FW_ON_INIT */
#define orinoco_pm_notifier NULL
#define orinoco_register_pm_notifier(priv) do { } while(0)
#define orinoco_unregister_pm_notifier(priv) do { } while(0)
#endif
/********************************************************************/
...
...
@@ -2572,8 +2584,7 @@ struct net_device
priv
->
cached_fw
=
NULL
;
/* Register PM notifiers */
priv
->
pm_notifier
.
notifier_call
=
orinoco_pm_notifier
;
register_pm_notifier
(
&
priv
->
pm_notifier
);
orinoco_register_pm_notifier
(
priv
);
return
dev
;
}
...
...
@@ -2598,7 +2609,7 @@ void free_orinocodev(struct net_device *dev)
kfree
(
rx_data
);
}
unregister_pm_notifier
(
&
priv
->
pm_notifier
);
orinoco_unregister_pm_notifier
(
priv
);
orinoco_uncache_fw
(
priv
);
priv
->
wpa_ie_len
=
0
;
...
...
drivers/net/wireless/rtl818x/rtl8187_dev.c
浏览文件 @
f11c179e
...
...
@@ -48,6 +48,10 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
{
USB_DEVICE
(
0x0bda
,
0x8189
),
.
driver_info
=
DEVICE_RTL8187B
},
{
USB_DEVICE
(
0x0bda
,
0x8197
),
.
driver_info
=
DEVICE_RTL8187B
},
{
USB_DEVICE
(
0x0bda
,
0x8198
),
.
driver_info
=
DEVICE_RTL8187B
},
/* Surecom */
{
USB_DEVICE
(
0x0769
,
0x11F2
),
.
driver_info
=
DEVICE_RTL8187
},
/* Logitech */
{
USB_DEVICE
(
0x0789
,
0x010C
),
.
driver_info
=
DEVICE_RTL8187
},
/* Netgear */
{
USB_DEVICE
(
0x0846
,
0x6100
),
.
driver_info
=
DEVICE_RTL8187
},
{
USB_DEVICE
(
0x0846
,
0x6a00
),
.
driver_info
=
DEVICE_RTL8187
},
...
...
@@ -57,8 +61,16 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
/* Sitecom */
{
USB_DEVICE
(
0x0df6
,
0x000d
),
.
driver_info
=
DEVICE_RTL8187
},
{
USB_DEVICE
(
0x0df6
,
0x0028
),
.
driver_info
=
DEVICE_RTL8187B
},
/* Sphairon Access Systems GmbH */
{
USB_DEVICE
(
0x114B
,
0x0150
),
.
driver_info
=
DEVICE_RTL8187
},
/* Dick Smith Electronics */
{
USB_DEVICE
(
0x1371
,
0x9401
),
.
driver_info
=
DEVICE_RTL8187
},
/* Abocom */
{
USB_DEVICE
(
0x13d1
,
0xabe6
),
.
driver_info
=
DEVICE_RTL8187
},
/* Qcom */
{
USB_DEVICE
(
0x18E8
,
0x6232
),
.
driver_info
=
DEVICE_RTL8187
},
/* AirLive */
{
USB_DEVICE
(
0x1b75
,
0x8187
),
.
driver_info
=
DEVICE_RTL8187
},
{}
};
...
...
include/linux/netfilter/xt_NFLOG.h
浏览文件 @
f11c179e
...
...
@@ -2,7 +2,7 @@
#define _XT_NFLOG_TARGET
#define XT_NFLOG_DEFAULT_GROUP 0x1
#define XT_NFLOG_DEFAULT_THRESHOLD
1
#define XT_NFLOG_DEFAULT_THRESHOLD
0
#define XT_NFLOG_MASK 0x0
...
...
include/net/netfilter/nf_conntrack_core.h
浏览文件 @
f11c179e
...
...
@@ -59,7 +59,7 @@ static inline int nf_conntrack_confirm(struct sk_buff *skb)
struct
nf_conn
*
ct
=
(
struct
nf_conn
*
)
skb
->
nfct
;
int
ret
=
NF_ACCEPT
;
if
(
ct
)
{
if
(
ct
&&
ct
!=
&
nf_conntrack_untracked
)
{
if
(
!
nf_ct_is_confirmed
(
ct
)
&&
!
nf_ct_is_dying
(
ct
))
ret
=
__nf_conntrack_confirm
(
skb
);
nf_ct_deliver_cached_events
(
ct
);
...
...
net/ipv4/tcp_scalable.c
浏览文件 @
f11c179e
/* Tom Kelly's Scalable TCP
*
* See htt
://www-lce.eng.cam.ac.uk/~ctk21
/scalable/
* See htt
p://www.deneholme.net/tom
/scalable/
*
* John Heffner <jheffner@sc.edu>
*/
...
...
net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c
浏览文件 @
f11c179e
...
...
@@ -201,8 +201,9 @@ icmpv6_error(struct net *net, struct sk_buff *skb, unsigned int dataoff,
if
(
net
->
ct
.
sysctl_checksum
&&
hooknum
==
NF_INET_PRE_ROUTING
&&
nf_ip6_checksum
(
skb
,
hooknum
,
dataoff
,
IPPROTO_ICMPV6
))
{
nf_log_packet
(
PF_INET6
,
0
,
skb
,
NULL
,
NULL
,
NULL
,
"nf_ct_icmpv6: ICMPv6 checksum failed
\n
"
);
if
(
LOG_INVALID
(
net
,
IPPROTO_ICMPV6
))
nf_log_packet
(
PF_INET6
,
0
,
skb
,
NULL
,
NULL
,
NULL
,
"nf_ct_icmpv6: ICMPv6 checksum failed "
);
return
-
NF_ACCEPT
;
}
...
...
net/netfilter/nfnetlink_log.c
浏览文件 @
f11c179e
...
...
@@ -39,7 +39,7 @@
#endif
#define NFULNL_NLBUFSIZ_DEFAULT NLMSG_GOODSIZE
#define NFULNL_TIMEOUT_DEFAULT
HZ
/* every second */
#define NFULNL_TIMEOUT_DEFAULT
100
/* every second */
#define NFULNL_QTHRESH_DEFAULT 100
/* 100 packets */
#define NFULNL_COPY_RANGE_MAX 0xFFFF
/* max packet size is limited by 16-bit struct nfattr nfa_len field */
...
...
@@ -590,8 +590,10 @@ nfulnl_log_packet(u_int8_t pf,
qthreshold
=
inst
->
qthreshold
;
/* per-rule qthreshold overrides per-instance */
if
(
qthreshold
>
li
->
u
.
ulog
.
qthreshold
)
qthreshold
=
li
->
u
.
ulog
.
qthreshold
;
if
(
li
->
u
.
ulog
.
qthreshold
)
if
(
qthreshold
>
li
->
u
.
ulog
.
qthreshold
)
qthreshold
=
li
->
u
.
ulog
.
qthreshold
;
switch
(
inst
->
copy_mode
)
{
case
NFULNL_COPY_META
:
...
...
net/netfilter/x_tables.c
浏览文件 @
f11c179e
...
...
@@ -827,59 +827,143 @@ static const struct file_operations xt_table_ops = {
.
release
=
seq_release_net
,
};
static
void
*
xt_match_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
/*
* Traverse state for ip{,6}_{tables,matches} for helping crossing
* the multi-AF mutexes.
*/
struct
nf_mttg_trav
{
struct
list_head
*
head
,
*
curr
;
uint8_t
class
,
nfproto
;
};
enum
{
MTTG_TRAV_INIT
,
MTTG_TRAV_NFP_UNSPEC
,
MTTG_TRAV_NFP_SPEC
,
MTTG_TRAV_DONE
,
};
static
void
*
xt_mttg_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
ppos
,
bool
is_target
)
{
struct
proc_dir_entry
*
pde
=
(
struct
proc_dir_entry
*
)
seq
->
private
;
u_int16_t
af
=
(
unsigned
long
)
pde
->
data
;
static
const
uint8_t
next_class
[]
=
{
[
MTTG_TRAV_NFP_UNSPEC
]
=
MTTG_TRAV_NFP_SPEC
,
[
MTTG_TRAV_NFP_SPEC
]
=
MTTG_TRAV_DONE
,
};
struct
nf_mttg_trav
*
trav
=
seq
->
private
;
switch
(
trav
->
class
)
{
case
MTTG_TRAV_INIT
:
trav
->
class
=
MTTG_TRAV_NFP_UNSPEC
;
mutex_lock
(
&
xt
[
NFPROTO_UNSPEC
].
mutex
);
trav
->
head
=
trav
->
curr
=
is_target
?
&
xt
[
NFPROTO_UNSPEC
].
target
:
&
xt
[
NFPROTO_UNSPEC
].
match
;
break
;
case
MTTG_TRAV_NFP_UNSPEC
:
trav
->
curr
=
trav
->
curr
->
next
;
if
(
trav
->
curr
!=
trav
->
head
)
break
;
mutex_unlock
(
&
xt
[
NFPROTO_UNSPEC
].
mutex
);
mutex_lock
(
&
xt
[
trav
->
nfproto
].
mutex
);
trav
->
head
=
trav
->
curr
=
is_target
?
&
xt
[
trav
->
nfproto
].
target
:
&
xt
[
trav
->
nfproto
].
match
;
trav
->
class
=
next_class
[
trav
->
class
];
break
;
case
MTTG_TRAV_NFP_SPEC
:
trav
->
curr
=
trav
->
curr
->
next
;
if
(
trav
->
curr
!=
trav
->
head
)
break
;
/* fallthru, _stop will unlock */
default:
return
NULL
;
}
mutex_lock
(
&
xt
[
af
].
mutex
);
return
seq_list_start
(
&
xt
[
af
].
match
,
*
pos
);
if
(
ppos
!=
NULL
)
++*
ppos
;
return
trav
;
}
static
void
*
xt_match_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
pos
)
static
void
*
xt_mttg_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
,
bool
is_target
)
{
struct
proc_dir_entry
*
pde
=
(
struct
proc_dir_entry
*
)
seq
->
private
;
u
_int16_t
af
=
(
unsigned
long
)
pde
->
data
;
struct
nf_mttg_trav
*
trav
=
seq
->
private
;
u
nsigned
int
j
;
return
seq_list_next
(
v
,
&
xt
[
af
].
match
,
pos
);
trav
->
class
=
MTTG_TRAV_INIT
;
for
(
j
=
0
;
j
<
*
pos
;
++
j
)
if
(
xt_mttg_seq_next
(
seq
,
NULL
,
NULL
,
is_target
)
==
NULL
)
return
NULL
;
return
trav
;
}
static
void
xt_m
atch
_seq_stop
(
struct
seq_file
*
seq
,
void
*
v
)
static
void
xt_m
ttg
_seq_stop
(
struct
seq_file
*
seq
,
void
*
v
)
{
struct
proc_dir_entry
*
pde
=
seq
->
private
;
u_int16_t
af
=
(
unsigned
long
)
pde
->
data
;
struct
nf_mttg_trav
*
trav
=
seq
->
private
;
switch
(
trav
->
class
)
{
case
MTTG_TRAV_NFP_UNSPEC
:
mutex_unlock
(
&
xt
[
NFPROTO_UNSPEC
].
mutex
);
break
;
case
MTTG_TRAV_NFP_SPEC
:
mutex_unlock
(
&
xt
[
trav
->
nfproto
].
mutex
);
break
;
}
}
mutex_unlock
(
&
xt
[
af
].
mutex
);
static
void
*
xt_match_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
{
return
xt_mttg_seq_start
(
seq
,
pos
,
false
);
}
static
int
xt_match_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
static
void
*
xt_match_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
ppos
)
{
struct
xt_match
*
match
=
list_entry
(
v
,
struct
xt_match
,
list
);
return
xt_mttg_seq_next
(
seq
,
v
,
ppos
,
false
);
}
if
(
strlen
(
match
->
name
))
return
seq_printf
(
seq
,
"%s
\n
"
,
match
->
name
);
else
return
0
;
static
int
xt_match_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
const
struct
nf_mttg_trav
*
trav
=
seq
->
private
;
const
struct
xt_match
*
match
;
switch
(
trav
->
class
)
{
case
MTTG_TRAV_NFP_UNSPEC
:
case
MTTG_TRAV_NFP_SPEC
:
if
(
trav
->
curr
==
trav
->
head
)
return
0
;
match
=
list_entry
(
trav
->
curr
,
struct
xt_match
,
list
);
return
(
*
match
->
name
==
'\0'
)
?
0
:
seq_printf
(
seq
,
"%s
\n
"
,
match
->
name
);
}
return
0
;
}
static
const
struct
seq_operations
xt_match_seq_ops
=
{
.
start
=
xt_match_seq_start
,
.
next
=
xt_match_seq_next
,
.
stop
=
xt_m
atch
_seq_stop
,
.
stop
=
xt_m
ttg
_seq_stop
,
.
show
=
xt_match_seq_show
,
};
static
int
xt_match_open
(
struct
inode
*
inode
,
struct
file
*
file
)
{
struct
seq_file
*
seq
;
struct
nf_mttg_trav
*
trav
;
int
ret
;
ret
=
seq_open
(
file
,
&
xt_match_seq_ops
);
if
(
!
ret
)
{
struct
seq_file
*
seq
=
file
->
private_data
;
trav
=
kmalloc
(
sizeof
(
*
trav
),
GFP_KERNEL
);
if
(
trav
==
NULL
)
return
-
ENOMEM
;
seq
->
private
=
PDE
(
inode
);
ret
=
seq_open
(
file
,
&
xt_match_seq_ops
);
if
(
ret
<
0
)
{
kfree
(
trav
);
return
ret
;
}
return
ret
;
seq
=
file
->
private_data
;
seq
->
private
=
trav
;
trav
->
nfproto
=
(
unsigned
long
)
PDE
(
inode
)
->
data
;
return
0
;
}
static
const
struct
file_operations
xt_match_ops
=
{
...
...
@@ -887,62 +971,63 @@ static const struct file_operations xt_match_ops = {
.
open
=
xt_match_open
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
seq_release
,
.
release
=
seq_release
_private
,
};
static
void
*
xt_target_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
{
struct
proc_dir_entry
*
pde
=
(
struct
proc_dir_entry
*
)
seq
->
private
;
u_int16_t
af
=
(
unsigned
long
)
pde
->
data
;
mutex_lock
(
&
xt
[
af
].
mutex
);
return
seq_list_start
(
&
xt
[
af
].
target
,
*
pos
);
return
xt_mttg_seq_start
(
seq
,
pos
,
true
);
}
static
void
*
xt_target_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
pos
)
static
void
*
xt_target_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
p
p
os
)
{
struct
proc_dir_entry
*
pde
=
(
struct
proc_dir_entry
*
)
seq
->
private
;
u_int16_t
af
=
(
unsigned
long
)
pde
->
data
;
return
seq_list_next
(
v
,
&
xt
[
af
].
target
,
pos
);
}
static
void
xt_target_seq_stop
(
struct
seq_file
*
seq
,
void
*
v
)
{
struct
proc_dir_entry
*
pde
=
seq
->
private
;
u_int16_t
af
=
(
unsigned
long
)
pde
->
data
;
mutex_unlock
(
&
xt
[
af
].
mutex
);
return
xt_mttg_seq_next
(
seq
,
v
,
ppos
,
true
);
}
static
int
xt_target_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
struct
xt_target
*
target
=
list_entry
(
v
,
struct
xt_target
,
list
);
if
(
strlen
(
target
->
name
))
return
seq_printf
(
seq
,
"%s
\n
"
,
target
->
name
);
else
return
0
;
const
struct
nf_mttg_trav
*
trav
=
seq
->
private
;
const
struct
xt_target
*
target
;
switch
(
trav
->
class
)
{
case
MTTG_TRAV_NFP_UNSPEC
:
case
MTTG_TRAV_NFP_SPEC
:
if
(
trav
->
curr
==
trav
->
head
)
return
0
;
target
=
list_entry
(
trav
->
curr
,
struct
xt_target
,
list
);
return
(
*
target
->
name
==
'\0'
)
?
0
:
seq_printf
(
seq
,
"%s
\n
"
,
target
->
name
);
}
return
0
;
}
static
const
struct
seq_operations
xt_target_seq_ops
=
{
.
start
=
xt_target_seq_start
,
.
next
=
xt_target_seq_next
,
.
stop
=
xt_
target
_seq_stop
,
.
stop
=
xt_
mttg
_seq_stop
,
.
show
=
xt_target_seq_show
,
};
static
int
xt_target_open
(
struct
inode
*
inode
,
struct
file
*
file
)
{
struct
seq_file
*
seq
;
struct
nf_mttg_trav
*
trav
;
int
ret
;
ret
=
seq_open
(
file
,
&
xt_target_seq_ops
);
if
(
!
ret
)
{
struct
seq_file
*
seq
=
file
->
private_data
;
trav
=
kmalloc
(
sizeof
(
*
trav
),
GFP_KERNEL
);
if
(
trav
==
NULL
)
return
-
ENOMEM
;
seq
->
private
=
PDE
(
inode
);
ret
=
seq_open
(
file
,
&
xt_target_seq_ops
);
if
(
ret
<
0
)
{
kfree
(
trav
);
return
ret
;
}
return
ret
;
seq
=
file
->
private_data
;
seq
->
private
=
trav
;
trav
->
nfproto
=
(
unsigned
long
)
PDE
(
inode
)
->
data
;
return
0
;
}
static
const
struct
file_operations
xt_target_ops
=
{
...
...
@@ -950,7 +1035,7 @@ static const struct file_operations xt_target_ops = {
.
open
=
xt_target_open
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
seq_release
,
.
release
=
seq_release
_private
,
};
#define FORMAT_TABLES "_tables_names"
...
...
net/netfilter/xt_recent.c
浏览文件 @
f11c179e
...
...
@@ -542,7 +542,7 @@ recent_mt_proc_write(struct file *file, const char __user *input,
struct
recent_entry
*
e
;
char
buf
[
sizeof
(
"+b335:1d35:1e55:dead:c0de:1715:5afe:c0de"
)];
const
char
*
c
=
buf
;
union
nf_inet_addr
addr
;
union
nf_inet_addr
addr
=
{}
;
u_int16_t
family
;
bool
add
,
succ
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录