[erlang-bugs] : [BUG] SCTP_ADDR_CONFIRMED event not handled

Raimo Niskanen <>
Fri May 9 16:45:22 CEST 2008


On Tue, Apr 15, 2008 at 01:20:51PM +0200, Balint Reczey wrote:
> Hi,
> 
> Sergei Golovan updated the patch, now it builds with older lksctp-tools
> without SCTP_ADDR_CONFIRMED definition, too:
> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=475540#10
> 
> Regards,
> Balint
> 

I can confirm that his patch looks almost exactly as
what I have running in our daily builds now, except that
I do not have to patch erts/config.h.in since it is an
autoconf build result here, and I did not bother to
conditionalize the definition and initialization of
am_addr_confirmed in erts/emulator/drivers/common/inet_drv.c,
which should not matter at all.



Patch by Balint Reczey <> adds SCTP_ADDR_CONFIRMED
SCTP_PEER_ADDR_CHANGE event to Erlang API.

Patch is modified by Sergei Golovan to work only with older SCTP also.

--- erlang-12.b.2.orig/bootstrap/lib/kernel/include/inet_sctp.hrl
+++ erlang-12.b.2/bootstrap/lib/kernel/include/inet_sctp.hrl
@@ -73,7 +73,7 @@
 %% sctp_paddr_change: Peer address is a list. Possible "state" values:
 %%			addr_available, addr_unreachable,
 %%			addr_removed,   addr_added,
-%%			addr_made_prim
+%%			addr_made_prim, addr_confirmed
 -record(sctp_paddr_change,
 	{
 	  addr	    = [0,0,0,0],
--- erlang-12.b.2.orig/erts/config.h.in
+++ erlang-12.b.2/erts/config.h.in
@@ -160,6 +160,10 @@
 /* Define to 1 if you have the declaration of `SCTP_UNORDERED', and to 0 if
    you don't. */
 #undef HAVE_DECL_SCTP_UNORDERED
+
+/* Define to 1 if you have the declaration of `SCTP_ADDR_CONFIRMED', and to 0 if
+   you don't. */
+#undef HAVE_DECL_SCTP_ADDR_CONFIRMED
 
 /* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
    */
--- erlang-12.b.2.orig/erts/configure.in
+++ erlang-12.b.2/erts/configure.in
@@ -1115,7 +1115,7 @@
 	 #endif
 	])
     AC_CHECK_DECLS([SCTP_UNORDERED, SCTP_ADDR_OVER, SCTP_ABORT,
-                    SCTP_EOF, SCTP_SENDALL], [], [],
+                    SCTP_EOF, SCTP_SENDALL, SCTP_ADDR_CONFIRMED], [], [],
         [#if HAVE_SYS_SOCKET_H
          #include <sys/socket.h>
          #endif
--- erlang-12.b.2.orig/erts/emulator/drivers/common/inet_drv.c
+++ erlang-12.b.2/erts/emulator/drivers/common/inet_drv.c
@@ -2752,7 +2752,10 @@
     /* For #sctp_paddr_change{}: */
     am_addr_available,                 am_addr_unreachable, 
     am_addr_removed,                   am_addr_added,
-    am_addr_made_prim,
+    am_addr_made_prim,
+#if HAVE_DECL_SCTP_ADDR_CONFIRMED
+    am_addr_confirmed,
+#endif
     
     /* For #sctp_remote_error{}: */
     am_short_recv,                     am_wrong_anc_data,
@@ -3007,6 +3010,11 @@
 	    case SCTP_ADDR_MADE_PRIM:
 		i = LOAD_ATOM (spec, i, am_addr_made_prim);
 		break;
+#if HAVE_DECL_SCTP_ADDR_CONFIRMED
+	    case SCTP_ADDR_CONFIRMED:
+		i = LOAD_ATOM (spec, i, am_addr_confirmed);
+		break;
+#endif
 	    default:
 		ASSERT(0);
 	    }
@@ -3840,6 +3848,9 @@
     INIT_ATOM(addr_removed);
     INIT_ATOM(addr_added);
     INIT_ATOM(addr_made_prim);
+#if HAVE_DECL_SCTP_ADDR_CONFIRMED
+    INIT_ATOM(addr_confirmed);
+#endif
     
     INIT_ATOM(short_recv);
     INIT_ATOM(wrong_anc_data);
--- erlang-12.b.2.orig/lib/kernel/include/inet_sctp.hrl
+++ erlang-12.b.2/lib/kernel/include/inet_sctp.hrl
@@ -73,7 +73,7 @@
 %% sctp_paddr_change: Peer address is a list. Possible "state" values:
 %%			addr_available, addr_unreachable,
 %%			addr_removed,   addr_added,
-%%			addr_made_prim
+%%			addr_made_prim, addr_confirmed
 -record(sctp_paddr_change,
 	{
 	  addr	    = [0,0,0,0],

-- 

/ Raimo Niskanen, Erlang/OTP, Ericsson AB



More information about the erlang-bugs mailing list