Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
814d8ffd
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
814d8ffd
编写于
6月 13, 2005
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
上级
386bfcf5
1c2fb7f9
变更
22
隐藏空白更改
内联
并排
Showing
22 changed file
with
285 addition
and
115 deletion
+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
未找到文件。
Documentation/networking/vortex.txt
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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.
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录