module IPL4_GSMTAP_CtrlFunct {

  import from GSMTAP_PortType all;
  import from IPL4asp_Types all;

  external function f_IPL4_listen(
    inout GSMTAP_PT portRef,
    in HostName locName,
    in PortNumber locPort,
    in ProtoTuple proto,
    in OptionList options := {}
  ) return Result;

  external function f_IPL4_connect(
    inout GSMTAP_PT portRef,
    in HostName remName,
    in PortNumber remPort,
    in HostName locName,
    in PortNumber locPort,
    in ConnectionId connId,
    in ProtoTuple proto,
    in OptionList options := {}
  ) return Result;

  external function f_IPL4_close(
    inout GSMTAP_PT portRef,
    in ConnectionId id,
    in ProtoTuple proto := { unspecified := {} }
  ) return Result;

  external function f_IPL4_setUserData(
    inout GSMTAP_PT portRef,
    in ConnectionId id,
    in UserData userData
  ) return Result;

  external function f_IPL4_getUserData(
    inout GSMTAP_PT portRef,
    in ConnectionId id,
    out UserData userData
  ) return Result;

}

