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
814d8ffd
Commit
814d8ffd
authored
Jun 13, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
parents
386bfcf5
1c2fb7f9
Changes
22
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
285 additions
and
115 deletions
+285
-115
Documentation/networking/vortex.txt
Documentation/networking/vortex.txt
+1
-1
MAINTAINERS
MAINTAINERS
+24
-24
drivers/net/r8169.c
drivers/net/r8169.c
+1
-1
include/linux/if_tr.h
include/linux/if_tr.h
+2
-0
include/linux/sysctl.h
include/linux/sysctl.h
+1
-0
include/net/ip.h
include/net/ip.h
+1
-0
net/ipv4/af_inet.c
net/ipv4/af_inet.c
+1
-0
net/ipv4/icmp.c
net/ipv4/icmp.c
+7
-2
net/ipv4/multipath_drr.c
net/ipv4/multipath_drr.c
+2
-0
net/ipv4/multipath_random.c
net/ipv4/multipath_random.c
+2
-0
net/ipv4/multipath_rr.c
net/ipv4/multipath_rr.c
+2
-0
net/ipv4/multipath_wrandom.c
net/ipv4/multipath_wrandom.c
+2
-0
net/ipv4/sysctl_net_ipv4.c
net/ipv4/sysctl_net_ipv4.c
+9
-0
net/ipv4/tcp.c
net/ipv4/tcp.c
+1
-1
net/ipv6/addrconf.c
net/ipv6/addrconf.c
+1
-0
net/ipv6/icmp.c
net/ipv6/icmp.c
+10
-4
net/sched/act_api.c
net/sched/act_api.c
+1
-1
net/sctp/input.c
net/sctp/input.c
+34
-15
net/sctp/ipv6.c
net/sctp/ipv6.c
+15
-21
net/sctp/proc.c
net/sctp/proc.c
+151
-43
net/sctp/protocol.c
net/sctp/protocol.c
+5
-2
net/sctp/socket.c
net/sctp/socket.c
+12
-0
No files found.
Documentation/networking/vortex.txt
View file @
814d8ffd
...
...
@@ -12,7 +12,7 @@ Don is no longer the prime maintainer of this version of the driver.
Please report problems to one or more of:
Andrew Morton <andrewm@uow.edu.au>
Netdev mailing list <netdev@
oss.sgi.com
>
Netdev mailing list <netdev@
vger.kernel.org
>
Linux kernel mailing list <linux-kernel@vger.kernel.org>
Please note the 'Reporting and Diagnosing Problems' section at the end
...
...
MAINTAINERS
View file @
814d8ffd
...
...
@@ -73,7 +73,7 @@ S: Status, one of the following:
3C359 NETWORK DRIVER
P: Mike Phillips
M: mikep@linuxtr.net
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
L: linux-tr@linuxtr.net
W: http://www.linuxtr.net
S: Maintained
...
...
@@ -81,13 +81,13 @@ S: Maintained
3C505 NETWORK DRIVER
P: Philip Blundell
M: philb@gnu.org
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
3CR990 NETWORK DRIVER
P: David Dillow
M: dave@thedillows.org
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
3W-XXXX ATA-RAID CONTROLLER DRIVER
...
...
@@ -130,7 +130,7 @@ S: Maintained
8169 10/100/1000 GIGABIT ETHERNET DRIVER
P: Francois Romieu
M: romieu@fr.zoreil.com
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
8250/16?50 (AND CLONE UARTS) SERIAL DRIVER
...
...
@@ -143,7 +143,7 @@ S: Maintained
8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
P: Paul Gortmaker
M: p_gortmaker@yahoo.com
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
A2232 SERIAL BOARD DRIVER
...
...
@@ -332,7 +332,7 @@ S: Maintained
ARPD SUPPORT
P: Jonathan Layes
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
ASUS ACPI EXTRAS DRIVER
...
...
@@ -706,7 +706,7 @@ S: Orphaned
DIGI RIGHTSWITCH NETWORK DRIVER
P: Rick Richardson
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
W: http://www.digi.com
S: Orphaned
...
...
@@ -812,7 +812,7 @@ S: Maintained
ETHEREXPRESS-16 NETWORK DRIVER
P: Philip Blundell
M: philb@gnu.org
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
ETHERNET BRIDGE
...
...
@@ -875,7 +875,7 @@ S: Maintained
FRAME RELAY DLCI/FRAD (Sangoma drivers too)
P: Mike McLagan
M: mike.mclagan@linux.org
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
FREEVXFS FILESYSTEM
...
...
@@ -1215,7 +1215,7 @@ S: Maintained
IPX NETWORK LAYER
P: Arnaldo Carvalho de Melo
M: acme@conectiva.com.br
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
IRDA SUBSYSTEM
...
...
@@ -1482,7 +1482,7 @@ MARVELL MV64340 ETHERNET DRIVER
P: Manish Lachwani
M: Manish_Lachwani@pmc-sierra.com
L: linux-mips@linux-mips.org
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Supported
MATROX FRAMEBUFFER DRIVER
...
...
@@ -1592,13 +1592,13 @@ P: Andrew Morton
M: akpm@osdl.org
P: Jeff Garzik
M: jgarzik@pobox.com
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
NETWORKING [GENERAL]
P: Networking Team
M: netdev@
oss.sgi.com
L: netdev@
oss.sgi.com
M: netdev@
vger.kernel.org
L: netdev@
vger.kernel.org
S: Maintained
NETWORKING [IPv4/IPv6]
...
...
@@ -1614,7 +1614,7 @@ P: Hideaki YOSHIFUJI
M: yoshfuji@linux-ipv6.org
P: Patrick McHardy
M: kaber@coreworks.de
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
IPVS
...
...
@@ -1634,7 +1634,7 @@ NI5010 NETWORK DRIVER
P: Jan-Pascal van Best and Andreas Mohr
M: Jan-Pascal van Best <jvbest@qv3pluto.leidenuniv.nl>
M: Andreas Mohr <100.30936@germany.net>
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER
...
...
@@ -1676,7 +1676,7 @@ P: Peter De Shrijver
M: p2@ace.ulyssis.student.kuleuven.ac.be
P: Mike Phillips
M: mikep@linuxtr.net
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
L: linux-tr@linuxtr.net
W: http://www.linuxtr.net
S: Maintained
...
...
@@ -1783,7 +1783,7 @@ S: Unmaintained
PCNET32 NETWORK DRIVER
P: Thomas Bogendrfer
M: tsbogend@alpha.franken.de
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
PHRAM MTD DRIVER
...
...
@@ -1795,7 +1795,7 @@ S: Maintained
POSIX CLOCKS and TIMERS
P: George Anzinger
M: george@mvista.com
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Supported
PNP SUPPORT
...
...
@@ -1830,7 +1830,7 @@ S: Supported
PRISM54 WIRELESS DRIVER
P: Prism54 Development Team
M: prism54-private@prism54.org
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
W: http://prism54.org
S: Maintained
...
...
@@ -2047,7 +2047,7 @@ SIS 900/7016 FAST ETHERNET DRIVER
P: Daniele Venzano
M: venza@brownhat.org
W: http://www.brownhat.org/sis900.html
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
SIS FRAMEBUFFER DRIVER
...
...
@@ -2106,7 +2106,7 @@ S: Maintained
SONIC NETWORK DRIVER
P: Thomas Bogendoerfer
M: tsbogend@alpha.franken.de
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Maintained
SONY VAIO CONTROL DEVICE DRIVER
...
...
@@ -2163,7 +2163,7 @@ S: Supported
SPX NETWORK LAYER
P: Jay Schulist
M: jschlst@samba.org
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
S: Supported
SRM (Alpha) environment access
...
...
@@ -2242,7 +2242,7 @@ S: Maintained
TOKEN-RING NETWORK DRIVER
P: Mike Phillips
M: mikep@linuxtr.net
L: netdev@
oss.sgi.com
L: netdev@
vger.kernel.org
L: linux-tr@linuxtr.net
W: http://www.linuxtr.net
S: Maintained
...
...
drivers/net/r8169.c
View file @
814d8ffd
...
...
@@ -415,7 +415,7 @@ struct rtl8169_private {
struct
work_struct
task
;
};
MODULE_AUTHOR
(
"Realtek and the Linux r8169 crew <netdev@
oss.sgi.com
>"
);
MODULE_AUTHOR
(
"Realtek and the Linux r8169 crew <netdev@
vger.kernel.org
>"
);
MODULE_DESCRIPTION
(
"RealTek RTL-8169 Gigabit Ethernet driver"
);
module_param_array
(
media
,
int
,
&
num_media
,
0
);
module_param
(
rx_copybreak
,
int
,
0
);
...
...
include/linux/if_tr.h
View file @
814d8ffd
...
...
@@ -19,6 +19,8 @@
#ifndef _LINUX_IF_TR_H
#define _LINUX_IF_TR_H
#include <asm/byteorder.h>
/* For __be16 */
/* IEEE 802.5 Token-Ring magic constants. The frame sizes omit the preamble
and FCS/CRC (frame check sequence). */
#define TR_ALEN 6
/* Octets in one token-ring addr */
...
...
include/linux/sysctl.h
View file @
814d8ffd
...
...
@@ -346,6 +346,7 @@ enum
NET_TCP_MODERATE_RCVBUF
=
106
,
NET_TCP_TSO_WIN_DIVISOR
=
107
,
NET_TCP_BIC_BETA
=
108
,
NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR
=
109
,
};
enum
{
...
...
include/net/ip.h
View file @
814d8ffd
...
...
@@ -163,6 +163,7 @@ DECLARE_SNMP_STAT(struct linux_mib, net_statistics);
extern
int
sysctl_local_port_range
[
2
];
extern
int
sysctl_ip_default_ttl
;
extern
int
sysctl_ip_nonlocal_bind
;
#ifdef CONFIG_INET
/* The function in 2.2 was invalid, producing wrong result for
...
...
net/ipv4/af_inet.c
View file @
814d8ffd
...
...
@@ -1181,6 +1181,7 @@ EXPORT_SYMBOL(inet_stream_connect);
EXPORT_SYMBOL
(
inet_stream_ops
);
EXPORT_SYMBOL
(
inet_unregister_protosw
);
EXPORT_SYMBOL
(
net_statistics
);
EXPORT_SYMBOL
(
sysctl_ip_nonlocal_bind
);
#ifdef INET_REFCNT_DEBUG
EXPORT_SYMBOL
(
inet_sock_nr
);
...
...
net/ipv4/icmp.c
View file @
814d8ffd
...
...
@@ -207,6 +207,7 @@ int sysctl_icmp_ignore_bogus_error_responses;
int
sysctl_icmp_ratelimit
=
1
*
HZ
;
int
sysctl_icmp_ratemask
=
0x1818
;
int
sysctl_icmp_errors_use_inbound_ifaddr
;
/*
* ICMP control array. This specifies what to do with each ICMP.
...
...
@@ -511,8 +512,12 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, u32 info)
*/
saddr
=
iph
->
daddr
;
if
(
!
(
rt
->
rt_flags
&
RTCF_LOCAL
))
saddr
=
0
;
if
(
!
(
rt
->
rt_flags
&
RTCF_LOCAL
))
{
if
(
sysctl_icmp_errors_use_inbound_ifaddr
)
saddr
=
inet_select_addr
(
skb_in
->
dev
,
0
,
RT_SCOPE_LINK
);
else
saddr
=
0
;
}
tos
=
icmp_pointers
[
type
].
error
?
((
iph
->
tos
&
IPTOS_TOS_MASK
)
|
IPTOS_PREC_INTERNETCONTROL
)
:
...
...
net/ipv4/multipath_drr.c
View file @
814d8ffd
...
...
@@ -31,6 +31,7 @@
#include <linux/igmp.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/module.h>
#include <linux/mroute.h>
#include <linux/init.h>
#include <net/ip.h>
...
...
@@ -247,3 +248,4 @@ static void __exit drr_exit(void)
module_init
(
drr_init
);
module_exit
(
drr_exit
);
MODULE_LICENSE
(
"GPL"
);
net/ipv4/multipath_random.c
View file @
814d8ffd
...
...
@@ -31,6 +31,7 @@
#include <linux/igmp.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/module.h>
#include <linux/mroute.h>
#include <linux/init.h>
#include <net/ip.h>
...
...
@@ -126,3 +127,4 @@ static void __exit random_exit(void)
module_init
(
random_init
);
module_exit
(
random_exit
);
MODULE_LICENSE
(
"GPL"
);
net/ipv4/multipath_rr.c
View file @
814d8ffd
...
...
@@ -31,6 +31,7 @@
#include <linux/igmp.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/module.h>
#include <linux/mroute.h>
#include <linux/init.h>
#include <net/ip.h>
...
...
@@ -93,3 +94,4 @@ static void __exit rr_exit(void)
module_init
(
rr_init
);
module_exit
(
rr_exit
);
MODULE_LICENSE
(
"GPL"
);
net/ipv4/multipath_wrandom.c
View file @
814d8ffd
...
...
@@ -31,6 +31,7 @@
#include <linux/igmp.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/module.h>
#include <linux/mroute.h>
#include <linux/init.h>
#include <net/ip.h>
...
...
@@ -342,3 +343,4 @@ static void __exit wrandom_exit(void)
module_init
(
wrandom_init
);
module_exit
(
wrandom_exit
);
MODULE_LICENSE
(
"GPL"
);
net/ipv4/sysctl_net_ipv4.c
View file @
814d8ffd
...
...
@@ -23,6 +23,7 @@ extern int sysctl_ip_nonlocal_bind;
extern
int
sysctl_icmp_echo_ignore_all
;
extern
int
sysctl_icmp_echo_ignore_broadcasts
;
extern
int
sysctl_icmp_ignore_bogus_error_responses
;
extern
int
sysctl_icmp_errors_use_inbound_ifaddr
;
/* From ip_fragment.c */
extern
int
sysctl_ipfrag_low_thresh
;
...
...
@@ -395,6 +396,14 @@ ctl_table ipv4_table[] = {
.
mode
=
0644
,
.
proc_handler
=
&
proc_dointvec
},
{
.
ctl_name
=
NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR
,
.
procname
=
"icmp_errors_use_inbound_ifaddr"
,
.
data
=
&
sysctl_icmp_errors_use_inbound_ifaddr
,
.
maxlen
=
sizeof
(
int
),
.
mode
=
0644
,
.
proc_handler
=
&
proc_dointvec
},
{
.
ctl_name
=
NET_IPV4_ROUTE
,
.
procname
=
"route"
,
...
...
net/ipv4/tcp.c
View file @
814d8ffd
...
...
@@ -2338,7 +2338,7 @@ void __init tcp_init(void)
(
tcp_bhash_size
*
sizeof
(
struct
tcp_bind_hashbucket
));
order
++
)
;
if
(
order
>
4
)
{
if
(
order
>
=
4
)
{
sysctl_local_port_range
[
0
]
=
32768
;
sysctl_local_port_range
[
1
]
=
61000
;
sysctl_tcp_max_tw_buckets
=
180000
;
...
...
net/ipv6/addrconf.c
View file @
814d8ffd
...
...
@@ -372,6 +372,7 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
ndev
->
regen_timer
.
data
=
(
unsigned
long
)
ndev
;
if
((
dev
->
flags
&
IFF_LOOPBACK
)
||
dev
->
type
==
ARPHRD_TUNNEL
||
dev
->
type
==
ARPHRD_NONE
||
dev
->
type
==
ARPHRD_SIT
)
{
printk
(
KERN_INFO
"Disabled Privacy Extensions on device %p(%s)
\n
"
,
...
...
net/ipv6/icmp.c
View file @
814d8ffd
...
...
@@ -277,8 +277,8 @@ void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info,
{
struct
inet6_dev
*
idev
=
NULL
;
struct
ipv6hdr
*
hdr
=
skb
->
nh
.
ipv6h
;
struct
sock
*
sk
=
icmpv6_socket
->
sk
;
struct
ipv6_pinfo
*
np
=
inet6_sk
(
sk
)
;
struct
sock
*
sk
;
struct
ipv6_pinfo
*
np
;
struct
in6_addr
*
saddr
=
NULL
;
struct
dst_entry
*
dst
;
struct
icmp6hdr
tmp_hdr
;
...
...
@@ -358,6 +358,9 @@ void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info,
if
(
icmpv6_xmit_lock
())
return
;
sk
=
icmpv6_socket
->
sk
;
np
=
inet6_sk
(
sk
);
if
(
!
icmpv6_xrlim_allow
(
sk
,
type
,
&
fl
))
goto
out
;
...
...
@@ -423,9 +426,9 @@ void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info,
static
void
icmpv6_echo_reply
(
struct
sk_buff
*
skb
)
{
struct
sock
*
sk
=
icmpv6_socket
->
sk
;
struct
sock
*
sk
;
struct
inet6_dev
*
idev
;
struct
ipv6_pinfo
*
np
=
inet6_sk
(
sk
)
;
struct
ipv6_pinfo
*
np
;
struct
in6_addr
*
saddr
=
NULL
;
struct
icmp6hdr
*
icmph
=
(
struct
icmp6hdr
*
)
skb
->
h
.
raw
;
struct
icmp6hdr
tmp_hdr
;
...
...
@@ -454,6 +457,9 @@ static void icmpv6_echo_reply(struct sk_buff *skb)
if
(
icmpv6_xmit_lock
())
return
;
sk
=
icmpv6_socket
->
sk
;
np
=
inet6_sk
(
sk
);
if
(
!
fl
.
oif
&&
ipv6_addr_is_multicast
(
&
fl
.
fl6_dst
))
fl
.
oif
=
np
->
mcast_oif
;
...
...
net/sched/act_api.c
View file @
814d8ffd
...
...
@@ -881,7 +881,7 @@ static int __init tc_action_init(void)
link_p
[
RTM_GETACTION
-
RTM_BASE
].
dumpit
=
tc_dump_action
;
}
printk
(
"TC classifier action (bugs to netdev@
oss.sgi.com
cc "
printk
(
"TC classifier action (bugs to netdev@
vger.kernel.org
cc "
"hadi@cyberus.ca)
\n
"
);
return
0
;
}
...
...
net/sctp/input.c
View file @
814d8ffd
...
...
@@ -178,6 +178,37 @@ int sctp_rcv(struct sk_buff *skb)
asoc
=
__sctp_rcv_lookup
(
skb
,
&
src
,
&
dest
,
&
transport
);
if
(
!
asoc
)
ep
=
__sctp_rcv_lookup_endpoint
(
&
dest
);
/* Retrieve the common input handling substructure. */
rcvr
=
asoc
?
&
asoc
->
base
:
&
ep
->
base
;
sk
=
rcvr
->
sk
;
/*
* If a frame arrives on an interface and the receiving socket is
* bound to another interface, via SO_BINDTODEVICE, treat it as OOTB
*/
if
(
sk
->
sk_bound_dev_if
&&
(
sk
->
sk_bound_dev_if
!=
af
->
skb_iif
(
skb
)))
{
sock_put
(
sk
);
if
(
asoc
)
{
sctp_association_put
(
asoc
);
asoc
=
NULL
;
}
else
{
sctp_endpoint_put
(
ep
);
ep
=
NULL
;
}
sk
=
sctp_get_ctl_sock
();
ep
=
sctp_sk
(
sk
)
->
ep
;
sctp_endpoint_hold
(
ep
);
sock_hold
(
sk
);
rcvr
=
&
ep
->
base
;
}
if
(
atomic_read
(
&
sk
->
sk_rmem_alloc
)
>=
sk
->
sk_rcvbuf
)
goto
discard_release
;
/*
* RFC 2960, 8.4 - Handle "Out of the blue" Packets.
* An SCTP packet is called an "out of the blue" (OOTB)
...
...
@@ -187,22 +218,12 @@ int sctp_rcv(struct sk_buff *skb)
* packet belongs.
*/
if
(
!
asoc
)
{
ep
=
__sctp_rcv_lookup_endpoint
(
&
dest
);
if
(
sctp_rcv_ootb
(
skb
))
{
SCTP_INC_STATS_BH
(
SCTP_MIB_OUTOFBLUES
);
goto
discard_release
;
}
}
/* Retrieve the common input handling substructure. */
rcvr
=
asoc
?
&
asoc
->
base
:
&
ep
->
base
;
sk
=
rcvr
->
sk
;
if
((
sk
)
&&
(
atomic_read
(
&
sk
->
sk_rmem_alloc
)
>=
sk
->
sk_rcvbuf
))
{
goto
discard_release
;
}
/* SCTP seems to always need a timestamp right now (FIXME) */
if
(
skb
->
stamp
.
tv_sec
==
0
)
{
do_gettimeofday
(
&
skb
->
stamp
);
...
...
@@ -265,13 +286,11 @@ int sctp_rcv(struct sk_buff *skb)
discard_release:
/* Release any structures we may be holding. */
if
(
asoc
)
{
sock_put
(
asoc
->
base
.
sk
);
sock_put
(
sk
);
if
(
asoc
)
sctp_association_put
(
asoc
);
}
else
{
sock_put
(
ep
->
base
.
sk
);
else
sctp_endpoint_put
(
ep
);
}
goto
discard_it
;
}
...
...
net/sctp/ipv6.c
View file @
814d8ffd
...
...
@@ -812,26 +812,23 @@ static int sctp_inet6_bind_verify(struct sctp_sock *opt, union sctp_addr *addr)
if
(
addr
->
sa
.
sa_family
!=
AF_INET6
)
af
=
sctp_get_af_specific
(
addr
->
sa
.
sa_family
);
else
{
struct
sock
*
sk
;
int
type
=
ipv6_addr_type
(
&
addr
->
v6
.
sin6_addr
);
sk
=
sctp_opt2sk
(
opt
);
struct
net_device
*
dev
;
if
(
type
&
IPV6_ADDR_LINKLOCAL
)
{
/* Note: Behavior similar to af_inet6.c:
* 1) Overrides previous bound_dev_if
* 2) Destructive even if bind isn't successful.
*/
if
(
addr
->
v6
.
sin6_scope_id
)
sk
->
sk_bound_dev_if
=
addr
->
v6
.
sin6_scope_id
;
if
(
!
sk
->
sk_bound_dev_if
)
if
(
!
addr
->
v6
.
sin6_scope_id
)
return
0
;
dev
=
dev_get_by_index
(
addr
->
v6
.
sin6_scope_id
);
if
(
!
dev
)
return
0
;
dev_put
(
dev
);
}
af
=
opt
->
pf
->
af
;
}
return
af
->
available
(
addr
,
opt
);
}
/* Verify that the provided sockaddr looks
bi
ndable. Common verification,
/* Verify that the provided sockaddr looks
se
ndable. Common verification,
* has already been taken care of.
*/
static
int
sctp_inet6_send_verify
(
struct
sctp_sock
*
opt
,
union
sctp_addr
*
addr
)
...
...
@@ -842,19 +839,16 @@ static int sctp_inet6_send_verify(struct sctp_sock *opt, union sctp_addr *addr)
if
(
addr
->
sa
.
sa_family
!=
AF_INET6
)
af
=
sctp_get_af_specific
(
addr
->
sa
.
sa_family
);
else
{
struct
sock
*
sk
;
int
type
=
ipv6_addr_type
(
&
addr
->
v6
.
sin6_addr
);
sk
=
sctp_opt2sk
(
opt
);
struct
net_device
*
dev
;
if
(
type
&
IPV6_ADDR_LINKLOCAL
)
{
/* Note: Behavior similar to af_inet6.c:
* 1) Overrides previous bound_dev_if
* 2) Destructive even if bind isn't successful.
*/
if
(
addr
->
v6
.
sin6_scope_id
)
sk
->
sk_bound_dev_if
=
addr
->
v6
.
sin6_scope_id
;
if
(
!
sk
->
sk_bound_dev_if
)
if
(
!
addr
->
v6
.
sin6_scope_id
)
return
0
;
dev
=
dev_get_by_index
(
addr
->
v6
.
sin6_scope_id
);
if
(
!
dev
)
return
0
;
dev_put
(
dev
);
}
af
=
opt
->
pf
->
af
;
}
...
...
net/sctp/proc.c
View file @
814d8ffd
...
...
@@ -132,14 +132,25 @@ void sctp_snmp_proc_exit(void)
static
void
sctp_seq_dump_local_addrs
(
struct
seq_file
*
seq
,
struct
sctp_ep_common
*
epb
)
{
struct
list_head
*
pos
;
struct
sctp_association
*
asoc
;
struct
sctp_sockaddr_entry
*
laddr
;
union
sctp_addr
*
addr
;
struct
sctp_transport
*
peer
;
union
sctp_addr
*
addr
,
*
primary
=
NULL
;
struct
sctp_af
*
af
;
if
(
epb
->
type
==
SCTP_EP_TYPE_ASSOCIATION
)
{
asoc
=
sctp_assoc
(
epb
);
peer
=
asoc
->
peer
.
primary_path
;
primary
=
&
peer
->
saddr
;
}
list_for_each
(
pos
,
&
epb
->
bind_addr
.
address_list
)
{
laddr
=
list_entry
(
pos
,
struct
sctp_sockaddr_entry
,
list
);
addr
=
(
union
sctp_addr
*
)
&
laddr
->
a
;
af
=
sctp_get_af_specific
(
addr
->
sa
.
sa_family
);
if
(
primary
&&
af
->
cmp_addr
(
addr
,
primary
))
{
seq_printf
(
seq
,
"*"
);
}
af
->
seq_dump_addr
(
seq
,
addr
);
}
}
...
...
@@ -149,17 +160,54 @@ static void sctp_seq_dump_remote_addrs(struct seq_file *seq, struct sctp_associa
{
struct
list_head
*
pos
;
struct
sctp_transport
*
transport
;
union
sctp_addr
*
addr
;
union
sctp_addr
*
addr
,
*
primary
;
struct
sctp_af
*
af
;
primary
=
&
(
assoc
->
peer
.
primary_addr
);
list_for_each
(
pos
,
&
assoc
->
peer
.
transport_addr_list
)
{
transport
=
list_entry
(
pos
,
struct
sctp_transport
,
transports
);
addr
=
(
union
sctp_addr
*
)
&
transport
->
ipaddr
;
af
=
sctp_get_af_specific
(
addr
->
sa
.
sa_family
);
if
(
af
->
cmp_addr
(
addr
,
primary
))
{
seq_printf
(
seq
,
"*"
);
}
af
->
seq_dump_addr
(
seq
,
addr
);
}
}
static
void
*
sctp_eps_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
{
if
(
*
pos
>
sctp_ep_hashsize
)
return
NULL
;
if
(
*
pos
<
0
)
*
pos
=
0
;
if
(
*
pos
==
0
)
seq_printf
(
seq
,
" ENDPT SOCK STY SST HBKT LPORT UID INODE LADDRS
\n
"
);
++*
pos
;
return
(
void
*
)
pos
;
}
static
void
sctp_eps_seq_stop
(
struct
seq_file
*
seq
,
void
*
v
)
{
return
;
}
static
void
*
sctp_eps_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
pos
)
{
if
(
*
pos
>
sctp_ep_hashsize
)
return
NULL
;
++*
pos
;
return
pos
;
}
/* Display sctp endpoints (/proc/net/sctp/eps). */
static
int
sctp_eps_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
...
...
@@ -167,38 +215,50 @@ static int sctp_eps_seq_show(struct seq_file *seq, void *v)
struct
sctp_ep_common
*
epb
;
struct
sctp_endpoint
*
ep
;
struct
sock
*
sk
;
int
hash
;
seq_printf
(
seq
,
" ENDPT SOCK STY SST HBKT LPORT LADDRS
\n
"
);
for
(
hash
=
0
;
hash
<
sctp_ep_hashsize
;
hash
++
)
{
head
=
&
sctp_ep_hashtable
[
hash
];
read_lock
(
&
head
->
lock
);
for
(
epb
=
head
->
chain
;
epb
;
epb
=
epb
->
next
)
{
ep
=
sctp_ep
(
epb
);
sk
=
epb
->
sk
;
seq_printf
(
seq
,
"%8p %8p %-3d %-3d %-4d %-5d "
,
ep
,
sk
,
sctp_sk
(
sk
)
->
type
,
sk
->
sk_state
,
hash
,
epb
->
bind_addr
.
port
);
sctp_seq_dump_local_addrs
(
seq
,
epb
);
seq_printf
(
seq
,
"
\n
"
);
}
read_unlock
(
&
head
->
lock
);
int
hash
=
*
(
int
*
)
v
;
if
(
hash
>
sctp_ep_hashsize
)
return
-
ENOMEM
;
head
=
&
sctp_ep_hashtable
[
hash
-
1
];
sctp_local_bh_disable
();
read_lock
(
&
head
->
lock
);
for
(
epb
=
head
->
chain
;
epb
;
epb
=
epb
->
next
)
{
ep
=
sctp_ep
(
epb
);
sk
=
epb
->
sk
;
seq_printf
(
seq
,
"%8p %8p %-3d %-3d %-4d %-5d %5d %5lu "
,
ep
,
sk
,
sctp_sk
(
sk
)
->
type
,
sk
->
sk_state
,
hash
-
1
,
epb
->
bind_addr
.
port
,
sock_i_uid
(
sk
),
sock_i_ino
(
sk
));
sctp_seq_dump_local_addrs
(
seq
,
epb
);
seq_printf
(
seq
,
"
\n
"
);
}
read_unlock
(
&
head
->
lock
);
sctp_local_bh_enable
();
return
0
;
}
static
struct
seq_operations
sctp_eps_ops
=
{
.
start
=
sctp_eps_seq_start
,
.
next
=
sctp_eps_seq_next
,
.
stop
=
sctp_eps_seq_stop
,
.
show
=
sctp_eps_seq_show
,
};
/* Initialize the seq file operations for 'eps' object. */
static
int
sctp_eps_seq_open
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
s
ingle_open
(
file
,
sctp_eps_seq_show
,
NULL
);
return
s
eq_open
(
file
,
&
sctp_eps_ops
);
}
static
struct
file_operations
sctp_eps_seq_fops
=
{
.
open
=
sctp_eps_seq_open
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
s
ingle
_release
,
.
release
=
s
eq
_release
,
};
/* Set up the proc fs entry for 'eps' object. */
...
...
@@ -221,6 +281,40 @@ void sctp_eps_proc_exit(void)
remove_proc_entry
(
"eps"
,
proc_net_sctp
);
}
static
void
*
sctp_assocs_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
{
if
(
*
pos
>
sctp_assoc_hashsize
)
return
NULL
;
if
(
*
pos
<
0
)
*
pos
=
0
;
if
(
*
pos
==
0
)
seq_printf
(
seq
,
" ASSOC SOCK STY SST ST HBKT ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT "
"RPORT LADDRS <-> RADDRS
\n
"
);
++*
pos
;
return
(
void
*
)
pos
;
}
static
void
sctp_assocs_seq_stop
(
struct
seq_file
*
seq
,
void
*
v
)
{
return
;
}
static
void
*
sctp_assocs_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
pos
)
{
if
(
*
pos
>
sctp_assoc_hashsize
)
return
NULL
;
++*
pos
;
return
pos
;
}
/* Display sctp associations (/proc/net/sctp/assocs). */
static
int
sctp_assocs_seq_show
(
struct
seq_file
*
seq
,
void
*
v
)
{
...
...
@@ -228,43 +322,57 @@ static int sctp_assocs_seq_show(struct seq_file *seq, void *v)
struct
sctp_ep_common
*
epb
;
struct
sctp_association
*
assoc
;
struct
sock
*
sk
;
int
hash
;
seq_printf
(
seq
,
" ASSOC SOCK STY SST ST HBKT LPORT RPORT "
"LADDRS <-> RADDRS
\n
"
);
for
(
hash
=
0
;
hash
<
sctp_assoc_hashsize
;
hash
++
)
{
head
=
&
sctp_assoc_hashtable
[
hash
];
read_lock
(
&
head
->
lock
);
for
(
epb
=
head
->
chain
;
epb
;
epb
=
epb
->
next
)
{
assoc
=
sctp_assoc
(
epb
);
sk
=
epb
->
sk
;
seq_printf
(
seq
,
"%8p %8p %-3d %-3d %-2d %-4d %-5d %-5d "
,
assoc
,
sk
,
sctp_sk
(
sk
)
->
type
,
sk
->
sk_state
,
assoc
->
state
,
hash
,
epb
->
bind_addr
.
port
,
assoc
->
peer
.
port
);
sctp_seq_dump_local_addrs
(
seq
,
epb
);
seq_printf
(
seq
,
"<-> "
);
sctp_seq_dump_remote_addrs
(
seq
,
assoc
);
seq_printf
(
seq
,
"
\n
"
);
}
read_unlock
(
&
head
->
lock
);
int
hash
=
*
(
int
*
)
v
;
if
(
hash
>
sctp_assoc_hashsize
)
return
-
ENOMEM
;
head
=
&
sctp_assoc_hashtable
[
hash
-
1
];
sctp_local_bh_disable
();
read_lock
(
&
head
->
lock
);
for
(
epb
=
head
->
chain
;
epb
;
epb
=
epb
->
next
)
{
assoc
=
sctp_assoc
(
epb
);
sk
=
epb
->
sk
;
seq_printf
(
seq
,
"%8p %8p %-3d %-3d %-2d %-4d %4d %8d %8d %7d %5lu %-5d %5d "
,
assoc
,
sk
,
sctp_sk
(
sk
)
->
type
,
sk
->
sk_state
,
assoc
->
state
,
hash
-
1
,
assoc
->
assoc_id
,
(
sk
->
sk_rcvbuf
-
assoc
->
rwnd
),
assoc
->
sndbuf_used
,
sock_i_uid
(
sk
),
sock_i_ino
(
sk
),
epb
->
bind_addr
.
port
,
assoc
->
peer
.
port
);
seq_printf
(
seq
,
" "
);
sctp_seq_dump_local_addrs
(
seq
,
epb
);
seq_printf
(
seq
,
"<-> "
);
sctp_seq_dump_remote_addrs
(
seq
,
assoc
);
seq_printf
(
seq
,
"
\n
"
);
}
read_unlock
(
&
head
->
lock
);
sctp_local_bh_enable
();
return
0
;
}
static
struct
seq_operations
sctp_assoc_ops
=
{
.
start
=
sctp_assocs_seq_start
,
.
next
=
sctp_assocs_seq_next
,
.
stop
=
sctp_assocs_seq_stop
,
.
show
=
sctp_assocs_seq_show
,
};
/* Initialize the seq file operations for 'assocs' object. */
static
int
sctp_assocs_seq_open
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
s
ingle_open
(
file
,
sctp_assocs_seq_show
,
NULL
);
return
s
eq_open
(
file
,
&
sctp_assoc_ops
);
}
static
struct
file_operations
sctp_assocs_seq_fops
=
{
.
open
=
sctp_assocs_seq_open
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
s
ingle
_release
,
.
release
=
s
eq
_release
,
};
/* Set up the proc fs entry for 'assocs' object. */
...
...
net/sctp/protocol.c
View file @
814d8ffd
...
...
@@ -378,10 +378,13 @@ static int sctp_v4_available(union sctp_addr *addr, struct sctp_sock *sp)
{
int
ret
=
inet_addr_type
(
addr
->
v4
.
sin_addr
.
s_addr
);
/* FIXME: ip_nonlocal_bind sysctl support. */
if
(
addr
->
v4
.
sin_addr
.
s_addr
!=
INADDR_ANY
&&
ret
!=
RTN_LOCAL
)
if
(
addr
->
v4
.
sin_addr
.
s_addr
!=
INADDR_ANY
&&
ret
!=
RTN_LOCAL
&&
!
sp
->
inet
.
freebind
&&
!
sysctl_ip_nonlocal_bind
)
return
0
;
return
1
;
}
...
...
net/sctp/socket.c
View file @
814d8ffd
...
...
@@ -4686,6 +4686,7 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
struct
sctp_endpoint
*
newep
=
newsp
->
ep
;
struct
sk_buff
*
skb
,
*
tmp
;
struct
sctp_ulpevent
*
event
;
int
flags
=
0
;
/* Migrate socket buffer sizes and all the socket level options to the
* new socket.
...
...
@@ -4707,6 +4708,17 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
sctp_sk
(
newsk
)
->
bind_hash
=
pp
;
inet_sk
(
newsk
)
->
num
=
inet_sk
(
oldsk
)
->
num
;
/* Copy the bind_addr list from the original endpoint to the new
* endpoint so that we can handle restarts properly
*/
if
(
assoc
->
peer
.
ipv4_address
)
flags
|=
SCTP_ADDR4_PEERSUPP
;
if
(
assoc
->
peer
.
ipv6_address
)
flags
|=
SCTP_ADDR6_PEERSUPP
;
sctp_bind_addr_copy
(
&
newsp
->
ep
->
base
.
bind_addr
,
&
oldsp
->
ep
->
base
.
bind_addr
,
SCTP_SCOPE_GLOBAL
,
GFP_KERNEL
,
flags
);
/* Move any messages in the old socket's receive queue that are for the
* peeled off association to the new socket's receive queue.
*/
...
...
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