sctp_core: respect local IP of sigtran peer

when the user specifies an IP in the local #sigtran_peer, we have
to bind the socket explicitly to that IP and not let the kernel choose.
diff --git a/src/sctp_core.erl b/src/sctp_core.erl
index 291746b..ca3217d 100644
--- a/src/sctp_core.erl
+++ b/src/sctp_core.erl
@@ -60,7 +60,6 @@
 	  user_pid,
 	  sctp_remote_ip,
 	  sctp_remote_port,
-	  sctp_local_port,
 	  sctp_sock,
 	  sctp_assoc_id,
 	  module,	% callback module
@@ -85,18 +84,20 @@
 			reconnect_sctp(L)
 	end.
 
+build_openopt({sctp_local_port, Port}) ->
+	{port, Port};
+build_openopt({sctp_local_ip, Ip}) ->
+	{ip, Ip};
+build_openopt(_) ->
+	[].
+
 init(InitOpts) ->
 	OpenOptsBase = [{active, once}, {reuseaddr, true}],
 	Module = proplists:get_value(module, InitOpts),
 	ModuleArgs = proplists:get_value(module_args, InitOpts),
-	LocalPort = proplists:get_value(sctp_local_port, InitOpts),
 	Role = proplists:get_value(sctp_role, InitOpts),
-	case LocalPort of
-		undefined ->
-			OpenOpts = OpenOptsBase;
-		_ ->
-			OpenOpts = OpenOptsBase ++ [{port, LocalPort}]
-	end,
+	OpenOpts = OpenOptsBase ++ lists:map(fun build_openopt/1, InitOpts),
+	io:format("sctp_open(~p)~n", [OpenOpts]),
 	{ok, SctpSock} = gen_sctp:open(OpenOpts),
 	case Module:init(ModuleArgs) of
 		{ok, ExtState} ->
@@ -104,8 +105,7 @@
 					user_pid = proplists:get_value(user_pid, InitOpts),
 					ext_state = ExtState, module = Module,
 					sctp_remote_ip = proplists:get_value(sctp_remote_ip, InitOpts),
-					sctp_remote_port = proplists:get_value(sctp_remote_port, InitOpts),
-					sctp_local_port = LocalPort},
+					sctp_remote_port = proplists:get_value(sctp_remote_port, InitOpts)},
 			case Role of
 				active ->
 					gen_fsm:send_event(self(), osmo_util:make_prim('M','SCTP_ESTABLISH',request));
@@ -201,7 +201,6 @@
 					NewState = idle
 			end;
 		SacState == addr_unreachable;
-		SacState == shutdown_comp;
 		SacState == cant_assoc	->
 			case LoopDat#sctp_state.role of
 				active ->
@@ -210,6 +209,10 @@
 				_ ->
 					NewState = idle
 			end,
+			LoopDat2 = LoopDat;
+		SacState == shutdown_comp ->
+			% we already started reconnect in shutdown_event
+			NewState = State,
 			LoopDat2 = LoopDat
 	end,
 	inet:setopts(Socket, [{active, once}]),