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
bb1fe39a
Commit
bb1fe39a
authored
May 10, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/davem/net-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
278b7cdb
855677ee
Changes
45
Show whitespace changes
Inline
Side-by-side
Showing
45 changed files
with
306 additions
and
141 deletions
+306
-141
drivers/atm/he.c
drivers/atm/he.c
+26
-12
drivers/atm/iphase.c
drivers/atm/iphase.c
+4
-4
include/net/protocol.h
include/net/protocol.h
+0
-2
net/8021q/vlanproc.c
net/8021q/vlanproc.c
+3
-0
net/appletalk/atalk_proc.c
net/appletalk/atalk_proc.c
+3
-0
net/atm/mpoa_proc.c
net/atm/mpoa_proc.c
+1
-0
net/atm/proc.c
net/atm/proc.c
+2
-0
net/bluetooth/hci_proc.c
net/bluetooth/hci_proc.c
+1
-0
net/bluetooth/l2cap.c
net/bluetooth/l2cap.c
+1
-0
net/bluetooth/rfcomm/core.c
net/bluetooth/rfcomm/core.c
+1
-0
net/bluetooth/rfcomm/sock.c
net/bluetooth/rfcomm/sock.c
+1
-0
net/bluetooth/sco.c
net/bluetooth/sco.c
+1
-0
net/core/dev.c
net/core/dev.c
+2
-0
net/core/wireless.c
net/core/wireless.c
+1
-0
net/decnet/dn_neigh.c
net/decnet/dn_neigh.c
+1
-0
net/ipv4/af_inet.c
net/ipv4/af_inet.c
+17
-11
net/ipv4/arp.c
net/ipv4/arp.c
+1
-0
net/ipv4/fib_hash.c
net/ipv4/fib_hash.c
+1
-0
net/ipv4/icmp.c
net/ipv4/icmp.c
+3
-6
net/ipv4/ip_input.c
net/ipv4/ip_input.c
+5
-1
net/ipv4/proc.c
net/ipv4/proc.c
+3
-0
net/ipv4/protocol.c
net/ipv4/protocol.c
+5
-8
net/ipv4/raw.c
net/ipv4/raw.c
+1
-0
net/ipv4/route.c
net/ipv4/route.c
+1
-0
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_ipv4.c
+1
-0
net/ipv4/tcp_minisocks.c
net/ipv4/tcp_minisocks.c
+1
-0
net/ipv4/udp.c
net/ipv4/udp.c
+1
-0
net/ipv6/af_inet6.c
net/ipv6/af_inet6.c
+28
-13
net/ipv6/icmp.c
net/ipv6/icmp.c
+3
-0
net/ipv6/ip6_input.c
net/ipv6/ip6_input.c
+6
-5
net/ipv6/proc.c
net/ipv6/proc.c
+2
-0
net/ipv6/protocol.c
net/ipv6/protocol.c
+6
-5
net/ipv6/raw.c
net/ipv6/raw.c
+151
-74
net/ipv6/route.c
net/ipv6/route.c
+1
-0
net/ipx/ipx_proc.c
net/ipx/ipx_proc.c
+3
-0
net/llc/llc_proc.c
net/llc/llc_proc.c
+2
-0
net/nonet.c
net/nonet.c
+1
-0
net/rxrpc/proc.c
net/rxrpc/proc.c
+4
-0
net/sctp/Kconfig
net/sctp/Kconfig
+1
-0
net/sctp/proc.c
net/sctp/proc.c
+1
-0
net/socket.c
net/socket.c
+2
-0
net/sunrpc/cache.c
net/sunrpc/cache.c
+1
-0
net/sunrpc/rpc_pipe.c
net/sunrpc/rpc_pipe.c
+1
-0
net/wanrouter/wanproc.c
net/wanrouter/wanproc.c
+3
-0
net/x25/x25_proc.c
net/x25/x25_proc.c
+2
-0
No files found.
drivers/atm/he.c
View file @
bb1fe39a
...
@@ -362,43 +362,56 @@ he_find_vcc(struct he_dev *he_dev, unsigned cid)
...
@@ -362,43 +362,56 @@ he_find_vcc(struct he_dev *he_dev, unsigned cid)
static
int
__devinit
static
int
__devinit
he_init_one
(
struct
pci_dev
*
pci_dev
,
const
struct
pci_device_id
*
pci_ent
)
he_init_one
(
struct
pci_dev
*
pci_dev
,
const
struct
pci_device_id
*
pci_ent
)
{
{
struct
atm_dev
*
atm_dev
;
struct
atm_dev
*
atm_dev
=
NULL
;
struct
he_dev
*
he_dev
;
struct
he_dev
*
he_dev
=
NULL
;
int
err
=
0
;
printk
(
KERN_INFO
"he: %s
\n
"
,
version
);
printk
(
KERN_INFO
"he: %s
\n
"
,
version
);
if
(
pci_enable_device
(
pci_dev
))
return
-
EIO
;
if
(
pci_enable_device
(
pci_dev
))
return
-
EIO
;
if
(
pci_set_dma_mask
(
pci_dev
,
HE_DMA_MASK
)
!=
0
)
if
(
pci_set_dma_mask
(
pci_dev
,
HE_DMA_MASK
)
!=
0
)
{
{
printk
(
KERN_WARNING
"he: no suitable dma available
\n
"
);
printk
(
KERN_WARNING
"he: no suitable dma available
\n
"
);
return
-
EIO
;
err
=
-
EIO
;
goto
init_one_failure
;
}
}
atm_dev
=
atm_dev_register
(
DEV_LABEL
,
&
he_ops
,
-
1
,
0
);
atm_dev
=
atm_dev_register
(
DEV_LABEL
,
&
he_ops
,
-
1
,
0
);
if
(
!
atm_dev
)
return
-
ENODEV
;
if
(
!
atm_dev
)
{
err
=
-
ENODEV
;
goto
init_one_failure
;
}
pci_set_drvdata
(
pci_dev
,
atm_dev
);
pci_set_drvdata
(
pci_dev
,
atm_dev
);
he_dev
=
(
struct
he_dev
*
)
kmalloc
(
sizeof
(
struct
he_dev
),
he_dev
=
(
struct
he_dev
*
)
kmalloc
(
sizeof
(
struct
he_dev
),
GFP_KERNEL
);
GFP_KERNEL
);
if
(
!
he_dev
)
return
-
ENOMEM
;
if
(
!
he_dev
)
{
err
=
-
ENOMEM
;
goto
init_one_failure
;
}
memset
(
he_dev
,
0
,
sizeof
(
struct
he_dev
));
memset
(
he_dev
,
0
,
sizeof
(
struct
he_dev
));
he_dev
->
pci_dev
=
pci_dev
;
he_dev
->
pci_dev
=
pci_dev
;
he_dev
->
atm_dev
=
atm_dev
;
he_dev
->
atm_dev
=
atm_dev
;
he_dev
->
atm_dev
->
dev_data
=
he_dev
;
he_dev
->
atm_dev
->
dev_data
=
he_dev
;
HE_DEV
(
atm_dev
)
=
he_dev
;
HE_DEV
(
atm_dev
)
=
he_dev
;
he_dev
->
number
=
atm_dev
->
number
;
/* was devs */
he_dev
->
number
=
atm_dev
->
number
;
if
(
he_start
(
atm_dev
))
{
if
(
he_start
(
atm_dev
))
{
atm_dev_deregister
(
atm_dev
);
he_stop
(
he_dev
);
he_stop
(
he_dev
);
kfree
(
he_dev
)
;
err
=
-
ENODEV
;
return
-
ENODEV
;
goto
init_one_failure
;
}
}
he_dev
->
next
=
NULL
;
he_dev
->
next
=
NULL
;
if
(
he_devs
)
he_dev
->
next
=
he_devs
;
if
(
he_devs
)
he_dev
->
next
=
he_devs
;
he_devs
=
he_dev
;
he_devs
=
he_dev
;
return
0
;
return
0
;
init_one_failure:
if
(
atm_dev
)
atm_dev_deregister
(
atm_dev
);
if
(
he_dev
)
kfree
(
he_dev
);
pci_disable_device
(
pci_dev
);
return
err
;
}
}
static
void
__devexit
static
void
__devexit
...
@@ -417,6 +430,7 @@ he_remove_one (struct pci_dev *pci_dev)
...
@@ -417,6 +430,7 @@ he_remove_one (struct pci_dev *pci_dev)
kfree
(
he_dev
);
kfree
(
he_dev
);
pci_set_drvdata
(
pci_dev
,
NULL
);
pci_set_drvdata
(
pci_dev
,
NULL
);
pci_disable_device
(
pci_dev
);
}
}
...
...
drivers/atm/iphase.c
View file @
bb1fe39a
...
@@ -2777,7 +2777,7 @@ static int ia_ioctl(struct atm_dev *dev, unsigned int cmd, void *arg)
...
@@ -2777,7 +2777,7 @@ static int ia_ioctl(struct atm_dev *dev, unsigned int cmd, void *arg)
if
(
!
capable
(
CAP_NET_ADMIN
))
return
-
EPERM
;
if
(
!
capable
(
CAP_NET_ADMIN
))
return
-
EPERM
;
tmps
=
(
u16
*
)
ia_cmds
.
buf
;
tmps
=
(
u16
*
)
ia_cmds
.
buf
;
for
(
i
=
0
;
i
<
0x80
;
i
+=
2
,
tmps
++
)
for
(
i
=
0
;
i
<
0x80
;
i
+=
2
,
tmps
++
)
if
(
put_user
(
*
(
u16
*
)(
iadev
->
seg_reg
+
i
),
tmps
))
return
-
EFAULT
;
if
(
put_user
(
(
u16
)(
readl
(
iadev
->
seg_reg
+
i
)
&
0xffff
),
tmps
))
return
-
EFAULT
;
ia_cmds
.
status
=
0
;
ia_cmds
.
status
=
0
;
ia_cmds
.
len
=
0x80
;
ia_cmds
.
len
=
0x80
;
break
;
break
;
...
@@ -2785,7 +2785,7 @@ static int ia_ioctl(struct atm_dev *dev, unsigned int cmd, void *arg)
...
@@ -2785,7 +2785,7 @@ static int ia_ioctl(struct atm_dev *dev, unsigned int cmd, void *arg)
if
(
!
capable
(
CAP_NET_ADMIN
))
return
-
EPERM
;
if
(
!
capable
(
CAP_NET_ADMIN
))
return
-
EPERM
;
tmps
=
(
u16
*
)
ia_cmds
.
buf
;
tmps
=
(
u16
*
)
ia_cmds
.
buf
;
for
(
i
=
0
;
i
<
0x80
;
i
+=
2
,
tmps
++
)
for
(
i
=
0
;
i
<
0x80
;
i
+=
2
,
tmps
++
)
if
(
put_user
(
*
(
u16
*
)(
iadev
->
reass_reg
+
i
),
tmps
))
return
-
EFAULT
;
if
(
put_user
(
(
u16
)(
readl
(
iadev
->
reass_reg
+
i
)
&
0xffff
),
tmps
))
return
-
EFAULT
;
ia_cmds
.
status
=
0
;
ia_cmds
.
status
=
0
;
ia_cmds
.
len
=
0x80
;
ia_cmds
.
len
=
0x80
;
break
;
break
;
...
@@ -2802,10 +2802,10 @@ static int ia_ioctl(struct atm_dev *dev, unsigned int cmd, void *arg)
...
@@ -2802,10 +2802,10 @@ static int ia_ioctl(struct atm_dev *dev, unsigned int cmd, void *arg)
rfL
=
&
regs_local
->
rfredn
;
rfL
=
&
regs_local
->
rfredn
;
/* Copy real rfred registers into the local copy */
/* Copy real rfred registers into the local copy */
for
(
i
=
0
;
i
<
(
sizeof
(
rfredn_t
))
/
4
;
i
++
)
for
(
i
=
0
;
i
<
(
sizeof
(
rfredn_t
))
/
4
;
i
++
)
((
u_int
*
)
rfL
)[
i
]
=
((
u_int
*
)
iadev
->
reass_reg
)[
i
]
&
0xffff
;
((
u_int
*
)
rfL
)[
i
]
=
readl
(
iadev
->
reass_reg
+
i
)
&
0xffff
;
/* Copy real ffred registers into the local copy */
/* Copy real ffred registers into the local copy */
for
(
i
=
0
;
i
<
(
sizeof
(
ffredn_t
))
/
4
;
i
++
)
for
(
i
=
0
;
i
<
(
sizeof
(
ffredn_t
))
/
4
;
i
++
)
((
u_int
*
)
ffL
)[
i
]
=
((
u_int
*
)
iadev
->
seg_reg
)[
i
]
&
0xffff
;
((
u_int
*
)
ffL
)[
i
]
=
readl
(
iadev
->
seg_reg
+
i
)
&
0xffff
;
if
(
copy_to_user
(
ia_cmds
.
buf
,
regs_local
,
sizeof
(
ia_regs_t
)))
{
if
(
copy_to_user
(
ia_cmds
.
buf
,
regs_local
,
sizeof
(
ia_regs_t
)))
{
kfree
(
regs_local
);
kfree
(
regs_local
);
...
...
include/net/protocol.h
View file @
bb1fe39a
...
@@ -80,11 +80,9 @@ struct inet_protosw {
...
@@ -80,11 +80,9 @@ struct inet_protosw {
extern
struct
inet_protocol
*
inet_protocol_base
;
extern
struct
inet_protocol
*
inet_protocol_base
;
extern
struct
inet_protocol
*
inet_protos
[
MAX_INET_PROTOS
];
extern
struct
inet_protocol
*
inet_protos
[
MAX_INET_PROTOS
];
extern
struct
list_head
inetsw
[
SOCK_MAX
];
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
extern
struct
inet6_protocol
*
inet6_protos
[
MAX_INET_PROTOS
];
extern
struct
inet6_protocol
*
inet6_protos
[
MAX_INET_PROTOS
];
extern
struct
list_head
inetsw6
[
SOCK_MAX
];
#endif
#endif
extern
int
inet_add_protocol
(
struct
inet_protocol
*
prot
,
unsigned
char
num
);
extern
int
inet_add_protocol
(
struct
inet_protocol
*
prot
,
unsigned
char
num
);
...
...
net/8021q/vlanproc.c
View file @
bb1fe39a
...
@@ -18,6 +18,7 @@
...
@@ -18,6 +18,7 @@
*****************************************************************************/
*****************************************************************************/
#include <linux/config.h>
#include <linux/config.h>
#include <linux/module.h>
#include <linux/stddef.h>
/* offsetof(), etc. */
#include <linux/stddef.h>
/* offsetof(), etc. */
#include <linux/errno.h>
/* return codes */
#include <linux/errno.h>
/* return codes */
#include <linux/kernel.h>
#include <linux/kernel.h>
...
@@ -75,6 +76,7 @@ static char term_msg[] = "***KERNEL: Out of buffer space!***\n";
...
@@ -75,6 +76,7 @@ static char term_msg[] = "***KERNEL: Out of buffer space!***\n";
*/
*/
static
struct
file_operations
vlan_fops
=
{
static
struct
file_operations
vlan_fops
=
{
.
owner
=
THIS_MODULE
,
.
read
=
vlan_proc_read
,
.
read
=
vlan_proc_read
,
.
ioctl
=
NULL
,
/* vlan_proc_ioctl */
.
ioctl
=
NULL
,
/* vlan_proc_ioctl */
};
};
...
@@ -84,6 +86,7 @@ static struct file_operations vlan_fops = {
...
@@ -84,6 +86,7 @@ static struct file_operations vlan_fops = {
*/
*/
static
struct
file_operations
vlandev_fops
=
{
static
struct
file_operations
vlandev_fops
=
{
.
owner
=
THIS_MODULE
,
.
read
=
vlan_proc_read
,
.
read
=
vlan_proc_read
,
.
ioctl
=
NULL
,
/* vlan_proc_ioctl */
.
ioctl
=
NULL
,
/* vlan_proc_ioctl */
};
};
...
...
net/appletalk/atalk_proc.c
View file @
bb1fe39a
...
@@ -241,6 +241,7 @@ static int atalk_seq_socket_open(struct inode *inode, struct file *file)
...
@@ -241,6 +241,7 @@ static int atalk_seq_socket_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
atalk_seq_interface_fops
=
{
static
struct
file_operations
atalk_seq_interface_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
atalk_seq_interface_open
,
.
open
=
atalk_seq_interface_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -248,6 +249,7 @@ static struct file_operations atalk_seq_interface_fops = {
...
@@ -248,6 +249,7 @@ static struct file_operations atalk_seq_interface_fops = {
};
};
static
struct
file_operations
atalk_seq_route_fops
=
{
static
struct
file_operations
atalk_seq_route_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
atalk_seq_route_open
,
.
open
=
atalk_seq_route_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -255,6 +257,7 @@ static struct file_operations atalk_seq_route_fops = {
...
@@ -255,6 +257,7 @@ static struct file_operations atalk_seq_route_fops = {
};
};
static
struct
file_operations
atalk_seq_socket_fops
=
{
static
struct
file_operations
atalk_seq_socket_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
atalk_seq_socket_open
,
.
open
=
atalk_seq_socket_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/atm/mpoa_proc.c
View file @
bb1fe39a
...
@@ -42,6 +42,7 @@ static int parse_qos(const char *buff, int len);
...
@@ -42,6 +42,7 @@ static int parse_qos(const char *buff, int len);
* Define allowed FILE OPERATIONS
* Define allowed FILE OPERATIONS
*/
*/
static
struct
file_operations
mpc_file_operations
=
{
static
struct
file_operations
mpc_file_operations
=
{
.
owner
=
THIS_MODULE
,
.
read
=
proc_mpc_read
,
.
read
=
proc_mpc_read
,
.
write
=
proc_mpc_write
,
.
write
=
proc_mpc_write
,
};
};
...
...
net/atm/proc.c
View file @
bb1fe39a
...
@@ -57,10 +57,12 @@ static ssize_t proc_spec_atm_read(struct file *file,char *buf,size_t count,
...
@@ -57,10 +57,12 @@ static ssize_t proc_spec_atm_read(struct file *file,char *buf,size_t count,
loff_t
*
pos
);
loff_t
*
pos
);
static
struct
file_operations
proc_dev_atm_operations
=
{
static
struct
file_operations
proc_dev_atm_operations
=
{
.
owner
=
THIS_MODULE
,
.
read
=
proc_dev_atm_read
,
.
read
=
proc_dev_atm_read
,
};
};
static
struct
file_operations
proc_spec_atm_operations
=
{
static
struct
file_operations
proc_spec_atm_operations
=
{
.
owner
=
THIS_MODULE
,
.
read
=
proc_spec_atm_read
,
.
read
=
proc_spec_atm_read
,
};
};
...
...
net/bluetooth/hci_proc.c
View file @
bb1fe39a
...
@@ -115,6 +115,7 @@ static int inq_seq_open(struct inode *inode, struct file *file)
...
@@ -115,6 +115,7 @@ static int inq_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
inq_seq_fops
=
{
static
struct
file_operations
inq_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
inq_seq_open
,
.
open
=
inq_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/bluetooth/l2cap.c
View file @
bb1fe39a
...
@@ -2048,6 +2048,7 @@ static int l2cap_seq_open(struct inode *inode, struct file *file)
...
@@ -2048,6 +2048,7 @@ static int l2cap_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
l2cap_seq_fops
=
{
static
struct
file_operations
l2cap_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
l2cap_seq_open
,
.
open
=
l2cap_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/bluetooth/rfcomm/core.c
View file @
bb1fe39a
...
@@ -1824,6 +1824,7 @@ static int rfcomm_seq_open(struct inode *inode, struct file *file)
...
@@ -1824,6 +1824,7 @@ static int rfcomm_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
rfcomm_seq_fops
=
{
static
struct
file_operations
rfcomm_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
rfcomm_seq_open
,
.
open
=
rfcomm_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/bluetooth/rfcomm/sock.c
View file @
bb1fe39a
...
@@ -821,6 +821,7 @@ static int rfcomm_seq_open(struct inode *inode, struct file *file)
...
@@ -821,6 +821,7 @@ static int rfcomm_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
rfcomm_seq_fops
=
{
static
struct
file_operations
rfcomm_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
rfcomm_seq_open
,
.
open
=
rfcomm_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/bluetooth/sco.c
View file @
bb1fe39a
...
@@ -933,6 +933,7 @@ static int sco_seq_open(struct inode *inode, struct file *file)
...
@@ -933,6 +933,7 @@ static int sco_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
sco_seq_fops
=
{
static
struct
file_operations
sco_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
sco_seq_open
,
.
open
=
sco_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/core/dev.c
View file @
bb1fe39a
...
@@ -1912,6 +1912,7 @@ static int dev_seq_open(struct inode *inode, struct file *file)
...
@@ -1912,6 +1912,7 @@ static int dev_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
dev_seq_fops
=
{
static
struct
file_operations
dev_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
dev_seq_open
,
.
open
=
dev_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -1931,6 +1932,7 @@ static int softnet_seq_open(struct inode *inode, struct file *file)
...
@@ -1931,6 +1932,7 @@ static int softnet_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
softnet_seq_fops
=
{
static
struct
file_operations
softnet_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
softnet_seq_open
,
.
open
=
softnet_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/core/wireless.c
View file @
bb1fe39a
...
@@ -465,6 +465,7 @@ static int wireless_seq_open(struct inode *inode, struct file *file)
...
@@ -465,6 +465,7 @@ static int wireless_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
wireless_seq_fops
=
{
static
struct
file_operations
wireless_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
wireless_seq_open
,
.
open
=
wireless_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/decnet/dn_neigh.c
View file @
bb1fe39a
...
@@ -693,6 +693,7 @@ static int dn_neigh_seq_open(struct inode *inode, struct file *file)
...
@@ -693,6 +693,7 @@ static int dn_neigh_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
dn_neigh_seq_fops
=
{
static
struct
file_operations
dn_neigh_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
dn_neigh_seq_open
,
.
open
=
dn_neigh_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/ipv4/af_inet.c
View file @
bb1fe39a
...
@@ -94,7 +94,6 @@
...
@@ -94,7 +94,6 @@
#include <linux/inet.h>
#include <linux/inet.h>
#include <linux/igmp.h>
#include <linux/igmp.h>
#include <linux/netdevice.h>
#include <linux/netdevice.h>
#include <linux/brlock.h>
#include <net/ip.h>
#include <net/ip.h>
#include <net/protocol.h>
#include <net/protocol.h>
#include <net/arp.h>
#include <net/arp.h>
...
@@ -129,7 +128,8 @@ static kmem_cache_t *raw4_sk_cachep;
...
@@ -129,7 +128,8 @@ static kmem_cache_t *raw4_sk_cachep;
/* The inetsw table contains everything that inet_create needs to
/* The inetsw table contains everything that inet_create needs to
* build a new socket.
* build a new socket.
*/
*/
struct
list_head
inetsw
[
SOCK_MAX
];
static
struct
list_head
inetsw
[
SOCK_MAX
];
static
spinlock_t
inetsw_lock
=
SPIN_LOCK_UNLOCKED
;
/* New destruction routine */
/* New destruction routine */
...
@@ -337,8 +337,8 @@ static int inet_create(struct socket *sock, int protocol)
...
@@ -337,8 +337,8 @@ static int inet_create(struct socket *sock, int protocol)
/* Look for the requested type/protocol pair. */
/* Look for the requested type/protocol pair. */
answer
=
NULL
;
answer
=
NULL
;
br_read_lock_bh
(
BR_NETPROTO_LOCK
);
rcu_read_lock
(
);
list_for_each
(
p
,
&
inetsw
[
sock
->
type
])
{
list_for_each
_rcu
(
p
,
&
inetsw
[
sock
->
type
])
{
answer
=
list_entry
(
p
,
struct
inet_protosw
,
list
);
answer
=
list_entry
(
p
,
struct
inet_protosw
,
list
);
/* Check the non-wild match. */
/* Check the non-wild match. */
...
@@ -356,7 +356,6 @@ static int inet_create(struct socket *sock, int protocol)
...
@@ -356,7 +356,6 @@ static int inet_create(struct socket *sock, int protocol)
}
}
answer
=
NULL
;
answer
=
NULL
;
}
}
br_read_unlock_bh
(
BR_NETPROTO_LOCK
);
err
=
-
ESOCKTNOSUPPORT
;
err
=
-
ESOCKTNOSUPPORT
;
if
(
!
answer
)
if
(
!
answer
)
...
@@ -373,6 +372,7 @@ static int inet_create(struct socket *sock, int protocol)
...
@@ -373,6 +372,7 @@ static int inet_create(struct socket *sock, int protocol)
sk
->
no_check
=
answer
->
no_check
;
sk
->
no_check
=
answer
->
no_check
;
if
(
INET_PROTOSW_REUSE
&
answer
->
flags
)
if
(
INET_PROTOSW_REUSE
&
answer
->
flags
)
sk
->
reuse
=
1
;
sk
->
reuse
=
1
;
rcu_read_unlock
();
inet
=
inet_sk
(
sk
);
inet
=
inet_sk
(
sk
);
...
@@ -427,6 +427,7 @@ static int inet_create(struct socket *sock, int protocol)
...
@@ -427,6 +427,7 @@ static int inet_create(struct socket *sock, int protocol)
out:
out:
return
err
;
return
err
;
out_sk_free:
out_sk_free:
rcu_read_unlock
();
sk_free
(
sk
);
sk_free
(
sk
);
goto
out
;
goto
out
;
}
}
...
@@ -979,7 +980,7 @@ void inet_register_protosw(struct inet_protosw *p)
...
@@ -979,7 +980,7 @@ void inet_register_protosw(struct inet_protosw *p)
int
protocol
=
p
->
protocol
;
int
protocol
=
p
->
protocol
;
struct
list_head
*
last_perm
;
struct
list_head
*
last_perm
;
br_write_lock_bh
(
BR_NETPROTO_LOCK
);
spin_lock_bh
(
&
inetsw_lock
);
if
(
p
->
type
>
SOCK_MAX
)
if
(
p
->
type
>
SOCK_MAX
)
goto
out_illegal
;
goto
out_illegal
;
...
@@ -1008,9 +1009,12 @@ void inet_register_protosw(struct inet_protosw *p)
...
@@ -1008,9 +1009,12 @@ void inet_register_protosw(struct inet_protosw *p)
* non-permanent entry. This means that when we remove this entry, the
* non-permanent entry. This means that when we remove this entry, the
* system automatically returns to the old behavior.
* system automatically returns to the old behavior.
*/
*/
list_add
(
&
p
->
list
,
last_perm
);
list_add
_rcu
(
&
p
->
list
,
last_perm
);
out:
out:
br_write_unlock_bh
(
BR_NETPROTO_LOCK
);
spin_unlock_bh
(
&
inetsw_lock
);
synchronize_kernel
();
return
;
return
;
out_permanent:
out_permanent:
...
@@ -1032,9 +1036,11 @@ void inet_unregister_protosw(struct inet_protosw *p)
...
@@ -1032,9 +1036,11 @@ void inet_unregister_protosw(struct inet_protosw *p)
"Attempt to unregister permanent protocol %d.
\n
"
,
"Attempt to unregister permanent protocol %d.
\n
"
,
p
->
protocol
);
p
->
protocol
);
}
else
{
}
else
{
br_write_lock_bh
(
BR_NETPROTO_LOCK
);
spin_lock_bh
(
&
inetsw_lock
);
list_del
(
&
p
->
list
);
list_del_rcu
(
&
p
->
list
);
br_write_unlock_bh
(
BR_NETPROTO_LOCK
);
spin_unlock_bh
(
&
inetsw_lock
);
synchronize_kernel
();
}
}
}
}
...
...
net/ipv4/arp.c
View file @
bb1fe39a
...
@@ -1384,6 +1384,7 @@ static int arp_seq_open(struct inode *inode, struct file *file)
...
@@ -1384,6 +1384,7 @@ static int arp_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
arp_seq_fops
=
{
static
struct
file_operations
arp_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
arp_seq_open
,
.
open
=
arp_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/ipv4/fib_hash.c
View file @
bb1fe39a
...
@@ -1065,6 +1065,7 @@ static int fib_seq_open(struct inode *inode, struct file *file)
...
@@ -1065,6 +1065,7 @@ static int fib_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
fib_seq_fops
=
{
static
struct
file_operations
fib_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
fib_seq_open
,
.
open
=
fib_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/ipv4/icmp.c
View file @
bb1fe39a
...
@@ -695,15 +695,12 @@ static void icmp_unreach(struct sk_buff *skb)
...
@@ -695,15 +695,12 @@ static void icmp_unreach(struct sk_buff *skb)
}
}
read_unlock
(
&
raw_v4_lock
);
read_unlock
(
&
raw_v4_lock
);
/*
rcu_read_lock
();
* This can't change while we are doing it.
* Callers have obtained BR_NETPROTO_LOCK so
* we are OK.
*/
ipprot
=
inet_protos
[
hash
];
ipprot
=
inet_protos
[
hash
];
smp_read_barrier_depends
();
if
(
ipprot
&&
ipprot
->
err_handler
)
if
(
ipprot
&&
ipprot
->
err_handler
)
ipprot
->
err_handler
(
skb
,
info
);
ipprot
->
err_handler
(
skb
,
info
);
rcu_read_unlock
();
out:
out:
return
;
return
;
...
...
net/ipv4/ip_input.c
View file @
bb1fe39a
...
@@ -215,6 +215,7 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb)
...
@@ -215,6 +215,7 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb)
/* Point into the IP datagram, just past the header. */
/* Point into the IP datagram, just past the header. */
skb
->
h
.
raw
=
skb
->
data
;
skb
->
h
.
raw
=
skb
->
data
;
rcu_read_lock
();
{
{
/* Note: See raw.c and net/raw.h, RAWV4_HTABLE_SIZE==MAX_INET_PROTOS */
/* Note: See raw.c and net/raw.h, RAWV4_HTABLE_SIZE==MAX_INET_PROTOS */
int
protocol
=
skb
->
nh
.
iph
->
protocol
;
int
protocol
=
skb
->
nh
.
iph
->
protocol
;
...
@@ -235,10 +236,11 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb)
...
@@ -235,10 +236,11 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb)
if
((
ipprot
=
inet_protos
[
hash
])
!=
NULL
)
{
if
((
ipprot
=
inet_protos
[
hash
])
!=
NULL
)
{
int
ret
;
int
ret
;
smp_read_barrier_depends
();
if
(
!
ipprot
->
no_policy
&&
if
(
!
ipprot
->
no_policy
&&
!
xfrm4_policy_check
(
NULL
,
XFRM_POLICY_IN
,
skb
))
{
!
xfrm4_policy_check
(
NULL
,
XFRM_POLICY_IN
,
skb
))
{
kfree_skb
(
skb
);
kfree_skb
(
skb
);
return
0
;
goto
out
;
}
}
ret
=
ipprot
->
handler
(
skb
);
ret
=
ipprot
->
handler
(
skb
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
...
@@ -258,6 +260,8 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb)
...
@@ -258,6 +260,8 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb)
kfree_skb
(
skb
);
kfree_skb
(
skb
);
}
}
}
}
out:
rcu_read_unlock
();
return
0
;
return
0
;
}
}
...
...
net/ipv4/proc.c
View file @
bb1fe39a
...
@@ -80,6 +80,7 @@ static int sockstat_seq_open(struct inode *inode, struct file *file)
...
@@ -80,6 +80,7 @@ static int sockstat_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
sockstat_seq_fops
=
{
static
struct
file_operations
sockstat_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
sockstat_seq_open
,
.
open
=
sockstat_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -171,6 +172,7 @@ static int snmp_seq_open(struct inode *inode, struct file *file)
...
@@ -171,6 +172,7 @@ static int snmp_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
snmp_seq_fops
=
{
static
struct
file_operations
snmp_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
snmp_seq_open
,
.
open
=
snmp_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -227,6 +229,7 @@ static int netstat_seq_open(struct inode *inode, struct file *file)
...
@@ -227,6 +229,7 @@ static int netstat_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
netstat_seq_fops
=
{
static
struct
file_operations
netstat_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
netstat_seq_open
,
.
open
=
netstat_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/ipv4/protocol.c
View file @
bb1fe39a
...
@@ -37,7 +37,6 @@
...
@@ -37,7 +37,6 @@
#include <linux/inet.h>
#include <linux/inet.h>
#include <linux/netdevice.h>
#include <linux/netdevice.h>
#include <linux/timer.h>
#include <linux/timer.h>
#include <linux/brlock.h>
#include <net/ip.h>
#include <net/ip.h>
#include <net/protocol.h>
#include <net/protocol.h>
#include <net/tcp.h>
#include <net/tcp.h>
...
@@ -49,6 +48,7 @@
...
@@ -49,6 +48,7 @@
#include <linux/igmp.h>
#include <linux/igmp.h>
struct
inet_protocol
*
inet_protos
[
MAX_INET_PROTOS
];
struct
inet_protocol
*
inet_protos
[
MAX_INET_PROTOS
];
static
spinlock_t
inet_proto_lock
=
SPIN_LOCK_UNLOCKED
;
/*
/*
* Add a protocol handler to the hash tables
* Add a protocol handler to the hash tables
...
@@ -60,16 +60,14 @@ int inet_add_protocol(struct inet_protocol *prot, unsigned char protocol)
...
@@ -60,16 +60,14 @@ int inet_add_protocol(struct inet_protocol *prot, unsigned char protocol)
hash
=
protocol
&
(
MAX_INET_PROTOS
-
1
);
hash
=
protocol
&
(
MAX_INET_PROTOS
-
1
);
br_write_lock_bh
(
BR_NETPROTO_LOCK
);
spin_lock_bh
(
&
inet_proto_lock
);
if
(
inet_protos
[
hash
])
{
if
(
inet_protos
[
hash
])
{
ret
=
-
1
;
ret
=
-
1
;
}
else
{
}
else
{
inet_protos
[
hash
]
=
prot
;
inet_protos
[
hash
]
=
prot
;
ret
=
0
;
ret
=
0
;
}
}
spin_unlock_bh
(
&
inet_proto_lock
);
br_write_unlock_bh
(
BR_NETPROTO_LOCK
);
return
ret
;
return
ret
;
}
}
...
@@ -84,16 +82,15 @@ int inet_del_protocol(struct inet_protocol *prot, unsigned char protocol)
...
@@ -84,16 +82,15 @@ int inet_del_protocol(struct inet_protocol *prot, unsigned char protocol)
hash
=
protocol
&
(
MAX_INET_PROTOS
-
1
);
hash
=
protocol
&
(
MAX_INET_PROTOS
-
1
);
br_write_lock_bh
(
BR_NETPROTO_LOCK
);
spin_lock_bh
(
&
inet_proto_lock
);
if
(
inet_protos
[
hash
]
==
prot
)
{
if
(
inet_protos
[
hash
]
==
prot
)
{
inet_protos
[
hash
]
=
NULL
;
inet_protos
[
hash
]
=
NULL
;
ret
=
0
;
ret
=
0
;
}
else
{
}
else
{
ret
=
-
1
;
ret
=
-
1
;
}
}
spin_unlock_bh
(
&
inet_proto_lock
);
br_write_unlock_bh
(
BR_NETPROTO_LOCK
);
return
ret
;
return
ret
;
}
}
net/ipv4/raw.c
View file @
bb1fe39a
...
@@ -807,6 +807,7 @@ static int raw_seq_open(struct inode *inode, struct file *file)
...
@@ -807,6 +807,7 @@ static int raw_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
raw_seq_fops
=
{
static
struct
file_operations
raw_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
raw_seq_open
,
.
open
=
raw_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/ipv4/route.c
View file @
bb1fe39a
...
@@ -382,6 +382,7 @@ static int rt_cache_seq_open(struct inode *inode, struct file *file)
...
@@ -382,6 +382,7 @@ static int rt_cache_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
rt_cache_seq_fops
=
{
static
struct
file_operations
rt_cache_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
rt_cache_seq_open
,
.
open
=
rt_cache_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/ipv4/tcp_ipv4.c
View file @
bb1fe39a
...
@@ -2569,6 +2569,7 @@ static int tcp_seq_open(struct inode *inode, struct file *file)
...
@@ -2569,6 +2569,7 @@ static int tcp_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
tcp_seq_fops
=
{
static
struct
file_operations
tcp_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
tcp_seq_open
,
.
open
=
tcp_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/ipv4/tcp_minisocks.c
View file @
bb1fe39a
...
@@ -760,6 +760,7 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct open_request *req,
...
@@ -760,6 +760,7 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct open_request *req,
tcp_reset_keepalive_timer
(
newsk
,
keepalive_time_when
(
newtp
));
tcp_reset_keepalive_timer
(
newsk
,
keepalive_time_when
(
newtp
));
newsk
->
socket
=
NULL
;
newsk
->
socket
=
NULL
;
newsk
->
sleep
=
NULL
;
newsk
->
sleep
=
NULL
;
newsk
->
owner
=
NULL
;
newtp
->
tstamp_ok
=
req
->
tstamp_ok
;
newtp
->
tstamp_ok
=
req
->
tstamp_ok
;
if
((
newtp
->
sack_ok
=
req
->
sack_ok
)
!=
0
)
{
if
((
newtp
->
sack_ok
=
req
->
sack_ok
)
!=
0
)
{
...
...
net/ipv4/udp.c
View file @
bb1fe39a
...
@@ -1483,6 +1483,7 @@ static int udp_seq_open(struct inode *inode, struct file *file)
...
@@ -1483,6 +1483,7 @@ static int udp_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
udp_seq_fops
=
{
static
struct
file_operations
udp_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
udp_seq_open
,
.
open
=
udp_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/ipv6/af_inet6.c
View file @
bb1fe39a
...
@@ -45,7 +45,6 @@
...
@@ -45,7 +45,6 @@
#include <linux/inet.h>
#include <linux/inet.h>
#include <linux/netdevice.h>
#include <linux/netdevice.h>
#include <linux/icmpv6.h>
#include <linux/icmpv6.h>
#include <linux/brlock.h>
#include <linux/smp_lock.h>
#include <linux/smp_lock.h>
#include <net/ip.h>
#include <net/ip.h>
...
@@ -75,8 +74,10 @@ MODULE_LICENSE("GPL");
...
@@ -75,8 +74,10 @@ MODULE_LICENSE("GPL");
/* IPv6 procfs goodies... */
/* IPv6 procfs goodies... */
#ifdef CONFIG_PROC_FS
#ifdef CONFIG_PROC_FS
extern
int
raw6_proc_init
(
void
);
extern
int
raw6_proc_exit
(
void
);
extern
int
anycast6_get_info
(
char
*
,
char
**
,
off_t
,
int
);
extern
int
anycast6_get_info
(
char
*
,
char
**
,
off_t
,
int
);
extern
int
raw6_get_info
(
char
*
,
char
**
,
off_t
,
int
);
extern
int
tcp6_get_info
(
char
*
,
char
**
,
off_t
,
int
);
extern
int
tcp6_get_info
(
char
*
,
char
**
,
off_t
,
int
);
extern
int
udp6_get_info
(
char
*
,
char
**
,
off_t
,
int
);
extern
int
udp6_get_info
(
char
*
,
char
**
,
off_t
,
int
);
extern
int
afinet6_get_info
(
char
*
,
char
**
,
off_t
,
int
);
extern
int
afinet6_get_info
(
char
*
,
char
**
,
off_t
,
int
);
...
@@ -102,7 +103,8 @@ kmem_cache_t *raw6_sk_cachep;
...
@@ -102,7 +103,8 @@ kmem_cache_t *raw6_sk_cachep;
/* The inetsw table contains everything that inet_create needs to
/* The inetsw table contains everything that inet_create needs to
* build a new socket.
* build a new socket.
*/
*/
struct
list_head
inetsw6
[
SOCK_MAX
];
static
struct
list_head
inetsw6
[
SOCK_MAX
];
static
spinlock_t
inetsw6_lock
=
SPIN_LOCK_UNLOCKED
;
static
void
inet6_sock_destruct
(
struct
sock
*
sk
)
static
void
inet6_sock_destruct
(
struct
sock
*
sk
)
{
{
...
@@ -162,8 +164,8 @@ static int inet6_create(struct socket *sock, int protocol)
...
@@ -162,8 +164,8 @@ static int inet6_create(struct socket *sock, int protocol)
/* Look for the requested type/protocol pair. */
/* Look for the requested type/protocol pair. */
answer
=
NULL
;
answer
=
NULL
;
br_read_lock_bh
(
BR_NETPROTO_LOCK
);
rcu_read_lock
(
);
list_for_each
(
p
,
&
inetsw6
[
sock
->
type
])
{
list_for_each
_rcu
(
p
,
&
inetsw6
[
sock
->
type
])
{
answer
=
list_entry
(
p
,
struct
inet_protosw
,
list
);
answer
=
list_entry
(
p
,
struct
inet_protosw
,
list
);
/* Check the non-wild match. */
/* Check the non-wild match. */
...
@@ -181,7 +183,6 @@ static int inet6_create(struct socket *sock, int protocol)
...
@@ -181,7 +183,6 @@ static int inet6_create(struct socket *sock, int protocol)
}
}
answer
=
NULL
;
answer
=
NULL
;
}
}
br_read_unlock_bh
(
BR_NETPROTO_LOCK
);
if
(
!
answer
)
if
(
!
answer
)
goto
free_and_badtype
;
goto
free_and_badtype
;
...
@@ -198,6 +199,7 @@ static int inet6_create(struct socket *sock, int protocol)
...
@@ -198,6 +199,7 @@ static int inet6_create(struct socket *sock, int protocol)
sk
->
no_check
=
answer
->
no_check
;
sk
->
no_check
=
answer
->
no_check
;
if
(
INET_PROTOSW_REUSE
&
answer
->
flags
)
if
(
INET_PROTOSW_REUSE
&
answer
->
flags
)
sk
->
reuse
=
1
;
sk
->
reuse
=
1
;
rcu_read_unlock
();
inet
=
inet_sk
(
sk
);
inet
=
inet_sk
(
sk
);
...
@@ -260,12 +262,15 @@ static int inet6_create(struct socket *sock, int protocol)
...
@@ -260,12 +262,15 @@ static int inet6_create(struct socket *sock, int protocol)
return
0
;
return
0
;
free_and_badtype:
free_and_badtype:
rcu_read_unlock
();
sk_free
(
sk
);
sk_free
(
sk
);
return
-
ESOCKTNOSUPPORT
;
return
-
ESOCKTNOSUPPORT
;
free_and_badperm:
free_and_badperm:
rcu_read_unlock
();
sk_free
(
sk
);
sk_free
(
sk
);
return
-
EPERM
;
return
-
EPERM
;
free_and_noproto:
free_and_noproto:
rcu_read_unlock
();
sk_free
(
sk
);
sk_free
(
sk
);
return
-
EPROTONOSUPPORT
;
return
-
EPROTONOSUPPORT
;
do_oom:
do_oom:
...
@@ -574,7 +579,7 @@ inet6_register_protosw(struct inet_protosw *p)
...
@@ -574,7 +579,7 @@ inet6_register_protosw(struct inet_protosw *p)
int
protocol
=
p
->
protocol
;
int
protocol
=
p
->
protocol
;
struct
list_head
*
last_perm
;
struct
list_head
*
last_perm
;
br_write_lock_bh
(
BR_NETPROTO_LOCK
);
spin_lock_bh
(
&
inetsw6_lock
);
if
(
p
->
type
>
SOCK_MAX
)
if
(
p
->
type
>
SOCK_MAX
)
goto
out_illegal
;
goto
out_illegal
;
...
@@ -603,9 +608,9 @@ inet6_register_protosw(struct inet_protosw *p)
...
@@ -603,9 +608,9 @@ inet6_register_protosw(struct inet_protosw *p)
* non-permanent entry. This means that when we remove this entry, the
* non-permanent entry. This means that when we remove this entry, the
* system automatically returns to the old behavior.
* system automatically returns to the old behavior.
*/
*/
list_add
(
&
p
->
list
,
last_perm
);
list_add
_rcu
(
&
p
->
list
,
last_perm
);
out:
out:
br_write_unlock_bh
(
BR_NETPROTO_LOCK
);
spin_unlock_bh
(
&
inetsw6_lock
);
return
;
return
;
out_permanent:
out_permanent:
...
@@ -623,7 +628,17 @@ inet6_register_protosw(struct inet_protosw *p)
...
@@ -623,7 +628,17 @@ inet6_register_protosw(struct inet_protosw *p)
void
void
inet6_unregister_protosw
(
struct
inet_protosw
*
p
)
inet6_unregister_protosw
(
struct
inet_protosw
*
p
)
{
{
inet_unregister_protosw
(
p
);
if
(
INET_PROTOSW_PERMANENT
&
p
->
flags
)
{
printk
(
KERN_ERR
"Attempt to unregister permanent protocol %d.
\n
"
,
p
->
protocol
);
}
else
{
spin_lock_bh
(
&
inetsw6_lock
);
list_del_rcu
(
&
p
->
list
);
spin_unlock_bh
(
&
inetsw6_lock
);
synchronize_kernel
();
}
}
}
int
int
...
@@ -773,7 +788,7 @@ static int __init inet6_init(void)
...
@@ -773,7 +788,7 @@ static int __init inet6_init(void)
/* Create /proc/foo6 entries. */
/* Create /proc/foo6 entries. */
#ifdef CONFIG_PROC_FS
#ifdef CONFIG_PROC_FS
err
=
-
ENOMEM
;
err
=
-
ENOMEM
;
if
(
!
proc_net_create
(
"raw6"
,
0
,
raw6_get_info
))
if
(
raw6_proc_init
(
))
goto
proc_raw6_fail
;
goto
proc_raw6_fail
;
if
(
!
proc_net_create
(
"tcp6"
,
0
,
tcp6_get_info
))
if
(
!
proc_net_create
(
"tcp6"
,
0
,
tcp6_get_info
))
goto
proc_tcp6_fail
;
goto
proc_tcp6_fail
;
...
@@ -814,7 +829,7 @@ static int __init inet6_init(void)
...
@@ -814,7 +829,7 @@ static int __init inet6_init(void)
proc_udp6_fail:
proc_udp6_fail:
proc_net_remove
(
"tcp6"
);
proc_net_remove
(
"tcp6"
);
proc_tcp6_fail:
proc_tcp6_fail:
proc_net_remove
(
"raw6"
);
raw6_proc_exit
(
);
proc_raw6_fail:
proc_raw6_fail:
igmp6_cleanup
();
igmp6_cleanup
();
#endif
#endif
...
@@ -839,7 +854,7 @@ static void inet6_exit(void)
...
@@ -839,7 +854,7 @@ static void inet6_exit(void)
/* First of all disallow new sockets creation. */
/* First of all disallow new sockets creation. */
sock_unregister
(
PF_INET6
);
sock_unregister
(
PF_INET6
);
#ifdef CONFIG_PROC_FS
#ifdef CONFIG_PROC_FS
proc_net_remove
(
"raw6"
);
raw6_proc_exit
(
);
proc_net_remove
(
"tcp6"
);
proc_net_remove
(
"tcp6"
);
proc_net_remove
(
"udp6"
);
proc_net_remove
(
"udp6"
);
proc_net_remove
(
"sockstat6"
);
proc_net_remove
(
"sockstat6"
);
...
...
net/ipv6/icmp.c
View file @
bb1fe39a
...
@@ -456,9 +456,12 @@ static void icmpv6_notify(struct sk_buff *skb, int type, int code, u32 info)
...
@@ -456,9 +456,12 @@ static void icmpv6_notify(struct sk_buff *skb, int type, int code, u32 info)
hash
=
nexthdr
&
(
MAX_INET_PROTOS
-
1
);
hash
=
nexthdr
&
(
MAX_INET_PROTOS
-
1
);
rcu_read_lock
();
ipprot
=
inet6_protos
[
hash
];
ipprot
=
inet6_protos
[
hash
];
smp_read_barrier_depends
();
if
(
ipprot
&&
ipprot
->
err_handler
)
if
(
ipprot
&&
ipprot
->
err_handler
)
ipprot
->
err_handler
(
skb
,
NULL
,
type
,
code
,
inner_offset
,
info
);
ipprot
->
err_handler
(
skb
,
NULL
,
type
,
code
,
inner_offset
,
info
);
rcu_read_unlock
();
read_lock
(
&
raw_v6_lock
);
read_lock
(
&
raw_v6_lock
);
if
((
sk
=
raw_v6_htable
[
hash
])
!=
NULL
)
{
if
((
sk
=
raw_v6_htable
[
hash
])
!=
NULL
)
{
...
...
net/ipv6/ip6_input.c
View file @
bb1fe39a
...
@@ -152,6 +152,7 @@ static inline int ip6_input_finish(struct sk_buff *skb)
...
@@ -152,6 +152,7 @@ static inline int ip6_input_finish(struct sk_buff *skb)
skb
->
h
.
raw
+=
(
skb
->
h
.
raw
[
1
]
+
1
)
<<
3
;
skb
->
h
.
raw
+=
(
skb
->
h
.
raw
[
1
]
+
1
)
<<
3
;
}
}
rcu_read_lock
();
resubmit:
resubmit:
if
(
!
pskb_pull
(
skb
,
skb
->
h
.
raw
-
skb
->
data
))
if
(
!
pskb_pull
(
skb
,
skb
->
h
.
raw
-
skb
->
data
))
goto
discard
;
goto
discard
;
...
@@ -165,6 +166,7 @@ static inline int ip6_input_finish(struct sk_buff *skb)
...
@@ -165,6 +166,7 @@ static inline int ip6_input_finish(struct sk_buff *skb)
if
((
ipprot
=
inet6_protos
[
hash
])
!=
NULL
)
{
if
((
ipprot
=
inet6_protos
[
hash
])
!=
NULL
)
{
int
ret
;
int
ret
;
smp_read_barrier_depends
();
if
(
ipprot
->
flags
&
INET6_PROTO_FINAL
)
{
if
(
ipprot
->
flags
&
INET6_PROTO_FINAL
)
{
if
(
!
cksum_sub
&&
skb
->
ip_summed
==
CHECKSUM_HW
)
{
if
(
!
cksum_sub
&&
skb
->
ip_summed
==
CHECKSUM_HW
)
{
skb
->
csum
=
csum_sub
(
skb
->
csum
,
skb
->
csum
=
csum_sub
(
skb
->
csum
,
...
@@ -173,10 +175,8 @@ static inline int ip6_input_finish(struct sk_buff *skb)
...
@@ -173,10 +175,8 @@ static inline int ip6_input_finish(struct sk_buff *skb)
}
}
}
}
if
(
!
(
ipprot
->
flags
&
INET6_PROTO_NOPOLICY
)
&&
if
(
!
(
ipprot
->
flags
&
INET6_PROTO_NOPOLICY
)
&&
!
xfrm6_policy_check
(
NULL
,
XFRM_POLICY_IN
,
skb
))
{
!
xfrm6_policy_check
(
NULL
,
XFRM_POLICY_IN
,
skb
))
kfree_skb
(
skb
);
goto
discard
;
return
0
;
}
ret
=
ipprot
->
handler
(
&
skb
,
&
nhoff
);
ret
=
ipprot
->
handler
(
&
skb
,
&
nhoff
);
if
(
ret
>
0
)
if
(
ret
>
0
)
...
@@ -194,10 +194,11 @@ static inline int ip6_input_finish(struct sk_buff *skb)
...
@@ -194,10 +194,11 @@ static inline int ip6_input_finish(struct sk_buff *skb)
kfree_skb
(
skb
);
kfree_skb
(
skb
);
}
}
}
}
rcu_read_unlock
();
return
0
;
return
0
;
discard:
discard:
rcu_read_unlock
();
kfree_skb
(
skb
);
kfree_skb
(
skb
);
return
0
;
return
0
;
}
}
...
...
net/ipv6/proc.c
View file @
bb1fe39a
...
@@ -198,6 +198,7 @@ static int sockstat6_seq_open(struct inode *inode, struct file *file)
...
@@ -198,6 +198,7 @@ static int sockstat6_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
sockstat6_seq_fops
=
{
static
struct
file_operations
sockstat6_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
sockstat6_seq_open
,
.
open
=
sockstat6_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -210,6 +211,7 @@ static int snmp6_seq_open(struct inode *inode, struct file *file)
...
@@ -210,6 +211,7 @@ static int snmp6_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
snmp6_seq_fops
=
{
static
struct
file_operations
snmp6_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
snmp6_seq_open
,
.
open
=
snmp6_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/ipv6/protocol.c
View file @
bb1fe39a
...
@@ -32,7 +32,6 @@
...
@@ -32,7 +32,6 @@
#include <linux/in6.h>
#include <linux/in6.h>
#include <linux/netdevice.h>
#include <linux/netdevice.h>
#include <linux/if_arp.h>
#include <linux/if_arp.h>
#include <linux/brlock.h>
#include <net/sock.h>
#include <net/sock.h>
#include <net/snmp.h>
#include <net/snmp.h>
...
@@ -41,12 +40,14 @@
...
@@ -41,12 +40,14 @@
#include <net/protocol.h>
#include <net/protocol.h>
struct
inet6_protocol
*
inet6_protos
[
MAX_INET_PROTOS
];
struct
inet6_protocol
*
inet6_protos
[
MAX_INET_PROTOS
];
static
spinlock_t
inet6_proto_lock
=
SPIN_LOCK_UNLOCKED
;
int
inet6_add_protocol
(
struct
inet6_protocol
*
prot
,
unsigned
char
protocol
)
int
inet6_add_protocol
(
struct
inet6_protocol
*
prot
,
unsigned
char
protocol
)
{
{
int
ret
,
hash
=
protocol
&
(
MAX_INET_PROTOS
-
1
);
int
ret
,
hash
=
protocol
&
(
MAX_INET_PROTOS
-
1
);
br_write_lock_bh
(
BR_NETPROTO_LOCK
);
spin_lock_bh
(
&
inet6_proto_lock
);
if
(
inet6_protos
[
hash
])
{
if
(
inet6_protos
[
hash
])
{
ret
=
-
1
;
ret
=
-
1
;
...
@@ -55,7 +56,7 @@ int inet6_add_protocol(struct inet6_protocol *prot, unsigned char protocol)
...
@@ -55,7 +56,7 @@ int inet6_add_protocol(struct inet6_protocol *prot, unsigned char protocol)
ret
=
0
;
ret
=
0
;
}
}
br_write_unlock_bh
(
BR_NETPROTO_LOCK
);
spin_unlock_bh
(
&
inet6_proto_lock
);
return
ret
;
return
ret
;
}
}
...
@@ -68,7 +69,7 @@ int inet6_del_protocol(struct inet6_protocol *prot, unsigned char protocol)
...
@@ -68,7 +69,7 @@ int inet6_del_protocol(struct inet6_protocol *prot, unsigned char protocol)
{
{
int
ret
,
hash
=
protocol
&
(
MAX_INET_PROTOS
-
1
);
int
ret
,
hash
=
protocol
&
(
MAX_INET_PROTOS
-
1
);
br_write_lock_bh
(
BR_NETPROTO_LOCK
);
spin_lock_bh
(
&
inet6_proto_lock
);
if
(
inet6_protos
[
hash
]
!=
prot
)
{
if
(
inet6_protos
[
hash
]
!=
prot
)
{
ret
=
-
1
;
ret
=
-
1
;
...
@@ -77,7 +78,7 @@ int inet6_del_protocol(struct inet6_protocol *prot, unsigned char protocol)
...
@@ -77,7 +78,7 @@ int inet6_del_protocol(struct inet6_protocol *prot, unsigned char protocol)
ret
=
0
;
ret
=
0
;
}
}
br_write_unlock_bh
(
BR_NETPROTO_LOCK
);
spin_unlock_bh
(
&
inet6_proto_lock
);
return
ret
;
return
ret
;
}
}
net/ipv6/raw.c
View file @
bb1fe39a
...
@@ -47,6 +47,9 @@
...
@@ -47,6 +47,9 @@
#include <net/rawv6.h>
#include <net/rawv6.h>
#include <net/xfrm.h>
#include <net/xfrm.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
struct
sock
*
raw_v6_htable
[
RAWV6_HTABLE_SIZE
];
struct
sock
*
raw_v6_htable
[
RAWV6_HTABLE_SIZE
];
rwlock_t
raw_v6_lock
=
RW_LOCK_UNLOCKED
;
rwlock_t
raw_v6_lock
=
RW_LOCK_UNLOCKED
;
...
@@ -831,10 +834,96 @@ static int rawv6_init_sk(struct sock *sk)
...
@@ -831,10 +834,96 @@ static int rawv6_init_sk(struct sock *sk)
return
(
0
);
return
(
0
);
}
}
#define LINE_LEN 190
struct
proto
rawv6_prot
=
{
#define LINE_FMT "%-190s\n"
.
name
=
"RAW"
,
.
close
=
rawv6_close
,
.
connect
=
udpv6_connect
,
.
disconnect
=
udp_disconnect
,
.
ioctl
=
rawv6_ioctl
,
.
init
=
rawv6_init_sk
,
.
destroy
=
inet6_destroy_sock
,
.
setsockopt
=
rawv6_setsockopt
,
.
getsockopt
=
rawv6_getsockopt
,
.
sendmsg
=
rawv6_sendmsg
,
.
recvmsg
=
rawv6_recvmsg
,
.
bind
=
rawv6_bind
,
.
backlog_rcv
=
rawv6_rcv_skb
,
.
hash
=
raw_v6_hash
,
.
unhash
=
raw_v6_unhash
,
};
#ifdef CONFIG_PROC_FS
struct
raw6_iter_state
{
int
bucket
;
};
#define raw6_seq_private(seq) ((struct raw6_iter_state *)&seq->private)
static
struct
sock
*
raw6_get_first
(
struct
seq_file
*
seq
)
{
struct
sock
*
sk
=
NULL
;
struct
raw6_iter_state
*
state
=
raw6_seq_private
(
seq
);
for
(
state
->
bucket
=
0
;
state
->
bucket
<
RAWV6_HTABLE_SIZE
;
++
state
->
bucket
)
{
sk
=
raw_v6_htable
[
state
->
bucket
];
while
(
sk
&&
sk
->
family
!=
PF_INET6
)
sk
=
sk
->
next
;
if
(
sk
)
break
;
}
return
sk
;
}
static
struct
sock
*
raw6_get_next
(
struct
seq_file
*
seq
,
struct
sock
*
sk
)
{
struct
raw6_iter_state
*
state
=
raw6_seq_private
(
seq
);
do
{
sk
=
sk
->
next
;
try_again:
;
}
while
(
sk
&&
sk
->
family
!=
PF_INET6
);
if
(
!
sk
&&
++
state
->
bucket
<
RAWV6_HTABLE_SIZE
)
{
sk
=
raw_v6_htable
[
state
->
bucket
];
goto
try_again
;
}
return
sk
;
}
static
struct
sock
*
raw6_get_idx
(
struct
seq_file
*
seq
,
loff_t
pos
)
{
struct
sock
*
sk
=
raw6_get_first
(
seq
);
if
(
sk
)
while
(
pos
&&
(
sk
=
raw6_get_next
(
seq
,
sk
))
!=
NULL
)
--
pos
;
return
pos
?
NULL
:
sk
;
}
static
void
*
raw6_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
{
read_lock
(
&
raw_v6_lock
);
return
*
pos
?
raw6_get_idx
(
seq
,
*
pos
)
:
(
void
*
)
1
;
}
static
void
*
raw6_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
pos
)
{
struct
sock
*
sk
;
if
(
v
==
(
void
*
)
1
)
sk
=
raw6_get_first
(
seq
);
else
sk
=
raw6_get_next
(
seq
,
v
);
++*
pos
;
return
sk
;
}
static
void
raw6_seq_stop
(
struct
seq_file
*
seq
,
void
*
v
)
{
read_unlock
(
&
raw_v6_lock
);
}
static
void
get_raw6_sock
(
struct
sock
*
sp
,
char
*
tmpbuf
,
int
i
)
static
void
raw6_sock_seq_show
(
struct
seq_file
*
seq
,
struct
sock
*
sp
,
int
i
)
{
{
struct
ipv6_pinfo
*
np
=
inet6_sk
(
sp
);
struct
ipv6_pinfo
*
np
=
inet6_sk
(
sp
);
struct
in6_addr
*
dest
,
*
src
;
struct
in6_addr
*
dest
,
*
src
;
...
@@ -844,9 +933,9 @@ static void get_raw6_sock(struct sock *sp, char *tmpbuf, int i)
...
@@ -844,9 +933,9 @@ static void get_raw6_sock(struct sock *sp, char *tmpbuf, int i)
src
=
&
np
->
rcv_saddr
;
src
=
&
np
->
rcv_saddr
;
destp
=
0
;
destp
=
0
;
srcp
=
inet_sk
(
sp
)
->
num
;
srcp
=
inet_sk
(
sp
)
->
num
;
s
printf
(
tmpbuf
,
s
eq_printf
(
seq
,
"%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
"%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
"%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p
"
,
"%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p
\n
"
,
i
,
i
,
src
->
s6_addr32
[
0
],
src
->
s6_addr32
[
1
],
src
->
s6_addr32
[
0
],
src
->
s6_addr32
[
1
],
src
->
s6_addr32
[
2
],
src
->
s6_addr32
[
3
],
srcp
,
src
->
s6_addr32
[
2
],
src
->
s6_addr32
[
3
],
srcp
,
...
@@ -860,65 +949,53 @@ static void get_raw6_sock(struct sock *sp, char *tmpbuf, int i)
...
@@ -860,65 +949,53 @@ static void get_raw6_sock(struct sock *sp, char *tmpbuf, int i)
atomic_read
(
&
sp
->
refcnt
),
sp
);
atomic_read
(
&
sp
->
refcnt
),
sp
);
}
}
int
raw6_get_info
(
char
*
buffer
,
char
**
start
,
off_t
offset
,
int
length
)
static
int
raw6_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
{
int
len
=
0
,
num
=
0
,
i
;
if
(
v
==
(
void
*
)
1
)
off_t
pos
=
0
;
seq_printf
(
seq
,
off_t
begin
;
" sl "
char
tmpbuf
[
LINE_LEN
+
2
];
"local_address "
"remote_address "
if
(
offset
<
LINE_LEN
+
1
)
"st tx_queue rx_queue tr tm->when retrnsmt"
len
+=
sprintf
(
buffer
,
LINE_FMT
,
" uid timeout inode
\n
"
);
" sl "
/* 6 */
else
"local_address "
/* 38 */
raw6_sock_seq_show
(
seq
,
v
,
raw6_seq_private
(
seq
)
->
bucket
);
"remote_address "
/* 38 */
return
0
;
"st tx_queue rx_queue tr tm->when retrnsmt"
/* 41 */
}
" uid timeout inode"
);
/* 21 */
/*----*/
/*144 */
pos
=
LINE_LEN
+
1
;
read_lock
(
&
raw_v6_lock
);
for
(
i
=
0
;
i
<
RAWV6_HTABLE_SIZE
;
i
++
)
{
struct
sock
*
sk
;
for
(
sk
=
raw_v6_htable
[
i
];
sk
;
sk
=
sk
->
next
,
num
++
)
{
static
struct
seq_operations
raw6_seq_ops
=
{
if
(
sk
->
family
!=
PF_INET6
)
.
start
=
raw6_seq_start
,
continue
;
.
next
=
raw6_seq_next
,
pos
+=
LINE_LEN
+
1
;
.
stop
=
raw6_seq_stop
,
if
(
pos
<=
offset
)
.
show
=
raw6_seq_show
,
continue
;
};
get_raw6_sock
(
sk
,
tmpbuf
,
i
);
len
+=
sprintf
(
buffer
+
len
,
LINE_FMT
,
tmpbuf
);
static
int
raw6_seq_open
(
struct
inode
*
inode
,
struct
file
*
file
)
if
(
len
>=
length
)
{
goto
out
;
return
seq_open
(
file
,
&
raw6_seq_ops
);
}
}
out:
read_unlock
(
&
raw_v6_lock
);
begin
=
len
-
(
pos
-
offset
);
*
start
=
buffer
+
begin
;
len
-=
begin
;
if
(
len
>
length
)
len
=
length
;
if
(
len
<
0
)
len
=
0
;
return
len
;
}
}
struct
proto
rawv6_prot
=
{
static
struct
file_operations
raw6_seq_fops
=
{
.
name
=
"RAW"
,
.
owner
=
THIS_MODULE
,
.
close
=
rawv6_close
,
.
open
=
raw6_seq_open
,
.
connect
=
udpv6_connect
,
.
read
=
seq_read
,
.
disconnect
=
udp_disconnect
,
.
llseek
=
seq_lseek
,
.
ioctl
=
rawv6_ioctl
,
.
release
=
seq_release
,
.
init
=
rawv6_init_sk
,
.
destroy
=
inet6_destroy_sock
,
.
setsockopt
=
rawv6_setsockopt
,
.
getsockopt
=
rawv6_getsockopt
,
.
sendmsg
=
rawv6_sendmsg
,
.
recvmsg
=
rawv6_recvmsg
,
.
bind
=
rawv6_bind
,
.
backlog_rcv
=
rawv6_rcv_skb
,
.
hash
=
raw_v6_hash
,
.
unhash
=
raw_v6_unhash
,
};
};
int
__init
raw6_proc_init
(
void
)
{
struct
proc_dir_entry
*
p
=
create_proc_entry
(
"raw6"
,
S_IRUGO
,
proc_net
);
if
(
!
p
)
return
-
ENOMEM
;
p
->
proc_fops
=
&
raw6_seq_fops
;
return
0
;
}
void
raw6_proc_exit
(
void
)
{
remove_proc_entry
(
"raw6"
,
proc_net
);
}
#endif
/* CONFIG_PROC_FS */
net/ipv6/route.c
View file @
bb1fe39a
...
@@ -1797,6 +1797,7 @@ static int rt6_stats_seq_open(struct inode *inode, struct file *file)
...
@@ -1797,6 +1797,7 @@ static int rt6_stats_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
rt6_stats_seq_fops
=
{
static
struct
file_operations
rt6_stats_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
rt6_stats_seq_open
,
.
open
=
rt6_stats_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/ipx/ipx_proc.c
View file @
bb1fe39a
...
@@ -319,6 +319,7 @@ static int ipx_seq_socket_open(struct inode *inode, struct file *file)
...
@@ -319,6 +319,7 @@ static int ipx_seq_socket_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
ipx_seq_interface_fops
=
{
static
struct
file_operations
ipx_seq_interface_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
ipx_seq_interface_open
,
.
open
=
ipx_seq_interface_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -326,6 +327,7 @@ static struct file_operations ipx_seq_interface_fops = {
...
@@ -326,6 +327,7 @@ static struct file_operations ipx_seq_interface_fops = {
};
};
static
struct
file_operations
ipx_seq_route_fops
=
{
static
struct
file_operations
ipx_seq_route_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
ipx_seq_route_open
,
.
open
=
ipx_seq_route_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -333,6 +335,7 @@ static struct file_operations ipx_seq_route_fops = {
...
@@ -333,6 +335,7 @@ static struct file_operations ipx_seq_route_fops = {
};
};
static
struct
file_operations
ipx_seq_socket_fops
=
{
static
struct
file_operations
ipx_seq_socket_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
ipx_seq_socket_open
,
.
open
=
ipx_seq_socket_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/llc/llc_proc.c
View file @
bb1fe39a
...
@@ -211,6 +211,7 @@ static int llc_seq_core_open(struct inode *inode, struct file *file)
...
@@ -211,6 +211,7 @@ static int llc_seq_core_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
llc_seq_socket_fops
=
{
static
struct
file_operations
llc_seq_socket_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
llc_seq_socket_open
,
.
open
=
llc_seq_socket_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -218,6 +219,7 @@ static struct file_operations llc_seq_socket_fops = {
...
@@ -218,6 +219,7 @@ static struct file_operations llc_seq_socket_fops = {
};
};
static
struct
file_operations
llc_seq_core_fops
=
{
static
struct
file_operations
llc_seq_core_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
llc_seq_core_open
,
.
open
=
llc_seq_core_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/nonet.c
View file @
bb1fe39a
...
@@ -24,5 +24,6 @@ static int sock_no_open(struct inode *irrelevant, struct file *dontcare)
...
@@ -24,5 +24,6 @@ static int sock_no_open(struct inode *irrelevant, struct file *dontcare)
}
}
struct
file_operations
bad_sock_fops
=
{
struct
file_operations
bad_sock_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
sock_no_open
,
.
open
=
sock_no_open
,
};
};
net/rxrpc/proc.c
View file @
bb1fe39a
...
@@ -38,6 +38,7 @@ static struct seq_operations rxrpc_proc_transports_ops = {
...
@@ -38,6 +38,7 @@ static struct seq_operations rxrpc_proc_transports_ops = {
};
};
static
struct
file_operations
rxrpc_proc_transports_fops
=
{
static
struct
file_operations
rxrpc_proc_transports_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
rxrpc_proc_transports_open
,
.
open
=
rxrpc_proc_transports_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -51,6 +52,7 @@ static void rxrpc_proc_peers_stop(struct seq_file *p, void *v);
...
@@ -51,6 +52,7 @@ static void rxrpc_proc_peers_stop(struct seq_file *p, void *v);
static
int
rxrpc_proc_peers_show
(
struct
seq_file
*
m
,
void
*
v
);
static
int
rxrpc_proc_peers_show
(
struct
seq_file
*
m
,
void
*
v
);
static
struct
seq_operations
rxrpc_proc_peers_ops
=
{
static
struct
seq_operations
rxrpc_proc_peers_ops
=
{
.
owner
=
THIS_MODULE
,
.
start
=
rxrpc_proc_peers_start
,
.
start
=
rxrpc_proc_peers_start
,
.
next
=
rxrpc_proc_peers_next
,
.
next
=
rxrpc_proc_peers_next
,
.
stop
=
rxrpc_proc_peers_stop
,
.
stop
=
rxrpc_proc_peers_stop
,
...
@@ -58,6 +60,7 @@ static struct seq_operations rxrpc_proc_peers_ops = {
...
@@ -58,6 +60,7 @@ static struct seq_operations rxrpc_proc_peers_ops = {
};
};
static
struct
file_operations
rxrpc_proc_peers_fops
=
{
static
struct
file_operations
rxrpc_proc_peers_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
rxrpc_proc_peers_open
,
.
open
=
rxrpc_proc_peers_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -78,6 +81,7 @@ static struct seq_operations rxrpc_proc_conns_ops = {
...
@@ -78,6 +81,7 @@ static struct seq_operations rxrpc_proc_conns_ops = {
};
};
static
struct
file_operations
rxrpc_proc_conns_fops
=
{
static
struct
file_operations
rxrpc_proc_conns_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
rxrpc_proc_conns_open
,
.
open
=
rxrpc_proc_conns_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/sctp/Kconfig
View file @
bb1fe39a
...
@@ -75,6 +75,7 @@ config SCTP_DBG_OBJCNT
...
@@ -75,6 +75,7 @@ config SCTP_DBG_OBJCNT
choice
choice
prompt "SCTP: Cookie HMAC Algorithm"
prompt "SCTP: Cookie HMAC Algorithm"
depends on IP_SCTP
help
help
HMAC algorithm to be used during association initialization. It
HMAC algorithm to be used during association initialization. It
is strongly recommended to use HMAC-SHA1 or HMAC-MD5. See
is strongly recommended to use HMAC-SHA1 or HMAC-MD5. See
...
...
net/sctp/proc.c
View file @
bb1fe39a
...
@@ -102,6 +102,7 @@ static int sctp_snmp_seq_open(struct inode *inode, struct file *file)
...
@@ -102,6 +102,7 @@ static int sctp_snmp_seq_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
sctp_snmp_seq_fops
=
{
static
struct
file_operations
sctp_snmp_seq_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
sctp_snmp_seq_open
,
.
open
=
sctp_snmp_seq_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/socket.c
View file @
bb1fe39a
...
@@ -121,6 +121,7 @@ static ssize_t sock_sendpage(struct file *file, struct page *page,
...
@@ -121,6 +121,7 @@ static ssize_t sock_sendpage(struct file *file, struct page *page,
*/
*/
static
struct
file_operations
socket_file_ops
=
{
static
struct
file_operations
socket_file_ops
=
{
.
owner
=
THIS_MODULE
,
.
llseek
=
no_llseek
,
.
llseek
=
no_llseek
,
.
aio_read
=
sock_aio_read
,
.
aio_read
=
sock_aio_read
,
.
aio_write
=
sock_aio_write
,
.
aio_write
=
sock_aio_write
,
...
@@ -490,6 +491,7 @@ static int sock_no_open(struct inode *irrelevant, struct file *dontcare)
...
@@ -490,6 +491,7 @@ static int sock_no_open(struct inode *irrelevant, struct file *dontcare)
}
}
struct
file_operations
bad_sock_fops
=
{
struct
file_operations
bad_sock_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
sock_no_open
,
.
open
=
sock_no_open
,
};
};
...
...
net/sunrpc/cache.c
View file @
bb1fe39a
...
@@ -733,6 +733,7 @@ cache_release(struct inode *inode, struct file *filp)
...
@@ -733,6 +733,7 @@ cache_release(struct inode *inode, struct file *filp)
static
struct
file_operations
cache_file_operations
=
{
static
struct
file_operations
cache_file_operations
=
{
.
owner
=
THIS_MODULE
,
.
llseek
=
no_llseek
,
.
llseek
=
no_llseek
,
.
read
=
cache_read
,
.
read
=
cache_read
,
.
write
=
cache_write
,
.
write
=
cache_write
,
...
...
net/sunrpc/rpc_pipe.c
View file @
bb1fe39a
...
@@ -310,6 +310,7 @@ rpc_info_release(struct inode *inode, struct file *file)
...
@@ -310,6 +310,7 @@ rpc_info_release(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
rpc_info_operations
=
{
static
struct
file_operations
rpc_info_operations
=
{
.
owner
=
THIS_MODULE
,
.
open
=
rpc_info_open
,
.
open
=
rpc_info_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/wanrouter/wanproc.c
View file @
bb1fe39a
...
@@ -202,6 +202,7 @@ static int status_open(struct inode *inode, struct file *file)
...
@@ -202,6 +202,7 @@ static int status_open(struct inode *inode, struct file *file)
static
struct
file_operations
config_fops
=
static
struct
file_operations
config_fops
=
{
{
.
owner
=
THIS_MODULE
,
.
open
=
config_open
,
.
open
=
config_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -210,6 +211,7 @@ static struct file_operations config_fops =
...
@@ -210,6 +211,7 @@ static struct file_operations config_fops =
static
struct
file_operations
status_fops
=
static
struct
file_operations
status_fops
=
{
{
.
owner
=
THIS_MODULE
,
.
open
=
status_open
,
.
open
=
status_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -285,6 +287,7 @@ static int wandev_open(struct inode *inode, struct file *file)
...
@@ -285,6 +287,7 @@ static int wandev_open(struct inode *inode, struct file *file)
static
struct
file_operations
wandev_fops
=
static
struct
file_operations
wandev_fops
=
{
{
.
owner
=
THIS_MODULE
,
.
open
=
wandev_open
,
.
open
=
wandev_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
net/x25/x25_proc.c
View file @
bb1fe39a
...
@@ -189,6 +189,7 @@ static int x25_seq_route_open(struct inode *inode, struct file *file)
...
@@ -189,6 +189,7 @@ static int x25_seq_route_open(struct inode *inode, struct file *file)
}
}
static
struct
file_operations
x25_seq_socket_fops
=
{
static
struct
file_operations
x25_seq_socket_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
x25_seq_socket_open
,
.
open
=
x25_seq_socket_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
@@ -196,6 +197,7 @@ static struct file_operations x25_seq_socket_fops = {
...
@@ -196,6 +197,7 @@ static struct file_operations x25_seq_socket_fops = {
};
};
static
struct
file_operations
x25_seq_route_fops
=
{
static
struct
file_operations
x25_seq_route_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
x25_seq_route_open
,
.
open
=
x25_seq_route_open
,
.
read
=
seq_read
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
llseek
=
seq_lseek
,
...
...
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