Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
f11c179e
Commit
f11c179e
authored
Feb 25, 2009
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/wireless/orinoco/orinoco.c
parents
4545a3f2
0c9a3aaa
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
206 additions
and
77 deletions
+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
No files found.
drivers/net/usb/asix.c
View file @
f11c179e
...
@@ -1451,6 +1451,14 @@ static const struct usb_device_id products [] = {
...
@@ -1451,6 +1451,14 @@ static const struct usb_device_id products [] = {
// Cables-to-Go USB Ethernet Adapter
// Cables-to-Go USB Ethernet Adapter
USB_DEVICE
(
0x0b95
,
0x772a
),
USB_DEVICE
(
0x0b95
,
0x772a
),
.
driver_info
=
(
unsigned
long
)
&
ax88772_info
,
.
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
{
},
// END
};
};
...
...
drivers/net/wireless/ath9k/main.c
View file @
f11c179e
...
@@ -1558,6 +1558,7 @@ static int ath_init(u16 devid, struct ath_softc *sc)
...
@@ -1558,6 +1558,7 @@ static int ath_init(u16 devid, struct ath_softc *sc)
bad:
bad:
if
(
ah
)
if
(
ah
)
ath9k_hw_detach
(
ah
);
ath9k_hw_detach
(
ah
);
ath9k_exit_debug
(
sc
);
return
error
;
return
error
;
}
}
...
@@ -1565,7 +1566,7 @@ static int ath_init(u16 devid, struct ath_softc *sc)
...
@@ -1565,7 +1566,7 @@ static int ath_init(u16 devid, struct ath_softc *sc)
int
ath_attach
(
u16
devid
,
struct
ath_softc
*
sc
)
int
ath_attach
(
u16
devid
,
struct
ath_softc
*
sc
)
{
{
struct
ieee80211_hw
*
hw
=
sc
->
hw
;
struct
ieee80211_hw
*
hw
=
sc
->
hw
;
int
error
=
0
;
int
error
=
0
,
i
;
DPRINTF
(
sc
,
ATH_DBG_CONFIG
,
"Attach ATH hw
\n
"
);
DPRINTF
(
sc
,
ATH_DBG_CONFIG
,
"Attach ATH hw
\n
"
);
...
@@ -1617,11 +1618,11 @@ int ath_attach(u16 devid, struct ath_softc *sc)
...
@@ -1617,11 +1618,11 @@ int ath_attach(u16 devid, struct ath_softc *sc)
/* initialize tx/rx engine */
/* initialize tx/rx engine */
error
=
ath_tx_init
(
sc
,
ATH_TXBUF
);
error
=
ath_tx_init
(
sc
,
ATH_TXBUF
);
if
(
error
!=
0
)
if
(
error
!=
0
)
goto
de
tach
;
goto
error_at
tach
;
error
=
ath_rx_init
(
sc
,
ATH_RXBUF
);
error
=
ath_rx_init
(
sc
,
ATH_RXBUF
);
if
(
error
!=
0
)
if
(
error
!=
0
)
goto
de
tach
;
goto
error_at
tach
;
#if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE)
#if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE)
/* Initialze h/w Rfkill */
/* Initialze h/w Rfkill */
...
@@ -1629,8 +1630,9 @@ int ath_attach(u16 devid, struct ath_softc *sc)
...
@@ -1629,8 +1630,9 @@ int ath_attach(u16 devid, struct ath_softc *sc)
INIT_DELAYED_WORK
(
&
sc
->
rf_kill
.
rfkill_poll
,
ath_rfkill_poll
);
INIT_DELAYED_WORK
(
&
sc
->
rf_kill
.
rfkill_poll
,
ath_rfkill_poll
);
/* Initialize s/w rfkill */
/* Initialize s/w rfkill */
if
(
ath_init_sw_rfkill
(
sc
))
error
=
ath_init_sw_rfkill
(
sc
);
goto
detach
;
if
(
error
)
goto
error_attach
;
#endif
#endif
if
(
ath9k_is_world_regd
(
sc
->
sc_ah
))
{
if
(
ath9k_is_world_regd
(
sc
->
sc_ah
))
{
...
@@ -1664,8 +1666,16 @@ int ath_attach(u16 devid, struct ath_softc *sc)
...
@@ -1664,8 +1666,16 @@ int ath_attach(u16 devid, struct ath_softc *sc)
return
0
;
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
;
return
error
;
}
}
...
...
drivers/net/wireless/orinoco/main.c
View file @
f11c179e
...
@@ -2076,8 +2076,20 @@ static int orinoco_pm_notifier(struct notifier_block *notifier,
...
@@ -2076,8 +2076,20 @@ static int orinoco_pm_notifier(struct notifier_block *notifier,
return
NOTIFY_DONE
;
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 */
#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
#endif
/********************************************************************/
/********************************************************************/
...
@@ -2572,8 +2584,7 @@ struct net_device
...
@@ -2572,8 +2584,7 @@ struct net_device
priv
->
cached_fw
=
NULL
;
priv
->
cached_fw
=
NULL
;
/* Register PM notifiers */
/* Register PM notifiers */
priv
->
pm_notifier
.
notifier_call
=
orinoco_pm_notifier
;
orinoco_register_pm_notifier
(
priv
);
register_pm_notifier
(
&
priv
->
pm_notifier
);
return
dev
;
return
dev
;
}
}
...
@@ -2598,7 +2609,7 @@ void free_orinocodev(struct net_device *dev)
...
@@ -2598,7 +2609,7 @@ void free_orinocodev(struct net_device *dev)
kfree
(
rx_data
);
kfree
(
rx_data
);
}
}
unregister_pm_notifier
(
&
priv
->
pm_notifier
);
orinoco_unregister_pm_notifier
(
priv
);
orinoco_uncache_fw
(
priv
);
orinoco_uncache_fw
(
priv
);
priv
->
wpa_ie_len
=
0
;
priv
->
wpa_ie_len
=
0
;
...
...
drivers/net/wireless/rtl818x/rtl8187_dev.c
View file @
f11c179e
...
@@ -48,6 +48,10 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
...
@@ -48,6 +48,10 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
{
USB_DEVICE
(
0x0bda
,
0x8189
),
.
driver_info
=
DEVICE_RTL8187B
},
{
USB_DEVICE
(
0x0bda
,
0x8189
),
.
driver_info
=
DEVICE_RTL8187B
},
{
USB_DEVICE
(
0x0bda
,
0x8197
),
.
driver_info
=
DEVICE_RTL8187B
},
{
USB_DEVICE
(
0x0bda
,
0x8197
),
.
driver_info
=
DEVICE_RTL8187B
},
{
USB_DEVICE
(
0x0bda
,
0x8198
),
.
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 */
/* Netgear */
{
USB_DEVICE
(
0x0846
,
0x6100
),
.
driver_info
=
DEVICE_RTL8187
},
{
USB_DEVICE
(
0x0846
,
0x6100
),
.
driver_info
=
DEVICE_RTL8187
},
{
USB_DEVICE
(
0x0846
,
0x6a00
),
.
driver_info
=
DEVICE_RTL8187
},
{
USB_DEVICE
(
0x0846
,
0x6a00
),
.
driver_info
=
DEVICE_RTL8187
},
...
@@ -57,8 +61,16 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
...
@@ -57,8 +61,16 @@ static struct usb_device_id rtl8187_table[] __devinitdata = {
/* Sitecom */
/* Sitecom */
{
USB_DEVICE
(
0x0df6
,
0x000d
),
.
driver_info
=
DEVICE_RTL8187
},
{
USB_DEVICE
(
0x0df6
,
0x000d
),
.
driver_info
=
DEVICE_RTL8187
},
{
USB_DEVICE
(
0x0df6
,
0x0028
),
.
driver_info
=
DEVICE_RTL8187B
},
{
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 */
/* Abocom */
{
USB_DEVICE
(
0x13d1
,
0xabe6
),
.
driver_info
=
DEVICE_RTL8187
},
{
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
View file @
f11c179e
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
#define _XT_NFLOG_TARGET
#define _XT_NFLOG_TARGET
#define XT_NFLOG_DEFAULT_GROUP 0x1
#define XT_NFLOG_DEFAULT_GROUP 0x1
#define XT_NFLOG_DEFAULT_THRESHOLD
1
#define XT_NFLOG_DEFAULT_THRESHOLD
0
#define XT_NFLOG_MASK 0x0
#define XT_NFLOG_MASK 0x0
...
...
include/net/netfilter/nf_conntrack_core.h
View file @
f11c179e
...
@@ -59,7 +59,7 @@ static inline int nf_conntrack_confirm(struct sk_buff *skb)
...
@@ -59,7 +59,7 @@ static inline int nf_conntrack_confirm(struct sk_buff *skb)
struct
nf_conn
*
ct
=
(
struct
nf_conn
*
)
skb
->
nfct
;
struct
nf_conn
*
ct
=
(
struct
nf_conn
*
)
skb
->
nfct
;
int
ret
=
NF_ACCEPT
;
int
ret
=
NF_ACCEPT
;
if
(
ct
)
{
if
(
ct
&&
ct
!=
&
nf_conntrack_untracked
)
{
if
(
!
nf_ct_is_confirmed
(
ct
)
&&
!
nf_ct_is_dying
(
ct
))
if
(
!
nf_ct_is_confirmed
(
ct
)
&&
!
nf_ct_is_dying
(
ct
))
ret
=
__nf_conntrack_confirm
(
skb
);
ret
=
__nf_conntrack_confirm
(
skb
);
nf_ct_deliver_cached_events
(
ct
);
nf_ct_deliver_cached_events
(
ct
);
...
...
net/ipv4/tcp_scalable.c
View file @
f11c179e
/* Tom Kelly's Scalable TCP
/* 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>
* John Heffner <jheffner@sc.edu>
*/
*/
...
...
net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c
View file @
f11c179e
...
@@ -201,8 +201,9 @@ icmpv6_error(struct net *net, struct sk_buff *skb, unsigned int dataoff,
...
@@ -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
&&
if
(
net
->
ct
.
sysctl_checksum
&&
hooknum
==
NF_INET_PRE_ROUTING
&&
nf_ip6_checksum
(
skb
,
hooknum
,
dataoff
,
IPPROTO_ICMPV6
))
{
nf_ip6_checksum
(
skb
,
hooknum
,
dataoff
,
IPPROTO_ICMPV6
))
{
nf_log_packet
(
PF_INET6
,
0
,
skb
,
NULL
,
NULL
,
NULL
,
if
(
LOG_INVALID
(
net
,
IPPROTO_ICMPV6
))
"nf_ct_icmpv6: ICMPv6 checksum failed
\n
"
);
nf_log_packet
(
PF_INET6
,
0
,
skb
,
NULL
,
NULL
,
NULL
,
"nf_ct_icmpv6: ICMPv6 checksum failed "
);
return
-
NF_ACCEPT
;
return
-
NF_ACCEPT
;
}
}
...
...
net/netfilter/nfnetlink_log.c
View file @
f11c179e
...
@@ -39,7 +39,7 @@
...
@@ -39,7 +39,7 @@
#endif
#endif
#define NFULNL_NLBUFSIZ_DEFAULT NLMSG_GOODSIZE
#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_QTHRESH_DEFAULT 100
/* 100 packets */
#define NFULNL_COPY_RANGE_MAX 0xFFFF
/* max packet size is limited by 16-bit struct nfattr nfa_len field */
#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,
...
@@ -590,8 +590,10 @@ nfulnl_log_packet(u_int8_t pf,
qthreshold
=
inst
->
qthreshold
;
qthreshold
=
inst
->
qthreshold
;
/* per-rule qthreshold overrides per-instance */
/* per-rule qthreshold overrides per-instance */
if
(
qthreshold
>
li
->
u
.
ulog
.
qthreshold
)
if
(
li
->
u
.
ulog
.
qthreshold
)
qthreshold
=
li
->
u
.
ulog
.
qthreshold
;
if
(
qthreshold
>
li
->
u
.
ulog
.
qthreshold
)
qthreshold
=
li
->
u
.
ulog
.
qthreshold
;
switch
(
inst
->
copy_mode
)
{
switch
(
inst
->
copy_mode
)
{
case
NFULNL_COPY_META
:
case
NFULNL_COPY_META
:
...
...
net/netfilter/x_tables.c
View file @
f11c179e
...
@@ -827,59 +827,143 @@ static const struct file_operations xt_table_ops = {
...
@@ -827,59 +827,143 @@ static const struct file_operations xt_table_ops = {
.
release
=
seq_release_net
,
.
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
;
static
const
uint8_t
next_class
[]
=
{
u_int16_t
af
=
(
unsigned
long
)
pde
->
data
;
[
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
);
if
(
ppos
!=
NULL
)
return
seq_list_start
(
&
xt
[
af
].
match
,
*
pos
);
++*
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
;
struct
nf_mttg_trav
*
trav
=
seq
->
private
;
u
_int16_t
af
=
(
unsigned
long
)
pde
->
data
;
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
;
struct
nf_mttg_trav
*
trav
=
seq
->
private
;
u_int16_t
af
=
(
unsigned
long
)
pde
->
data
;
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
))
static
int
xt_match_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
return
seq_printf
(
seq
,
"%s
\n
"
,
match
->
name
);
{
else
const
struct
nf_mttg_trav
*
trav
=
seq
->
private
;
return
0
;
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
=
{
static
const
struct
seq_operations
xt_match_seq_ops
=
{
.
start
=
xt_match_seq_start
,
.
start
=
xt_match_seq_start
,
.
next
=
xt_match_seq_next
,
.
next
=
xt_match_seq_next
,
.
stop
=
xt_m
atch
_seq_stop
,
.
stop
=
xt_m
ttg
_seq_stop
,
.
show
=
xt_match_seq_show
,
.
show
=
xt_match_seq_show
,
};
};
static
int
xt_match_open
(
struct
inode
*
inode
,
struct
file
*
file
)
static
int
xt_match_open
(
struct
inode
*
inode
,
struct
file
*
file
)
{
{
struct
seq_file
*
seq
;
struct
nf_mttg_trav
*
trav
;
int
ret
;
int
ret
;
ret
=
seq_open
(
file
,
&
xt_match_seq_ops
);
trav
=
kmalloc
(
sizeof
(
*
trav
),
GFP_KERNEL
);
if
(
!
ret
)
{
if
(
trav
==
NULL
)
struct
seq_file
*
seq
=
file
->
private_data
;
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
=
{
static
const
struct
file_operations
xt_match_ops
=
{
...
@@ -887,62 +971,63 @@ static const struct file_operations xt_match_ops = {
...
@@ -887,62 +971,63 @@ static const struct file_operations xt_match_ops = {
.
open
=
xt_match_open
,
.
open
=
xt_match_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
.
release
=
seq_release
,
.
release
=
seq_release
_private
,
};
};
static
void
*
xt_target_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
static
void
*
xt_target_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
{
{
struct
proc_dir_entry
*
pde
=
(
struct
proc_dir_entry
*
)
seq
->
private
;
return
xt_mttg_seq_start
(
seq
,
pos
,
true
);
u_int16_t
af
=
(
unsigned
long
)
pde
->
data
;
mutex_lock
(
&
xt
[
af
].
mutex
);
return
seq_list_start
(
&
xt
[
af
].
target
,
*
pos
);
}
}
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
;
return
xt_mttg_seq_next
(
seq
,
v
,
ppos
,
true
);
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
);
}
}
static
int
xt_target_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
static
int
xt_target_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
{
struct
xt_target
*
target
=
list_entry
(
v
,
struct
xt_target
,
list
);
const
struct
nf_mttg_trav
*
trav
=
seq
->
private
;
const
struct
xt_target
*
target
;
if
(
strlen
(
target
->
name
))
return
seq_printf
(
seq
,
"%s
\n
"
,
target
->
name
);
switch
(
trav
->
class
)
{
else
case
MTTG_TRAV_NFP_UNSPEC
:
return
0
;
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
=
{
static
const
struct
seq_operations
xt_target_seq_ops
=
{
.
start
=
xt_target_seq_start
,
.
start
=
xt_target_seq_start
,
.
next
=
xt_target_seq_next
,
.
next
=
xt_target_seq_next
,
.
stop
=
xt_
target
_seq_stop
,
.
stop
=
xt_
mttg
_seq_stop
,
.
show
=
xt_target_seq_show
,
.
show
=
xt_target_seq_show
,
};
};
static
int
xt_target_open
(
struct
inode
*
inode
,
struct
file
*
file
)
static
int
xt_target_open
(
struct
inode
*
inode
,
struct
file
*
file
)
{
{
struct
seq_file
*
seq
;
struct
nf_mttg_trav
*
trav
;
int
ret
;
int
ret
;
ret
=
seq_open
(
file
,
&
xt_target_seq_ops
);
trav
=
kmalloc
(
sizeof
(
*
trav
),
GFP_KERNEL
);
if
(
!
ret
)
{
if
(
trav
==
NULL
)
struct
seq_file
*
seq
=
file
->
private_data
;
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
=
{
static
const
struct
file_operations
xt_target_ops
=
{
...
@@ -950,7 +1035,7 @@ static const struct file_operations xt_target_ops = {
...
@@ -950,7 +1035,7 @@ static const struct file_operations xt_target_ops = {
.
open
=
xt_target_open
,
.
open
=
xt_target_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
.
release
=
seq_release
,
.
release
=
seq_release
_private
,
};
};
#define FORMAT_TABLES "_tables_names"
#define FORMAT_TABLES "_tables_names"
...
...
net/netfilter/xt_recent.c
View file @
f11c179e
...
@@ -542,7 +542,7 @@ recent_mt_proc_write(struct file *file, const char __user *input,
...
@@ -542,7 +542,7 @@ recent_mt_proc_write(struct file *file, const char __user *input,
struct
recent_entry
*
e
;
struct
recent_entry
*
e
;
char
buf
[
sizeof
(
"+b335:1d35:1e55:dead:c0de:1715:5afe:c0de"
)];
char
buf
[
sizeof
(
"+b335:1d35:1e55:dead:c0de:1715:5afe:c0de"
)];
const
char
*
c
=
buf
;
const
char
*
c
=
buf
;
union
nf_inet_addr
addr
;
union
nf_inet_addr
addr
=
{}
;
u_int16_t
family
;
u_int16_t
family
;
bool
add
,
succ
;
bool
add
,
succ
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment