Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-AMF
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
1
Issues
1
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-AMF
Commits
ee7821eb
Commit
ee7821eb
authored
Aug 18, 2021
by
Tien-Thinh Nguyen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix issue for PDU Sesison ID in Handover Request
parent
be44223d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
32 additions
and
21 deletions
+32
-21
src/amf-app/amf_n2.cpp
src/amf-app/amf_n2.cpp
+23
-15
src/ngap/ngapIEs/PDUSessionResourceListHORqd.cpp
src/ngap/ngapIEs/PDUSessionResourceListHORqd.cpp
+4
-2
src/ngap/ngapMsgs/HandoverRequiredMsg.cpp
src/ngap/ngapMsgs/HandoverRequiredMsg.cpp
+5
-4
No files found.
src/amf-app/amf_n2.cpp
View file @
ee7821eb
...
@@ -1233,6 +1233,8 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
...
@@ -1233,6 +1233,8 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
handover_request
->
setUESecurityCapabilities
(
handover_request
->
setUESecurityCapabilities
(
0xe000
,
0xe000
,
0xe000
,
0xe000
);
// TODO: remove hardcoded values
0xe000
,
0xe000
,
0xe000
,
0xe000
);
// TODO: remove hardcoded values
handover_request
->
setSourceToTarget_TransparentContainer
(
sourceTotarget
);
// Allowed NSSAI
// Allowed NSSAI
std
::
vector
<
S_NSSAI
>
Allowed_Nssai
;
std
::
vector
<
S_NSSAI
>
Allowed_Nssai
;
for
(
int
i
=
0
;
i
<
amf_cfg
.
plmn_list
.
size
();
i
++
)
{
for
(
int
i
=
0
;
i
<
amf_cfg
.
plmn_list
.
size
();
i
++
)
{
...
@@ -1244,7 +1246,9 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
...
@@ -1244,7 +1246,9 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
Allowed_Nssai
.
push_back
(
s_nssai
);
Allowed_Nssai
.
push_back
(
s_nssai
);
}
}
}
}
handover_request
->
setAllowedNSSAI
(
Allowed_Nssai
);
// GUAMI, PLMN
Guami_t
guami
=
{};
Guami_t
guami
=
{};
guami
.
mcc
=
amf_cfg
.
guami
.
mcc
;
guami
.
mcc
=
amf_cfg
.
guami
.
mcc
;
guami
.
mnc
=
amf_cfg
.
guami
.
mnc
;
guami
.
mnc
=
amf_cfg
.
guami
.
mnc
;
...
@@ -1260,10 +1264,18 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
...
@@ -1260,10 +1264,18 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
m_aMFSetID
->
setAMFSetID
(
guami
.
AmfSetID
);
m_aMFSetID
->
setAMFSetID
(
guami
.
AmfSetID
);
m_aMFPointer
->
setAMFPointer
(
guami
.
AmfPointer
);
m_aMFPointer
->
setAMFPointer
(
guami
.
AmfPointer
);
handover_request
->
setMobilityRestrictionList
(
m_plmnId
);
handover_request
->
setGUAMI
(
m_plmnId
,
m_aMFRegionID
,
m_aMFSetID
,
m_aMFPointer
);
// Security context
std
::
shared_ptr
<
nas_context
>
nc
=
std
::
shared_ptr
<
nas_context
>
nc
=
amf_n1_inst
->
amf_ue_id_2_nas_context
(
amf_ue_ngap_id
);
amf_n1_inst
->
amf_ue_id_2_nas_context
(
amf_ue_ngap_id
);
nas_secu_ctx
*
secu
=
nc
.
get
()
->
security_ctx
;
nas_secu_ctx
*
secu
=
nc
.
get
()
->
security_ctx
;
uint8_t
*
kamf
=
nc
.
get
()
->
kamf
[
secu
->
vector_pointer
];
if
(
!
secu
)
{
Logger
::
amf_n1
().
error
(
"No Security Context found"
);
return
false
;
}
uint8_t
*
kamf
=
nc
.
get
()
->
kamf
[
secu
->
vector_pointer
];
uint8_t
kgnb
[
32
];
uint8_t
kgnb
[
32
];
uint32_t
ulcount
=
secu
->
ul_count
.
seq_num
|
(
secu
->
ul_count
.
overflow
<<
8
);
uint32_t
ulcount
=
secu
->
ul_count
.
seq_num
|
(
secu
->
ul_count
.
overflow
<<
8
);
Logger
::
amf_n1
().
debug
(
"Uplink count (%d)"
,
secu
->
ul_count
.
seq_num
);
Logger
::
amf_n1
().
debug
(
"Uplink count (%d)"
,
secu
->
ul_count
.
seq_num
);
...
@@ -1289,9 +1301,6 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
...
@@ -1289,9 +1301,6 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
"Decoding PDU Session Resource List IE error or IE missing"
);
"Decoding PDU Session Resource List IE error or IE missing"
);
}
}
std
::
vector
<
PDUSessionResourceSetupRequestItem_t
>
list
;
PDUSessionResourceSetupRequestItem_t
item
=
{};
std
::
map
<
uint8_t
,
boost
::
shared_future
<
std
::
string
>>
curl_responses
;
std
::
map
<
uint8_t
,
boost
::
shared_future
<
std
::
string
>>
curl_responses
;
for
(
auto
pdu_session_resource
:
pdu_session_resource_list
)
{
for
(
auto
pdu_session_resource
:
pdu_session_resource_list
)
{
...
@@ -1327,7 +1336,7 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
...
@@ -1327,7 +1336,7 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
"task TASK_AMF_N11"
);
"task TASK_AMF_N11"
);
itti_nsmf_pdusession_update_sm_context
*
itti_msg
=
itti_nsmf_pdusession_update_sm_context
*
itti_msg
=
new
itti_nsmf_pdusession_update_sm_context
(
TASK_NGAP
,
TASK_AMF_N11
);
new
itti_nsmf_pdusession_update_sm_context
(
TASK_NGAP
,
TASK_AMF_N11
);
itti_msg
->
pdu_session_id
=
item
.
pduSessionId
;
itti_msg
->
pdu_session_id
=
pdu_session_resource
.
pduSessionId
;
itti_msg
->
n2sm
=
blk2bstr
(
itti_msg
->
n2sm
=
blk2bstr
(
pdu_session_resource
.
HandoverRequiredTransfer
.
buf
,
pdu_session_resource
.
HandoverRequiredTransfer
.
buf
,
pdu_session_resource
.
HandoverRequiredTransfer
.
size
);
pdu_session_resource
.
HandoverRequiredTransfer
.
size
);
...
@@ -1350,6 +1359,8 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
...
@@ -1350,6 +1359,8 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
// TODO: Handover Response supervision
// TODO: Handover Response supervision
// Wait until receiving all responses from SMFs before sending Handover
// Wait until receiving all responses from SMFs before sending Handover
std
::
vector
<
PDUSessionResourceSetupRequestItem_t
>
list
;
bool
result
=
true
;
bool
result
=
true
;
while
(
!
curl_responses
.
empty
())
{
while
(
!
curl_responses
.
empty
())
{
boost
::
future_status
status
;
boost
::
future_status
status
;
...
@@ -1370,12 +1381,13 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
...
@@ -1370,12 +1381,13 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
std
::
shared_ptr
<
pdu_session_context
>
psc
=
{};
std
::
shared_ptr
<
pdu_session_context
>
psc
=
{};
if
(
amf_app_inst
->
find_pdu_session_context
(
if
(
amf_app_inst
->
find_pdu_session_context
(
supi
,
curl_responses
.
begin
()
->
first
,
psc
))
{
supi
,
curl_responses
.
begin
()
->
first
,
psc
))
{
item
.
pduSessionId
=
psc
.
get
()
->
pdu_session_id
;
PDUSessionResourceSetupRequestItem_t
item
=
{};
item
.
s_nssai
.
sst
=
psc
.
get
()
->
snssai
.
sST
;
item
.
pduSessionId
=
psc
.
get
()
->
pdu_session_id
;
item
.
s_nssai
.
sd
=
psc
.
get
()
->
snssai
.
sD
;
item
.
s_nssai
.
sst
=
psc
.
get
()
->
snssai
.
sST
;
item
.
pduSessionNAS_PDU
=
nullptr
;
item
.
s_nssai
.
sd
=
psc
.
get
()
->
snssai
.
sD
;
unsigned
int
data_len
=
n2_sm
.
length
();
item
.
pduSessionNAS_PDU
=
nullptr
;
unsigned
char
*
data
=
(
unsigned
char
*
)
malloc
(
data_len
+
1
);
unsigned
int
data_len
=
n2_sm
.
length
();
unsigned
char
*
data
=
(
unsigned
char
*
)
malloc
(
data_len
+
1
);
memset
(
data
,
0
,
data_len
+
1
);
memset
(
data
,
0
,
data_len
+
1
);
memcpy
((
void
*
)
data
,
(
void
*
)
n2_sm
.
c_str
(),
data_len
);
memcpy
((
void
*
)
data
,
(
void
*
)
n2_sm
.
c_str
(),
data_len
);
item
.
pduSessionResourceSetupRequestTransfer
.
buf
=
data
;
item
.
pduSessionResourceSetupRequestTransfer
.
buf
=
data
;
...
@@ -1397,10 +1409,6 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
...
@@ -1397,10 +1409,6 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
// Request to Target RAN
// Request to Target RAN
handover_request
->
setPduSessionResourceSetupList
(
list
);
handover_request
->
setPduSessionResourceSetupList
(
list
);
handover_request
->
setAllowedNSSAI
(
Allowed_Nssai
);
handover_request
->
setSourceToTarget_TransparentContainer
(
sourceTotarget
);
handover_request
->
setMobilityRestrictionList
(
m_plmnId
);
handover_request
->
setGUAMI
(
m_plmnId
,
m_aMFRegionID
,
m_aMFSetID
,
m_aMFPointer
);
uint8_t
buffer
[
BUFFER_SIZE_2048
];
uint8_t
buffer
[
BUFFER_SIZE_2048
];
int
encoded_size
=
handover_request
->
encode2buffer
(
buffer
,
BUFFER_SIZE_2048
);
int
encoded_size
=
handover_request
->
encode2buffer
(
buffer
,
BUFFER_SIZE_2048
);
...
...
src/ngap/ngapIEs/PDUSessionResourceListHORqd.cpp
View file @
ee7821eb
...
@@ -67,8 +67,10 @@ bool PDUSessionResourceListHORqd::decodefromPDUSessionResourceListHORqd(
...
@@ -67,8 +67,10 @@ bool PDUSessionResourceListHORqd::decodefromPDUSessionResourceListHORqd(
}
}
void
PDUSessionResourceListHORqd
::
getPDUSessionResourceListHORqd
(
void
PDUSessionResourceListHORqd
::
getPDUSessionResourceListHORqd
(
PDUSessionResourceItemHORqd
*&
m_pduSessionResourceItemHORqd
,
int
&
num
)
{
PDUSessionResourceItemHORqd
*&
m_pduSessionResourceItemHORqd
,
int
&
num
)
{
m_pduSessionResourceItemHORqd
=
pduSessionResourceItemHORqd
;
if
(
pduSessionResourceItemHORqd
)
{
num
=
numofpduSessionResourceItemHORqd
;
m_pduSessionResourceItemHORqd
=
pduSessionResourceItemHORqd
;
num
=
numofpduSessionResourceItemHORqd
;
}
}
}
}
// namespace ngap
}
// namespace ngap
src/ngap/ngapMsgs/HandoverRequiredMsg.cpp
View file @
ee7821eb
...
@@ -131,15 +131,16 @@ bool HandoverRequiredMsg::getPDUSessionResourceList(
...
@@ -131,15 +131,16 @@ bool HandoverRequiredMsg::getPDUSessionResourceList(
std
::
vector
<
PDUSessionResourceItem_t
>&
list
)
{
std
::
vector
<
PDUSessionResourceItem_t
>&
list
)
{
if
(
!
PDUSessionResourceList
)
return
false
;
if
(
!
PDUSessionResourceList
)
return
false
;
PDUSessionResourceItemHORqd
*
m_pduSessionResourceItemHORqd
;
PDUSessionResourceItemHORqd
*
m_pduSessionResourceItemHORqd
=
nullptr
;
int
num
=
0
;
int
num
=
0
;
PDUSessionResourceList
->
getPDUSessionResourceListHORqd
(
PDUSessionResourceList
->
getPDUSessionResourceListHORqd
(
m_pduSessionResourceItemHORqd
,
num
);
m_pduSessionResourceItemHORqd
,
num
);
if
(
!
m_pduSessionResourceItemHORqd
)
return
false
;
for
(
int
i
=
0
;
i
<
num
;
i
++
)
{
for
(
int
i
=
0
;
i
<
num
;
i
++
)
{
PDUSessionResourceItem_t
response
;
PDUSessionResourceItem_t
response
=
{}
;
PDUSessionID
*
m_pDUSessionID
;
PDUSessionID
*
m_pDUSessionID
=
nullptr
;
m_pduSessionResourceItemHORqd
[
i
].
getPDUSessionResourceItemHORqd
(
m_pduSessionResourceItemHORqd
[
i
].
getPDUSessionResourceItemHORqd
(
m_pDUSessionID
,
response
.
HandoverRequiredTransfer
);
m_pDUSessionID
,
response
.
HandoverRequiredTransfer
);
m_pDUSessionID
->
getPDUSessionID
(
response
.
pduSessionId
);
m_pDUSessionID
->
getPDUSessionID
(
response
.
pduSessionId
);
...
...
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