Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-AUSF
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-AUSF
Commits
0f32e538
Commit
0f32e538
authored
Jun 29, 2021
by
Raphael Defosseux
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'api_version' into 'develop'
Api version See merge request oai/cn5g/oai-cn5g-ausf!5
parents
7adf5f8d
4b299810
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
100 additions
and
78 deletions
+100
-78
src/api_server/api/DefaultApi.cpp
src/api_server/api/DefaultApi.cpp
+1
-4
src/api_server/impl/DefaultApiImpl.cpp
src/api_server/impl/DefaultApiImpl.cpp
+6
-10
src/ausf_app/ausf_app.cpp
src/ausf_app/ausf_app.cpp
+60
-53
src/ausf_app/ausf_client.cpp
src/ausf_app/ausf_client.cpp
+4
-9
src/ausf_app/ausf_config.cpp
src/ausf_app/ausf_config.cpp
+2
-2
src/common/ausf.h
src/common/ausf.h
+27
-0
No files found.
src/api_server/api/DefaultApi.cpp
View file @
0f32e538
...
@@ -147,7 +147,6 @@ void DefaultApi::ue_authentications_auth_ctx_id5g_aka_confirmation_put_handler(
...
@@ -147,7 +147,6 @@ void DefaultApi::ue_authentications_auth_ctx_id5g_aka_confirmation_put_handler(
try
{
try
{
nlohmann
::
json
::
parse
(
request
.
body
()).
get_to
(
confirmationData
);
nlohmann
::
json
::
parse
(
request
.
body
()).
get_to
(
confirmationData
);
Logger
::
ausf_server
().
debug
(
"Json parsed"
);
this
->
ue_authentications_auth_ctx_id5g_aka_confirmation_put
(
this
->
ue_authentications_auth_ctx_id5g_aka_confirmation_put
(
authCtxId
,
confirmationData
,
response
);
authCtxId
,
confirmationData
,
response
);
}
catch
(
nlohmann
::
detail
::
exception
&
e
)
{
}
catch
(
nlohmann
::
detail
::
exception
&
e
)
{
...
@@ -193,15 +192,13 @@ void DefaultApi::ue_authentications_deregister_post_handler(
...
@@ -193,15 +192,13 @@ void DefaultApi::ue_authentications_deregister_post_handler(
void
DefaultApi
::
ue_authentications_post_handler
(
void
DefaultApi
::
ue_authentications_post_handler
(
const
Pistache
::
Rest
::
Request
&
request
,
const
Pistache
::
Rest
::
Request
&
request
,
Pistache
::
Http
::
ResponseWriter
response
)
{
Pistache
::
Http
::
ResponseWriter
response
)
{
Logger
::
ausf_server
().
info
(
"Received ue-authentications post Request"
);
Logger
::
ausf_server
().
info
(
"Received ue_authentications_post Request"
);
// Getting the body param
// Getting the body param
AuthenticationInfo
authenticationInfo
;
AuthenticationInfo
authenticationInfo
;
try
{
try
{
nlohmann
::
json
::
parse
(
request
.
body
()).
get_to
(
authenticationInfo
);
nlohmann
::
json
::
parse
(
request
.
body
()).
get_to
(
authenticationInfo
);
Logger
::
ausf_server
().
debug
(
"Json parsed"
);
this
->
ue_authentications_post
(
authenticationInfo
,
response
);
this
->
ue_authentications_post
(
authenticationInfo
,
response
);
}
catch
(
nlohmann
::
detail
::
exception
&
e
)
{
}
catch
(
nlohmann
::
detail
::
exception
&
e
)
{
// send a 400 error
// send a 400 error
...
...
src/api_server/impl/DefaultApiImpl.cpp
View file @
0f32e538
...
@@ -99,8 +99,8 @@ void DefaultApiImpl::ue_authentications_auth_ctx_id5g_aka_confirmation_put(
...
@@ -99,8 +99,8 @@ void DefaultApiImpl::ue_authentications_auth_ctx_id5g_aka_confirmation_put(
"5g-aka-confirmation response:
\n
%s"
,
json_data
.
dump
().
c_str
());
"5g-aka-confirmation response:
\n
%s"
,
json_data
.
dump
().
c_str
());
Logger
::
ausf_server
().
info
(
Logger
::
ausf_server
().
info
(
"Send 5g-aka-confirmation response to SEAF (Code
200)"
);
"Send 5g-aka-confirmation response to SEAF (Code
%d)"
,
code
);
response
.
send
(
code
,
json_data
.
dump
());
response
.
send
(
code
,
json_data
.
dump
()
.
c_str
()
);
}
}
void
DefaultApiImpl
::
ue_authentications_deregister_post
(
void
DefaultApiImpl
::
ue_authentications_deregister_post
(
...
@@ -115,12 +115,9 @@ void DefaultApiImpl::ue_authentications_deregister_post(
...
@@ -115,12 +115,9 @@ void DefaultApiImpl::ue_authentications_deregister_post(
void
DefaultApiImpl
::
ue_authentications_post
(
void
DefaultApiImpl
::
ue_authentications_post
(
const
AuthenticationInfo
&
authenticationInfo
,
const
AuthenticationInfo
&
authenticationInfo
,
Pistache
::
Http
::
ResponseWriter
&
response
)
{
Pistache
::
Http
::
ResponseWriter
&
response
)
{
Logger
::
ausf_server
().
debug
(
"ue_authentications_post"
);
// Getting params
// Getting params
std
::
string
reponse_from_udm
;
std
::
string
reponse_from_udm
=
{};
std
::
string
location
;
std
::
string
location
=
{};
// uint16_t http_response_code = 0;
UEAuthenticationCtx
ue_auth_ctx
=
{};
UEAuthenticationCtx
ue_auth_ctx
=
{};
nlohmann
::
json
UEAuthCtx_json
=
{};
nlohmann
::
json
UEAuthCtx_json
=
{};
Pistache
::
Http
::
Code
code
=
{};
Pistache
::
Http
::
Code
code
=
{};
...
@@ -131,10 +128,9 @@ void DefaultApiImpl::ue_authentications_post(
...
@@ -131,10 +128,9 @@ void DefaultApiImpl::ue_authentications_post(
Logger
::
ausf_server
().
debug
(
Logger
::
ausf_server
().
debug
(
"Auth response:
\n
%s"
,
UEAuthCtx_json
.
dump
().
c_str
());
"Auth response:
\n
%s"
,
UEAuthCtx_json
.
dump
().
c_str
());
Logger
::
ausf_server
().
info
(
"Send Auth response to SEAF (Code
201)"
);
Logger
::
ausf_server
().
info
(
"Send Auth response to SEAF (Code
%d)"
,
code
);
response
.
headers
().
add
<
Pistache
::
Http
::
Header
::
Location
>
(
location
);
response
.
headers
().
add
<
Pistache
::
Http
::
Header
::
Location
>
(
location
);
response
.
send
(
code
,
response
.
send
(
code
,
UEAuthCtx_json
.
dump
().
c_str
());
UEAuthCtx_json
.
dump
());
// Type: json object to string
}
}
}
// namespace api
}
// namespace api
...
...
src/ausf_app/ausf_app.cpp
View file @
0f32e538
...
@@ -130,14 +130,16 @@ void ausf_app::handle_ue_authentications(
...
@@ -130,14 +130,16 @@ void ausf_app::handle_ue_authentications(
// 5g he av from udm
// 5g he av from udm
// get authentication related info
// get authentication related info
std
::
string
udmUri
,
method
,
response
;
std
::
string
udm_uri
=
{};
udmUri
=
"http://"
+
std
::
string
method
=
"POST"
;
std
::
string
(
std
::
string
response
=
{};
inet_ntoa
(
*
((
struct
in_addr
*
)
&
ausf_cfg
.
udm_addr
.
ipv4_addr
)))
+
udm_uri
=
"http://"
+
":"
+
std
::
to_string
(
ausf_cfg
.
udm_addr
.
port
)
+
"/nudm-ueau/v1/"
+
std
::
string
(
supi
+
"/security-information/generate-auth-data"
;
inet_ntoa
(
*
((
struct
in_addr
*
)
&
ausf_cfg
.
udm_addr
.
ipv4_addr
)))
+
Logger
::
ausf_server
().
debug
(
"UDM's URI %s"
,
udmUri
.
c_str
());
":"
+
std
::
to_string
(
ausf_cfg
.
udm_addr
.
port
)
+
"/nudm-ueau/"
+
method
=
"POST"
;
ausf_cfg
.
udm_addr
.
api_version
+
"/"
+
supi
+
"/security-information/generate-auth-data"
;
Logger
::
ausf_app
().
debug
(
"UDM's URI %s"
,
udm_uri
.
c_str
());
// Create AuthInfo to send to UDM
// Create AuthInfo to send to UDM
nlohmann
::
json
AuthInfo
=
nlohmann
::
json
AuthInfo
=
...
@@ -155,46 +157,50 @@ void ausf_app::handle_ue_authentications(
...
@@ -155,46 +157,50 @@ void ausf_app::handle_ue_authentications(
AuthInfo
[
"resynchronizationInfo"
][
"rand"
]
=
resynInfo
.
getRand
();
AuthInfo
[
"resynchronizationInfo"
][
"rand"
]
=
resynInfo
.
getRand
();
AuthInfo
[
"resynchronizationInfo"
][
"auts"
]
=
resynInfo
.
getAuts
();
AuthInfo
[
"resynchronizationInfo"
][
"auts"
]
=
resynInfo
.
getAuts
();
Logger
::
ausf_
server
().
info
(
Logger
::
ausf_
app
().
info
(
"Received authInfo from AMF with ResynchronizationInfo IE"
);
"Received authInfo from AMF with ResynchronizationInfo IE"
);
}
else
{
}
else
{
Logger
::
ausf_
server
().
info
(
Logger
::
ausf_
app
().
info
(
"Received authInfo from AMF without ResynchronizationInfo IE"
);
"Received authInfo from AMF without ResynchronizationInfo IE"
);
}
}
// Send request to UDM
// Send request to UDM
ausf_client_inst
->
curl_http_client
(
udmUri
,
method
,
AuthInfo
.
dump
(),
response
);
ausf_client_inst
->
curl_http_client
(
udm_uri
,
method
,
AuthInfo
.
dump
(),
response
);
Logger
::
ausf_
server
().
error
(
"Response from UDM: %s"
,
response
.
c_str
());
Logger
::
ausf_
app
().
info
(
"Response from UDM: %s"
,
response
.
c_str
());
ProblemDetails
problemDetails
;
ProblemDetails
problemDetails
;
nlohmann
::
json
problemDetails_json
=
{};
nlohmann
::
json
problemDetails_json
=
{};
nlohmann
::
json
response_data
=
{};
nlohmann
::
json
response_data
=
{};
std
::
string
authType_udm
,
autn_udm
,
avType_udm
,
kausf_udm
,
rand_udm
,
std
::
string
authType_udm
=
{};
xresStar_udm
;
std
::
string
autn_udm
=
{};
std
::
string
avType_udm
=
{};
std
::
string
kausf_udm
=
{};
std
::
string
rand_udm
=
{};
std
::
string
xresStar_udm
=
{};
try
{
try
{
response_data
=
nlohmann
::
json
::
parse
(
response
.
c_str
());
response_data
=
nlohmann
::
json
::
parse
(
response
.
c_str
());
// Get security context
// Get security context
authType_udm
=
response_data
.
at
(
"authType"
);
// AuthType
authType_udm
=
response_data
.
at
(
"authType"
);
// AuthType
Logger
::
ausf_
server
().
debug
(
"authType %s"
,
authType_udm
.
c_str
());
Logger
::
ausf_
app
().
debug
(
"authType %s"
,
authType_udm
.
c_str
());
autn_udm
=
response_data
[
"authenticationVector"
].
at
(
"autn"
);
// autn
autn_udm
=
response_data
[
"authenticationVector"
].
at
(
"autn"
);
// autn
Logger
::
ausf_
server
().
debug
(
"autn_udm %s"
,
autn_udm
.
c_str
());
Logger
::
ausf_
app
().
debug
(
"autn_udm %s"
,
autn_udm
.
c_str
());
avType_udm
=
response_data
[
"authenticationVector"
].
at
(
"avType"
);
// avType
avType_udm
=
response_data
[
"authenticationVector"
].
at
(
"avType"
);
// avType
Logger
::
ausf_
server
().
debug
(
"avType_udm %s"
,
avType_udm
.
c_str
());
Logger
::
ausf_
app
().
debug
(
"avType_udm %s"
,
avType_udm
.
c_str
());
kausf_udm
=
response_data
[
"authenticationVector"
].
at
(
"kausf"
);
// kausf
kausf_udm
=
response_data
[
"authenticationVector"
].
at
(
"kausf"
);
// kausf
Logger
::
ausf_
server
().
debug
(
"kausf_udm %s"
,
kausf_udm
.
c_str
());
Logger
::
ausf_
app
().
debug
(
"kausf_udm %s"
,
kausf_udm
.
c_str
());
rand_udm
=
response_data
[
"authenticationVector"
].
at
(
"rand"
);
// rand
rand_udm
=
response_data
[
"authenticationVector"
].
at
(
"rand"
);
// rand
Logger
::
ausf_
server
().
debug
(
"rand_udm %s"
,
rand_udm
.
c_str
());
Logger
::
ausf_
app
().
debug
(
"rand_udm %s"
,
rand_udm
.
c_str
());
xresStar_udm
=
xresStar_udm
=
response_data
[
"authenticationVector"
].
at
(
"xresStar"
);
// xres*
response_data
[
"authenticationVector"
].
at
(
"xresStar"
);
// xres*
Logger
::
ausf_
server
().
debug
(
"xres*_udm %s"
,
xresStar_udm
.
c_str
());
Logger
::
ausf_
app
().
debug
(
"xres*_udm %s"
,
xresStar_udm
.
c_str
());
}
catch
(
nlohmann
::
json
::
exception
&
e
)
{
}
catch
(
nlohmann
::
json
::
exception
&
e
)
{
// TODO: Catch parse_error exception
// TODO: Catch parse_error exception
// TODO: Catch out_of_range exception
// TODO: Catch out_of_range exception
Logger
::
ausf_server
().
info
(
Logger
::
ausf_app
().
info
(
"Could not Parse Json content from UDM response"
);
"Could not Parse Json content from UDM response"
);
// TODO: error handling
// TODO: error handling
problemDetails
.
setCause
(
"CONTEXT_NOT_FOUND"
);
problemDetails
.
setCause
(
"CONTEXT_NOT_FOUND"
);
...
@@ -203,9 +209,9 @@ void ausf_app::handle_ue_authentications(
...
@@ -203,9 +209,9 @@ void ausf_app::handle_ue_authentications(
"Resource corresponding to User "
+
supi
+
" not found in UDM"
);
"Resource corresponding to User "
+
supi
+
" not found in UDM"
);
to_json
(
problemDetails_json
,
problemDetails
);
to_json
(
problemDetails_json
,
problemDetails
);
Logger
::
ausf_
server
().
error
(
Logger
::
ausf_
app
().
error
(
"Resource corresponding to User "
+
supi
+
" not found in UDM"
);
"Resource corresponding to User "
+
supi
+
" not found in UDM"
);
Logger
::
ausf_
server
().
info
(
"Send 404 Not_Found response to AUSF"
);
Logger
::
ausf_
app
().
info
(
"Send 404 Not_Found response to AUSF"
);
code
=
Pistache
::
Http
::
Code
::
Not_Found
;
code
=
Pistache
::
Http
::
Code
::
Not_Found
;
json_data
=
problemDetails_json
;
json_data
=
problemDetails_json
;
return
;
return
;
...
@@ -228,7 +234,7 @@ void ausf_app::handle_ue_authentications(
...
@@ -228,7 +234,7 @@ void ausf_app::handle_ue_authentications(
// 5G HE AV HXRES* XRES*,KSEAF KAUSF
// 5G HE AV HXRES* XRES*,KSEAF KAUSF
// KSEAF,SEAF 5G SE AV(RAND, AUTN, HXRES*)
// KSEAF,SEAF 5G SE AV(RAND, AUTN, HXRES*)
// A.5, 3gpp ts33.501
// A.5, 3gpp ts33.501
Logger
::
ausf_
server
().
debug
(
"Generating 5G AV"
);
Logger
::
ausf_
app
().
debug
(
"Generating 5G AV"
);
// Generating hxres*
// Generating hxres*
uint8_t
rand_ausf
[
16
]
=
{
0
};
uint8_t
rand_ausf
[
16
]
=
{
0
};
...
@@ -246,13 +252,13 @@ void ausf_app::handle_ue_authentications(
...
@@ -246,13 +252,13 @@ void ausf_app::handle_ue_authentications(
// Generate_Hxres*
// Generate_Hxres*
Authentication_5gaka
::
generate_Hxres
(
rand_ausf
,
xresStar_ausf
,
hxresStar
);
Authentication_5gaka
::
generate_Hxres
(
rand_ausf
,
xresStar_ausf
,
hxresStar
);
Logger
::
ausf_
server
().
debug
(
Logger
::
ausf_
app
().
debug
(
"HXresStar calculated:
\n
%s"
,
"HXresStar calculated:
\n
%s"
,
(
conv
::
uint8_to_hex_string
(
hxresStar
,
16
)).
c_str
());
(
conv
::
uint8_to_hex_string
(
hxresStar
,
16
)).
c_str
());
uint8_t
kseaf
[
32
]
=
{
0
};
uint8_t
kseaf
[
32
]
=
{
0
};
Authentication_5gaka
::
derive_kseaf
(
snn
,
kausf
,
kseaf
);
Authentication_5gaka
::
derive_kseaf
(
snn
,
kausf
,
kseaf
);
Logger
::
ausf_
server
().
debug
(
Logger
::
ausf_
app
().
debug
(
"Kseaf calculated:
\n
%s"
,
(
conv
::
uint8_to_hex_string
(
kseaf
,
32
)).
c_str
());
"Kseaf calculated:
\n
%s"
,
(
conv
::
uint8_to_hex_string
(
kseaf
,
32
)).
c_str
());
// Store the security context
// Store the security context
...
@@ -312,8 +318,7 @@ void ausf_app::handle_ue_authentications(
...
@@ -312,8 +318,7 @@ void ausf_app::handle_ue_authentications(
std
::
string
(
inet_ntoa
(
*
((
struct
in_addr
*
)
&
ausf_cfg
.
sbi
.
addr4
)))
+
":"
+
std
::
string
(
inet_ntoa
(
*
((
struct
in_addr
*
)
&
ausf_cfg
.
sbi
.
addr4
)))
+
":"
+
std
::
to_string
(
ausf_cfg
.
sbi
.
port
)
+
"/nausf-auth/v1/ue-authentications/"
+
std
::
to_string
(
ausf_cfg
.
sbi
.
port
)
+
"/nausf-auth/v1/ue-authentications/"
+
authCtxId_s
+
"/5g-aka-confirmation"
;
authCtxId_s
+
"/5g-aka-confirmation"
;
ausf_Href
.
setHref
(
ausf_Href
.
setHref
(
resourceURI
);
resourceURI
);
//"/nausf-auth/v1/ue-authentications/640110987654321/5g-aka-confirmation"
ausf_links
[
"5G_AKA"
]
=
ausf_Href
;
ausf_links
[
"5G_AKA"
]
=
ausf_Href
;
UEAuthCtx
.
setLinks
(
ausf_links
);
UEAuthCtx
.
setLinks
(
ausf_links
);
...
@@ -327,7 +332,7 @@ void ausf_app::handle_ue_authentications(
...
@@ -327,7 +332,7 @@ void ausf_app::handle_ue_authentications(
to_json
(
json_data
,
UEAuthCtx
);
to_json
(
json_data
,
UEAuthCtx
);
code
=
Pistache
::
Http
::
Code
::
Created
;
code
=
Pistache
::
Http
::
Code
::
Created
;
Logger
::
ausf_
server
().
debug
(
"Auth Response:
\n
%s"
,
json_data
.
dump
().
c_str
());
Logger
::
ausf_
app
().
debug
(
"Auth Response:
\n
%s"
,
json_data
.
dump
().
c_str
());
return
;
return
;
}
}
...
@@ -338,7 +343,7 @@ void ausf_app::handle_ue_authentications_confirmation(
...
@@ -338,7 +343,7 @@ void ausf_app::handle_ue_authentications_confirmation(
// SEAF-> AUSF
// SEAF-> AUSF
ProblemDetails
problemDetails
;
ProblemDetails
problemDetails
;
nlohmann
::
json
problemDetails_json
=
{};
nlohmann
::
json
problemDetails_json
=
{};
Logger
::
ausf_
server
().
debug
(
"Handling 5g-aka-confirmation"
);
Logger
::
ausf_
app
().
debug
(
"Handling 5g-aka-confirmation"
);
// Get the security context
// Get the security context
std
::
shared_ptr
<
security_context
>
sc
=
{};
std
::
shared_ptr
<
security_context
>
sc
=
{};
...
@@ -356,16 +361,16 @@ void ausf_app::handle_ue_authentications_confirmation(
...
@@ -356,16 +361,16 @@ void ausf_app::handle_ue_authentications_confirmation(
problemDetails
.
setDetail
(
"Serving Network Not Authorized"
);
problemDetails
.
setDetail
(
"Serving Network Not Authorized"
);
to_json
(
problemDetails_json
,
problemDetails
);
to_json
(
problemDetails_json
,
problemDetails
);
Logger
::
ausf_
server
().
error
(
"Serving Network Not Authorized"
);
Logger
::
ausf_
app
().
error
(
"Serving Network Not Authorized"
);
Logger
::
ausf_
server
().
info
(
"Send 403 Forbidden response to AUSF"
);
Logger
::
ausf_
app
().
info
(
"Send 403 Forbidden response to AUSF"
);
code
=
Pistache
::
Http
::
Code
::
Forbidden
;
code
=
Pistache
::
Http
::
Code
::
Forbidden
;
json_data
=
problemDetails_json
;
json_data
=
problemDetails_json
;
return
;
return
;
}
}
Logger
::
ausf_
server
().
info
(
Logger
::
ausf_
app
().
info
(
"Received authCtxId %s"
,
authCtxId
.
c_str
());
// authCtxId
"Received authCtxId %s"
,
authCtxId
.
c_str
());
// authCtxId
Logger
::
ausf_
server
().
info
(
Logger
::
ausf_
app
().
info
(
"Received res* %s"
,
confirmationData
.
getResStar
().
c_str
());
"Received res* %s"
,
confirmationData
.
getResStar
().
c_str
());
uint8_t
resStar
[
16
]
=
{
0
};
uint8_t
resStar
[
16
]
=
{
0
};
...
@@ -376,7 +381,7 @@ void ausf_app::handle_ue_authentications_confirmation(
...
@@ -376,7 +381,7 @@ void ausf_app::handle_ue_authentications_confirmation(
conv
::
hex_str_to_uint8
(
conv
::
hex_str_to_uint8
(
authCtxId
.
c_str
(),
authCtxId_seaf
);
// authCtxId in SEAF
authCtxId
.
c_str
(),
authCtxId_seaf
);
// authCtxId in SEAF
Logger
::
ausf_
server
().
debug
(
Logger
::
ausf_
app
().
debug
(
"authCtxId in AUSF: %s"
,
"authCtxId in AUSF: %s"
,
(
conv
::
uint8_to_hex_string
(
sc
->
ausf_av_s
.
autn
,
16
)).
c_str
());
(
conv
::
uint8_to_hex_string
(
sc
->
ausf_av_s
.
autn
,
16
)).
c_str
());
...
@@ -384,14 +389,14 @@ void ausf_app::handle_ue_authentications_confirmation(
...
@@ -384,14 +389,14 @@ void ausf_app::handle_ue_authentications_confirmation(
Authentication_5gaka
::
equal_uint8
(
sc
->
ausf_av_s
.
autn
,
authCtxId_seaf
,
16
);
Authentication_5gaka
::
equal_uint8
(
sc
->
ausf_av_s
.
autn
,
authCtxId_seaf
,
16
);
if
(
!
is_auth_vectors_present
)
// AV expired
if
(
!
is_auth_vectors_present
)
// AV expired
{
{
Logger
::
ausf_
server
().
error
(
Logger
::
ausf_
app
().
error
(
"Authentication failure by home network with authCtxId %s: AV expired"
,
"Authentication failure by home network with authCtxId %s: AV expired"
,
authCtxId
.
c_str
());
authCtxId
.
c_str
());
confirmResponse
.
setAuthResult
(
is_auth_vectors_present
);
confirmResponse
.
setAuthResult
(
is_auth_vectors_present
);
sc
->
kausf_tmp
=
"invalid"
;
sc
->
kausf_tmp
=
"invalid"
;
}
else
// AV valid
}
else
// AV valid
{
{
Logger
::
ausf_
server
().
info
(
"AV is up to date, handling received res*..."
);
Logger
::
ausf_
app
().
info
(
"AV is up to date, handling received res*..."
);
// Get stored xres* and compare with res*
// Get stored xres* and compare with res*
uint8_t
xresStar
[
16
]
=
{
0
};
uint8_t
xresStar
[
16
]
=
{
0
};
// xres* stored for 5g-aka-confirmation
// xres* stored for 5g-aka-confirmation
...
@@ -399,9 +404,9 @@ void ausf_app::handle_ue_authentications_confirmation(
...
@@ -399,9 +404,9 @@ void ausf_app::handle_ue_authentications_confirmation(
std
::
begin
(
sc
->
xres_star
),
std
::
end
(
sc
->
xres_star
),
std
::
begin
(
sc
->
xres_star
),
std
::
end
(
sc
->
xres_star
),
std
::
begin
(
xresStar
));
std
::
begin
(
xresStar
));
Logger
::
ausf_
server
().
debug
(
Logger
::
ausf_
app
().
debug
(
"xres* in AUSF: %s"
,
(
conv
::
uint8_to_hex_string
(
xresStar
,
16
)).
c_str
());
"xres* in AUSF: %s"
,
(
conv
::
uint8_to_hex_string
(
xresStar
,
16
)).
c_str
());
Logger
::
ausf_
server
().
debug
(
Logger
::
ausf_
app
().
debug
(
"xres in AMF: %s"
,
(
conv
::
uint8_to_hex_string
(
resStar
,
16
)).
c_str
());
"xres in AMF: %s"
,
(
conv
::
uint8_to_hex_string
(
resStar
,
16
)).
c_str
());
bool
authResult
=
Authentication_5gaka
::
equal_uint8
(
xresStar
,
resStar
,
16
);
bool
authResult
=
Authentication_5gaka
::
equal_uint8
(
xresStar
,
resStar
,
16
);
...
@@ -409,13 +414,13 @@ void ausf_app::handle_ue_authentications_confirmation(
...
@@ -409,13 +414,13 @@ void ausf_app::handle_ue_authentications_confirmation(
if
(
!
authResult
)
// Authentication failed
if
(
!
authResult
)
// Authentication failed
{
{
Logger
::
ausf_
server
().
error
(
Logger
::
ausf_
app
().
error
(
"Authentication failure by home network with authCtxId %s: res* != "
"Authentication failure by home network with authCtxId %s: res* != "
"xres*"
,
"xres*"
,
authCtxId
.
c_str
());
authCtxId
.
c_str
());
}
else
// Authentication success
}
else
// Authentication success
{
{
Logger
::
ausf_
server
().
info
(
"Authentication successful by home network!"
);
Logger
::
ausf_
app
().
info
(
"Authentication successful by home network!"
);
// Send Kseaf to SEAF
// Send Kseaf to SEAF
string
kseaf_s
;
string
kseaf_s
;
kseaf_s
=
conv
::
uint8_to_hex_string
(
sc
->
ausf_av_s
.
kseaf
,
32
);
kseaf_s
=
conv
::
uint8_to_hex_string
(
sc
->
ausf_av_s
.
kseaf
,
32
);
...
@@ -425,15 +430,17 @@ void ausf_app::handle_ue_authentications_confirmation(
...
@@ -425,15 +430,17 @@ void ausf_app::handle_ue_authentications_confirmation(
confirmResponse
.
setSupi
(
sc
->
supi_ausf
);
confirmResponse
.
setSupi
(
sc
->
supi_ausf
);
}
}
// Send authResult to UDM (authentication result info)
// Send authResult to UDM (authentication result info)
std
::
string
udmUri
,
method
,
response
;
std
::
string
udm_uri
=
{};
udmUri
=
"http://"
+
std
::
string
method
=
"POST"
;
std
::
string
(
inet_ntoa
(
std
::
string
response
=
{};
*
((
struct
in_addr
*
)
&
ausf_cfg
.
udm_addr
.
ipv4_addr
)))
+
udm_uri
=
":"
+
std
::
to_string
(
ausf_cfg
.
udm_addr
.
port
)
+
"/nudm-ueau/v1/"
+
"http://"
+
sc
->
supi_ausf
+
"/auth-events"
;
std
::
string
(
inet_ntoa
(
*
((
struct
in_addr
*
)
&
ausf_cfg
.
udm_addr
.
ipv4_addr
)))
+
Logger
::
ausf_server
().
debug
(
"UDM's URI: %s"
,
udmUri
.
c_str
());
":"
+
std
::
to_string
(
ausf_cfg
.
udm_addr
.
port
)
+
"/nudm-ueau/"
+
method
=
"POST"
;
ausf_cfg
.
udm_addr
.
api_version
+
"/"
+
sc
->
supi_ausf
+
"/auth-events"
;
Logger
::
ausf_app
().
debug
(
"UDM's URI: %s"
,
udm_uri
.
c_str
());
// Form request body
// Form request body
nlohmann
::
json
confirmResultInfo
=
{};
nlohmann
::
json
confirmResultInfo
=
{};
...
@@ -454,10 +461,10 @@ void ausf_app::handle_ue_authentications_confirmation(
...
@@ -454,10 +461,10 @@ void ausf_app::handle_ue_authentications_confirmation(
confirmResultInfo
[
"servingNetworkName"
]
=
sc
->
serving_nn
;
confirmResultInfo
[
"servingNetworkName"
]
=
sc
->
serving_nn
;
confirmResultInfo
[
"authRemovalInd"
]
=
false
;
confirmResultInfo
[
"authRemovalInd"
]
=
false
;
Logger
::
ausf_
server
().
debug
(
Logger
::
ausf_
app
().
debug
(
"confirmResultInfo: %s"
,
confirmResultInfo
.
dump
().
c_str
());
"confirmResultInfo: %s"
,
confirmResultInfo
.
dump
().
c_str
());
ausf_client_inst
->
curl_http_client
(
ausf_client_inst
->
curl_http_client
(
udm
U
ri
,
method
,
confirmResultInfo
.
dump
(),
response
);
udm
_u
ri
,
method
,
confirmResultInfo
.
dump
(),
response
);
}
}
}
}
...
...
src/ausf_app/ausf_client.cpp
View file @
0f32e538
...
@@ -103,8 +103,6 @@ void ausf_client::curl_http_client(
...
@@ -103,8 +103,6 @@ void ausf_client::curl_http_client(
curl_easy_setopt
(
curl
,
CURLOPT_TIMEOUT_MS
,
CURL_TIMEOUT_MS
);
curl_easy_setopt
(
curl
,
CURLOPT_TIMEOUT_MS
,
CURL_TIMEOUT_MS
);
curl_easy_setopt
(
curl
,
CURLOPT_TCP_KEEPALIVE
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_TCP_KEEPALIVE
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_INTERFACE
,
ausf_cfg
.
sbi
.
if_name
.
c_str
());
curl_easy_setopt
(
curl
,
CURLOPT_INTERFACE
,
ausf_cfg
.
sbi
.
if_name
.
c_str
());
Logger
::
ausf_app
().
info
(
"Request sent by interface "
+
ausf_cfg
.
sbi
.
if_name
);
// Response information.
// Response information.
long
httpCode
=
{
0
};
long
httpCode
=
{
0
};
...
@@ -140,8 +138,9 @@ void ausf_client::curl_http_client(
...
@@ -140,8 +138,9 @@ void ausf_client::curl_http_client(
nlohmann
::
json
response_data
=
{};
nlohmann
::
json
response_data
=
{};
if
(
httpCode
!=
200
&&
httpCode
!=
201
&&
if
(
httpCode
!=
HTTP_RESPONSE_CODE_OK
&&
httpCode
!=
204
)
{
// TODO: remove hardcoded values
httpCode
!=
HTTP_RESPONSE_CODE_CREATED
&&
httpCode
!=
HTTP_RESPONSE_CODE_NO_CONTENT
)
{
is_response_ok
=
false
;
is_response_ok
=
false
;
if
(
response
.
size
()
<
1
)
{
if
(
response
.
size
()
<
1
)
{
Logger
::
ausf_app
().
info
(
"There's no content in the response"
);
Logger
::
ausf_app
().
info
(
"There's no content in the response"
);
...
@@ -152,10 +151,6 @@ void ausf_client::curl_http_client(
...
@@ -152,10 +151,6 @@ void ausf_client::curl_http_client(
return
;
return
;
}
}
else
{
// httpCode = 200 || httpCode = 201 || httpCode = 204
response
=
*
httpData
.
get
();
}
if
(
!
is_response_ok
)
{
if
(
!
is_response_ok
)
{
try
{
try
{
response_data
=
nlohmann
::
json
::
parse
(
response
);
response_data
=
nlohmann
::
json
::
parse
(
response
);
...
@@ -182,5 +177,5 @@ void ausf_client::curl_http_client(
...
@@ -182,5 +177,5 @@ void ausf_client::curl_http_client(
free
(
body_data
);
free
(
body_data
);
body_data
=
NULL
;
body_data
=
NULL
;
}
}
fflush
(
stdout
)
;
return
;
}
}
src/ausf_app/ausf_config.cpp
View file @
0f32e538
...
@@ -55,7 +55,7 @@ using namespace libconfig;
...
@@ -55,7 +55,7 @@ using namespace libconfig;
namespace
config
{
namespace
config
{
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
ausf_config
::
ausf_config
()
:
sbi
()
{
ausf_config
::
ausf_config
()
:
sbi
()
,
ausf_name
(),
pid_dir
(),
instance
()
{
udm_addr
.
ipv4_addr
.
s_addr
=
INADDR_ANY
;
udm_addr
.
ipv4_addr
.
s_addr
=
INADDR_ANY
;
udm_addr
.
port
=
80
;
udm_addr
.
port
=
80
;
udm_addr
.
api_version
=
"v1"
;
udm_addr
.
api_version
=
"v1"
;
...
@@ -186,7 +186,7 @@ int ausf_config::load(const std::string& config_file) {
...
@@ -186,7 +186,7 @@ int ausf_config::load(const std::string& config_file) {
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void
ausf_config
::
display
()
{
void
ausf_config
::
display
()
{
Logger
::
config
().
info
(
"========
AUSF
======="
);
Logger
::
config
().
info
(
"========
========= AUSF ==========
======="
);
Logger
::
config
().
info
(
"Configuration AUSF:"
);
Logger
::
config
().
info
(
"Configuration AUSF:"
);
Logger
::
config
().
info
(
"- Instance................: %d"
,
instance
);
Logger
::
config
().
info
(
"- Instance................: %d"
,
instance
);
Logger
::
config
().
info
(
"- PID dir.................: %s"
,
pid_dir
.
c_str
());
Logger
::
config
().
info
(
"- PID dir.................: %s"
,
pid_dir
.
c_str
());
...
...
src/common/ausf.h
View file @
0f32e538
...
@@ -83,4 +83,31 @@ typedef struct {
...
@@ -83,4 +83,31 @@ typedef struct {
typedef
uint64_t
supi64_t
;
typedef
uint64_t
supi64_t
;
// 3GPP TS 29.571 (Common data)
enum
http_response_codes_e
{
HTTP_RESPONSE_CODE_OK
=
200
,
HTTP_RESPONSE_CODE_CREATED
=
201
,
HTTP_RESPONSE_CODE_ACCEPTED
=
202
,
HTTP_RESPONSE_CODE_NO_CONTENT
=
204
,
HTTP_RESPONSE_CODE_BAD_REQUEST
=
400
,
HTTP_RESPONSE_CODE_UNAUTHORIZED
=
401
,
HTTP_RESPONSE_CODE_FORBIDDEN
=
403
,
HTTP_RESPONSE_CODE_NOT_FOUND
=
404
,
HTTP_RESPONSE_CODE_METHOD_NOT_ALLOWED
=
405
,
HTTP_RESPONSE_CODE_REQUEST_TIMEOUT
=
408
,
HTTP_RESPONSE_CODE_406_NOT_ACCEPTED
=
406
,
HTTP_RESPONSE_CODE_CONFLICT
=
409
,
HTTP_RESPONSE_CODE_GONE
=
410
,
HTTP_RESPONSE_CODE_LENGTH_REQUIRED
=
411
,
HTTP_RESPONSE_CODE_PRECONDITION_FAILED
=
412
,
HTTP_RESPONSE_CODE_PAYLOAD_TOO_LARGE
=
413
,
HTTP_RESPONSE_CODE_URI_TOO_LONG
=
414
,
HTTP_RESPONSE_CODE_UNSUPPORTED_MEDIA_TYPE
=
415
,
HTTP_RESPONSE_CODE_TOO_MANY_REQUESTS
=
429
,
HTTP_RESPONSE_CODE_INTERNAL_SERVER_ERROR
=
500
,
HTTP_RESPONSE_CODE_NOT_IMPLEMENTED
=
501
,
HTTP_RESPONSE_CODE_SERVICE_UNAVAILABLE
=
503
,
HTTP_RESPONSE_CODE_GATEWAY_TIMEOUT
=
504
};
#endif
#endif
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