Skip to contentSkip to conversation

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

PATCH Applied Brian Haley 2 participants 2 messages Mar 4, 2009

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 2/2 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.

---
 net/sctp/protocol.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)
net/sctp/protocol.c +8 -3
index c1e316e..e8c6287 100644
@@ -692,15 +692,20 @@ static int sctp_inetaddr_event(struct notifier_block *this, unsigned long ev,
 static int sctp_ctl_sock_init(void)
 {
 	int err;
-	sa_family_t family;
+	sa_family_t family = PF_INET;
 
 	if (sctp_get_pf_specific(PF_INET6))
 		family = PF_INET6;
-	else
-		family = PF_INET;
 
 	err = inet_ctl_sock_create(&sctp_ctl_sock, family,
 				   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) {
 		printk(KERN_ERR
 		       "SCTP: Failed to create the SCTP control socket.\n");
Signature · 1 line
1.5.4.3