re-structure SS7 code and MGW NAT code into separate modules
This repository now only contains the SS7 code
diff --git a/include/bssmap.hrl b/include/bssmap.hrl
new file mode 100644
index 0000000..9149e40
--- /dev/null
+++ b/include/bssmap.hrl
@@ -0,0 +1,263 @@
+% From libosmocore gsm_08_08.h
+
+% this is from GSM 03.03 CGI but is copied in GSM 08.08
+% in § 3.2.2.27 for Cell Identifier List
+-define(CELL_ID_WHOLE_GLOBAL, 0).
+-define(CELL_ID_LAC_AND_CI, 1).
+-define(CELL_ID_CI, 2).
+-define(CELL_ID_NO_CELL, 3).
+-define(CELL_ID_LAI_AND_LAC, 4).
+-define(CELL_ID_LAC, 5).
+-define(CELL_ID_BSS, 6).
+-define(CELL_ID_UTRAN_PLMN_LAC_RNC, 8).
+-define(CELL_ID_UTRAN_RNC, 9).
+-define(CELL_ID_UTRAN_LAC_RNC, 10).
+
+% GSM 08.06 § 6.3
+-define(BSSAP_MSG_BSS_MANAGEMENT, 16#0).
+-define(BSSAP_MSG_DTAP, 16#1).
+
+% enum BSSMAP_MSG_TYPE {
+-define(BSSMAP_MSG_RESERVED_0, 0).
+% ASSIGNMENT MESSAGES
+-define(BSSMAP_MSG_ASS_RQST, 1).
+-define(BSSMAP_MSG_ASS_COMPL, 2).
+-define(BSSMAP_MSG_ASS_FAILURE, 3).
+% HANDOVER MESSAGES
+-define(BSSMAP_MSG_HO_REQ, 16).
+-define(BSSMAP_MSG_HO_REQUIRED, 17).
+-define(BSSMAP_MSG_HO_REQ_ACK, 18).
+-define(BSSMAP_MSG_HO_CMD, 19).
+-define(BSSMAP_MSG_HO_COMPL, 20).
+-define(BSSMAP_MSG_HO_SUCCEEDED, 21).
+-define(BSSMAP_MSG_HO_FAILURE, 22).
+-define(BSSMAP_MSG_HO_PERFORMED, 23).
+-define(BSSMAP_MSG_HO_CAND_ENQ, 24).
+-define(BSSMAP_MSG_HO_CAND_RESP, 25).
+-define(BSSMAP_MSG_HO_REQUIRED_REJ, 26).
+-define(BSSMAP_MSG_HO_DETECT, 27).
+% RELEASE MESSAGES
+-define(BSSMAP_MSG_CLEAR_CMD, 32).
+-define(BSSMAP_MSG_CLEAR_COMPL, 33).
+-define(BSSMAP_MSG_CLEAR_RQST, 34).
+-define(BSSMAP_MSG_RESERVED_1, 35).
+-define(BSSMAP_MSG_RESERVED_2, 36).
+-define(BSSMAP_MSG_SAPI_N_REJ, 37).
+-define(BSSMAP_MSG_CONFUSION, 38).
+% OTHER CONNECTION RELATED MESSAGES
+-define(BSSMAP_MSG_SUSPEND, 40).
+-define(BSSMAP_MSG_RESUME, 41).
+-define(BSSMAP_MSG_CONN_ORIENT_INFO, 42).
+-define(BSSMAP_MSG_PERFORM_LOC_RQST, 43).
+-define(BSSMAP_MSG_LSA_INFORMATION, 44).
+-define(BSSMAP_MSG_PERFORM_LOC_RESPONSE, 45).
+-define(BSSMAP_MSG_PERFORM_LOC_ABORT, 46).
+-define(BSSMAP_MSG_COMMON_ID, 47).
+% GENERAL MESSAGES
+-define(BSSMAP_MSG_RESET, 48).
+-define(BSSMAP_MSG_RESET_ACK, 49).
+-define(BSSMAP_MSG_OVERLOAD, 50).
+-define(BSSMAP_MSG_RESERVED_3, 51).
+-define(BSSMAP_MSG_RESET_CIRC, 52).
+-define(BSSMAP_MSG_RESET_CIRC_ACK, 53).
+-define(BSSMAP_MSG_MSC_INVOKE_TRACE, 54).
+-define(BSSMAP_MSG_BSS_INVOKE_TRACE, 55).
+-define(BSSMAP_MSG_CONN_LESS_INFO, 58).
+% TERRESTRIAL RESOURCE MESSAGES
+-define(BSSMAP_MSG_BLOCK, 64).
+-define(BSSMAP_MSG_BLOCKING_ACK, 65).
+-define(BSSMAP_MSG_UNBLOCK, 66).
+-define(BSSMAP_MSG_UNBLOCKING_ACK, 67).
+-define(BSSMAP_MSG_CIRC_GROUP_BLOCK, 68).
+-define(BSSMAP_MSG_CIRC_GROUP_BLOCKING_ACK, 69).
+-define(BSSMAP_MSG_CIRC_GROUP_UNBLOCK, 70).
+-define(BSSMAP_MSG_CIRC_GROUP_UNBLOCKING_ACK, 71).
+-define(BSSMAP_MSG_UNEQUIPPED_CIRCUIT, 72).
+-define(BSSMAP_MSG_CHANGE_CIRCUIT, 78).
+-define(BSSMAP_MSG_CHANGE_CIRCUIT_ACK, 79).
+% RADIO RESOURCE MESSAGES
+-define(BSSMAP_MSG_RESOURCE_RQST, 80).
+-define(BSSMAP_MSG_RESOURCE_INDICATION, 81).
+-define(BSSMAP_MSG_PAGING, 82).
+-define(BSSMAP_MSG_CIPHER_MODE_CMD, 83).
+-define(BSSMAP_MSG_CLASSMARK_UPDATE, 84).
+-define(BSSMAP_MSG_CIPHER_MODE_COMPL, 85).
+-define(BSSMAP_MSG_QUEUING_INDICATION, 86).
+-define(BSSMAP_MSG_COMPL_LAYER_3, 87).
+-define(BSSMAP_MSG_CLASSMARK_RQST, 88).
+-define(BSSMAP_MSG_CIPHER_MODE_REJ, 89).
+-define(BSSMAP_MSG_LOAD_INDICATION, 90).
+% VGCS/VBS
+-define(BSSMAP_MSG_VGCS_VBS_SETUP, 4).
+-define(BSSMAP_MSG_VGCS_VBS_SETUP_ACK, 5).
+-define(BSSMAP_MSG_VGCS_VBS_SETUP_REFUSE, 6).
+-define(BSSMAP_MSG_VGCS_VBS_ASS_RQST, 7).
+-define(BSSMAP_MSG_VGCS_VBS_ASS_RESULT, 28).
+-define(BSSMAP_MSG_VGCS_VBS_ASS_FAILURE, 29).
+-define(BSSMAP_MSG_VGCS_VBS_QUEUING_INDICATION, 30).
+-define(BSSMAP_MSG_UPLINK_RQST, 31).
+-define(BSSMAP_MSG_UPLINK_RQST_ACK, 39).
+-define(BSSMAP_MSG_UPLINK_RQST_CONFIRMATION, 73).
+-define(BSSMAP_MSG_UPLINK_RELEASE_INDICATION, 74).
+-define(BSSMAP_MSG_UPLINK_REJ_CMD, 75).
+-define(BSSMAP_MSG_UPLINK_RELEASE_CMD, 76).
+-define(BSSMAP_MSG_UPLINK_SEIZED_CMD, 77).
+
+% enum BSSMAP_IE_CODING {
+-define(BSSMAP_IE_CIRC_ID_CODE, 1). % TV16
+%-define(BSSMAP_IE_RESERVED_0, 2).
+-define(BSSMAP_IE_RES_AVAIL, 3). % TVf
+-define(BSSMAP_IE_CAUSE, 4). % TLV
+-define(BSSMAP_IE_CELL_ID, 5). % TLV
+-define(BSSMAP_IE_PRIORITY, 6). % TLV
+-define(BSSMAP_IE_L3_HDR_INFO, 7). % TLV
+-define(BSSMAP_IE_IMSI, 8). % TLV
+-define(BSSMAP_IE_TMSI, 9). % TLV
+-define(BSSMAP_IE_ENCR_INFO, 10). % TLV
+-define(BSSMAP_IE_CHANNEL_TYPE, 11). % TLV
+-define(BSSMAP_IE_PERIODICITY, 12). % TV
+-define(BSSMAP_IE_EXTD_RES_IND, 13). % TV
+-define(BSSMAP_IE_NUMBER_OF_MSS, 14). % TV
+%-define(BSSMAP_IE_RESERVED_1, 15).
+%-define(BSSMAP_IE_RESERVED_2, 16).
+%-define(BSSMAP_IE_RESERVED_3, 17).
+-define(BSSMAP_IE_CM_INFO_T2, 18). % TLV
+-define(BSSMAP_IE_CM_INFO_T3, 19). % TLV
+-define(BSSMAP_IE_INTERF_BAND_TO_USE, 20). % TV
+-define(BSSMAP_IE_RR_CAUSE, 21). % TV
+%-define(BSSMAP_IE_RESERVED_4, 22).
+-define(BSSMAP_IE_L3_INFO, 23). % TLV
+-define(BSSMAP_IE_DLCI, 24). % TV
+-define(BSSMAP_IE_DOWNLINK_DTX_FLAG, 25). % TV
+-define(BSSMAP_IE_CELL_ID_LIST, 26). % TLV
+-define(BSSMAP_IE_RESPONSE_RQST, 27). % TV
+-define(BSSMAP_IE_RES_IND_METHOD, 28). % TV
+-define(BSSMAP_IE_CM_INFO_T1, 29). % TV
+-define(BSSMAP_IE_CIRC_ID_CODE_LIST, 30). % TLV
+-define(BSSMAP_IE_DIAGNOSTIC, 31). % TLV
+-define(BSSMAP_IE_L3_MSG_CONTENTS, 32). % TLV
+-define(BSSMAP_IE_CHOSEN_CHANNEL, 33). % TV
+-define(BSSMAP_IE_TOT_RES_ACCESS, 34). % TVf
+-define(BSSMAP_IE_CIPH_RESP_MODE, 35). % TV
+-define(BSSMAP_IE_CHANNEL_NEEDED, 36). % TV
+-define(BSSMAP_IE_TRACE_TYPE, 37). % TV
+-define(BSSMAP_IE_TRIGGERID, 38). % TLV
+-define(BSSMAP_IE_TRACE_REFERENCE, 39). % TV
+-define(BSSMAP_IE_TRANSACTIONID, 40). % TLV
+-define(BSSMAP_IE_MOBILE_IDENTITY, 41). % TLV
+-define(BSSMAP_IE_OMCID, 42). % TLV
+-define(BSSMAP_IE_FORWARD_INDICATOR, 43). % TV
+-define(BSSMAP_IE_CHOSEN_ENCR_ALG, 44). % TV
+-define(BSSMAP_IE_CIRCUIT_POOL, 45). % TV
+-define(BSSMAP_IE_CIRCUIT_POOL_LIST, 46). % TLV
+-define(BSSMAP_IE_TIME_INDICATION, 47). % TV
+-define(BSSMAP_IE_RESOURCE_SITUATION, 48). % TLV
+-define(BSSMAP_IE_CUR_CHAN_TYPE_1, 49). % TV
+-define(BSSMAP_IE_QUEUEING_IND, 50). % TV
+-define(BSSMAP_IE_SPEECH_VERSION, 64). % TV
+-define(BSSMAP_IE_ASS_REQUIREMENT, 51). % TV
+-define(BSSMAP_IE_TALKER_FLAG, 53). % T
+-define(BSSMAP_IE_CONN_REL_RQSTED, 54). % T
+-define(BSSMAP_IE_GROUP_CALL_REFERENCE, 55). % TLV
+-define(BSSMAP_IE_EMLPP_PRIORITY, 56). % TV
+-define(BSSMAP_IE_CONFIG_EVO_INDI, 57). % TV
+-define(BSSMAP_IE_OLD_TO_NEW_BSS_INFO, 58). % TLV
+-define(BSSMAP_IE_LSA_IDENTIFIER, 59). % TLV
+-define(BSSMAP_IE_LSA_IDENTIFIER_LIST, 60). % TLV
+-define(BSSMAP_IE_LSA_INFORMATION, 61). % TLV
+-define(BSSMAP_IE_LCS_QOS, 62). % TLV
+-define(BSSMAP_IE_LSA_ACCESS_CTRL_SUPPR, 63). % TV
+-define(BSSMAP_IE_LCS_PRIORITY, 67). % TLV
+-define(BSSMAP_IE_LOCATION_TYPE, 68). % TLV
+-define(BSSMAP_IE_LOCATION_ESTIMATE, 69). % TLV
+-define(BSSMAP_IE_POSITIONING_DATA, 70). % TLV
+-define(BSSMAP_IE_LCS_CAUSE, 71). % TLV
+-define(BSSMAP_IE_LCS_CLIENT_TYPE, 72). % TLV
+-define(BSSMAP_IE_APDU, 73). % TLV
+-define(BSSMAP_IE_NETWORK_ELEMENT_ID, 74). % TLV
+-define(BSSMAP_IE_GPS_ASSISTANCE_DATA, 75). % TLV
+-define(BSSMAP_IE_DECIPHERING_KEYS, 76). % TLV
+-define(BSSMAP_IE_RETURN_ERROR_RQST, 77). % TLV
+-define(BSSMAP_IE_RETURN_ERROR_CAUSE, 78). % TLV
+-define(BSSMAP_IE_SEGMENTATION, 79). % TLV
+-define(BSSMAP_IE_SERVICE_HANDOVER, 80). % TLV
+-define(BSSMAP_IE_SRC_TGT_RNC_TRANSP_UMTS, 81). % TLV
+-define(BSSMAP_IE_SRC_TGT_RNC_TRANSP_CDMA2K, 82). % TLV
+%-define(BSSMAP_IE_RESERVED_5, 65).
+%-define(BSSMAP_IE_RESERVED_6, 66).
+
+% enum gsm0808_cause {
+-define(BSSMAP_CAUSE_RIF_MSG_FAILURE, 0).
+-define(BSSMAP_CAUSE_RIF_FAILURE, 1).
+-define(BSSMAP_CAUSE_UPLINK_QUALITY, 2).
+-define(BSSMAP_CAUSE_UPLINK_STRENGTH, 3).
+-define(BSSMAP_CAUSE_DOWNLINK_QUALITY, 4).
+-define(BSSMAP_CAUSE_DOWNLINK_STRENGTH, 5).
+-define(BSSMAP_CAUSE_DISTANCE, 6).
+-define(BSSMAP_CAUSE_O_AND_M_INTERVENTION, 7).
+-define(BSSMAP_CAUSE_RESPONSE_TO_MSC_INVOCATION, 8).
+-define(BSSMAP_CAUSE_CALL_CONTROL, 9).
+-define(BSSMAP_CAUSE_RIF_FAILURE_REVERSION, 10).
+-define(BSSMAP_CAUSE_HO_SUCCESSFUL, 11).
+-define(BSSMAP_CAUSE_BETTER_CELL, 12).
+-define(BSSMAP_CAUSE_DIRECTED_RETRY, 13).
+-define(BSSMAP_CAUSE_JOINED_GROUP_CALL_CHANNEL, 14).
+-define(BSSMAP_CAUSE_TRAFFIC, 15).
+-define(BSSMAP_CAUSE_EQUIPMENT_FAILURE, 32).
+-define(BSSMAP_CAUSE_NO_RR_AVAILABLE, 33).
+-define(BSSMAP_CAUSE_RQSTED_TERR_RES_UNAVAIL, 34).
+-define(BSSMAP_CAUSE_CCCH_OVERLOAD, 35).
+-define(BSSMAP_CAUSE_PROCESSOR_OVERLOAD, 36).
+-define(BSSMAP_CAUSE_BSS_NOT_EQUIPPED, 37).
+-define(BSSMAP_CAUSE_MS_NOT_EQUIPPED, 38).
+-define(BSSMAP_CAUSE_INVALID_CELL, 39).
+-define(BSSMAP_CAUSE_TRAFFIC_LOAD, 40).
+-define(BSSMAP_CAUSE_PREEMPTION, 41).
+-define(BSSMAP_CAUSE_RQSTED_TRANSC_RA_UNAVAIL, 48).
+-define(BSSMAP_CAUSE_CIRCUIT_POOL_MISMATCH, 49).
+-define(BSSMAP_CAUSE_SWITCH_CIRCUIT_POOL, 50).
+-define(BSSMAP_CAUSE_RQSTED_SPEECH_V_UNAVAIL, 51).
+-define(BSSMAP_CAUSE_LSA_NOT_ALLOWED, 52).
+-define(BSSMAP_CAUSE_CIPH_ALG_NOT_SUPPORTED, 64).
+-define(BSSMAP_CAUSE_TERR_CIRC_ALLOCATED, 80).
+-define(BSSMAP_CAUSE_INV_MSG_CONTENTS, 81).
+-define(BSSMAP_CAUSE_IE_OR_FIELD_MISSING, 82).
+-define(BSSMAP_CAUSE_INCORRECT_VALUE, 83).
+-define(BSSMAP_CAUSE_UNKNOWN_MSG_TYPE, 84).
+-define(BSSMAP_CAUSE_UNKNOWN_IE, 85).
+-define(BSSMAP_CAUSE_PROT_ERR_BSS_AND_MSC, 96).
+
+% GSM 08.08 3.2.2.11 Channel Type
+% enum gsm0808_chan_indicator {
+-define(BSSMAP_CHAN_SPEECH, 1).
+-define(BSSMAP_CHAN_DATA, 2).
+-define(BSSMAP_CHAN_SIGN, 3).
+
+% enum gsm0808_chan_rate_type_data {
+-define(BSSMAP_DATA_FULL_BM, 16#8).
+-define(BSSMAP_DATA_HALF_LM, 16#9).
+-define(BSSMAP_DATA_FULL_RPREF, 16#a).
+-define(BSSMAP_DATA_HALF_PREF, 16#b).
+-define(BSSMAP_DATA_FULL_PREF_NO_CHANGE, 16#1a).
+-define(BSSMAP_DATA_HALF_PREF_NO_CHANGE, 16#1b).
+-define(BSSMAP_DATA_MULTI_MASK, 16#20).
+-define(BSSMAP_DATA_MULTI_MASK_NO_CHANGE, 16#30).
+
+% enum gsm0808_chan_rate_type_speech {
+-define(BSSMAP_SPEECH_FULL_BM, 16#8).
+-define(BSSMAP_SPEECH_HALF_LM, 16#9).
+-define(BSSMAP_SPEECH_FULL_PREF, 16#a).
+-define(BSSMAP_SPEECH_HALF_PREF, 16#b).
+-define(BSSMAP_SPEECH_FULL_PREF_NO_CHANGE, 16#1a).
+-define(BSSMAP_SPEECH_HALF_PREF_NO_CHANGE, 16#1b).
+-define(BSSMAP_SPEECH_PERM, 16#f).
+-define(BSSMAP_SPEECH_PERM_NO_CHANGE, 16#1f).
+
+% enum gsm0808_permitted_speech {
+-define(BSSMAP_PERM_FR1, 16#01).
+-define(BSSMAP_PERM_FR2, 16#11).
+-define(BSSMAP_PERM_FR3, 16#21).
+% BSSMAP_PERM_HR1 = BSSMAP_PERM_FR1 | 16#4,
+% BSSMAP_PERM_HR2 = BSSMAP_PERM_FR2 | 16#4,
+% BSSMAP_PERM_HR3 = BSSMAP_PERM_FR3 | 16#4,
+%};
diff --git a/include/isup.hrl b/include/isup.hrl
new file mode 100644
index 0000000..55750ea
--- /dev/null
+++ b/include/isup.hrl
@@ -0,0 +1,111 @@
+% Table 1 / Q.762 - ISDN user part message acronyms
+% Table C-3 / Q.762
+-define(ISUP_MSGT_ACM, 2#00000110). % Address complete
+-define(ISUP_MSGT_ANM, 2#00001001). % Answer
+%-define(ISUP_MSGT_APM). % Application transport
+-define(ISUP_MSGT_BLA, 2#00010101). % Blocking acknowledgement
+-define(ISUP_MSGT_BLO, 2#00010011). % Blocking
+-define(ISUP_MSGT_CCR, 2#00010001). % Continuity check request
+-define(ISUP_MSGT_CFN, 2#00101111). % Confusion
+-define(ISUP_MSGT_CGB, 2#00011000). % Circuit group blocking
+-define(ISUP_MSGT_CGBA,2#00011010).% Circuit group blocking acknowledgement
+-define(ISUP_MSGT_CGU, 2#00011001). % Circuit group unblocking
+-define(ISUP_MSGT_CGUA,2#00011011).% Circuit group unblocking acknowledgement
+-define(ISUP_MSGT_CON, 2#00000111). % Connect
+-define(ISUP_MSGT_COT, 2#00000101). % Continuity
+-define(ISUP_MSGT_CPG, 2#00101100). % Call progress
+-define(ISUP_MSGT_CRG, 2#00110001). % Charge information
+-define(ISUP_MSGT_CQM, 2#00101010). % Circuit group query
+-define(ISUP_MSGT_CQR, 2#00101011). % Circuit group query response
+-define(ISUP_MSGT_DRS, 2#00100111). % Delayed release (reserved – used in 1988 version)
+-define(ISUP_MSGT_FAA, 2#00100000). % Facility accepted
+%-define(ISUP_MSGT_FAC). % Facility
+-define(ISUP_MSGT_FAR, 2#00011111). % Facility request
+-define(ISUP_MSGT_FOT, 2#00001000). % Forward transfer
+-define(ISUP_MSGT_FRJ, 2#00100001). % Facility reject
+-define(ISUP_MSGT_GRA, 2#00101001). % Circuit group reset acknowledgement
+-define(ISUP_MSGT_GRS, 2#00010111). % Circuit group reset
+-define(ISUP_MSGT_IAM, 2#00000001). % Initial address
+%-define(ISUP_MSGT_IDR). % Identification request
+%-define(ISUP_MSGT_IRS). % Identification response
+-define(ISUP_MSGT_INF, 2#00000100). % Information
+-define(ISUP_MSGT_INR, 2#00000011). % Information request
+-define(ISUP_MSGT_LPA, 2#00100100). % Loop back acknowledgement
+%-define(ISUP_MSGT_LOP). % Loop prevention
+%-define(ISUP_MSGT_NRM). % Network resource management
+-define(ISUP_MSGT_OLM, 2#00110000). % Overload
+-define(ISUP_MSGT_PAM, 2#00101000). % Pass-along
+%-define(ISUP_MSGT_PRI). % Pre-release information
+-define(ISUP_MSGT_REL, 2#00001100). % Release
+-define(ISUP_MSGT_RES, 2#00001110). % Resume
+-define(ISUP_MSGT_RLC, 2#00010000). % Release complete
+-define(ISUP_MSGT_RSC, 2#00010010). % Reset circuit
+-define(ISUP_MSGT_SAM, 2#00000010). % Subsequent address
+%-define(ISUP_MSGT_SDM). % Subsequent directory number
+%-define(ISUP_MSGT_SGM). % Segmentation
+-define(ISUP_MSGT_SUS, 2#00001101). % Suspend
+-define(ISUP_MSGT_UBL, 2#00010100). % Unblocking
+-define(ISUP_MSGT_UBA, 2#00010110). % Unblocking acknowledgement
+-define(ISUP_MSGT_UCIC,2#00101110).% Unequipped circuit identification code
+%-define(ISUP_MSGT_UPA). % User part available
+%-define(ISUP_MSGT_UPT). % User part test
+-define(ISUP_MSGT_USR, 2#00101101). % User-to-user information
+
+
+% TABLE C-4/Q.767
+-define(ISUP_PAR_ACC_TRANSP, 2#00000011). % Access transport
+-define(ISUP_PAR_AUT_CONG_LVL, 2#00100111). % Automatic congestion level
+-define(ISUP_PAR_BACKW_CALL_IND, 2#00010001). % Backward call indicators
+-define(ISUP_PAR_CALL_MOD_IND, 2#00010111). % Call modification indicators
+-define(ISUP_PAR_CALL_REF, 2#00000001). % Call reference
+-define(ISUP_PAR_CALLED_P_NUM, 2#00000100). % Called party number
+-define(ISUP_PAR_CALLING_P_NUM, 2#00001010). % Calling party number
+-define(ISUP_PAR_CALLING_P_CAT, 2#00001001). % Calling party category
+-define(ISUP_PAR_CAUSE_IND, 2#00010010). % Cause indicators
+-define(ISUP_PAR_CG_SUB_MSGT_IND, 2#00010101). % Circuit group supervision message type indicator
+-define(ISUP_PAR_CIRC_STATE_IND, 2#00100110). % Circuit state indicator
+-define(ISUP_PAR_CLSD_U_INTERL_CODE, 2#00011010). % Closed user interlock code
+-define(ISUP_PAR_CONNECTED_NUM, 2#00100001). % Connected number
+-define(ISUP_PAR_CONN_REQ, 2#00001101). % Connection request
+-define(ISUP_PAR_CONTINUITY_IND, 2#00010000). % Continuity idnicators
+-define(ISUP_PAR_END_OF_OPT, 2#00000000). % End of optional parameters
+-define(ISUP_PAR_EVENT_INFO, 2#00100100). % Event information
+-define(ISUP_PAR_FACILITY_IND, 2#00011000). % Facility indicators
+-define(ISUP_PAR_FW_CALL_IND, 2#00000111). % Forward call indicators
+-define(ISUP_PAR_INFO_IND, 2#00001111). % Information indicators
+-define(ISUP_PAR_INFO_REQ_IND, 2#00001110). % Information request indicatos
+-define(ISUP_PAR_NAT_OF_CONN_IND, 2#00000110). % Nature of connection indicators
+-define(ISUP_PAR_OPT_BW_CALL_IND, 2#00101001). % Optional backward call indicators
+-define(ISUP_PAR_OPT_FW_CALL_IND, 2#00001000). % Optional forward call indicators
+-define(ISUP_PAR_ORIG_CALLED_NUM, 2#00101000). % Original called number
+-define(ISUP_PAR_RANGE_AND_STATUS, 2#00010110). % Range and status
+-define(ISUP_PAR_REDIR_NUM, 2#00001011). % Redirecting number
+-define(ISUP_PAR_REDIR_INFO, 2#00010011). % Redirection information
+-define(ISUP_PAR_REDIRECTION_NUM, 2#00001100). % Redirection number
+-define(ISUP_PAR_SIGN_POINT_CODE, 2#00011110). % Signalling point code
+-define(ISUP_PAR_SUBSEQ_NUM, 2#00000101). % Subsequent number
+-define(ISUP_PAR_SUSP_RES_IND, 2#00100010). % Suspend/resume indicators
+-define(ISUP_PAR_XMIT_NET_SEL, 2#00100011). % Transmit network selection
+-define(ISUP_PAR_TRANSM_MED_REQ, 2#00000010). % Transmission medium requirement
+-define(ISUP_PAR_USER_SERV_INFO, 2#00011101). % User service information
+-define(ISUP_PAR_USER_USER_IND, 2#00101010). % User-to-user indicators
+-define(ISUP_PAR_USER_USER_INFO, 2#00100000). % User-to-user information
+
+-define(ISUP_ADDR_NAT_NATIONAL, 2#0000011). % National (significant) number
+-define(ISUP_ADDR_NAT_INTERNATIONAL, 2#0000100). % International number
+
+-record(party_number, {
+ nature_of_addr_ind,
+ internal_net_num, % only in called party
+ number_incompl_ind, % only in calling party
+ numbering_plan,
+ present_restrict, % only in calling party
+ screening_ind, % only in calling party
+ phone_number}
+ ).
+
+-record(isup_msg, {
+ msg_type,
+ cic,
+ parameters
+ }).
diff --git a/include/m2ua.hrl b/include/m2ua.hrl
new file mode 100644
index 0000000..26f10fc
--- /dev/null
+++ b/include/m2ua.hrl
@@ -0,0 +1,59 @@
+
+% RFC 3331 Section 3.1.3 Message Class
+-define(M2UA_MSGC_MGMT, 0). % Management Messages [IUA/M2UA/M3UA/SUA]
+-define(M2UA_MSGC_TRANSFER, 1). % Transfer Messages [M3UA]
+-define(M2UA_MSGC_SSNM, 2). % SS7 Signalling Network Management [M3UA/SUA]
+-define(M2UA_MSGC_ASPSM, 3). % ASP State Maintenance [IUA/M2UA/M3UA/SUA]
+-define(M2UA_MSGC_ASPTM, 4). % ASP Traffic Maintenance [IUA/M2UA/M3UA/SUA]
+-define(M2UA_MSGC_QPTM, 5). % Q.921/Q.931 Boundary Primitives Transport [IUA]
+-define(M2UA_MSGC_MAUP, 6). % MTP2 User Adaption [M2UA]
+-define(M2UA_MSGC_CONNLESS, 7). % Connectionless Messages [SUA]
+-define(M2UA_MSGC_CONN, 8). % Connection oriented messages [SUA]
+-define(M2UA_MSGC_RKM, 9). % Routing Key Management [M3UA]
+-define(M2UA_MSGC_IIM, 10). % Interface Identifier Management (M2UA)
+
+% RFC 3331 Section 3.1.4 Message Type
+-define(M2UA_MAUP_MSGT_RESERVED, 0).
+-define(M2UA_MAUP_MSGT_DATA, 1).
+-define(M2UA_MAUP_MSGT_EST_REQ, 2).
+-define(M2UA_MAUP_MSGT_EST_CONF, 3).
+-define(M2UA_MAUP_MSGT_REL_REQ, 4).
+-define(M2UA_MAUP_MSGT_REL_CONF, 5).
+-define(M2UA_MAUP_MSGT_REL_IND, 6).
+-define(M2UA_MAUP_MSGT_STATE_REQ, 7).
+-define(M2UA_MAUP_MSGT_STATE_CONF, 8).
+-define(M2UA_MAUP_MSGT_STATE_IND, 9).
+-define(M2UA_MAUP_MSGT_DATA_RETR_REQ, 10).
+-define(M2UA_MAUP_MSGT_DATA_RETR_CONF, 11).
+-define(M2UA_MAUP_MSGT_DATA_RETR_IND, 12).
+-define(M2UA_MAUP_MSGT_DATA_RETR_COMPL_IND, 13).
+-define(M2UA_MAUP_MSGT_CONG_IND, 14).
+-define(M2UA_MAUP_MSGT_DATA_ACK, 15).
+
+
+-define(M2UA_ASPSM_MSGT_UP, 0).
+-define(M2UA_ASPSM_MSGT_DOWN, 1).
+-define(M2UA_ASPSM_MSGT_BEAT, 2).
+-define(M2UA_ASPSM_MSGT_UP_ACK, 3).
+-define(M2UA_ASPSM_MSGT_DOWN_ACK, 5).
+-define(M2UA_ASPSM_MSGT_BEAT_ACK, 6).
+
+-define(M2UA_ASPTM_MSGT_ACTIVE, 1).
+-define(M2UA_ASPTM_MSGT_INACTIVE, 2).
+-define(M2UA_ASPTM_MSGT_ACTIVE_ACK, 3).
+-define(M2UA_ASPTM_MSGT_INACTIVE_ACK, 4).
+
+-define(M2UA_MGMT_MSGT_ERROR, 0).
+-define(M2UA_MGMT_MSGT_NOTIFY, 1).
+
+-define(M2UA_MGMT_IIM_REG_REQ, 1).
+-define(M2UA_MGMT_IIM_REG_RSP, 2).
+-define(M2UA_MGMT_IIM_DEREG_REQ, 3).
+-define(M2UA_MGMT_IIM_DEREG_RSP, 4).
+
+-record(m2ua_msg, {
+ msg_class,
+ msg_type,
+ parameters
+ }).
+
diff --git a/include/mtp3.hrl b/include/mtp3.hrl
new file mode 100644
index 0000000..53025a7
--- /dev/null
+++ b/include/mtp3.hrl
@@ -0,0 +1,21 @@
+
+-define(MTP3_SERV_MGMT, 0).
+-define(MTP3_SERV_MTN, 1).
+-define(MTP3_SERV_SCCP, 3).
+-define(MTP3_SERV_TUP, 4).
+-define(MTP3_SERV_ISUP, 5).
+
+-record(mtp3_routing_label, {
+ sig_link_sel,
+ origin_pc,
+ dest_pc
+ }).
+
+-record(mtp3_msg, {
+ network_ind,
+ service_ind,
+ routing_label,
+ payload
+ }).
+
+
diff --git a/include/sccp.hrl b/include/sccp.hrl
new file mode 100644
index 0000000..b445495
--- /dev/null
+++ b/include/sccp.hrl
@@ -0,0 +1,103 @@
+
+% Table 1 / Q.713 - SCCP Message Types
+-define(SCCP_MSGT_CR, 1). % Connection request
+-define(SCCP_MSGT_CC, 2). % Connection confirm
+-define(SCCP_MSGT_CREF, 3). % Connection refused
+-define(SCCP_MSGT_RLSD, 4). % Released
+-define(SCCP_MSGT_RLC, 5). % Release complete
+-define(SCCP_MSGT_DT1, 6). % Data form 1
+-define(SCCP_MSGT_DT2, 7). % Data form 2
+-define(SCCP_MSGT_AK, 8). % Data acknowledgement
+-define(SCCP_MSGT_UDT, 9). % Unitdata
+-define(SCCP_MSGT_UDTS, 10). % Unitdata service
+-define(SCCP_MSGT_ED, 11). % Expedited data
+-define(SCCP_MSGT_EA, 12). % Expedited data ack
+-define(SCCP_MSGT_RSR, 13). % Reset Request
+-define(SCCP_MSGT_RSC, 14). % Reset Confirmation
+-define(SCCP_MSGT_ERR, 15). % Protocol data unit error
+-define(SCCP_MSGT_IT, 16). % Inactivity test
+-define(SCCP_MSGT_XUDT, 17). % Extended unitdata
+-define(SCCP_MSGT_XUDTS, 18). % Extended unitdata service
+-define(SCCP_MSGT_LUDT, 19). % Long unitdata
+-define(SCCP_MSGT_LUDTS, 20). % Long unitdata service
+
+% Table 2 / Q.713 - SCCP parameter name codes
+-define(SCCP_PNC_END_OF_OPTIONAL, 0).
+-define(SCCP_PNC_DESTINATION_LOCAL_REFERENCE, 1).
+-define(SCCP_PNC_SOURCE_LOCAL_REFERENCE, 2).
+-define(SCCP_PNC_CALLED_PARTY_ADDRESS, 3).
+-define(SCCP_PNC_CALLING_PARTY_ADDRESS, 4).
+-define(SCCP_PNC_PROTOCOL_CLASS, 5).
+-define(SCCP_PNC_SEGMENTING, 6).
+-define(SCCP_PNC_RECEIVE_SEQ_NUMBER, 7).
+-define(SCCP_PNC_SEQUENCING, 8).
+-define(SCCP_PNC_CREDIT, 9).
+-define(SCCP_PNC_RELEASE_CAUSE, 10).
+-define(SCCP_PNC_RETURN_CAUSE, 11).
+-define(SCCP_PNC_RESET_CAUSE, 12).
+-define(SCCP_PNC_ERROR_CAUSE, 13).
+-define(SCCP_PNC_REFUSAL_CAUSE, 14).
+-define(SCCP_PNC_DATA, 15).
+-define(SCCP_PNC_SEGMENTATION, 16).
+-define(SCCP_PNC_HOP_COUNTER, 17).
+-define(SCCP_PNC_IMPORTANCE, 18).
+-define(SCCP_PNC_LONG_DATA, 19).
+
+% According to Q.713 Section 3.4.1
+-define(SCCP_GTI_NO_GT, 2#0000).
+-define(SCCP_GTI_NAT_ONLY, 2#0001).
+-define(SCCP_GTI_TT_ONLY, 2#0010).
+-define(SCCP_GTI_TT_NP_ENC, 2#0011).
+-define(SCCP_GTI_TT_NP_ENC_NAT, 2#0100).
+
+% According to Q.731 Section 3.4.2.2
+-define(SCCP_SSN_UNKNOWN, 2#000000000).
+-define(SCCP_SSN_SCCP_MGMT, 2#000000001).
+-define(SCCP_SSN_ITU_T, 2#000000010).
+-define(SCCP_SSN_ISUP, 2#000000011).
+-define(SCCP_SSN_OAM, 2#000000100).
+-define(SCCP_SSN_MAP, 2#000000101).
+-define(SCCP_SSN_HLR, 2#000000110).
+-define(SCCP_SSN_VLR, 2#000000111).
+-define(SCCP_SSN_MSC, 2#000001000).
+-define(SCCP_SSN_EIR, 2#000001001).
+-define(SCCP_SSN_AUC, 2#000001010).
+-define(SCCP_SSN_ISDN_SS, 2#000001011).
+-define(SCCP_SSN_RES_NAT, 2#000001100).
+-define(SCCP_SSN_BISDN, 2#000001101).
+-define(SCCP_SSN_TC_TEST, 2#000001110).
+
+
+
+% a single parsed SCCP message
+-record(sccp_msg, {
+ msg_type,
+ parameters
+ }).
+
+
+% a primitive how it is used inside the SCCP stack and to the user
+-record(primitive, {
+ subsystem,
+ gen_name,
+ spec_name,
+ parameters
+ }).
+
+-record(global_title, {
+ gti,
+ nature_of_addr_ind,
+ trans_type,
+ encoding,
+ numbering_plan,
+ phone_number
+ }).
+
+-record(sccp_addr, {
+ res_nat_use,
+ route_on_ssn,
+ point_code, % optional
+ ssn, % optional
+ global_title % optional
+ }).
+