Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-SMF
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
Operations
Operations
Metrics
Environments
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
OpenXG
OpenXG-SMF
Commits
0eed4679
Commit
0eed4679
authored
May 10, 2020
by
Tien-Thinh Nguyen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
remove dead code/add debug mode/update README
parent
f7504a22
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
70 additions
and
80 deletions
+70
-80
README.txt
README.txt
+9
-6
etc/smf.conf
etc/smf.conf
+0
-6
src/api-server/api/IndividualSMContextApi.cpp
src/api-server/api/IndividualSMContextApi.cpp
+2
-2
src/api-server/api/SMContextsCollectionApi.cpp
src/api-server/api/SMContextsCollectionApi.cpp
+4
-4
src/api-server/impl/SMContextsCollectionApiImpl.cpp
src/api-server/impl/SMContextsCollectionApiImpl.cpp
+5
-5
src/nas/nas_message.c
src/nas/nas_message.c
+6
-1
src/nas/sm/msg/PDUSessionEstablishmentAccept.c
src/nas/sm/msg/PDUSessionEstablishmentAccept.c
+2
-1
src/nas/sm/sm_msg.c
src/nas/sm/sm_msg.c
+2
-1
src/smf_app/smf_app.cpp
src/smf_app/smf_app.cpp
+6
-4
src/smf_app/smf_config.cpp
src/smf_app/smf_config.cpp
+1
-20
src/smf_app/smf_config.hpp
src/smf_app/smf_config.hpp
+0
-9
src/smf_app/smf_context.cpp
src/smf_app/smf_context.cpp
+0
-17
src/smf_app/smf_n1_n2.cpp
src/smf_app/smf_n1_n2.cpp
+33
-4
No files found.
README.txt
View file @
0eed4679
...
...
@@ -6,21 +6,24 @@ The license information is distributed under LICENSE file in the same directory.
The OpenAirInterface CN SMF software is composed of the following parts:
openair-cn5g-smf
├── 3gpp-specs: Directory containing 3GPP specification files (YAML) used to implement SMF network function.
├── build: Build directory, contains targets and object files generated by compilation of network functions.
├── log: Directory containing build log files.
├── scripts: Directory containing scripts for building network functions
├── scripts: Directory containing scripts for building network functions
.
└── smf: Directory containing CMakefile.txt and object files generated by compilation of SMF network function.
├── ci-scripts: Directory containing the script files for CI framework.
├── docs: Directory containing the documentation files.
├── etc: Directory containing the configuration file to be deployed for SMF.
└── src: Source files of SMF.
├── api-server: SMF services APIs.
├── common: Common header files
│ ├── msg: ITTI messages definitions.
│ └── utils: Common utilities.
├── gtpv1u: Generic GTPV1-U stack implementation
├── gtpv2c: Generic GTPV2-C stack implementation
├── itti: Inter task interface
├── nas: NAS protocol implememtation
├──
mgap: NGAP protocol implememtation
├── gtpv1u: Generic GTPV1-U stack implementation
.
├── gtpv2c: Generic GTPV2-C stack implementation
.
├── itti: Inter task interface
.
├── nas: NAS protocol implememtation
.
├──
ngap: NGAP protocol implememtation.
├── oai_smf: SMF main directory, contains the "main" CMakeLists.txt file.
├── pfcp: Generic PFCP stack implementation.
├── smf_app: SMF network functions procedures and contexts.
...
...
etc/smf.conf
View file @
0eed4679
...
...
@@ -89,12 +89,6 @@ SMF =
# Non standard feature, normally should be set to "no", but you may need to set to yes for UE that do not explicitly request a PDN address through NAS signalling
FORCE_PUSH_PROTOCOL_CONFIGURATION_OPTIONS
=
"no"
;
# STRING, {"yes", "no"}.
PCEF
:
{
# Waiting for HSS APN-AMBR IE ...
APN_AMBR_UL
=
500000
;
# Maximum UL bandwidth that can be used by non guaranteed bit rate traffic in Kbits/seconds.
APN_AMBR_DL
=
500000
;
# Maximum DL bandwidth that can be used by non guaranteed bit rate traffic in Kbits/seconds.
};
AMF
:
{
IPV4_ADDRESS
=
"@AMF_IPV4_ADDRESS@"
;
...
...
src/api-server/api/IndividualSMContextApi.cpp
View file @
0eed4679
...
...
@@ -139,7 +139,7 @@ void IndividualSMContextApi::update_sm_context_handler(
Logger
::
smf_api_server
().
debug
(
""
);
Logger
::
smf_api_server
().
info
(
"Received a SM context update request from AMF"
);
"Received a SM context update request from AMF
.
"
);
Logger
::
smf_api_server
().
debug
(
"Request body: %s
\n
"
,
request
.
body
().
c_str
());
//find boundary
...
...
@@ -174,7 +174,7 @@ void IndividualSMContextApi::update_sm_context_handler(
if
((
multipartparser_execute
(
&
parser
,
&
g_callbacks
,
reinterpret_cast
<
const
char
*>
(
data
),
str_len
)
!=
strlen
(
request
.
body
().
c_str
()))
or
(
!
g_body_begin_called
))
{
Logger
::
smf_api_server
().
warn
(
Logger
::
smf_api_server
().
debug
(
"The received message can not be parsed properly!"
);
//TODO: fix this issue
//response.send(Pistache::Http::Code::Bad_Request, "");
...
...
src/api-server/api/SMContextsCollectionApi.cpp
View file @
0eed4679
...
...
@@ -41,7 +41,6 @@
#include <map>
#include <string>
#include "logger.hpp"
#include "Helpers.h"
extern
"C"
{
...
...
@@ -83,8 +82,9 @@ void SMContextsCollectionApi::post_sm_contexts_handler(
const
Pistache
::
Rest
::
Request
&
request
,
Pistache
::
Http
::
ResponseWriter
response
)
{
Logger
::
smf_api_server
().
debug
(
""
);
Logger
::
smf_api_server
().
info
(
"
\n
Received a SM context create request from AMF
"
);
"
Received a SM context create request from AMF.
"
);
Logger
::
smf_api_server
().
debug
(
"Request body: %s"
,
request
.
body
().
c_str
());
//find boundary
...
...
@@ -120,7 +120,7 @@ void SMContextsCollectionApi::post_sm_contexts_handler(
if
((
multipartparser_execute
(
&
parser
,
&
g_callbacks
,
reinterpret_cast
<
const
char
*>
(
data
),
str_len
)
!=
strlen
(
request
.
body
().
c_str
()))
or
(
!
g_body_begin_called
))
{
Logger
::
smf_api_server
().
warn
(
Logger
::
smf_api_server
().
debug
(
"The received message can not be parsed properly!"
);
//TODO: fix this issue
//response.send(Pistache::Http::Code::Bad_Request, "");
...
...
@@ -130,7 +130,7 @@ void SMContextsCollectionApi::post_sm_contexts_handler(
free_wrapper
((
void
**
)
&
data
);
uint8_t
size
=
g_parts
.
size
();
Logger
::
smf_api_server
().
debug
(
"Number of
g_
parts %d"
,
g_parts
.
size
());
Logger
::
smf_api_server
().
debug
(
"Number of
MIME
parts %d"
,
g_parts
.
size
());
//at least 2 parts for Json data and N1 (+ N2)
if
(
g_parts
.
size
()
<
2
)
{
response
.
send
(
Pistache
::
Http
::
Code
::
Bad_Request
,
""
);
...
...
src/api-server/impl/SMContextsCollectionApiImpl.cpp
View file @
0eed4679
...
...
@@ -58,7 +58,7 @@ void SMContextsCollectionApiImpl::post_sm_contexts(
const
SmContextMessage
&
smContextMessage
,
Pistache
::
Http
::
ResponseWriter
&
response
)
{
Logger
::
smf_api_server
().
info
(
"PDU Session Create SM Context Request
..
."
);
Logger
::
smf_api_server
().
info
(
"PDU Session Create SM Context Request."
);
//Assign the necessary informations to smf::pdu_session_create_sm_context_request
//and pass this message to SMF to handle this message
...
...
@@ -88,18 +88,18 @@ void SMContextsCollectionApiImpl::post_sm_contexts(
sm_context_req_msg
.
set_supi
(
supi
);
sm_context_req_msg
.
set_supi_prefix
(
supi_prefix
);
Logger
::
smf_api_server
().
debug
(
"SmContextCreateData,
supi %s, prefix %s, imsi
%s"
,
"SmContextCreateData,
SUPI %s, SUPI Prefix %s, IMSI
%s"
,
smContextCreateData
.
getSupi
().
c_str
(),
supi_prefix
.
c_str
(),
supi_str
.
c_str
());
//dnn
Logger
::
smf_api_server
().
debug
(
"SmContextCreateData,
dnn
%s"
,
Logger
::
smf_api_server
().
debug
(
"SmContextCreateData,
DNN
%s"
,
smContextCreateData
.
getDnn
().
c_str
());
sm_context_req_msg
.
set_dnn
(
smContextCreateData
.
getDnn
().
c_str
());
//S-Nssai
Logger
::
smf_api_server
().
debug
(
"SmContextCreateData, S-NSSAI
sst %d, sd
%s"
,
"SmContextCreateData, S-NSSAI
SST %d, SD
%s"
,
smContextCreateData
.
getSNssai
().
getSst
(),
smContextCreateData
.
getSNssai
().
getSd
().
c_str
());
snssai_t
snssai
(
smContextCreateData
.
getSNssai
().
getSst
(),
...
...
@@ -107,7 +107,7 @@ void SMContextsCollectionApiImpl::post_sm_contexts(
sm_context_req_msg
.
set_snssai
(
snssai
);
//PDU session ID
Logger
::
smf_api_server
().
debug
(
"SmContextCreateData, PDU SessionID %d"
,
Logger
::
smf_api_server
().
debug
(
"SmContextCreateData, PDU Session
ID %d"
,
smContextCreateData
.
getPduSessionId
());
sm_context_req_msg
.
set_pdu_session_id
(
smContextCreateData
.
getPduSessionId
());
...
...
src/nas/nas_message.c
View file @
0eed4679
...
...
@@ -331,14 +331,17 @@ static int _nas_message_header_encode(
//Security header type associated with a spare half octet;
ENCODE_U8
(
buffer
+
size
,
*
((
uint8_t
*
)(
header
)
+
1
),
size
);
//ENCODE_U8 (buffer+size,header->security_header_type,size);
#if DEBUG_IS_ON
printf
(
"extended_protocol_discriminator %d, security_header_type %d
\n
"
,
header
->
extended_protocol_discriminator
,
header
->
security_header_type
);
#endif
if
(
header
->
extended_protocol_discriminator
==
EPD_5GS_MOBILITY_MANAGEMENT_MESSAGES
)
{
// header->extended_protocol_discriminator == EPD_5GS_SESSION_MANAGEMENT_MESSAGES) {
if
(
header
->
security_header_type
!=
SECURITY_HEADER_TYPE_NOT_PROTECTED
)
{
#if DEBUG_IS_ON
printf
(
"security_header_type != SECURITY_HEADER_TYPE_NOT_PROTECTED
\n
"
);
#endif
if
(
length
<
NAS_MESSAGE_SECURITY_HEADER_SIZE
)
{
/*
* The buffer is not big enough to contain security header
...
...
@@ -357,7 +360,9 @@ static int _nas_message_header_encode(
*/
ENCODE_U8
(
buffer
+
size
,
header
->
sequence_number
,
size
);
}
#if DEBUG_IS_ON
printf
(
"security_header_type: SECURITY_HEADER_TYPE_NOT_PROTECTED
\n
"
);
#endif
}
return
size
;
//OAILOG_STREAM_HEX(OAILOG_LEVEL_DEBUG, LOG_NAS, "encode nas header Incoming NAS message: ", buffer, size)
...
...
src/nas/sm/msg/PDUSessionEstablishmentAccept.c
View file @
0eed4679
...
...
@@ -184,8 +184,9 @@ int encode_pdu_session_establishment_accept(
uint8_t
*
buffer
,
uint32_t
len
)
{
uint32_t
encoded
=
0
;
int
encoded_result
=
0
;
#if DEBUG_IS_ON
printf
(
"
\n
Encode PDU Session Establishment Accept
\n
"
);
#endif
// Check if we got a NULL pointer and if buffer length is >= minimum length expected for the message.
CHECK_PDU_POINTER_AND_LENGTH_ENCODER
(
buffer
,
PDU_SESSION_ESTABLISHMENT_ACCEPT_MINIMUM_LENGTH
,
len
);
...
...
src/nas/sm/sm_msg.c
View file @
0eed4679
...
...
@@ -175,8 +175,9 @@ int fivegsm_msg_encode(SM_msg *msg, uint8_t *buffer, uint32_t len) {
buffer
+=
header_result
;
len
-=
header_result
;
#if DEBUG_IS_ON
printf
(
", message type %d"
,
msg
->
header
.
message_type
);
#endif
switch
(
msg
->
header
.
message_type
)
{
case
PDU_SESSION_ESTABLISHMENT_REQUEST
:
encode_result
=
encode_pdu_session_establishment_request
(
...
...
src/smf_app/smf_app.cpp
View file @
0eed4679
...
...
@@ -599,7 +599,7 @@ void smf_app::handle_pdu_session_create_sm_context_request(
//check pdu session id
if
((
pdu_session_id
==
PDU_SESSION_IDENTITY_UNASSIGNED
)
||
(
pdu_session_id
>
PDU_SESSION_IDENTITY_LAST
))
{
Logger
::
smf_app
().
warn
(
" Invalid PDU Session ID value (
psi =
%d)"
,
Logger
::
smf_app
().
warn
(
" Invalid PDU Session ID value (%d)"
,
pdu_session_id
);
//section 7.3.2@3GPP TS 24.501; NAS N1 SM message: ignore the message
return
;
...
...
@@ -697,7 +697,7 @@ void smf_app::handle_pdu_session_create_sm_context_request(
&&
not
is_supi_dnn_snssai_subscription_data
(
supi
,
dnn
,
snssai
))
{
//uses a dummy UDM to test this part
Logger
::
smf_app
().
debug
(
"Retrieve Session Management Subscription data from
an
UDM"
);
"Retrieve Session Management Subscription data from
the
UDM"
);
session_management_subscription
*
s
=
new
session_management_subscription
(
snssai
);
std
::
shared_ptr
<
session_management_subscription
>
subscription
=
...
...
@@ -1058,11 +1058,13 @@ void smf_app::convert_string_2_hex(std::string &input_str,
memset
(
data
,
0
,
input_str
.
length
()
+
1
);
memcpy
((
void
*
)
data
,
(
void
*
)
input_str
.
c_str
(),
input_str
.
length
());
#if DEBUG_IS_ON
Logger
::
smf_app
().
debug
(
"Input: "
);
for
(
int
i
=
0
;
i
<
input_str
.
length
();
i
++
)
{
printf
(
"%02x "
,
data
[
i
]);
}
printf
(
"
\n
"
);
#endif
char
*
datahex
=
(
char
*
)
malloc
(
input_str
.
length
()
*
2
+
1
);
memset
(
datahex
,
0
,
input_str
.
length
()
*
2
+
1
);
...
...
@@ -1091,11 +1093,11 @@ unsigned char* smf_app::format_string_as_hex(std::string &str) {
Logger
::
smf_app
().
debug
(
"[Format string as Hex] Input string (%d bytes): %s "
,
str_len
,
str
.
c_str
());
Logger
::
smf_app
().
debug
(
"Data (formatted):"
);
#if DEBUG_IS_ON
for
(
int
i
=
0
;
i
<
str_len
/
2
;
i
++
)
printf
(
" %02x "
,
data_hex
[
i
]);
printf
(
"
\n
"
);
#endif
//free memory
free_wrapper
((
void
**
)
&
data
);
...
...
src/smf_app/smf_config.cpp
View file @
0eed4679
...
...
@@ -77,8 +77,6 @@ int smf_config::finalize() {
ue_pool_network
[
i
].
s_addr
=
htonl
(
network_hbo
);
ue_pool_netmask
[
i
].
s_addr
=
htonl
(
netmask_hbo
);
}
// "TODO"
//pgw_pcef_emulation_init(config_pP);
Logger
::
smf_app
().
info
(
"Finalized config"
);
return
0
;
}
...
...
@@ -507,19 +505,6 @@ int smf_config::load(const string &config_file) {
}
smf_cfg
.
lookupValue
(
SMF_CONFIG_STRING_UE_MTU
,
ue_mtu
);
const
Setting
&
pcef_cfg
=
smf_cfg
[
SMF_CONFIG_STRING_PCEF
];
unsigned
int
apn_ambr
=
0
;
if
(
!
(
pcef_cfg
.
lookupValue
(
SMF_CONFIG_STRING_APN_AMBR_UL
,
apn_ambr
)))
{
Logger
::
smf_app
().
error
(
SMF_CONFIG_STRING_APN_AMBR_UL
"failed"
);
throw
(
SMF_CONFIG_STRING_APN_AMBR_UL
"failed"
);
}
pcef
.
apn_ambr_ul
=
apn_ambr
;
if
(
!
(
pcef_cfg
.
lookupValue
(
SMF_CONFIG_STRING_APN_AMBR_DL
,
apn_ambr
)))
{
Logger
::
smf_app
().
error
(
SMF_CONFIG_STRING_APN_AMBR_DL
"failed"
);
//throw (SMF_CONFIG_STRING_APN_AMBR_DL "failed");
}
pcef
.
apn_ambr_dl
=
apn_ambr
;
const
Setting
&
amf_cfg
=
smf_cfg
[
SMF_CONFIG_STRING_AMF
];
struct
in_addr
amf_ipv4_addr
;
unsigned
int
amf_port
=
0
;
...
...
@@ -680,11 +665,7 @@ void smf_config::display() {
apn
[
i
].
pool_id_iv6
);
}
}
Logger
::
smf_app
().
info
(
"- PCEF support (in development)"
);
Logger
::
smf_app
().
info
(
" APN AMBR UL ..........: %lu (Kilo bits/s)"
,
pcef
.
apn_ambr_ul
);
Logger
::
smf_app
().
info
(
" APN AMBR DL ..........: %lu (Kilo bits/s)"
,
pcef
.
apn_ambr_dl
);
Logger
::
smf_app
().
info
(
"- Helpers:"
);
Logger
::
smf_app
().
info
(
" Push PCO (DNS+MTU) ........: %s"
,
force_push_pco
==
0
?
"false"
:
"true"
);
...
...
src/smf_app/smf_config.hpp
View file @
0eed4679
...
...
@@ -85,8 +85,6 @@
#define SMF_CONFIG_STRING_IPV4_POOL "IPV4_POOL"
#define SMF_CONFIG_STRING_IPV6_POOL "IPV6_POOL"
#define SMF_CONFIG_STRING_PCEF "PCEF"
#define SMF_CONFIG_STRING_PCEF_ENABLED "PCEF_ENABLED"
#define SMF_CONFIG_STRING_TCP_ECN_ENABLED "TCP_ECN_ENABLED"
#define SMF_CONFIG_STRING_AUTOMATIC_PUSH_DEDICATED_BEARER_PCC_RULE "AUTOMATIC_PUSH_DEDICATED_BEARER_PCC_RULE"
#define SMF_CONFIG_STRING_DEFAULT_BEARER_STATIC_PCC_RULE "DEFAULT_BEARER_STATIC_PCC_RULE"
...
...
@@ -201,12 +199,6 @@ class smf_config {
bool
force_push_pco
;
uint
ue_mtu
;
struct
{
bool
tcp_ecn_enabled
=
false
;
// test for CoDel qdisc
unsigned
int
apn_ambr_ul
;
unsigned
int
apn_ambr_dl
;
}
pcef
;
struct
{
struct
in_addr
ipv4_addr
;
unsigned
int
port
;
...
...
@@ -222,7 +214,6 @@ class smf_config {
smf_config
()
:
m_rw_lock
(),
pcef
(),
num_apn
(
0
),
pid_dir
(),
instance
(
0
),
...
...
src/smf_app/smf_context.cpp
View file @
0eed4679
...
...
@@ -1888,23 +1888,6 @@ void smf_context::handle_pdu_session_update_sm_context_request(
decoded_msg
->
dLQosFlowPerTNLInformation
.
uPTransportLayerInformation
.
choice
.
gTPTunnel
->
transportLayerAddress
.
buf
,
4
);
printf
(
"gTP_TEID:"
);
printf
(
"%02x "
,
decoded_msg
->
dLQosFlowPerTNLInformation
.
uPTransportLayerInformation
.
choice
.
gTPTunnel
->
gTP_TEID
.
buf
[
0
]);
printf
(
"%02x "
,
decoded_msg
->
dLQosFlowPerTNLInformation
.
uPTransportLayerInformation
.
choice
.
gTPTunnel
->
gTP_TEID
.
buf
[
1
]);
printf
(
"%02x "
,
decoded_msg
->
dLQosFlowPerTNLInformation
.
uPTransportLayerInformation
.
choice
.
gTPTunnel
->
gTP_TEID
.
buf
[
2
]);
printf
(
"%02x
\n
"
,
decoded_msg
->
dLQosFlowPerTNLInformation
.
uPTransportLayerInformation
.
choice
.
gTPTunnel
->
gTP_TEID
.
buf
[
3
]);
Logger
::
smf_app
().
debug
(
"gTP_TEID "
"0x%"
PRIx32
" "
,
htonl
(
dl_teid
.
teid_gre_key
));
Logger
::
smf_app
().
debug
(
"uPTransportLayerInformation IP Addr %s"
,
...
...
src/smf_app/smf_n1_n2.cpp
View file @
0eed4679
...
...
@@ -314,12 +314,12 @@ void smf_n1_n2::create_n1_sm_container(pdu_session_msg &msg,
//Encode NAS message
bytes
=
nas_message_encode
(
data
,
&
nas_msg
,
sizeof
(
data
)
/*don't know the size*/
,
nullptr
);
#if DEBUG_IS_ON
Logger
::
smf_app
().
debug
(
"Buffer Data: "
);
for
(
int
i
=
0
;
i
<
bytes
;
i
++
)
printf
(
"%02x "
,
data
[
i
]);
printf
(
" (bytes %d)
\n
"
,
bytes
);
#endif
std
::
string
n1Message
((
char
*
)
data
,
bytes
);
nas_msg_str
=
n1Message
;
...
...
@@ -425,11 +425,12 @@ void smf_n1_n2::create_n1_sm_container(pdu_session_msg &msg,
bytes
=
nas_message_encode
(
data
,
&
nas_msg
,
sizeof
(
data
)
/*don't know the size*/
,
nullptr
);
#if DEBUG_IS_ON
Logger
::
smf_app
().
debug
(
"Buffer Data: "
);
for
(
int
i
=
0
;
i
<
bytes
;
i
++
)
printf
(
"%02x "
,
data
[
i
]);
printf
(
" (bytes %d)
\n
"
,
bytes
);
#endif
std
::
string
n1Message
((
char
*
)
data
,
bytes
);
nas_msg_str
=
n1Message
;
...
...
@@ -543,10 +544,12 @@ void smf_n1_n2::create_n1_sm_container(pdu_session_msg &msg,
bytes
=
nas_message_encode
(
data
,
&
nas_msg
,
sizeof
(
data
)
/*don't know the size*/
,
nullptr
);
#if DEBUG_IS_ON
Logger
::
smf_app
().
debug
(
"Buffer Data: "
);
for
(
int
i
=
0
;
i
<
bytes
;
i
++
)
printf
(
"%02x "
,
data
[
i
]);
printf
(
" (bytes %d)
\n
"
,
bytes
);
#endif
std
::
string
n1Message
((
char
*
)
data
,
bytes
);
nas_msg_str
=
n1Message
;
...
...
@@ -599,10 +602,12 @@ void smf_n1_n2::create_n1_sm_container(pdu_session_msg &msg,
bytes
=
nas_message_encode
(
data
,
&
nas_msg
,
sizeof
(
data
)
/*don't know the size*/
,
nullptr
);
#if DEBUG_IS_ON
Logger
::
smf_app
().
debug
(
"Buffer Data: "
);
for
(
int
i
=
0
;
i
<
bytes
;
i
++
)
printf
(
"%02x "
,
data
[
i
]);
printf
(
" (bytes %d)
\n
"
,
bytes
);
#endif
std
::
string
n1Message
((
char
*
)
data
,
bytes
);
nas_msg_str
=
n1Message
;
...
...
@@ -639,10 +644,12 @@ void smf_n1_n2::create_n1_sm_container(pdu_session_msg &msg,
bytes
=
nas_message_encode
(
data
,
&
nas_msg
,
sizeof
(
data
)
/*don't know the size*/
,
nullptr
);
#if DEBUG_IS_ON
Logger
::
smf_app
().
debug
(
"Buffer Data: "
);
for
(
int
i
=
0
;
i
<
bytes
;
i
++
)
printf
(
"%02x "
,
data
[
i
]);
printf
(
" (bytes %d)
\n
"
,
bytes
);
#endif
std
::
string
n1Message
((
char
*
)
data
,
bytes
);
nas_msg_str
=
n1Message
;
...
...
@@ -903,10 +910,13 @@ void smf_n1_n2::create_n2_sm_information(pdu_session_msg &msg,
return
;
}
#if DEBUG_IS_ON
Logger
::
smf_app
().
debug
(
"N2 SM buffer data: "
);
for
(
int
i
=
0
;
i
<
er
.
encoded
;
i
++
)
printf
(
"%02x "
,
(
char
)
buffer
[
i
]);
printf
(
" (%d bytes)
\n
"
,
(
int
)
er
.
encoded
);
#endif
std
::
string
ngap_message
((
char
*
)
buffer
,
er
.
encoded
);
ngap_msg_str
=
ngap_message
;
...
...
@@ -1164,10 +1174,13 @@ void smf_n1_n2::create_n2_sm_information(pdu_session_msg &msg,
return
;
}
#if DEBUG_IS_ON
Logger
::
smf_app
().
debug
(
"N2 SM buffer data: "
);
for
(
int
i
=
0
;
i
<
er
.
encoded
;
i
++
)
printf
(
"%02x "
,
(
char
)
buffer
[
i
]);
printf
(
" (%d bytes)
\n
"
,
(
int
)
er
.
encoded
);
#endif
std
::
string
ngap_message
((
char
*
)
buffer
,
er
.
encoded
);
ngap_msg_str
=
ngap_message
;
...
...
@@ -1286,10 +1299,13 @@ void smf_n1_n2::create_n2_sm_information(pdu_session_msg &msg,
return
;
}
#if DEBUG_IS_ON
Logger
::
smf_app
().
debug
(
"N2 SM buffer data: "
);
for
(
int
i
=
0
;
i
<
er
.
encoded
;
i
++
)
printf
(
"%02x "
,
(
char
)
buffer
[
i
]);
Logger
::
smf_app
().
debug
(
" (%d bytes)
\n
"
,
er
.
encoded
);
#endif
std
::
string
ngap_message
((
char
*
)
buffer
,
er
.
encoded
);
ngap_msg_str
=
ngap_message
;
...
...
@@ -1386,10 +1402,13 @@ void smf_n1_n2::create_n2_sm_information(pdu_session_msg &msg,
return
;
}
#if DEBUG_IS_ON
Logger
::
smf_app
().
debug
(
"N2 SM buffer data: "
);
for
(
int
i
=
0
;
i
<
er
.
encoded
;
i
++
)
printf
(
"%02x "
,
(
char
)
buffer
[
i
]);
Logger
::
smf_app
().
debug
(
" (%d bytes)
\n
"
,
er
.
encoded
);
#endif
std
::
string
ngap_message
((
char
*
)
buffer
,
er
.
encoded
);
ngap_msg_str
=
ngap_message
;
...
...
@@ -1458,10 +1477,13 @@ void smf_n1_n2::create_n2_sm_information(pdu_session_msg &msg,
return
;
}
#if DEBUG_IS_ON
Logger
::
smf_app
().
debug
(
"N2 SM buffer data: "
);
for
(
int
i
=
0
;
i
<
er
.
encoded
;
i
++
)
printf
(
"%02x "
,
(
char
)
buffer
[
i
]);
Logger
::
smf_app
().
debug
(
" (%d bytes)
\n
"
,
er
.
encoded
);
#endif
std
::
string
ngap_message
((
char
*
)
buffer
,
er
.
encoded
);
ngap_msg_str
=
ngap_message
;
...
...
@@ -1501,10 +1523,13 @@ void smf_n1_n2::create_n2_sm_information(pdu_session_msg &msg,
return
;
}
#if DEBUG_IS_ON
Logger
::
smf_app
().
debug
(
"N2 SM buffer data: "
);
for
(
int
i
=
0
;
i
<
er
.
encoded
;
i
++
)
printf
(
"%02x "
,
(
char
)
buffer
[
i
]);
Logger
::
smf_app
().
debug
(
" (%d bytes)
\n
"
,
er
.
encoded
);
#endif
std
::
string
ngap_message
((
char
*
)
buffer
,
er
.
encoded
);
ngap_msg_str
=
ngap_message
;
...
...
@@ -1525,7 +1550,7 @@ void smf_n1_n2::create_n2_sm_information(pdu_session_msg &msg,
//------------------------------------------------------------------------------
int
smf_n1_n2
::
decode_n1_sm_container
(
nas_message_t
&
nas_msg
,
std
::
string
&
n1_sm_msg
)
{
Logger
::
smf_app
().
info
(
"Decode NAS message from N1 SM Container"
);
Logger
::
smf_app
().
info
(
"Decode NAS message from N1 SM Container
.
"
);
//step 1. Decode NAS message (for instance, ... only served as an example)
nas_message_decode_status_t
decode_status
=
{
0
};
...
...
@@ -1536,10 +1561,12 @@ int smf_n1_n2::decode_n1_sm_container(nas_message_t &nas_msg,
memset
(
data
,
0
,
data_len
+
1
);
memcpy
((
void
*
)
data
,
(
void
*
)
n1_sm_msg
.
c_str
(),
data_len
);
#if DEBUG_IS_ON
printf
(
"Content: "
);
for
(
int
i
=
0
;
i
<
data_len
;
i
++
)
printf
(
" %02x "
,
data
[
i
]);
printf
(
"
\n
"
);
#endif
//decode the NAS message (using NAS lib)
decoder_rc
=
nas_message_decode
(
data
,
&
nas_msg
,
data_len
,
nullptr
,
...
...
@@ -1577,10 +1604,12 @@ int smf_n1_n2::decode_n2_sm_information(
memset
(
data
,
0
,
data_len
+
1
);
memcpy
((
void
*
)
data
,
(
void
*
)
n2_sm_info
.
c_str
(),
data_len
);
#if DEBUG_IS_ON
printf
(
"Content: "
);
for
(
int
i
=
0
;
i
<
data_len
;
i
++
)
printf
(
" %02x "
,
data
[
i
]);
printf
(
"
\n
"
);
#endif
//PDUSessionResourceSetupResponseTransfer
asn_dec_rval_t
rc
=
asn_decode
(
...
...
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