Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG UE
Commits
f510f650
Commit
f510f650
authored
Oct 16, 2015
by
gauthier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Sync for home
parent
ad9e615a
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
4766 additions
and
59 deletions
+4766
-59
openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/attach_complete.pdml
..._TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/attach_complete.pdml
+4242
-0
openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf
...ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf
+174
-0
openair3/TEST/EPC_TEST/generate_scenario.c
openair3/TEST/EPC_TEST/generate_scenario.c
+286
-53
openair3/TEST/EPC_TEST/generic_scenario.xsl
openair3/TEST/EPC_TEST/generic_scenario.xsl
+46
-0
openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml
openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml
+18
-6
No files found.
openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/attach_complete.pdml
0 → 100644
View file @
f510f650
This source diff could not be displayed because it is too large. You can
view the blob
instead.
openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf
0 → 100644
View file @
f510f650
Active_eNBs
= (
"eNB_Eurecom_LTEBox"
);
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity
=
"none"
;
eNBs
=
(
{
//////////
Identification
parameters
:
eNB_ID
=
0
xe00
;
cell_type
=
"CELL_MACRO_ENB"
;
eNB_name
=
"eNB_Eurecom_LTEBox"
;
//
Tracking
area
code
,
0
x0000
and
0
xfffe
are
reserved
values
tracking_area_code
=
"1"
;
mobile_country_code
=
"208"
;
mobile_network_code
=
"95"
;
//////////
Physical
parameters
:
component_carriers
= (
{
frame_type
=
"FDD"
;
tdd_config
=
3
;
tdd_config_s
=
0
;
prefix_type
=
"NORMAL"
;
eutra_band
=
7
;
downlink_frequency
=
2660000000
L
;
uplink_frequency_offset
= -
120000000
;
Nid_cell
=
0
;
N_RB_DL
=
25
;
Nid_cell_mbsfn
=
0
;
nb_antennas_tx
=
1
;
nb_antennas_rx
=
1
;
tx_gain
=
90
;
rx_gain
=
120
;
prach_root
=
0
;
prach_config_index
=
0
;
prach_high_speed
=
"DISABLE"
;
prach_zero_correlation
=
1
;
prach_freq_offset
=
2
;
pucch_delta_shift
=
1
;
pucch_nRB_CQI
=
1
;
pucch_nCS_AN
=
0
;
pucch_n1_AN
=
32
;
pdsch_referenceSignalPower
= -
26
;
pdsch_p_b
=
0
;
pusch_n_SB
=
1
;
pusch_enable64QAM
=
"DISABLE"
;
pusch_hoppingMode
=
"interSubFrame"
;
pusch_hoppingOffset
=
0
;
pusch_groupHoppingEnabled
=
"ENABLE"
;
pusch_groupAssignment
=
0
;
pusch_sequenceHoppingEnabled
=
"DISABLE"
;
pusch_nDMRS1
=
1
;
phich_duration
=
"NORMAL"
;
phich_resource
=
"ONESIXTH"
;
srs_enable
=
"DISABLE"
;
/*
srs_BandwidthConfig
=;
srs_SubframeConfig
=;
srs_ackNackST
=;
srs_MaxUpPts
=;*/
pusch_p0_Nominal
= -
90
;
pusch_alpha
=
"AL1"
;
pucch_p0_Nominal
= -
108
;
msg3_delta_Preamble
=
6
;
pucch_deltaF_Format1
=
"deltaF2"
;
pucch_deltaF_Format1b
=
"deltaF3"
;
pucch_deltaF_Format2
=
"deltaF0"
;
pucch_deltaF_Format2a
=
"deltaF0"
;
pucch_deltaF_Format2b
=
"deltaF0"
;
rach_numberOfRA_Preambles
=
64
;
rach_preamblesGroupAConfig
=
"DISABLE"
;
/*
rach_sizeOfRA_PreamblesGroupA
= ;
rach_messageSizeGroupA
= ;
rach_messagePowerOffsetGroupB
= ;
*/
rach_powerRampingStep
=
4
;
rach_preambleInitialReceivedTargetPower
= -
108
;
rach_preambleTransMax
=
10
;
rach_raResponseWindowSize
=
10
;
rach_macContentionResolutionTimer
=
48
;
rach_maxHARQ_Msg3Tx
=
4
;
pcch_default_PagingCycle
=
128
;
pcch_nB
=
"oneT"
;
bcch_modificationPeriodCoeff
=
2
;
ue_TimersAndConstants_t300
=
1000
;
ue_TimersAndConstants_t301
=
1000
;
ue_TimersAndConstants_t310
=
1000
;
ue_TimersAndConstants_t311
=
10000
;
ue_TimersAndConstants_n310
=
20
;
ue_TimersAndConstants_n311
=
1
;
}
);
srb1_parameters
:
{
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
timer_poll_retransmit
=
80
;
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
timer_reordering
=
35
;
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
timer_status_prohibit
=
0
;
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
poll_pdu
=
4
;
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
poll_byte
=
99999
;
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
max_retx_threshold
=
4
;
}
# ------- SCTP definitions
SCTP
:
{
# Number of streams to use in input/output
SCTP_INSTREAMS
=
2
;
SCTP_OUTSTREAMS
=
2
;
};
//////////
MME
parameters
:
mme_ip_address
= ( {
ipv4
=
"192.188.2.2"
;
ipv6
=
"192:168:30::17"
;
active
=
"yes"
;
preference
=
"ipv4"
;
}
);
NETWORK_INTERFACES
:
{
ENB_INTERFACE_NAME_FOR_S1_MME
=
"tun2"
;
ENB_IPV4_ADDRESS_FOR_S1_MME
=
"192.188.2.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
};
log_config
:
{
global_log_level
=
"info"
;
global_log_verbosity
=
"medium"
;
hw_log_level
=
"info"
;
hw_log_verbosity
=
"medium"
;
phy_log_level
=
"info"
;
phy_log_verbosity
=
"medium"
;
mac_log_level
=
"info"
;
mac_log_verbosity
=
"high"
;
rlc_log_level
=
"info"
;
rlc_log_verbosity
=
"medium"
;
pdcp_log_level
=
"info"
;
pdcp_log_verbosity
=
"medium"
;
rrc_log_level
=
"info"
;
rrc_log_verbosity
=
"medium"
;
gtpu_log_level
=
"info"
;
gtpu_log_verbosity
=
"medium"
;
udp_log_level
=
"info"
;
udp_log_verbosity
=
"medium"
;
};
}
);
openair3/TEST/EPC_TEST/generate_scenario.c
View file @
f510f650
...
@@ -43,6 +43,9 @@
...
@@ -43,6 +43,9 @@
#include <unistd.h>
#include <unistd.h>
#include <errno.h>
#include <errno.h>
#include <fcntl.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <libxml/xmlmemory.h>
#include <libxml/xmlmemory.h>
#include <libxml/debugXML.h>
#include <libxml/debugXML.h>
#include <libxml/HTMLtree.h>
#include <libxml/HTMLtree.h>
...
@@ -95,11 +98,64 @@
...
@@ -95,11 +98,64 @@
#define ENB_CONFIG_MAX_XSLT_PARAMS 64
#define ENB_CONFIG_MAX_XSLT_PARAMS 64
Enb_properties_array_t
g_enb_properties
[
2
];
Enb_properties_array_t
g_enb_properties
[
2
];
char
*
g_test_dir
=
"."
;
// default value
char
*
g_openair_dir
=
NULL
;
char
*
g_pdml_in_basename
=
"trace.pdml"
;
// default value
char
*
g_test_dir
=
NULL
;
char
*
g_pdml_in_origin
=
NULL
;
char
*
g_generic_scenario
=
NULL
;
extern
int
xmlLoadExtDtdDefaultValue
;
extern
int
xmlLoadExtDtdDefaultValue
;
#define GENERATE_PDML_FILE 1
#define GENERATE_GENERIC_SCENARIO 2
#define GENERATE_DEDICATED_SCENARIO 4
#define GS_IS_FILE 1
#define GS_IS_DIR 2
//------------------------------------------------------------------------------
// test if file exist in current directory
int
is_file_exists
(
const
char
const
*
file_nameP
,
const
char
const
*
file_roleP
)
{
struct
stat
s
;
int
err
=
stat
(
file_nameP
,
&
s
);
if
(
-
1
==
err
)
{
if
(
ENOENT
==
errno
)
{
fprintf
(
stderr
,
"Please provide a valid %s, %s does not exist
\n
"
,
file_roleP
,
file_nameP
);
}
else
{
perror
(
"stat"
);
exit
(
1
);
}
}
else
{
if
(
S_ISREG
(
s
.
st_mode
))
{
return
GS_IS_FILE
;
}
else
if
(
S_ISDIR
(
s
.
st_mode
))
{
return
GS_IS_DIR
;
}
else
{
fprintf
(
stderr
,
"Please provide a valid test %s, %s exists but is not found valid
\n
"
,
file_roleP
,
file_nameP
);
}
}
return
0
;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void
generate_scenario
(
const
char
const
*
pdml_in_basenameP
)
// return number of splitted items
int
split_path
(
char
*
pathP
,
char
***
resP
)
{
char
*
saveptr1
;
char
*
p
=
strtok_r
(
pathP
,
"/"
,
&
saveptr1
);
int
n_spaces
=
0
;
/// split string and append tokens to 'res'
while
(
p
)
{
*
resP
=
realloc
(
*
resP
,
sizeof
(
char
*
)
*
++
n_spaces
);
AssertFatal
(
*
resP
,
"realloc failed"
);
(
*
resP
)[
n_spaces
-
1
]
=
p
;
p
=
strtok_r
(
NULL
,
"/"
,
&
saveptr1
);
}
return
n_spaces
;
}
//------------------------------------------------------------------------------
void
generate_generic_scenario
(
const
char
const
*
test_nameP
,
const
char
const
*
pdml_in_basenameP
)
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
{
{
//int fd_pdml_in;
//int fd_pdml_in;
...
@@ -107,33 +163,58 @@ void generate_scenario(const char const * pdml_in_basenameP)
...
@@ -107,33 +163,58 @@ void generate_scenario(const char const * pdml_in_basenameP)
xmlDocPtr
doc
,
res
;
xmlDocPtr
doc
,
res
;
const
char
*
params
[
ENB_CONFIG_MAX_XSLT_PARAMS
];
const
char
*
params
[
ENB_CONFIG_MAX_XSLT_PARAMS
];
int
nb_params
=
0
;
int
nb_params
=
0
;
int
i
,
j
;
char
astring
[
1024
];
struct
in_addr
addr
;
if
(
chdir
(
g_test_dir
)
==
0
)
{
memset
(
astring
,
0
,
sizeof
(
astring
));
printf
(
"working in %s directory
\n
"
,
g_test_dir
);
if
(
getcwd
(
astring
,
sizeof
(
astring
))
!=
NULL
)
{
/*fd_pdml_in = open(pdml_in_basenameP, O_RDONLY);
fprintf
(
stdout
,
"working in %s directory
\n
"
,
astring
);
AssertFatal (fd_pdml_in > 0,
"Error while opening %s file in directory %s\n",
pdml_in_basenameP,
g_test_dir);*/
params
[
nb_params
]
=
NULL
;
xmlSubstituteEntitiesDefault
(
1
);
xmlLoadExtDtdDefaultValue
=
1
;
cur
=
xsltParseStylesheetFile
(
"enb_config.xsl"
);
doc
=
xmlParseFile
(
pdml_in_basenameP
);
res
=
xsltApplyStylesheet
(
cur
,
doc
,
params
);
xsltSaveResultToFile
(
stdout
,
res
,
cur
);
xsltFreeStylesheet
(
cur
);
xmlFreeDoc
(
res
);
xmlFreeDoc
(
doc
);
xsltCleanupGlobals
();
xmlCleanupParser
();
}
else
{
}
else
{
printf
(
"Error: chdir %s returned %s
\n
"
,
g_test_dir
,
strerror
(
errno
));
perror
(
"getcwd() error"
);
exit
(
-
1
);
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
);
doc
=
xmlParseFile
(
pdml_in_basenameP
);
params
[
nb_params
++
]
=
"test_name"
;
sprintf
(
astring
,
"
\"
%s
\"
"
,
test_nameP
);
params
[
nb_params
++
]
=
strdup
(
astring
);
for
(
i
=
0
;
i
<
g_enb_properties
[
ENB_CONFIG_PROPERTIES_INDEX_OLD
].
number
;
i
++
)
{
// eNB S1-C IPv4 address
sprintf
(
astring
,
"enb_s1c%d"
,
i
);
params
[
nb_params
++
]
=
strdup
(
astring
);
addr
.
s_addr
=
g_enb_properties
[
ENB_CONFIG_PROPERTIES_INDEX_OLD
].
properties
[
i
]
->
enb_ipv4_address_for_S1_MME
;
sprintf
(
astring
,
"
\"
%s
\"
"
,
inet_ntoa
(
addr
));
params
[
nb_params
++
]
=
strdup
(
astring
);
// MME S1-C IPv4 address
for
(
j
=
0
;
j
<
g_enb_properties
[
ENB_CONFIG_PROPERTIES_INDEX_OLD
].
properties
[
i
]
->
nb_mme
;
j
++
)
{
sprintf
(
astring
,
"mme_s1c%d_%d"
,
i
,
j
);
params
[
nb_params
++
]
=
strdup
(
astring
);
AssertFatal
(
g_enb_properties
[
ENB_CONFIG_PROPERTIES_INDEX_OLD
].
properties
[
i
]
->
mme_ip_address
[
j
].
ipv4_address
,
"Only support MME IPv4 address
\n
"
);
sprintf
(
astring
,
"
\"
%s
\"
"
,
g_enb_properties
[
ENB_CONFIG_PROPERTIES_INDEX_OLD
].
properties
[
i
]
->
mme_ip_address
[
j
].
ipv4_address
);
params
[
nb_params
++
]
=
strdup
(
astring
);
}
}
}
params
[
nb_params
]
=
NULL
;
res
=
xsltApplyStylesheet
(
cur
,
doc
,
params
);
xsltSaveResultToFile
(
stdout
,
res
,
cur
);
xsltFreeStylesheet
(
cur
);
xmlFreeDoc
(
res
);
xmlFreeDoc
(
doc
);
xsltCleanupGlobals
();
xmlCleanupParser
();
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
...
@@ -403,14 +484,77 @@ static void usage (
...
@@ -403,14 +484,77 @@ static void usage (
{
{
fprintf
(
stdout
,
"Please report any bug to: openair4g-devel@lists.eurecom.fr
\n\n
"
);
fprintf
(
stdout
,
"Please report any bug to: openair4g-devel@lists.eurecom.fr
\n\n
"
);
fprintf
(
stdout
,
"Usage: %s [options]
\n\n
"
,
argv
[
0
]);
fprintf
(
stdout
,
"Usage: %s [options]
\n\n
"
,
argv
[
0
]);
fprintf
(
stdout
,
"Mandatory options:
\n
"
);
fprintf
(
stdout
,
"
\t
-t | --test-dir <dir> Directory where a set of files related to a particular test are located
\n
"
);
fprintf
(
stdout
,
"
\n
"
);
fprintf
(
stdout
,
"Available options:
\n
"
);
fprintf
(
stdout
,
"Available options:
\n
"
);
fprintf
(
stdout
,
"
\t
--help, -h Print this help and return
\n
"
);
fprintf
(
stdout
,
"
\t
-h | --help Print this help and return
\n
"
);
fprintf
(
stdout
,
"
\t
--new-enb-conf-file <file>
\n
"
);
fprintf
(
stdout
,
"
\t
-n | --new-enb-conf-file <file> Provide an updated eNB config file for generating a copy of the original test
\n
"
);
fprintf
(
stdout
,
" Provide an updated eNB config file for generating a copy of the original test
\n
"
);
fprintf
(
stdout
,
" This option is set as many times as there are some eNB config files in the original test
\n
"
);
fprintf
(
stdout
,
" This option is set as many times as there are some eNB config files in the original test
\n
"
);
fprintf
(
stdout
,
"
\t
-o | --old-enb-conf-file <file> Provide the old eNB config file for generating a copy of the original test
\n
"
);
fprintf
(
stdout
,
"
\t
--old-enb-conf-file <file>
\n
"
);
fprintf
(
stdout
,
" This option is set as many times as there are some eNB config files in the original test
\n
"
);
fprintf
(
stdout
,
" Provide the old eNB config file for generating a copy of the original test
\n
"
);
fprintf
(
stdout
,
"
\t
-p | --pdml <file> File name (with no path) of an original scenario that has to be reworked (IP addresses) with new testbed
\n
"
);
fprintf
(
stdout
,
" This option is set as many times as there are some eNB config files in the original test
\n
"
);
fprintf
(
stdout
,
"
\t
-s | --scenario-generic <file> File name (with no path) of a scenario that has to be customized (IP addresses) with new testbed
\n
"
);
fprintf
(
stdout
,
"
\n
"
);
fprintf
(
stdout
,
"
\n
"
);
fprintf
(
stdout
,
"Example of generate_scenario use cases:
\n
"
);
fprintf
(
stdout
,
"
\n
"
);
fprintf
(
stdout
,
" Case 1: generate a generix xml scenario from a captured pcap file:
\n
"
);
fprintf
(
stdout
,
" +---------------------+
\n
"
);
fprintf
(
stdout
,
" |captured pcap-ng file|
\n
"
);
fprintf
(
stdout
,
" +----------+----------+
\n
"
);
fprintf
(
stdout
,
" |
\n
"
);
fprintf
(
stdout
,
" mme_test_s1_pcap2pdml
\n
"
);
fprintf
(
stdout
,
" |
\n
"
);
fprintf
(
stdout
,
" +--------V----------+ +------------------------+
\n
"
);
fprintf
(
stdout
,
" |'pdml-in-orig' file| |'old-enb-conf-file' file|
\n
"
);
fprintf
(
stdout
,
" +--------+----------+ +------------+-----------+
\n
"
);
fprintf
(
stdout
,
" | |
\n
"
);
fprintf
(
stdout
,
" +----------------------------+
\n
"
);
fprintf
(
stdout
,
" |
\n
"
);
fprintf
(
stdout
,
" generate_scenario -t <dir> -p <file> -o <file>
\n
"
);
fprintf
(
stdout
,
" |
\n
"
);
fprintf
(
stdout
,
" +------------V--------------+
\n
"
);
fprintf
(
stdout
,
" +'xml-scenario-generic' file|
\n
"
);
fprintf
(
stdout
,
" +---------------------------+
\n
"
);
fprintf
(
stdout
,
"
\n
"
);
fprintf
(
stdout
,
"
\n
"
);
fprintf
(
stdout
,
" Case 2: generate a dedicated xml scenario from generic xml scenario:
\n
"
);
fprintf
(
stdout
,
"
\n
"
);
fprintf
(
stdout
,
" +---------------------------+ +------------------------+
\n
"
);
fprintf
(
stdout
,
" |'xml-scenario-generic' file| |'new-enb-conf-file' file|
\n
"
);
fprintf
(
stdout
,
" +--------+------------------+ +------------+-----------+
\n
"
);
fprintf
(
stdout
,
" | |
\n
"
);
fprintf
(
stdout
,
" +--------------------+---------------+
\n
"
);
fprintf
(
stdout
,
" |
\n
"
);
fprintf
(
stdout
,
" generate_scenario -t <dir> -s <file> -n <file>
\n
"
);
fprintf
(
stdout
,
" |
\n
"
);
fprintf
(
stdout
,
" +--------------V--------------+
\n
"
);
fprintf
(
stdout
,
" +'xml-scenario-dedicated' file|
\n
"
);
fprintf
(
stdout
,
" +-----------------------------+
\n
"
);
fprintf
(
stdout
,
"
\n
"
);
fprintf
(
stdout
,
"
\n
"
);
fprintf
(
stdout
,
" Case 3 = case 1 + case 2: generate a dedicated xml scenario from a captured pcap file:
\n
"
);
fprintf
(
stdout
,
"
\n
"
);
fprintf
(
stdout
,
" +---------------------+
\n
"
);
fprintf
(
stdout
,
" |captured pcap-ng file|
\n
"
);
fprintf
(
stdout
,
" +----------+----------+
\n
"
);
fprintf
(
stdout
,
" |
\n
"
);
fprintf
(
stdout
,
" mme_test_s1_pcap2pdml
\n
"
);
fprintf
(
stdout
,
" |
\n
"
);
fprintf
(
stdout
,
" +------------------------+ +--------V----------+ +------------------------+
\n
"
);
fprintf
(
stdout
,
" |'old-enb-conf-file' file| |'pdml-in-orig' file| |'new-enb-conf-file' file|
\n
"
);
fprintf
(
stdout
,
" +------------+-----------+ +--------+----------+ +------------+-----------+
\n
"
);
fprintf
(
stdout
,
" | | |
\n
"
);
fprintf
(
stdout
,
" +----------------------+-------------------------+
\n
"
);
fprintf
(
stdout
,
" |
\n
"
);
fprintf
(
stdout
,
" V
\n
"
);
fprintf
(
stdout
,
" generate_scenario -t <dir> -p <file> -o <file> -n <file>
\n
"
);
fprintf
(
stdout
,
" | ^ |
\n
"
);
fprintf
(
stdout
,
" | | |
\n
"
);
fprintf
(
stdout
,
" +--------------V------------+ +------------V----------------+
\n
"
);
fprintf
(
stdout
,
" |'xml-scenario-generic' file| |'xml-scenario-dedicated' file|
\n
"
);
fprintf
(
stdout
,
" +---------------------------+ +-----------------------------+
\n
"
);
}
}
...
@@ -422,20 +566,29 @@ config_parse_opt_line (
...
@@ -422,20 +566,29 @@ config_parse_opt_line (
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
{
{
int
option
;
int
option
;
char
*
enb_config_file_name
=
NULL
;
int
rv
=
0
;
char
*
new_enb_config_file_name
=
NULL
;
char
*
old_enb_config_file_name
=
NULL
;
char
*
pdml_in_file_name
=
NULL
;
char
*
generic_scenario_file_name
=
NULL
;
char
*
test_dir_name
=
NULL
;
enum
long_option_e
{
enum
long_option_e
{
LONG_OPTION_START
=
0x100
,
/* Start after regular single char options */
LONG_OPTION_START
=
0x100
,
/* Start after regular single char options */
LONG_OPTION_NEW_ENB_CONF_FILE
,
LONG_OPTION_NEW_ENB_CONF_FILE
,
LONG_OPTION_OLD_ENB_CONF_FILE
,
LONG_OPTION_OLD_ENB_CONF_FILE
,
LONG_OPTION_PDML_IN_BASENAME
,
LONG_OPTION_PDML
,
LONG_OPTION_TEST_DIR
,
LONG_OPTION_SCENARIO_GENERIC
,
LONG_OPTION_HELP
,
LONG_OPTION_HELP
,
};
};
static
struct
option
long_options
[]
=
{
static
struct
option
long_options
[]
=
{
{
"old-enb-conf-file"
,
required_argument
,
0
,
LONG_OPTION_OLD_ENB_CONF_FILE
},
{
"old-enb-conf-file"
,
required_argument
,
0
,
LONG_OPTION_OLD_ENB_CONF_FILE
},
{
"new-enb-conf-file"
,
required_argument
,
0
,
LONG_OPTION_NEW_ENB_CONF_FILE
},
{
"new-enb-conf-file"
,
required_argument
,
0
,
LONG_OPTION_NEW_ENB_CONF_FILE
},
{
"pdml_in_basename"
,
required_argument
,
0
,
LONG_OPTION_PDML_IN_BASENAME
},
{
"pdml "
,
required_argument
,
0
,
LONG_OPTION_PDML
},
{
"test-dir"
,
required_argument
,
0
,
LONG_OPTION_TEST_DIR
},
{
"scenario-generic"
,
required_argument
,
0
,
LONG_OPTION_SCENARIO_GENERIC
},
{
"help"
,
required_argument
,
0
,
LONG_OPTION_HELP
},
{
"help"
,
required_argument
,
0
,
LONG_OPTION_HELP
},
{
NULL
,
0
,
NULL
,
0
}
{
NULL
,
0
,
NULL
,
0
}
};
};
...
@@ -443,32 +596,53 @@ config_parse_opt_line (
...
@@ -443,32 +596,53 @@ config_parse_opt_line (
/*
/*
* Parsing command line
* Parsing command line
*/
*/
while
((
option
=
getopt_long
(
argc
,
argv
,
"hp:n:o"
,
long_options
,
NULL
))
!=
-
1
)
{
while
((
option
=
getopt_long
(
argc
,
argv
,
"hp:n:o
:s:t
"
,
long_options
,
NULL
))
!=
-
1
)
{
switch
(
option
)
{
switch
(
option
)
{
case
LONG_OPTION_OLD_ENB_CONF_FILE
:
case
LONG_OPTION_OLD_ENB_CONF_FILE
:
case
'o'
:
case
'o'
:
if
(
optarg
)
{
if
(
optarg
)
{
enb_config_file_name
=
optarg
;
old_enb_config_file_name
=
optarg
;
printf
(
"Old eNB config file name is %s
\n
"
,
enb_config_file_name
);
printf
(
"Old eNB config file name is %s
\n
"
,
old_enb_config_file_name
);
enb_config_init
(
enb_config_file_name
,
ENB_CONFIG_PROPERTIES_INDEX_OLD
);
rv
|=
GENERATE_GENERIC_SCENARIO
;
g_test_dir
=
strdup
(
dirname
(
enb_config_file_name
));
}
}
break
;
break
;
case
LONG_OPTION_NEW_ENB_CONF_FILE
:
case
LONG_OPTION_NEW_ENB_CONF_FILE
:
case
'n'
:
case
'n'
:
if
(
optarg
)
{
if
(
optarg
)
{
enb_config_file_name
=
optarg
;
new_
enb_config_file_name
=
optarg
;
printf
(
"New eNB config file name is %s
\n
"
,
enb_config_file_name
);
printf
(
"New eNB config file name is %s
\n
"
,
new_
enb_config_file_name
);
enb_config_init
(
enb_config_file_name
,
ENB_CONFIG_PROPERTIES_INDEX_NEW
)
;
rv
|=
GENERATE_DEDICATED_SCENARIO
;
}
}
break
;
break
;
case
LONG_OPTION_PDML
_IN_BASENAME
:
case
LONG_OPTION_PDML
:
case
'p'
:
case
'p'
:
if
(
optarg
)
{
if
(
optarg
)
{
g_pdml_in_basename
=
strdup
(
optarg
);
pdml_in_file_name
=
strdup
(
optarg
);
printf
(
"PDML input file name is %s
\n
"
,
g_pdml_in_basename
);
printf
(
"PDML input file name is %s
\n
"
,
pdml_in_file_name
);
rv
|=
GENERATE_GENERIC_SCENARIO
;
}
break
;
case
LONG_OPTION_TEST_DIR
:
case
't'
:
if
(
optarg
)
{
test_dir_name
=
strdup
(
optarg
);
if
(
is_file_exists
(
test_dir_name
,
"test dirname"
)
!=
GS_IS_DIR
)
{
fprintf
(
stderr
,
"Please provide a valid test dirname, %s is not a valid directory name
\n
"
,
test_dir_name
);
exit
(
1
);
}
printf
(
"Test dir name is %s
\n
"
,
test_dir_name
);
}
break
;
case
LONG_OPTION_SCENARIO_GENERIC
:
case
's'
:
if
(
optarg
)
{
generic_scenario_file_name
=
strdup
(
optarg
);
printf
(
"Generic XML scenario input file name is %s
\n
"
,
generic_scenario_file_name
);
rv
|=
GENERATE_DEDICATED_SCENARIO
;
}
}
break
;
break
;
...
@@ -479,18 +653,77 @@ config_parse_opt_line (
...
@@ -479,18 +653,77 @@ config_parse_opt_line (
exit
(
0
);
exit
(
0
);
}
}
}
}
return
0
;
if
(
NULL
==
test_dir_name
)
{
fprintf
(
stderr
,
"Please provide a valid test dirname
\n
"
);
exit
(
1
);
}
g_test_dir
=
test_dir_name
;
test_dir_name
=
NULL
;
if
(
chdir
(
g_test_dir
)
!=
0
)
{
fprintf
(
stderr
,
"Error: chdir %s returned %s
\n
"
,
g_test_dir
,
strerror
(
errno
));
exit
(
1
);
}
if
(
rv
&
GENERATE_GENERIC_SCENARIO
)
{
if
(
NULL
==
old_enb_config_file_name
)
{
fprintf
(
stderr
,
"Error: please provide the original eNB config file name that should be in %s
\n
"
,
g_test_dir
);
}
if
(
is_file_exists
(
old_enb_config_file_name
,
"Old eNB config file"
)
!=
GS_IS_FILE
)
{
fprintf
(
stderr
,
"Error: original eNB config file name %s is not found in dir %s
\n
"
,
old_enb_config_file_name
,
g_test_dir
);
}
enb_config_display
(
ENB_CONFIG_PROPERTIES_INDEX_OLD
);
enb_config_init
(
old_enb_config_file_name
,
ENB_CONFIG_PROPERTIES_INDEX_OLD
);
if
(
NULL
==
pdml_in_file_name
)
{
fprintf
(
stderr
,
"Error: please provide the PDML file name that should be in %s
\n
"
,
g_test_dir
);
}
if
(
is_file_exists
(
pdml_in_file_name
,
"PDML file"
)
!=
GS_IS_FILE
)
{
fprintf
(
stderr
,
"Error: PDML file name %s is not found in dir %s
\n
"
,
pdml_in_file_name
,
g_test_dir
);
}
g_pdml_in_origin
=
pdml_in_file_name
;
pdml_in_file_name
=
NULL
;
}
if
(
rv
&
GENERATE_DEDICATED_SCENARIO
)
{
if
(
NULL
==
new_enb_config_file_name
)
{
fprintf
(
stderr
,
"Error: please provide the new eNB config file name that should be in %s
\n
"
,
g_test_dir
);
}
if
(
is_file_exists
(
new_enb_config_file_name
,
"New eNB config file"
)
!=
GS_IS_FILE
)
{
fprintf
(
stderr
,
"Error: New eNB config file name %s is not found in dir %s
\n
"
,
new_enb_config_file_name
,
g_test_dir
);
}
enb_config_display
(
ENB_CONFIG_PROPERTIES_INDEX_NEW
);
enb_config_init
(
new_enb_config_file_name
,
ENB_CONFIG_PROPERTIES_INDEX_NEW
);
if
(
NULL
==
generic_scenario_file_name
)
{
fprintf
(
stderr
,
"Error: please provide the Generic scenario file name that should be in %s
\n
"
,
g_test_dir
);
}
if
(
is_file_exists
(
generic_scenario_file_name
,
"Generic scenario file"
)
!=
GS_IS_FILE
)
{
fprintf
(
stderr
,
"Error: Generic scenario file name %s is not found in dir %s
\n
"
,
generic_scenario_file_name
,
g_test_dir
);
}
g_generic_scenario
=
generic_scenario_file_name
;
generic_scenario_file_name
=
NULL
;
}
return
rv
;
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
int
main
(
int
argc
,
char
**
argv
)
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
[
ENB_CONFIG_PROPERTIES_INDEX_OLD
],
0
,
sizeof
(
g_enb_properties
[
ENB_CONFIG_PROPERTIES_INDEX_OLD
]));
memset
((
char
*
)
&
g_enb_properties
[
ENB_CONFIG_PROPERTIES_INDEX_OLD
],
0
,
sizeof
(
g_enb_properties
[
ENB_CONFIG_PROPERTIES_INDEX_OLD
]));
memset
((
char
*
)
&
g_enb_properties
[
ENB_CONFIG_PROPERTIES_INDEX_NEW
],
0
,
sizeof
(
g_enb_properties
[
ENB_CONFIG_PROPERTIES_INDEX_NEW
]));
memset
((
char
*
)
&
g_enb_properties
[
ENB_CONFIG_PROPERTIES_INDEX_NEW
],
0
,
sizeof
(
g_enb_properties
[
ENB_CONFIG_PROPERTIES_INDEX_NEW
]));
config_parse_opt_line
(
argc
,
argv
);
//Command-line options
enb_config_display
(
ENB_CONFIG_PROPERTIES_INDEX_OLD
);
actions
=
config_parse_opt_line
(
argc
,
argv
);
//Command-line options
enb_config_display
(
ENB_CONFIG_PROPERTIES_INDEX_NEW
);
if
(
actions
&
GENERATE_GENERIC_SCENARIO
)
{
generate_scenario
(
g_pdml_in_basename
);
generate_generic_scenario
(
g_test_dir
,
g_pdml_in_origin
);
}
/*if (actions & GENERATE_DEDICATED_SCENARIO) {
generate_dedicated_scenario(g_test_dir, g_pdml_in_origin);
}*/
return
0
;
return
0
;
}
}
openair3/TEST/EPC_TEST/generic_scenario.xsl
0 → 100644
View file @
f510f650
<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"
/>
<xsl:strip-space
elements=
"proto field"
/>
<scenario
name=
"{$test_name}"
>
<xsl:template
match=
"proto[@name='frame']"
>
<DEBUG_FRAME>
<xsl:variable
name=
"time_relative"
select=
"field[@name='frame.time_relative']/@show"
/>
<xsl:variable
name=
"ip"
select=
"proto[@name='ip']"
/>
<xsl:variable
name=
"ip.src"
select=
"$ip/field[@name='ip.src']/@show"
/>
<xsl:variable
name=
"ip.dst"
select=
"$ip/field[@name='ip.dst']/@show"
/>
<xsl:for-each
select=
"$ip/proto[@name='sctp']"
>
<xsl:variable
name=
"sctp.data_sid"
select=
"./field[@name='sctp.data_sid']/@show"
/>
<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[@name='sctp.data_ssn']/@show"
/>
<xsl:variable
name=
"sctp.data_payload_proto_id"
select=
"./field[@name='sctp.data_payload_proto_id']/@show"
/>
<xsl:for-each
select=
"./proto[@name='s1ap']"
>
<payload
name=
"{ip_dst}"
>
<frame.time_relative
value=
"{$time_relative}"
/>
<ip.dst
value=
"{$ip.dst}"
/>
<ip.src
value=
"{$ip.src}"
/>
<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}"
/>
<xsl:copy-of
select=
"node()"
/>
</payload>
</xsl:for-each>
</xsl:for-each>
</DEBUG_FRAME>
</xsl:template>
</scenario>
</xsl:stylesheet>
openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml
View file @
f510f650
...
@@ -35,14 +35,25 @@ packets = orig_dom.getElementsByTagName("packet")
...
@@ -35,14 +35,25 @@ packets = orig_dom.getElementsByTagName("packet")
for
packet
in
packets
:
for
packet
in
packets
:
found_sctp
=
False
found_sctp
=
False
found_s1ap
=
False
found_s1ap
=
False
sctp_node
=
None
frame_node
=
None
ip_node
=
None
protos
=
packet
.
getElementsByTagName
(
"proto"
)
protos
=
packet
.
getElementsByTagName
(
"proto"
)
for
proto
in
protos
:
for
proto
in
protos
:
attrs
=
proto
.
attributes
attrs
=
proto
.
attributes
urlnode
=
attrs
[
'name'
]
urlnode
=
attrs
[
'name'
]
if
urlnode
.
nodeValue
==
'sctp'
:
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
found_sctp
=
True
ip_node
.
appendChild
(
proto
)
sctp_node
=
proto
elif
urlnode
.
nodeValue
==
's1ap'
:
elif
urlnode
.
nodeValue
==
's1ap'
:
found_s1ap
=
True
found_s1ap
=
True
sctp_node
.
appendChild
(
proto
)
elif
urlnode
.
nodeValue
==
'geninfo'
:
elif
urlnode
.
nodeValue
==
'geninfo'
:
packet
.
removeChild
(
proto
)
packet
.
removeChild
(
proto
)
elif
urlnode
.
nodeValue
==
'eth'
:
elif
urlnode
.
nodeValue
==
'eth'
:
...
@@ -54,20 +65,21 @@ for packet in packets:
...
@@ -54,20 +65,21 @@ for packet in packets:
#####################
#####################
# dom to xml string
# dom to xml string
#####################
#####################
filtered_pdml_string
=
orig_dom
.
to
xml
(
)
filtered_pdml_string
=
orig_dom
.
to
prettyxml
(
indent
=
" "
)
cleaned_pdml_string
=
""
cleaned_pdml_string
=
""
#####################
#####################
# remove blank lines in xml string
# remove blank lines in xml string
#####################
#####################
lines
=
filtered_pdml_string
.
splitlines
()
lines
=
filtered_pdml_string
.
splitlines
()
for
line
in
lines
:
for
line
in
lines
:
if
line
[:
-
1
]:
if
len
(
line
.
strip
()):
cleaned_pdml_string
+=
line
+
'
\r\n
'
if
line
[:
-
1
]:
cleaned_pdml_string
+=
line
+
'
\r\n
'
#print "'%s'" % cleaned_pdml_string
#print "'%s'" % cleaned_pdml_string
#####################
#####################
# write pdml string to pdml file
# 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_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
=
open
(
out_pdml_file_name
,
"w"
)
out_file
.
write
(
cleaned_pdml_string
)
out_file
.
write
(
cleaned_pdml_string
)
out_file
.
close
()
out_file
.
close
()
...
@@ -86,7 +98,7 @@ filtered_html_string = etree.tostring(trans_root)
...
@@ -86,7 +98,7 @@ filtered_html_string = etree.tostring(trans_root)
#####################
#####################
# write html string to html file
# 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_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
=
open
(
out_html_file_name
,
"w"
)
out_file
.
write
(
filtered_html_string
)
out_file
.
write
(
filtered_html_string
)
out_file
.
close
()
out_file
.
close
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment