SCTP: change sctp_ctl_sock_init() to try IPv4 if IPv6 fails

Change sctp_ctl_sock_init() to try IPv4 if IPv6 socket registration
fails.  Required if the IPv6 module is loaded with "disable=1", else
SCTP will fail to load.

Signed-off-by: Brian Haley <brian.haley@hp.com>
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Brian Haley 2009-03-04 03:20:26 -08:00 коммит произвёл David S. Miller
Родитель fe7ca2e1e8
Коммит fb13d9f9e4
1 изменённых файлов: 8 добавлений и 3 удалений

Просмотреть файл

@ -717,15 +717,20 @@ static int sctp_inetaddr_event(struct notifier_block *this, unsigned long ev,
static int sctp_ctl_sock_init(void) static int sctp_ctl_sock_init(void)
{ {
int err; int err;
sa_family_t family; sa_family_t family = PF_INET;
if (sctp_get_pf_specific(PF_INET6)) if (sctp_get_pf_specific(PF_INET6))
family = PF_INET6; family = PF_INET6;
else
family = PF_INET;
err = inet_ctl_sock_create(&sctp_ctl_sock, family, err = inet_ctl_sock_create(&sctp_ctl_sock, family,
SOCK_SEQPACKET, IPPROTO_SCTP, &init_net); SOCK_SEQPACKET, IPPROTO_SCTP, &init_net);
/* If IPv6 socket could not be created, try the IPv4 socket */
if (err < 0 && family == PF_INET6)
err = inet_ctl_sock_create(&sctp_ctl_sock, AF_INET,
SOCK_SEQPACKET, IPPROTO_SCTP,
&init_net);
if (err < 0) { if (err < 0) {
printk(KERN_ERR printk(KERN_ERR
"SCTP: Failed to create the SCTP control socket.\n"); "SCTP: Failed to create the SCTP control socket.\n");