anchor.diff:  	  role,		% asp | sgp
   	  asp_state,	% down, inactive, active
   	  t_ack,
  -	  user_pid,
  -	  user_ref,
  +	  user_fun,
  +	  user_args,
   	  sctp_remote_ip,
   	  sctp_remote_port,
   	  sctp_local_port,
  
positive.code: 	{ok, StateName, StateData}.
  
  % Helper function to send data to the SCTP peer
  send_sctp_to_peer(LoopDat, PktData) when is_binary(PktData) ->
  	#m3ua_state{sctp_sock = Sock, sctp_assoc_id = Assoc} = LoopDat,
  	SndRcvInfo = #sctp_sndrcvinfo{assoc_id = Assoc, ppid = 3, stream = 0},
  	gen_sctp:send(Sock, SndRcvInfo, PktData);
  
  % same as above, but for un-encoded #m3ua_msg{}
  send_sctp_to_peer(LoopDat, M3uaMsg) when is_record(M3uaMsg, m3ua_msg) ->
  	MsgBin = m3ua_codec:encode_m3ua_msg(M3uaMsg),
  	send_sctp_to_peer(LoopDat, MsgBin).
  
  
  send_prim_to_user(LoopDat, Prim) when is_record(LoopDat, m3ua_state), is_record(Prim, primitive) ->
  	#m3ua_state{user_pid = Pid, user_ref = Ref} = LoopDat,
  	Pid ! {m3ua, Ref, Prim}.
  
  % helper to send one of the up/down/act/inact management messages + start timer
  send_msg_start_tack(LoopDat, State, MsgClass, MsgType, Params) ->
  
negative.code: 		     msg_type = ?M3UA_MSGT_XFR_DATA, payload = Params}, LoopDat) ->
  	% Send primitive to the user
  	Mtp3 = proplists:get_value(?M3UA_IEI_PROTOCOL_DATA, Params),
  	send_prim_to_user(LoopDat, osmo_util:make_prim('MTP','TRANSFER',indication,[Mtp3])),
  	{next_state, asp_active, LoopDat};
  asp_active(#m3ua_msg{msg_class = ?M3UA_MSGC_ASPTM,
  		     msg_type = ?M3UA_MSGT_ASPTM_ASPIA_ACK}, LoopDat) ->
  