diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index 350dae86a669f299ea383aeece1c0ce480c03ae2..0a0118581e895380d29eae2fe93964ab173176f3 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -30,7 +30,7 @@ ################################################################################ # file build_helper # brief -# author Laurent Thomas +# authors Laurent Thomas, Lionel GAUTHIER # ####################################### SUDO='sudo -E' @@ -301,6 +301,183 @@ install_nas_tools() { fi } +################################################# +# 3. Network interfaces utilities +################################################ + +cidr2mask(){ + local i mask="" + local full_octets=$(($1/8)) + local partial_octet=$(($1%8)) + + for ((i=0;i<4;i+=1)); do + if [ $i -lt $full_octets ]; then + mask+=255 + elif [ $i -eq $full_octets ]; then + mask+=$((256 - 2**(8-$partial_octet))) + else + mask+=0 + fi + test $i -lt 3 && mask+=. + done + + echo $mask +} + +# example: netcalc 192.168.12.100 255.255.255.0 +netcalc(){ + local IFS='.' ip i + local -a oct msk + + read -ra oct <<<"$1" + read -ra msk <<<"$2" + + for i in ${!oct[@]}; do + ip+=( "$(( oct[i] & msk[i] ))" ) + done + + echo "${ip[*]}" +} + +# example: +bcastcalc(){ + local IFS='.' ip i + local -a oct msk + + read -ra oct <<<"$1" + read -ra msk <<<"$2" + + for i in ${!oct[@]}; do + ip+=( "$(( oct[i] + ( 255 - ( oct[i] | msk[i] ) ) ))" ) + done + echo "${ip[*]}" +} + + +is_real_interface(){ + my_bool=1 + for var in "$@" + do + if [ "a$var" == "a" ]; then + return 0 + fi + if [ "a$var" == "anone" ]; then + return 0 + fi + IF=`cat /etc/udev/rules.d/70-persistent-net.rules | grep $var | sed 's/^.*NAME=//' | tr -d '"'` + if [ "$IF" == "$var" ]; then + if [ "a${var:0:3}" != "aeth" ]; then + if [ "a${var:0:4}" != "awlan" ]; then + if [ "a${var:0:4}" != "awifi" ]; then + my_bool=0; + fi + fi + fi + fi + done + return $my_bool +} + +is_virtual_interface(){ + my_bool=1 + for var in "$@" + do + if [ "a$var" == "a" ]; then + return 0 + fi + if [ "a$var" == "anone" ]; then + return 0 + fi + num=`expr index "$var" :` + + if [ $num -eq 0 ]; then + my_bool=0; + fi + done + return $my_bool +} + +# arg1 = interface name +# arg2 = ipv4 addr cidr +set_interface_up(){ + interface=$1 + address=${2%/*} #part before '/' + cidr_netmask=${2#*/} # part after '/' + + if [ "a${interface:0:4}" == "anone" ]; then + return; + fi + echo "ifconfig $interface up" + $SUDO ifconfig $interface up + sync + netmask=`cidr2mask $cidr_netmask` + broadcast=`bcastcalc $address $netmask` + echo "ip -4 addr add $address/$cidr_netmask broadcast $broadcast dev $interface" + $SUDO ip -4 addr add $address/$cidr_netmask broadcast $broadcast dev $interface + sync +} + +# arg1 = interface name +# arg2 = ipv4 addr cidr +set_virtual_interface_up(){ + interface=$1 + address=${2%/*} #part before '/' + cidr_netmask=${2#*/} # part after '/' + + if [ "a${interface:0:4}" == "anone" ]; then + return; + fi + $SUDO ifconfig $interface down > /dev/null 2>&1 + sync + echo "ifconfig $interface $address up" + $SUDO ifconfig $interface $address up + sync +} + +#arg1 is interface name +#arg2 is IP address (CIDR) +set_network_interface(){ + local interface_name=$1 + local ip_cidr=$2 + + is_virtual_interface $interface_name + if [ $? -eq 1 ]; then + echo "$interface_name is virtual interface" + set_virtual_interface_up $interface_name $ip_cidr + else + is_real_interface $interface_name + if [ $? -eq 1 ]; then + echo "$interface_name is real interface" + set_interface_up $interface_name $ip_cidr + else + echo_warning "$interface_name not handled, not configuring it" + return + fi + fi +} + +# arg1 is a 'libconfig-like' config file +set_epc_network_interfaces(){ + value="`cat $1 | cut -d "#" -f1 | grep 'ADDRESS\|INTERFACE' | tr -d " " | grep "="`" + eval $value + + # check all var names are correct + list_var_name="\ + ENB_INTERFACE_NAME_FOR_S1_MME ENB_IPV4_ADDRESS_FOR_S1_MME \ + ENB_INTERFACE_NAME_FOR_S1U ENB_IPV4_ADDRESS_FOR_S1U " + for var_name in $list_var_name + do + if [ -n "$${var_name}" ]; then + echo_success "Found ${var_name} = ${!var_name}" + else + echo_fatal "${var_name} does does not exist in your config file $1" + fi + done + + # configure interfaces + set_network_interface $ENB_INTERFACE_NAME_FOR_S1_MME $ENB_IPV4_ADDRESS_FOR_S1_MME + set_network_interface $ENB_INTERFACE_NAME_FOR_S1U $ENB_IPV4_ADDRESS_FOR_S1U +} diff --git a/cmake_targets/tools/build_test_epc_tools b/cmake_targets/tools/build_test_epc_tools index b67cf158109f7c3b24721598552766b39b840ff5..aa7103fd781774a278c458302757f6592a67cc32 100755 --- a/cmake_targets/tools/build_test_epc_tools +++ b/cmake_targets/tools/build_test_epc_tools @@ -148,7 +148,6 @@ function main() $SUDO cp -upv test_epc_generate_scenario /usr/local/bin $SUDO cp -upv test_epc_play_scenario /usr/local/bin - $SUDO cp -upv $OPENAIR_DIR/openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml /usr/local/bin } diff --git a/openair3/TEST/EPC_TEST/generate_scenario.c b/openair3/TEST/EPC_TEST/generate_scenario.c index 9f4e16baefa22debb75f8f44ef88f1ab1b60ea78..238ba0ff11c470f2d2ecbd635ea0daf9a0b3c935 100644 --- a/openair3/TEST/EPC_TEST/generate_scenario.c +++ b/openair3/TEST/EPC_TEST/generate_scenario.c @@ -97,7 +97,6 @@ #define ENB_CONFIG_MAX_XSLT_PARAMS 32 Enb_properties_array_t g_enb_properties; -char *g_openair_dir = NULL; char *g_test_dir = NULL; char *g_pdml_in_origin = NULL; extern int xmlLoadExtDtdDefaultValue; @@ -195,17 +194,13 @@ int generate_test_scenario(const char const * test_nameP, const char const * pdm exit(1); } - memset(astring, 0, sizeof(astring)); - strcat(astring, g_openair_dir); - strcat(astring, "/openair3/TEST/EPC_TEST/generic_scenario.xsl"); - xmlSubstituteEntitiesDefault(1); xmlLoadExtDtdDefaultValue = 1; - cur = xsltParseStylesheetFile(astring); + cur = xsltParseStylesheetFile("/usr/share/oai/xsl/generic_scenario.xsl"); if (NULL == cur) { - AssertFatal (0, "Could not parse stylesheet file %s (check OPENAIR_DIR env variable)!\n", astring); + AssertFatal (0, "Could not parse stylesheet file /usr/share/oai/xsl/generic_scenario.xsl!\n"); } else { - fprintf(stdout, "XSLT style sheet: %s\n", astring); + fprintf(stdout, "XSLT style sheet: /usr/share/oai/xsl/generic_scenario.xsl\n"); } doc = xmlParseFile(pdml_in_basenameP); @@ -686,12 +681,6 @@ int main( int argc, char **argv ) { int actions = 0; - g_openair_dir = getenv("OPENAIR_DIR"); - if (NULL == g_openair_dir) { - fprintf(stderr, "Error: Could not get OPENAIR_DIR environment variable\n"); - exit(1); - } - memset((char*) &g_enb_properties, 0 , sizeof(g_enb_properties)); actions = config_parse_opt_line (argc, argv); //Command-line options diff --git a/openair3/TEST/EPC_TEST/generic_scenario.xsl b/openair3/TEST/EPC_TEST/generic_scenario.xsl deleted file mode 100644 index 592bef83d41857062e29ffae679caa6fc846e7f4..0000000000000000000000000000000000000000 --- a/openair3/TEST/EPC_TEST/generic_scenario.xsl +++ /dev/null @@ -1,312 +0,0 @@ -<xsl:stylesheet version="1.0" - xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> - - <xsl:output - method="xml" - indent="yes" - encoding="iso-8859-1" - /> - - <!-- Ugly but no time to find a better way in XSLT 1.0 (map/list)--> - <xsl:param name="enb0_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb1_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb2_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb3_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb4_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb5_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb6_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb7_s1c" select="'0.0.0.0'"/> - <xsl:param name="mme0_s1c_0" select="'0.0.0.0'"/> - <xsl:param name="mme0_s1c_1" select="'0.0.0.0'"/> - <xsl:param name="mme0_s1c_2" select="'0.0.0.0'"/> - <xsl:param name="mme0_s1c_3" select="'0.0.0.0'"/> - <xsl:param name="mme1_s1c_0" select="'0.0.0.0'"/> - <xsl:param name="mme1_s1c_1" select="'0.0.0.0'"/> - <xsl:param name="mme1_s1c_2" select="'0.0.0.0'"/> - <xsl:param name="mme1_s1c_3" select="'0.0.0.0'"/> - <xsl:param name="mme2_s1c_0" select="'0.0.0.0'"/> - <xsl:param name="mme2_s1c_1" select="'0.0.0.0'"/> - <xsl:param name="mme2_s1c_2" select="'0.0.0.0'"/> - <xsl:param name="mme2_s1c_3" select="'0.0.0.0'"/> - <xsl:param name="mme3_s1c_0" select="'0.0.0.0'"/> - <xsl:param name="mme3_s1c_1" select="'0.0.0.0'"/> - <xsl:param name="mme3_s1c_2" select="'0.0.0.0'"/> - <xsl:param name="mme3_s1c_3" select="'0.0.0.0'"/> - <xsl:param name="ip_address" select="'0.0.0.0'"/> - - - - <xsl:template name="reverse_ip"> - <xsl:param name="ip_address"/> - <xsl:choose> - <xsl:when test="$ip_address=$enb0_s1c">enb0_s1c</xsl:when> - <xsl:when test="$ip_address=$enb1_s1c">enb1_s1c</xsl:when> - <xsl:when test="$ip_address=$enb2_s1c">enb2_s1c</xsl:when> - <xsl:when test="$ip_address=$enb3_s1c">enb3_s1c</xsl:when> - <xsl:when test="$ip_address=$enb4_s1c">enb4_s1c</xsl:when> - <xsl:when test="$ip_address=$enb5_s1c">enb5_s1c</xsl:when> - <xsl:when test="$ip_address=$enb6_s1c">enb6_s1c</xsl:when> - <xsl:when test="$ip_address=$enb7_s1c">enb7_s1c</xsl:when> - <xsl:when test="$ip_address=$mme0_s1c_0">mme0_s1c_0</xsl:when> - <xsl:when test="$ip_address=$mme0_s1c_1">mme0_s1c_1</xsl:when> - <xsl:when test="$ip_address=$mme0_s1c_2">mme0_s1c_2</xsl:when> - <xsl:when test="$ip_address=$mme0_s1c_3">mme0_s1c_3</xsl:when> - <xsl:when test="$ip_address=$mme1_s1c_0">mme1_s1c_0</xsl:when> - <xsl:when test="$ip_address=$mme1_s1c_1">mme1_s1c_1</xsl:when> - <xsl:when test="$ip_address=$mme1_s1c_2">mme1_s1c_2</xsl:when> - <xsl:when test="$ip_address=$mme1_s1c_3">mme1_s1c_3</xsl:when> - <xsl:when test="$ip_address=$mme2_s1c_0">mme2_s1c_0</xsl:when> - <xsl:when test="$ip_address=$mme2_s1c_1">mme2_s1c_1</xsl:when> - <xsl:when test="$ip_address=$mme2_s1c_2">mme2_s1c_2</xsl:when> - <xsl:when test="$ip_address=$mme2_s1c_3">mme2_s1c_3</xsl:when> - <xsl:when test="$ip_address=$mme3_s1c_0">mme3_s1c_0</xsl:when> - <xsl:when test="$ip_address=$mme3_s1c_1">mme3_s1c_1</xsl:when> - <xsl:when test="$ip_address=$mme3_s1c_2">mme3_s1c_2</xsl:when> - <xsl:when test="$ip_address=$mme3_s1c_3">mme3_s1c_3</xsl:when> - <xsl:otherwise> - <xsl:message terminate="yes">ERROR: Cannot reverse resolv IP <xsl:value-of select="."/> ! - </xsl:message> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template name="enb_ip_2_enb_instance"> - <xsl:param name="ip_address"/> - <xsl:choose> - <xsl:when test="$ip_address=$enb0_s1c">0</xsl:when> - <xsl:when test="$ip_address=$enb1_s1c">1</xsl:when> - <xsl:when test="$ip_address=$enb2_s1c">2</xsl:when> - <xsl:when test="$ip_address=$enb3_s1c">3</xsl:when> - <xsl:when test="$ip_address=$enb4_s1c">4</xsl:when> - <xsl:when test="$ip_address=$enb5_s1c">5</xsl:when> - <xsl:when test="$ip_address=$enb6_s1c">6</xsl:when> - <xsl:when test="$ip_address=$enb7_s1c">7</xsl:when> - <xsl:otherwise> - <xsl:message terminate="yes">ERROR: Cannot set eNB instance <xsl:value-of select="."/> ! - </xsl:message> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - - <xsl:template name="chunktype2str"> - <xsl:param name="chunk_type"/> - <xsl:choose> - <xsl:when test="$chunk_type='00'">DATA</xsl:when> - <xsl:when test="$chunk_type='01'">INIT</xsl:when> - <xsl:when test="$chunk_type='02'">INIT_ACK</xsl:when> - <xsl:when test="$chunk_type='03'">SACK</xsl:when> - <xsl:when test="$chunk_type='04'">HEARTBEAT</xsl:when> - <xsl:when test="$chunk_type='05'">HEARTBEAT_ACK</xsl:when> - <xsl:when test="$chunk_type='06'">ABORT</xsl:when> - <xsl:when test="$chunk_type='07'">SHUTDOWN</xsl:when> - <xsl:when test="$chunk_type='08'">SHUTDOWN_ACK</xsl:when> - <xsl:when test="$chunk_type='09'">ERROR</xsl:when> - <xsl:when test="$chunk_type='0a'">COOKIE_ECHO</xsl:when> - <xsl:when test="$chunk_type='0b'">COOKIE_ACK</xsl:when> - <xsl:when test="$chunk_type='0c'">ECNE</xsl:when> - <xsl:when test="$chunk_type='0d'">CWR</xsl:when> - <xsl:when test="$chunk_type='0e'">SHUTDOWN_COMPLETE</xsl:when> - <xsl:otherwise> - <xsl:message terminate="yes">ERROR: UNKNOWN CHUNK TYPE <xsl:value-of select="."/> ! - </xsl:message> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <xsl:strip-space elements="pdml packet proto field"/> - - <xsl:template match="/"> - <scenario name="{$test_name}"> - <xsl:apply-templates/> - </scenario> - </xsl:template> - - <xsl:template match="proto[@name='frame']"> - <xsl:variable name="time_relative" select="field[@name='frame.time_relative']/@show"/> - <xsl:variable name="frame_number" select="field[@name='frame.number']/@show"/> - <xsl:variable name="ip" select="proto[@name='ip']"/> - <xsl:variable name="ip_src"> - <xsl:call-template name="reverse_ip"> - <xsl:with-param name="ip_address" select="$ip/field[@name='ip.src']/@show"/> - </xsl:call-template> - </xsl:variable> - <xsl:variable name="ip_dst"> - <xsl:call-template name="reverse_ip"> - <xsl:with-param name="ip_address" select="$ip/field[@name='ip.dst']/@show"/> - </xsl:call-template> - </xsl:variable> - <xsl:variable name="action"> - <xsl:choose> - <xsl:when test="starts-with($ip_src,'enb')">SEND</xsl:when> - <xsl:when test="starts-with($ip_src,'mme')">RECEIVE</xsl:when> - <xsl:otherwise> - <xsl:message terminate="yes">ERROR: UNKNOWN ACTION <xsl:value-of select="."/> ! - </xsl:message> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:variable name="enb_instance"> - <xsl:choose> - <xsl:when test="starts-with($ip_src,'enb')"> - <xsl:call-template name="enb_ip_2_enb_instance"> - <xsl:with-param name="ip_address" select="$ip/field[@name='ip.src']/@show"/> - </xsl:call-template> - </xsl:when> - <xsl:when test="starts-with($ip_dst,'enb')"> - <xsl:call-template name="enb_ip_2_enb_instance"> - <xsl:with-param name="ip_address" select="$ip/field[@name='ip.dst']/@show"/> - </xsl:call-template> - </xsl:when> - <xsl:otherwise> - <xsl:message terminate="yes">ERROR: UNKNOWN ACTION <xsl:value-of select="."/> ! - </xsl:message> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - - <xsl:for-each select="$ip/proto[@name='sctp']"> - <xsl:variable name="sctp_data_sid" select="./field/field[@name='sctp.data_sid']/@show"/> - <!-- TODO resolv problem of 2 SCTP packets in 1 IP packet: src and dst ports are not in the 2nd SCTP packet --> - <!--xsl:variable name="sctp_srcport" select="./field[@name='sctp.srcport']/@show"/--> - <!--xsl:variable name="sctp_dstport" select="./field[@name='sctp.dstport']/@show"/--> - <!--xsl:variable name="sctp_data_ssn" select="./field/field[@name='sctp.data_ssn']/@show"/--> - <!--xsl:variable name="sctp_data_payload_proto_id" select="./field/field[@name='sctp.data_payload_proto_id']/@show"/--> - <xsl:variable name="sctp_chunk_type_str"> - <xsl:call-template name="chunktype2str"> - <xsl:with-param name="chunk_type" select="./field/field[@name='sctp.chunk_type']/@value"/> - </xsl:call-template> - </xsl:variable> - <xsl:variable name="sctp_pos_offset" select="./@pos"/> - <xsl:variable name="sctp_node" select="."/> - - <xsl:choose> - <xsl:when test="$sctp_chunk_type_str='DATA'"> - <xsl:for-each select="./proto[@name='s1ap']"> - <xsl:variable name="s1ap_pos_offset" select="./@pos"/> - <packet name="{$sctp_chunk_type_str}" action="{$action}"> - <frame.time_relative value="{$time_relative}"/> - <frame.number value="{$frame_number}"/> - - <!-- TODO: pos_offset(substract it from all pos_offsets in s1ap, may depend on which test scenario protocol target S1AP/NAS or NAS only...)--> - <pos_offset value="{$s1ap_pos_offset}"/> - <ip.src value="{$ip_src}"/> - <ip.dst value="{$ip_dst}"/> - <eNB.instance value="{$enb_instance}"/> - <!--sctp.data_sid value="{$sctp_data_sid}"/--> - <!--sctp.srcport value="{$sctp_srcport}"/--> - <!--sctp.dstport value="{$sctp_dstport}"/--> - <!--sctp.data_ssn value="{$sctp_data_ssn}"/--> - <!--sctp.data_payload_proto_id value="{$sctp_data_payload_proto_id}"/--> - <sctp.chunk_type_str value="{$sctp_chunk_type_str}"/> - <xsl:copy-of select="$sctp_node"/> - </packet> - </xsl:for-each> - </xsl:when> - <xsl:when test="$sctp_chunk_type_str='INIT'"> - <!--xsl:variable name="sctp_init_nr_out_streams" select="./field/field[@name='sctp.init_nr_out_streams']/@show"/--> - <!--xsl:variable name="sctp_init_nr_in_streams" select="./field/field[@name='sctp.init_nr_in_streams']/@show"/--> - <!--xsl:variable name="sctp_init_initial_tsn" select="./field/field[@name='sctp.init_initial_tsn']/@show"/--> - <packet name="{$sctp_chunk_type_str}" action="{$action}"> - <frame.time_relative value="{$time_relative}"/> - <frame.number value="{$frame_number}"/> - <!-- TODO: pos_offset(substract it from all pos_offsets in s1ap, may depend on which test scenario protocol target S1AP/NAS or NAS only...)--> - <pos_offset value="{$sctp_pos_offset}"/> - <ip.src value="{$ip_src}"/> - <ip.dst value="{$ip_dst}"/> - <eNB.instance value="{$enb_instance}"/> - <!--sctp.srcport value="{$sctp_srcport}"/--> - <!--sctp.dstport value="{$sctp_dstport}"/--> - <!--sctp.init_nr_in_streams value="{$sctp_init_nr_in_streams}"/--> - <!--sctp.init_nr_out_streams value="{$sctp_init_nr_out_streams}"/--> - <!--sctp.init_initial_tsn value="{$sctp_init_initial_tsn}"/--> - <sctp.chunk_type_str value="{$sctp_chunk_type_str}"/> - <xsl:copy-of select="$sctp_node"/> - </packet> - </xsl:when> - <xsl:when test="$sctp_chunk_type_str='INIT_ACK'"> - <!--xsl:variable name="sctp_initack_nr_out_streams" select="./field/field[@name='sctp.initack_nr_out_streams']/@show"/--> - <!--xsl:variable name="sctp_initack_nr_in_streams" select="./field/field[@name='sctp.initack_nr_in_streams']/@show"/--> - <!--xsl:variable name="sctp_initack_initial_tsn" select="./field/field[@name='sctp.initack_initial_tsn']/@show"/--> - <packet name="{$sctp_chunk_type_str}" action="{$action}"> - <frame.time_relative value="{$time_relative}"/> - <frame.number value="{$frame_number}"/> - <!-- TODO: pos_offset(substract it from all pos_offsets in s1ap, may depend on which test scenario protocol target S1AP/NAS or NAS only...)--> - <pos_offset value="{$sctp_pos_offset}"/> - <ip.src value="{$ip_src}"/> - <ip.dst value="{$ip_dst}"/> - <eNB.instance value="{$enb_instance}"/> - <!--sctp.data_sid value="{$sctp_data_sid}"/--> - <!--sctp.srcport value="{$sctp_srcport}"/--> - <!--sctp.dstport value="{$sctp_dstport}"/--> - <!--sctp.initack_nr_in_streams value="{$sctp_initack_nr_in_streams}"/--> - <!--sctp.initack_nr_out_streams value="{$sctp_initack_nr_out_streams}"/--> - <!--sctp.initack_initial_tsn value="{$sctp_initack_initial_tsn}"/--> - <sctp.chunk_type_str value="{$sctp_chunk_type_str}"/> - <xsl:copy-of select="$sctp_node"/> - </packet> - </xsl:when> - <!--xsl:when test="$sctp_chunk_type_str='SACK'"> </xsl:when--> - <!--xsl:when test="$sctp_chunk_type_str='HEARTBEAT'"></xsl:when--> - <!--xsl:when test="$sctp_chunk_type_str='HEARTBEAT_ACK'"></xsl:when--> - <xsl:when test="$sctp_chunk_type_str='ABORT'"> - <packet name="{$sctp_chunk_type_str}" action="{$action}"> - <frame.time_relative value="{$time_relative}"/> - <frame.number value="{$frame_number}"/> - <!-- TODO: pos_offset(substract it from all pos_offsets in s1ap, may depend on which test scenario protocol target S1AP/NAS or NAS only...)--> - <pos_offset value="{$sctp_pos_offset}"/> - <ip.src value="{$ip_src}"/> - <ip.dst value="{$ip_dst}"/> - <eNB.instance value="{$enb_instance}"/> - <!--sctp.data_sid value="{$sctp_data_sid}"/--> - <!--sctp.srcport value="{$sctp_srcport}"/--> - <!--sctp.dstport value="{$sctp_dstport}"/--> - <sctp.chunk_type_str value="{$sctp_chunk_type_str}"/> - <xsl:copy-of select="$sctp_node"/> - </packet> - </xsl:when> - <xsl:when test="$sctp_chunk_type_str='SHUTDOWN'"> - <packet name="{$sctp_chunk_type_str}" action="{$action}"> - <frame.time_relative value="{$time_relative}"/> - <frame.number value="{$frame_number}"/> - <!-- TODO: pos_offset(substract it from all pos_offsets in s1ap, may depend on which test scenario protocol target S1AP/NAS or NAS only...)--> - <pos_offset value="{$sctp_pos_offset}"/> - <ip.src value="{$ip_src}"/> - <ip.dst value="{$ip_dst}"/> - <eNB.instance value="{$enb_instance}"/> - <!--sctp.data_sid value="{$sctp_data_sid}"/--> - <!--sctp.srcport value="{$sctp_srcport}"/--> - <!--sctp.dstport value="{$sctp_dstport}"/--> - <sctp.chunk_type_str value="{$sctp_chunk_type_str}"/> - <xsl:copy-of select="$sctp_node"/> - </packet> - </xsl:when> - <!--xsl:when test="$sctp_chunk_type_str='SHUTDOWN_ACK'"></xsl:when--> - <xsl:when test="$sctp_chunk_type_str='ERROR'"> - <packet name="{$sctp_chunk_type_str}" action="{$action}"> - <frame.time_relative value="{$time_relative}"/> - <frame.number value="{$frame_number}"/> - <!-- TODO: pos_offset(substract it from all pos_offsets in s1ap, may depend on which test scenario protocol target S1AP/NAS or NAS only...)--> - <pos_offset value="{$sctp_pos_offset}"/> - <ip.src value="{$ip_src}"/> - <ip.dst value="{$ip_dst}"/> - <eNB.instance value="{$enb_instance}"/> - <!--sctp.data_sid value="{$sctp_data_sid}"/--> - <!--sctp.srcport value="{$sctp_srcport}"/--> - <!--sctp.dstport value="{$sctp_dstport}"/--> - <sctp.chunk_type_str value="{$sctp_chunk_type_str}"/> - <xsl:copy-of select="$sctp_node"/> - </packet> - </xsl:when> - <!--xsl:when test="$sctp_chunk_type_str='COOKIE_ECHO'"> </xsl:when--> - <!--xsl:when test="$sctp_chunk_type_str='COOKIE_ACK'"> </xsl:when--> - <!--xsl:when test="$sctp_chunk_type_str='ECNE'"> </xsl:when--> - <!--xsl:when test="$sctp_chunk_type_str='CWR'"> </xsl:when--> - <!--xsl:when test="$sctp_chunk_type_str='SHUTDOWN_COMPLETE'"> </xsl:when--> - <xsl:otherwise></xsl:otherwise> - </xsl:choose> - </xsl:for-each> - </xsl:template> -</xsl:stylesheet> diff --git a/openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml b/openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml deleted file mode 100755 index 796fa9a45b980e024c722b36d312fabe52a125c4..0000000000000000000000000000000000000000 --- a/openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -import sys -import subprocess -import re -import socket -import datetime -from datetime import date -import os, errno -import argparse -import tempfile -from lxml import etree -from xml.dom.minidom import parse, parseString - -##################### -# program arguments -##################### -parser = argparse.ArgumentParser() -parser.add_argument("--pcap_file", "-p", type=str,help="input pcap file to be translated") -args = parser.parse_args() - -##################### -# get xml document from pcap -##################### -orig_pcap_file_name = args.pcap_file.strip() -orig_pdml_string = subprocess.check_output(["tshark", '-T', 'pdml', '-r', orig_pcap_file_name]) - -orig_dom = parseString(orig_pdml_string) - -##################### -# filtering unwanted packets -##################### -#cases = orig_etree.findall(".//proto[@name='sctp']") -packets = orig_dom.getElementsByTagName("packet") -for packet in packets: - found_sctp = False - found_s1ap = False - sctp_node = None - frame_node = None - ip_node = None - protos = packet.getElementsByTagName("proto") - for proto in protos: - attrs = proto.attributes - urlnode = attrs['name'] - if urlnode.nodeValue == 'frame': - frame_node = proto - elif urlnode.nodeValue == 'ip': - frame_node.appendChild(proto) - ip_node = proto - elif urlnode.nodeValue == 'sctp': - found_sctp = True - ip_node.appendChild(proto) - sctp_node = proto - elif urlnode.nodeValue == 's1ap': - found_s1ap = True - sctp_node.appendChild(proto) - elif urlnode.nodeValue == 'geninfo': - packet.removeChild(proto) - elif urlnode.nodeValue == 'eth': - packet.removeChild(proto) - if found_sctp == False: - # hopefully it seems to work (remove iterated packet) - packet.parentNode.removeChild(packet) - -##################### -# dom to xml string -##################### -filtered_pdml_string = orig_dom.toprettyxml(indent=" ") -cleaned_pdml_string = "" -##################### -# remove blank lines in xml string -##################### -lines = filtered_pdml_string.splitlines() -for line in lines: - if len(line.strip()): - if line[:-1]: - cleaned_pdml_string += line + '\r\n' -#print "'%s'" % cleaned_pdml_string -##################### -# write pdml string to pdml file -##################### -out_pdml_file_name = os.path.dirname(orig_pcap_file_name) + '/' + os.path.splitext(os.path.basename(orig_pcap_file_name))[0] + '.pdml' -out_file = open(out_pdml_file_name, "w") -out_file.write(cleaned_pdml_string) -out_file.close() - -############################################################ -# DECEIVING HTML BONUS: DO NOT SEEM TO WORK CORRECTLY IN FIREFOX -# DID NOT INVESTIGATE -##################### -# write xml string to html file -##################### -xsl_root = etree.fromstring(open('/usr/share/wireshark/pdml2html.xsl').read()) -transform = etree.XSLT(xsl_root) -xml_root = etree.fromstring(cleaned_pdml_string) -trans_root = transform(xml_root) -filtered_html_string = etree.tostring(trans_root) -##################### -# write html string to html file -##################### -out_html_file_name = os.path.dirname(orig_pcap_file_name) + '/' +os.path.splitext(os.path.basename(orig_pcap_file_name))[0] + '.html' -out_file = open(out_html_file_name, "w") -out_file.write(filtered_html_string) -out_file.close() diff --git a/openair3/TEST/EPC_TEST/play_scenario.c b/openair3/TEST/EPC_TEST/play_scenario.c index 133e9adf4bc1494fd2cca4d585316ef8738042b5..a801d2cf236335ff634abceee1e699194adc6466 100644 --- a/openair3/TEST/EPC_TEST/play_scenario.c +++ b/openair3/TEST/EPC_TEST/play_scenario.c @@ -68,7 +68,6 @@ #define GS_IS_FILE 1 #define GS_IS_DIR 2 //------------------------------------------------------------------------------ -char *g_openair_dir = NULL; Enb_properties_array_t g_enb_properties; //------------------------------------------------------------------------------ extern et_scenario_t *g_scenario; @@ -936,11 +935,6 @@ int main( int argc, char **argv ) char play_scenario_filename[NAME_MAX]; memset(play_scenario_filename, 0, sizeof(play_scenario_filename)); - g_openair_dir = getenv("OPENAIR_DIR"); - if (NULL == g_openair_dir) { - fprintf(stderr, "ERROR: Could not get OPENAIR_DIR environment variable\n"); - exit(1); - } // logging logInit(); diff --git a/openair3/TEST/EPC_TEST/play_scenario.h b/openair3/TEST/EPC_TEST/play_scenario.h index f44974dae01701e580c254406ef39af43c8aa6c1..758ee97981e26c960be3ee4d81b3c49001e7a2cb 100644 --- a/openair3/TEST/EPC_TEST/play_scenario.h +++ b/openair3/TEST/EPC_TEST/play_scenario.h @@ -252,6 +252,7 @@ typedef struct et_s1ap_s { uint16_t binary_stream_allocated_size; uint8_t *binary_stream; s1ap_message message; // decoded message: information elements + xmlNodePtr xml_node; // XML representation of the S1AP PDU } et_s1ap_t; @@ -418,7 +419,7 @@ void et_s1ap_eNB_insert_new_instance(s1ap_eNB_instance_t *new_instance_p); struct s1ap_eNB_mme_data_s *et_s1ap_eNB_get_MME(s1ap_eNB_instance_t *instance_p,int32_t assoc_id, uint16_t cnx_id); s1ap_eNB_instance_t *et_s1ap_eNB_get_instance(instance_t instance); void et_s1ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, uint8_t *buffer,uint32_t buffer_length, uint16_t stream); -int et_handle_s1ap_mismatch(et_packet_t * const spacket, et_packet_t * const rx_packet); +int et_handle_s1ap_mismatch_mme_ue_s1ap_id(et_packet_t * const spacket, et_packet_t * const rx_packet); asn_comp_rval_t* et_s1ap_is_matching(et_s1ap_t * const s1ap1, et_s1ap_t * const s1ap2, const uint32_t constraints); et_packet_t* et_build_packet_from_s1ap_data_ind(et_event_s1ap_data_ind_t * const s1ap_data_ind); int et_scenario_set_packet_received(et_packet_t * const packet); diff --git a/openair3/TEST/EPC_TEST/play_scenario.xsl b/openair3/TEST/EPC_TEST/play_scenario.xsl deleted file mode 100644 index 0ce22c08df954d9cde8375dab1057a30ed352094..0000000000000000000000000000000000000000 --- a/openair3/TEST/EPC_TEST/play_scenario.xsl +++ /dev/null @@ -1,113 +0,0 @@ -<xsl:stylesheet version="1.0" - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns="http://www.w3.org/TR/xhtml1/strict"> - - <xsl:output - method="xml" - indent="yes" - encoding="iso-8859-1" - /> - - <!-- Ugly but no time to find a better way in XSLT 1.0 (map/list)--> - <xsl:param name="enb0_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb1_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb2_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb3_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb4_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb5_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb6_s1c" select="'0.0.0.0'"/> - <xsl:param name="enb7_s1c" select="'0.0.0.0'"/> - <xsl:param name="mme0_s1c_0" select="'0.0.0.0'"/> - <xsl:param name="mme0_s1c_1" select="'0.0.0.0'"/> - <xsl:param name="mme0_s1c_2" select="'0.0.0.0'"/> - <xsl:param name="mme0_s1c_3" select="'0.0.0.0'"/> - <xsl:param name="mme1_s1c_0" select="'0.0.0.0'"/> - <xsl:param name="mme1_s1c_1" select="'0.0.0.0'"/> - <xsl:param name="mme1_s1c_2" select="'0.0.0.0'"/> - <xsl:param name="mme1_s1c_3" select="'0.0.0.0'"/> - <xsl:param name="mme2_s1c_0" select="'0.0.0.0'"/> - <xsl:param name="mme2_s1c_1" select="'0.0.0.0'"/> - <xsl:param name="mme2_s1c_2" select="'0.0.0.0'"/> - <xsl:param name="mme2_s1c_3" select="'0.0.0.0'"/> - <xsl:param name="mme3_s1c_0" select="'0.0.0.0'"/> - <xsl:param name="mme3_s1c_1" select="'0.0.0.0'"/> - <xsl:param name="mme3_s1c_2" select="'0.0.0.0'"/> - <xsl:param name="mme3_s1c_3" select="'0.0.0.0'"/> - - <xsl:template match="ip.src[parent::packet]/@value"> - <xsl:choose> - <xsl:when test=".='enb0_s1c'"><xsl:value-of select="$enb0_s1c"/></xsl:when> - <xsl:when test=".='enb1_s1c'"><xsl:value-of select="$enb1_s1c"/></xsl:when> - <xsl:when test=".='enb2_s1c'"><xsl:value-of select="$enb2_s1c"/></xsl:when> - <xsl:when test=".='enb3_s1c'"><xsl:value-of select="$enb3_s1c"/></xsl:when> - <xsl:when test=".='enb4_s1c'"><xsl:value-of select="$enb4_s1c"/></xsl:when> - <xsl:when test=".='enb5_s1c'"><xsl:value-of select="$enb5_s1c"/></xsl:when> - <xsl:when test=".='enb6_s1c'"><xsl:value-of select="$enb6_s1c"/></xsl:when> - <xsl:when test=".='enb7_s1c'"><xsl:value-of select="$enb7_s1c"/></xsl:when> - <xsl:when test=".='mme0_s1c_0'"><xsl:value-of select="$mme0_s1c_0"/></xsl:when> - <xsl:when test=".='mme0_s1c_1'"><xsl:value-of select="$mme0_s1c_1"/></xsl:when> - <xsl:when test=".='mme0_s1c_2'"><xsl:value-of select="$mme0_s1c_2"/></xsl:when> - <xsl:when test=".='mme0_s1c_3'"><xsl:value-of select="$mme0_s1c_3"/></xsl:when> - <xsl:when test=".='mme1_s1c_0'"><xsl:value-of select="$mme1_s1c_0"/></xsl:when> - <xsl:when test=".='mme1_s1c_1'"><xsl:value-of select="$mme1_s1c_1"/></xsl:when> - <xsl:when test=".='mme1_s1c_2'"><xsl:value-of select="$mme1_s1c_2"/></xsl:when> - <xsl:when test=".='mme1_s1c_3'"><xsl:value-of select="$mme1_s1c_3"/></xsl:when> - <xsl:when test=".='mme2_s1c_0'"><xsl:value-of select="$mme2_s1c_0"/></xsl:when> - <xsl:when test=".='mme2_s1c_1'"><xsl:value-of select="$mme2_s1c_1"/></xsl:when> - <xsl:when test=".='mme2_s1c_2'"><xsl:value-of select="$mme2_s1c_2"/></xsl:when> - <xsl:when test=".='mme2_s1c_3'"><xsl:value-of select="$mme2_s1c_3"/></xsl:when> - <xsl:when test=".='mme3_s1c_0'"><xsl:value-of select="$mme3_s1c_0"/></xsl:when> - <xsl:when test=".='mme3_s1c_1'"><xsl:value-of select="$mme3_s1c_1"/></xsl:when> - <xsl:when test=".='mme3_s1c_2'"><xsl:value-of select="$mme3_s1c_2"/></xsl:when> - <xsl:when test=".='mme3_s1c_3'"><xsl:value-of select="$mme3_s1c_3"/></xsl:when> - <xsl:otherwise> - <xsl:message terminate="yes">ERROR: Cannot resolv IP <xsl:value-of select="."/> ! - </xsl:message> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="ip.dst[parent::packet]/@value"> - <xsl:choose> - <xsl:when test=".='enb0_s1c'"><xsl:value-of select="$enb0_s1c"/></xsl:when> - <xsl:when test=".='enb1_s1c'"><xsl:value-of select="$enb1_s1c"/></xsl:when> - <xsl:when test=".='enb2_s1c'"><xsl:value-of select="$enb2_s1c"/></xsl:when> - <xsl:when test=".='enb3_s1c'"><xsl:value-of select="$enb3_s1c"/></xsl:when> - <xsl:when test=".='enb4_s1c'"><xsl:value-of select="$enb4_s1c"/></xsl:when> - <xsl:when test=".='enb5_s1c'"><xsl:value-of select="$enb5_s1c"/></xsl:when> - <xsl:when test=".='enb6_s1c'"><xsl:value-of select="$enb6_s1c"/></xsl:when> - <xsl:when test=".='enb7_s1c'"><xsl:value-of select="$enb7_s1c"/></xsl:when> - <xsl:when test=".='mme0_s1c_0'"><xsl:value-of select="$mme0_s1c_0"/></xsl:when> - <xsl:when test=".='mme0_s1c_1'"><xsl:value-of select="$mme0_s1c_1"/></xsl:when> - <xsl:when test=".='mme0_s1c_2'"><xsl:value-of select="$mme0_s1c_2"/></xsl:when> - <xsl:when test=".='mme0_s1c_3'"><xsl:value-of select="$mme0_s1c_3"/></xsl:when> - <xsl:when test=".='mme1_s1c_0'"><xsl:value-of select="$mme1_s1c_0"/></xsl:when> - <xsl:when test=".='mme1_s1c_1'"><xsl:value-of select="$mme1_s1c_1"/></xsl:when> - <xsl:when test=".='mme1_s1c_2'"><xsl:value-of select="$mme1_s1c_2"/></xsl:when> - <xsl:when test=".='mme1_s1c_3'"><xsl:value-of select="$mme1_s1c_3"/></xsl:when> - <xsl:when test=".='mme2_s1c_0'"><xsl:value-of select="$mme2_s1c_0"/></xsl:when> - <xsl:when test=".='mme2_s1c_1'"><xsl:value-of select="$mme2_s1c_1"/></xsl:when> - <xsl:when test=".='mme2_s1c_2'"><xsl:value-of select="$mme2_s1c_2"/></xsl:when> - <xsl:when test=".='mme2_s1c_3'"><xsl:value-of select="$mme2_s1c_3"/></xsl:when> - <xsl:when test=".='mme3_s1c_0'"><xsl:value-of select="$mme3_s1c_0"/></xsl:when> - <xsl:when test=".='mme3_s1c_1'"><xsl:value-of select="$mme3_s1c_1"/></xsl:when> - <xsl:when test=".='mme3_s1c_2'"><xsl:value-of select="$mme3_s1c_2"/></xsl:when> - <xsl:when test=".='mme3_s1c_3'"><xsl:value-of select="$mme3_s1c_3"/></xsl:when> - <xsl:otherwise> - <xsl:message terminate="yes">ERROR: Cannot resolv IP <xsl:value-of select="."/> ! - </xsl:message> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="node()|@*"> - <xsl:copy> - <xsl:apply-templates select="node()|@*"/> - </xsl:copy> - </xsl:template> - - <xsl:template match="/"> - <xsl:apply-templates/> - </xsl:template> - -</xsl:stylesheet> diff --git a/openair3/TEST/EPC_TEST/play_scenario_parse.c b/openair3/TEST/EPC_TEST/play_scenario_parse.c index 496102449ac3eba5ccfac581996ef78a246ea420..35ed5c860367275c513b6cf4bb02d692fe916a89 100644 --- a/openair3/TEST/EPC_TEST/play_scenario_parse.c +++ b/openair3/TEST/EPC_TEST/play_scenario_parse.c @@ -58,7 +58,6 @@ //------------------------------------------------------------------------------ #define ENB_CONFIG_MAX_XSLT_PARAMS 32 //------------------------------------------------------------------------------ -extern char *g_openair_dir; extern Enb_properties_array_t g_enb_properties; //------------------------------------------------------------------------------ void et_parse_s1ap(xmlDocPtr doc, const xmlNode const *s1ap_node, et_s1ap_t * const s1ap) @@ -71,6 +70,9 @@ void et_parse_s1ap(xmlDocPtr doc, const xmlNode const *s1ap_node, et_s1ap_t * co unsigned int go_deeper_in_tree = 1; if ((NULL != s1ap_node) && (NULL != s1ap)) { + // seee http://www.xmlsoft.org/html/libxml-tree.html#xmlCopyNode + s1ap->xml_node = xmlCopyNode(s1ap_node, 1); + AssertFatal(NULL != s1ap->xml_node, "xmlCopyNode Failed"); for (cur_node = (xmlNode *)s1ap_node; cur_node; cur_node = cur_node->next) { go_deeper_in_tree = 1; if ((!xmlStrcmp(cur_node->name, (const xmlChar *)"field"))) { @@ -497,17 +499,14 @@ int et_generate_xml_scenario( exit(1); } - memset(astring, 0, sizeof(astring)); - strcat(astring, g_openair_dir); - strcat(astring, "/openair3/TEST/EPC_TEST/play_scenario.xsl"); xmlSubstituteEntitiesDefault(1); xmlLoadExtDtdDefaultValue = 1; - cur = xsltParseStylesheetFile((const xmlChar *)astring); + cur = xsltParseStylesheetFile((const xmlChar *)"/usr/share/oai/xsl/play_scenario.xsl"); if (NULL == cur) { - AssertFatal (0, "Could not parse stylesheet file %s (check OPENAIR_DIR env variable)!\n", astring); + AssertFatal (0, "Could not parse stylesheet file /usr/share/oai/xsl/play_scenario.xsl!\n"); } else { - fprintf(stdout, "XSLT style sheet: %s\n", astring); + fprintf(stdout, "XSLT style sheet: /usr/share/oai/xsl/play_scenario.xsl\n"); } doc = xmlParseFile(xml_in_scenario_filename); diff --git a/openair3/TEST/EPC_TEST/play_scenario_s1ap.c b/openair3/TEST/EPC_TEST/play_scenario_s1ap.c index d58b16c2d35988126d6673f40d1e9d39cb60fa26..f5afebd7868d86431785b9631cd17887234045ef 100644 --- a/openair3/TEST/EPC_TEST/play_scenario_s1ap.c +++ b/openair3/TEST/EPC_TEST/play_scenario_s1ap.c @@ -189,7 +189,7 @@ void et_s1ap_eNB_itti_send_sctp_data_req(instance_t instance, int32_t assoc_id, itti_send_msg_to_task(TASK_SCTP, instance, message_p); } //------------------------------------------------------------------------------ -int et_handle_s1ap_mismatch(et_packet_t * const spacket, et_packet_t * const rx_packet) +int et_handle_s1ap_mismatch_mme_ue_s1ap_id(et_packet_t * const spacket, et_packet_t * const rx_packet) { S1ap_MME_UE_S1AP_ID_t scenario_mme_ue_s1ap_id = 0; S1ap_MME_UE_S1AP_ID_t rx_mme_ue_s1ap_id = 0; @@ -512,7 +512,15 @@ int et_handle_s1ap_mismatch(et_packet_t * const spacket, et_packet_t * const rx_ default: AssertFatal(0, "Unknown procedure code %ld", rx_packet->sctp_hdr.u.data_hdr.payload.message.procedureCode); } - return 0; + if (scenario_mme_ue_s1ap_id != rx_mme_ue_s1ap_id) { + et_packet_t * p = spacket; + while (p) { + et_s1ap_update_mme_ue_s1ap_id(p, scenario_mme_ue_s1ap_id, rx_mme_ue_s1ap_id); + p = p->next; + } + return 0; + } + return 1; } //------------------------------------------------------------------------------ asn_comp_rval_t * et_s1ap_is_matching(et_s1ap_t * const s1ap1, et_s1ap_t * const s1ap2, const uint32_t constraints) @@ -669,7 +677,7 @@ int et_s1ap_process_rx_packet(et_event_s1ap_data_ind_t * const s1ap_data_ind) //TODO MME_UE_S1AP_ID, etc. // get latest error code if (strcmp(comp_results->name, "S1ap-MME-UE-S1AP-ID") == 0) { - if (0 == et_handle_s1ap_mismatch((et_packet_t *const)packet, (et_packet_t *const)rx_packet)) { + if (0 == et_handle_s1ap_mismatch_mme_ue_s1ap_id((et_packet_t *const)packet, (et_packet_t *const)rx_packet)) { packet->timestamp_packet.tv_sec = rx_packet->timestamp_packet.tv_sec; packet->timestamp_packet.tv_usec = rx_packet->timestamp_packet.tv_usec; return et_scenario_set_packet_received(packet); diff --git a/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c b/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c index 213be2b347355e8f06b127ab7dfc6fd2d6fb52fe..3533ee086e272568e63e69beb45cc816d9dabdfd 100644 --- a/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c +++ b/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c @@ -451,3 +451,354 @@ asn_comp_rval_t * et_s1ap_ies_is_matching(const S1AP_PDU_PR present, s1ap_messag } return ret; } + +//------------------------------------------------------------------------------ +int et_s1ap_update_mme_ue_s1ap_id(et_packet_t * const packet, const S1ap_MME_UE_S1AP_ID_t old_id, const S1ap_MME_UE_S1AP_ID_t new_id) +{ + S1ap_MME_UE_S1AP_ID_t mme_ue_s1ap_id = 0; + S1AP_PDU_PR present; + ssize_t encoded; + + present = packet->sctp_hdr.u.data_hdr.payload.pdu.present; + + S1AP_DEBUG("Updating mme_ue_s1ap_id of packet num %d...\n", packet->packet_number); + + switch (packet->sctp_hdr.u.data_hdr.payload.message.procedureCode) { + case S1ap_ProcedureCode_id_HandoverPreparation: + if (present == S1AP_PDU_PR_initiatingMessage) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequiredIEs.mme_ue_s1ap_id; + if (old_id == mme_ue_s1ap_id) { + packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequiredIEs.mme_ue_s1ap_id = new_id; + // re-encode + S1ap_HandoverRequired_t msg; + S1ap_HandoverRequired_t *msg_p = &msg; + memset((void *)msg_p, 0, sizeof(msg)); + + if (s1ap_encode_s1ap_handoverrequiredies( + msg_p, &packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequiredIEs) < 0) { + AssertFatal(0, "Re-encoding handoverrequiredies failed"); + } + + ANY_fromType_aper(&packet->sctp_hdr.u.data_hdr.payload.pdu.choice.initiatingMessage.value, + &asn_DEF_S1ap_HandoverRequired, + &packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequiredIEs); + + packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequiredIEs; + encoded = aper_encode_to_new_buffer(&asn_DEF_S1AP_PDU, 0, &packet->sctp_hdr.u.data_hdr.payload.pdu, + (void **)&packet->sctp_hdr.u.data_hdr.payload.binary_stream); + AssertFatal(encoded < 0, "Re-encoding PDU failed"); + } + } else { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverCommandIEs.mme_ue_s1ap_id; + } + break; + + case S1ap_ProcedureCode_id_HandoverResourceAllocation: + if (present == S1AP_PDU_PR_initiatingMessage) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestIEs.mme_ue_s1ap_id; + } else if (present == S1AP_PDU_PR_successfulOutcome) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverRequestAcknowledgeIEs.mme_ue_s1ap_id; + } else if (present == S1AP_PDU_PR_unsuccessfulOutcome) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverFailureIEs.mme_ue_s1ap_id; + } + break; + + case S1ap_ProcedureCode_id_HandoverNotification: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverNotifyIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_PathSwitchRequest: + //mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PathSwitchRequestIEs.mme_ue_s1ap_id; + //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PathSwitchRequestIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_HandoverCancel: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_HandoverCancelIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_E_RABSetup: + if (present == S1AP_PDU_PR_initiatingMessage) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABSetupRequestIEs.mme_ue_s1ap_id; + } else { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABSetupResponseIEs.mme_ue_s1ap_id; + } + break; + + case S1ap_ProcedureCode_id_E_RABModify: + if (present == S1AP_PDU_PR_initiatingMessage) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABModifyRequestIEs.mme_ue_s1ap_id; + } else { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABModifyResponseIEs.mme_ue_s1ap_id; + } + break; + + case S1ap_ProcedureCode_id_E_RABRelease: + if (present == S1AP_PDU_PR_initiatingMessage) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseCommandIEs.mme_ue_s1ap_id; + } else { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseResponseIEs.mme_ue_s1ap_id; + } + break; + + case S1ap_ProcedureCode_id_E_RABReleaseIndication: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_E_RABReleaseIndicationIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_InitialContextSetup: + if (present == S1AP_PDU_PR_initiatingMessage) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialContextSetupRequestIEs.mme_ue_s1ap_id; + } else { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialContextSetupResponseIEs.mme_ue_s1ap_id; + } + break; + + case S1ap_ProcedureCode_id_Paging: + //mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PagingIEs.mme_ue_s1ap_id; + //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_PagingIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_downlinkNASTransport: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNASTransportIEs.mme_ue_s1ap_id; + if (old_id == mme_ue_s1ap_id) { + packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNASTransportIEs.mme_ue_s1ap_id = new_id; + // re-encode + S1ap_DownlinkNASTransport_t msg; + S1ap_DownlinkNASTransport_t *msg_p = &msg; + memset((void *)msg_p, 0, sizeof(msg)); + + if (s1ap_encode_s1ap_downlinknastransporties( + msg_p, &packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNASTransportIEs) < 0) { + AssertFatal(0, "Re-encoding downlinknastransporties failed"); + } + + ANY_fromType_aper(&packet->sctp_hdr.u.data_hdr.payload.pdu.choice.initiatingMessage.value, + &asn_DEF_S1ap_DownlinkNASTransport, + &packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNASTransportIEs); + + encoded = aper_encode_to_new_buffer(&asn_DEF_S1AP_PDU, 0, &packet->sctp_hdr.u.data_hdr.payload.pdu, + (void **)&packet->sctp_hdr.u.data_hdr.payload.binary_stream); + AssertFatal(encoded < 0, "Re-encoding PDU failed"); + } + break; + + case S1ap_ProcedureCode_id_initialUEMessage: + //mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialUEMessageIEs.mme_ue_s1ap_id; + //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_InitialUEMessageIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_uplinkNASTransport: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNASTransportIEs.mme_ue_s1ap_id; + if (old_id == mme_ue_s1ap_id) { + packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNASTransportIEs.mme_ue_s1ap_id = new_id; + // re-encode + S1ap_UplinkNASTransport_t msg; + S1ap_UplinkNASTransport_t *msg_p = &msg; + memset((void *)msg_p, 0, sizeof(msg)); + + if (s1ap_encode_s1ap_uplinknastransporties( + msg_p, &packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNASTransportIEs) < 0) { + AssertFatal(0, "Re-encoding uplinknastransporties failed"); + } + + ANY_fromType_aper(&packet->sctp_hdr.u.data_hdr.payload.pdu.choice.initiatingMessage.value, + &asn_DEF_S1ap_DownlinkNASTransport, + &packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNASTransportIEs); + + encoded = aper_encode_to_new_buffer(&asn_DEF_S1AP_PDU, 0, &packet->sctp_hdr.u.data_hdr.payload.pdu, + (void **)&packet->sctp_hdr.u.data_hdr.payload.binary_stream); + AssertFatal(encoded < 0, "Re-encoding PDU failed"); + } + break; + + case S1ap_ProcedureCode_id_Reset: + //mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ResetIEs.mme_ue_s1ap_id; + //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ResetIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_ErrorIndication: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ErrorIndicationIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_NASNonDeliveryIndication: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_NASNonDeliveryIndication_IEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_S1Setup: + /*if (present == S1AP_PDU_PR_initiatingMessage) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupRequestIEs.mme_ue_s1ap_id; + scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupRequestIEs.mme_ue_s1ap_id; + } else if (present == S1AP_PDU_PR_successfulOutcome) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupResponseIEs.mme_ue_s1ap_id; + scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupResponseIEs.mme_ue_s1ap_id; + } else if (present == S1AP_PDU_PR_unsuccessfulOutcome) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupFailureIEs.mme_ue_s1ap_id; + scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_S1SetupFailureIEs.mme_ue_s1ap_id; + }*/ + break; + + case S1ap_ProcedureCode_id_UEContextReleaseRequest: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseRequestIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_DownlinkS1cdma2000tunneling: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkS1cdma2000tunnelingIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_UplinkS1cdma2000tunneling: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkS1cdma2000tunnelingIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_UEContextModification: + if (present == S1AP_PDU_PR_initiatingMessage) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationRequestIEs.mme_ue_s1ap_id; + } else if (present == S1AP_PDU_PR_successfulOutcome) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationResponseIEs.mme_ue_s1ap_id; + } else if (present == S1AP_PDU_PR_unsuccessfulOutcome) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextModificationFailureIEs.mme_ue_s1ap_id; + } + break; + + case S1ap_ProcedureCode_id_UECapabilityInfoIndication: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UECapabilityInfoIndicationIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_UEContextRelease: + if (present == S1AP_PDU_PR_initiatingMessage) { + //mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCommandIEs.mme_ue_s1ap_id; + //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCommandIEs.mme_ue_s1ap_id; + } else { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UEContextReleaseCompleteIEs.mme_ue_s1ap_id; + } + break; + + case S1ap_ProcedureCode_id_eNBStatusTransfer: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBStatusTransferIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_MMEStatusTransfer: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEStatusTransferIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_DeactivateTrace: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DeactivateTraceIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_TraceStart: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_TraceStartIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_TraceFailureIndication: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_TraceFailureIndicationIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_ENBConfigurationUpdate: + /*if (present == S1AP_PDU_PR_initiatingMessage) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateIEs.mme_ue_s1ap_id; + scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateIEs.mme_ue_s1ap_id; + } else if (present == S1AP_PDU_PR_successfulOutcome) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateAcknowledgeIEs.mme_ue_s1ap_id; + scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateAcknowledgeIEs.mme_ue_s1ap_id; + } else { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateFailureIEs.mme_ue_s1ap_id; + scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBConfigurationUpdateFailureIEs.mme_ue_s1ap_id; + }*/ + break; + + case S1ap_ProcedureCode_id_MMEConfigurationUpdate: + /*if (present == S1AP_PDU_PR_initiatingMessage) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateIEs.mme_ue_s1ap_id; + scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateIEs.mme_ue_s1ap_id; + } else if (present == S1AP_PDU_PR_successfulOutcome) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateAcknowledgeIEs.mme_ue_s1ap_id; + scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateAcknowledgeIEs.mme_ue_s1ap_id; + } else { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateFailureIEs.mme_ue_s1ap_id; + scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEConfigurationUpdateFailureIEs.mme_ue_s1ap_id; + }*/ + break; + + case S1ap_ProcedureCode_id_LocationReportingControl: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportingControlIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_LocationReportingFailureIndication: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportingFailureIndicationIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_LocationReport: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_LocationReportIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_OverloadStart: + //mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_OverloadStartIEs.mme_ue_s1ap_id; + //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_OverloadStartIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_OverloadStop: + //mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_OverloadStopIEs.mme_ue_s1ap_id; + //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_OverloadStopIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_WriteReplaceWarning: + /*if (present == S1AP_PDU_PR_initiatingMessage) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_WriteReplaceWarningRequestIEs.mme_ue_s1ap_id; + scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_WriteReplaceWarningRequestIEs.mme_ue_s1ap_id; + } else { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_WriteReplaceWarningResponseIEs.mme_ue_s1ap_id; + scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_WriteReplaceWarningResponseIEs.mme_ue_s1ap_id; + }*/ + break; + + case S1ap_ProcedureCode_id_eNBDirectInformationTransfer: + //mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBDirectInformationTransferIEs.mme_ue_s1ap_id; + //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_ENBDirectInformationTransferIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_MMEDirectInformationTransfer: + //mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEDirectInformationTransferIEs.mme_ue_s1ap_id; + //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_MMEDirectInformationTransferIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_PrivateMessage: + case S1ap_ProcedureCode_id_eNBConfigurationTransfer: + case S1ap_ProcedureCode_id_MMEConfigurationTransfer: + AssertFatal(0, "TODO"); + break; + + case S1ap_ProcedureCode_id_CellTrafficTrace: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_CellTrafficTraceIEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_Kill: + /*if (present == S1AP_PDU_PR_initiatingMessage) { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillRequestIEs.mme_ue_s1ap_id; + scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillRequestIEs.mme_ue_s1ap_id; + } else { + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillResponseIEs.mme_ue_s1ap_id; + scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_KillResponseIEs.mme_ue_s1ap_id; + }*/ + break; + + case S1ap_ProcedureCode_id_downlinkUEAssociatedLPPaTransport: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_uplinkUEAssociatedLPPaTransport: + mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_downlinkNonUEAssociatedLPPaTransport: + //mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; + //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_DownlinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; + break; + + case S1ap_ProcedureCode_id_uplinkNonUEAssociatedLPPaTransport: + //mme_ue_s1ap_id = packet->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; + //scenario_mme_ue_s1ap_id = spacket->sctp_hdr.u.data_hdr.payload.message.msg.s1ap_UplinkNonUEAssociatedLPPaTransport_IEs.mme_ue_s1ap_id; + break; + + default: + AssertFatal(0, "Unknown procedure code %ld", packet->sctp_hdr.u.data_hdr.payload.message.procedureCode); + } + return 0; +} diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf index e864f47edb1663570633f9daf064346e42dd289b..a2df43fec0967901a8048654938bceaa08286596 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf @@ -131,7 +131,7 @@ eNBs = ////////// MME parameters: - mme_ip_address = ( { ipv4 = "192.188.2.2"; + mme_ip_address = ( { ipv4 = "192.170.0.1"; ipv6 = "192:168:30::17"; active = "yes"; preference = "ipv4"; @@ -140,12 +140,12 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "tun2"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.188.2.2/24"; + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0:3"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.170.0.2/24"; - ENB_INTERFACE_NAME_FOR_S1U = "lo"; - ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.1/24"; - ENB_PORT_FOR_S1U = 2153; # Spec 2152 + ENB_INTERFACE_NAME_FOR_S1U = "eth0:4"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.170.1.2/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; log_config :