From 6a846bca2ca634e20bd264ed24dbd22fd7ece5ff Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Fri, 4 Sep 2020 13:01:22 +0200 Subject: [PATCH] library: Add template helpers for AoIP Transport Layer Address This way one can simply pass an IP addr in string format and return the IE no matter the IP version. Change-Id: I743dbb7c89e504762498b7f278c12e130352e5f0 --- bsc-nat/gen_links.sh | 2 +- library/BSSMAP_Templates.ttcn | 24 ++++++++++++++++++++++++ library/Misc_Helpers.ttcn | 9 +++++++++ selftest/gen_links.sh | 2 +- 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/bsc-nat/gen_links.sh b/bsc-nat/gen_links.sh index 4d2303f3b..9bd1faf78 100755 --- a/bsc-nat/gen_links.sh +++ b/bsc-nat/gen_links.sh @@ -52,7 +52,7 @@ FILES="RTP_EncDec.cc RTP_Types.ttcn" gen_links $DIR $FILES DIR=../library -FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn BSSMAP_Templates.ttcn RAN_Emulation.ttcnpp MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc Osmocom_CTRL_Types.ttcn Osmocom_VTY_Functions.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn BSSAP_CodecPort.ttcn" +FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn BSSMAP_Templates.ttcn RAN_Emulation.ttcnpp MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc Osmocom_CTRL_Types.ttcn Osmocom_VTY_Functions.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn BSSAP_CodecPort.ttcn Native_Functions.ttcn Native_FunctionDefs.cc" gen_links $DIR $FILES ignore_pp_results diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn index 694e3e877..0ec563932 100644 --- a/library/BSSMAP_Templates.ttcn +++ b/library/BSSMAP_Templates.ttcn @@ -14,6 +14,8 @@ module BSSMAP_Templates { import from General_Types all; import from Osmocom_Types all; +import from Native_Functions all; +import from Misc_Helpers all; import from GSM_Types all; import from BSSAP_Types all; @@ -436,6 +438,17 @@ template (value) BSSMAP_IE_AoIP_TransportLayerAddress ts_BSSMAP_IE_AoIP_TLA4(OCT template (value) BSSMAP_IE_AoIP_TransportLayerAddress ts_BSSMAP_IE_AoIP_TLA6(OCT16 ip, uint16_t pt) := ts_BSSMAP_IE_AoIP_TLA({ipv6:=ip}, pt, 18); +function f_ts_BSSMAP_IE_AoIP_TLA(charstring addr, uint16_t udp_port) + return template (value) BSSMAP_IE_AoIP_TransportLayerAddress { + if (f_addr_is_ipv6(addr)) { + var OCT16 ip6 := f_inet6_addr(addr); + return ts_BSSMAP_IE_AoIP_TLA6(ip6, udp_port); + } else { + var OCT4 ip := f_inet_addr(addr); + return ts_BSSMAP_IE_AoIP_TLA4(ip, udp_port); + } +} + template BSSMAP_IE_AoIP_TransportLayerAddress tr_BSSMAP_IE_AoIP_TLA(template BSSMAP_FIELD_IPAddress addr, template uint16_t udp_port, template integer len := ?) := { @@ -449,6 +462,17 @@ template BSSMAP_IE_AoIP_TransportLayerAddress tr_BSSMAP_IE_AoIP_TLA4(template OC template BSSMAP_IE_AoIP_TransportLayerAddress tr_BSSMAP_IE_AoIP_TLA6(template OCT16 ip, template uint16_t pt) := tr_BSSMAP_IE_AoIP_TLA({ipv6:=ip}, pt, 18); +function f_tr_BSSMAP_IE_AoIP_TLA(charstring addr, template uint16_t udp_port) + return template BSSMAP_IE_AoIP_TransportLayerAddress { + if (f_addr_is_ipv6(addr)) { + var OCT16 ip6 := f_inet6_addr(addr); + return tr_BSSMAP_IE_AoIP_TLA6(ip6, udp_port); + } else { + var OCT4 ip := f_inet_addr(addr); + return tr_BSSMAP_IE_AoIP_TLA4(ip, udp_port); + } +} + template (value) BSSMAP_IE_KC128 ts_BSSMAP_IE_Kc128(OCT16 kc128) := { elementIdentifier := '83'O, kC128_Value := kc128 diff --git a/library/Misc_Helpers.ttcn b/library/Misc_Helpers.ttcn index 1ca649109..a40252570 100644 --- a/library/Misc_Helpers.ttcn +++ b/library/Misc_Helpers.ttcn @@ -25,4 +25,13 @@ function f_shutdown(charstring file, integer line, verdicttype verdict := none, mtc.stop } +function f_addr_is_ipv6(charstring addr) return boolean { + for (var integer i := 0; i < lengthof(addr); i := i + 1) { + if (addr[i] == ":") { + return true; + } + } + return false; +} + } diff --git a/selftest/gen_links.sh b/selftest/gen_links.sh index fd64a4855..7b15de26f 100755 --- a/selftest/gen_links.sh +++ b/selftest/gen_links.sh @@ -39,7 +39,7 @@ FILES="MobileL3_CC_Types.ttcn MobileL3_CommonIE_Types.ttcn MobileL3_GMM_SM_Types gen_links $DIR $FILES DIR=../library -FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn BSSMAP_Templates.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn BSSAP_CodecPort.ttcn Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn GSUP_Types.ttcn" +FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn BSSMAP_Templates.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn BSSAP_CodecPort.ttcn Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn GSUP_Types.ttcn Native_Functions.ttcn Native_FunctionDefs.cc" gen_links $DIR $FILES ignore_pp_results