Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-Spgwu-Tiny-Simple
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
CommunityXG
OpenXG-Spgwu-Tiny-Simple
Commits
149aa8b6
Commit
149aa8b6
authored
Mar 25, 2019
by
gauthier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cppcheck warnings in progress
parent
2fbb8947
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
524 additions
and
96 deletions
+524
-96
src/gtpv2c/3gpp_29.274.hpp
src/gtpv2c/3gpp_29.274.hpp
+207
-50
src/gtpv2c/msg_gtpv2c.hpp
src/gtpv2c/msg_gtpv2c.hpp
+317
-46
No files found.
src/gtpv2c/3gpp_29.274.hpp
View file @
149aa8b6
...
...
@@ -123,9 +123,9 @@ public:
explicit
gtpv2c_ie
(
const
uint8_t
tlv_type
)
:
tlv
()
{
tlv
.
type
=
tlv_type
;
}
virtual
~
gtpv2c_ie
()
{};
virtual
void
to_core_type
(
gtpv2c_ies_container
&
s
,
const
uint8_t
instance
)
{
throw
gtpc_msg_illegal_ie_exception
(
s
.
msg_id
,
tlv
.
type
,
__FILE__
,
__LINE__
);}
virtual
void
dump_to
(
std
::
ostream
&
os
)
{
...
...
@@ -147,14 +147,21 @@ public:
explicit
gtpv2c_grouped_ie
(
const
gtpv2c_tlv
&
t
)
:
gtpv2c_ie
(
t
),
ies
()
{}
explicit
gtpv2c_grouped_ie
(
const
uint8_t
tlv_type
)
:
gtpv2c_ie
(
tlv_type
),
ies
()
{}
gtpv2c_grouped_ie
&
operator
=
(
gtpv2c_grouped_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
ies
,
other
.
ies
);
return
*
this
;
}
virtual
~
gtpv2c_grouped_ie
()
{
ies
.
clear
();
}
virtual
void
to_core_type
(
gtpv2c_ies_container
&
s
,
const
uint8_t
instance
)
{
throw
gtpc_msg_illegal_ie_exception
(
s
.
msg_id
,
tlv
.
type
,
__FILE__
,
__LINE__
);}
void
add_ie
(
std
::
shared_ptr
<
gtpv2c_ie
>
ie
)
{
ies
.
push_back
(
ie
);
tlv
.
length
+=
(
gtpv2c_tlv
::
tlv_ie_length
+
ie
.
get
()
->
tlv
.
get_length
());
...
...
@@ -206,7 +213,7 @@ private:
}
bf
;
uint8_t
b
;
}
u2
;
public
:
gtpv2c_msg_header
()
{
...
...
@@ -228,6 +235,17 @@ public:
u2
.
b
=
h
.
u2
.
b
;
}
gtpv2c_msg_header
&
operator
=
(
gtpv2c_msg_header
other
)
{
std
::
swap
(
u1
,
other
.
u1
);
std
::
swap
(
message_type
,
other
.
message_type
);
std
::
swap
(
message_length
,
other
.
message_length
);
std
::
swap
(
teid
,
other
.
teid
);
std
::
swap
(
sequence_number
,
other
.
sequence_number
);
std
::
swap
(
u2
,
other
.
u2
);
return
*
this
;
}
void
set_teid
(
const
uint32_t
&
tid
)
{
teid
=
tid
;
if
(
u1
.
bf
.
t
==
0
)
{
...
...
@@ -235,7 +253,7 @@ public:
message_length
+=
4
;
}
}
bool
has_teid
()
const
{
return
(
u1
.
bf
.
t
==
1
);
}
...
...
@@ -287,7 +305,7 @@ public:
sn
[
1
]
=
cp_sequence_number
&
0x000000FF
;
cp_sequence_number
=
cp_sequence_number
>>
8
;
sn
[
0
]
=
cp_sequence_number
&
0x000000FF
;
os
.
write
(
reinterpret_cast
<
const
char
*>
(
sn
),
3
);
if
(
!
u1
.
bf
.
mp
)
u2
.
bf
.
message_priority
=
0
;
os
.
write
(
reinterpret_cast
<
const
char
*>
(
&
u2
.
b
),
sizeof
(
u2
.
b
));
...
...
@@ -315,13 +333,20 @@ class gtpv2c_msg : public gtpv2c_msg_header
{
public:
uint16_t
remote_port
;
std
::
vector
<
std
::
shared_ptr
<
gtpv2c_ie
>>
ies
;
gtpv2c_msg
()
:
gtpv2c_msg_header
(),
remote_port
(
0
),
ies
()
{}
gtpv2c_msg
(
const
gtpv2c_msg
&
m
)
:
gtpv2c_msg_header
(
m
),
remote_port
(
m
.
remote_port
),
ies
(
m
.
ies
)
{}
gtpv2c_msg
&
operator
=
(
gtpv2c_msg
other
)
{
std
::
swap
(
remote_port
,
other
.
remote_port
);
std
::
swap
(
ies
,
other
.
ies
);
return
*
this
;
}
explicit
gtpv2c_msg
(
const
gtpv2c_msg_header
&
hdr
)
:
gtpv2c_msg_header
(
hdr
),
remote_port
(
0
),
ies
()
{}
explicit
gtpv2c_msg
(
const
gtpv2c_echo_request
&
gtp_ies
);
...
...
@@ -344,7 +369,7 @@ public:
std
::
cout
<<
std
::
dec
<<
" add_ie = "
<<
get_message_length
()
<<
" -> "
<<
get_message_length
()
+
gtpv2c_tlv
::
tlv_ie_length
+
ie
.
get
()
->
tlv
.
get_length
()
<<
std
::
endl
;
set_message_length
(
get_message_length
()
+
gtpv2c_tlv
::
tlv_ie_length
+
ie
.
get
()
->
tlv
.
get_length
());
}
void
to_core_type
(
gtpv2c_echo_request
&
s
)
{
for
(
auto
i
:
ies
)
{
i
.
get
()
->
to_core_type
(
s
,
i
.
get
()
->
tlv
.
u1
.
bf
.
instance
);
...
...
@@ -430,7 +455,7 @@ public:
i
.
get
()
->
to_core_type
(
s
,
i
.
get
()
->
tlv
.
u1
.
bf
.
instance
);
}
}
void
dump_to
(
std
::
ostream
&
os
)
{
gtpv2c_msg_header
::
dump_to
(
os
);
for
(
auto
i
:
ies
)
{
...
...
@@ -576,7 +601,7 @@ public:
}
if
(
num_digits
>
15
)
num_digits
=
15
;
// should not happen
}
void
to_core_type
(
gtpv2c_ies_container
&
s
,
const
uint8_t
instance
)
{
core
::
imsi_t
imsi
=
{};
to_core_type
(
imsi
);
...
...
@@ -736,7 +761,7 @@ class gtpv2c_access_point_name_ie : public gtpv2c_ie {
public:
std
::
string
access_point_name
;
//--------
explicit
gtpv2c_access_point_name_ie
(
const
core
::
apn_t
&
apn
)
:
explicit
gtpv2c_access_point_name_ie
(
const
core
::
apn_t
&
apn
)
:
gtpv2c_ie
(
GTP_IE_ACCESS_POINT_NAME
),
access_point_name
(
apn
.
access_point_name
)
{
tlv
.
length
=
access_point_name
.
size
();
};
...
...
@@ -776,7 +801,7 @@ public:
uint32_t
apn_ambr_for_uplink
;
uint32_t
apn_ambr_for_downlink
;
//--------
explicit
gtpv2c_aggregate_maximum_bit_rate_ie
(
const
core
::
ambr_t
&
ambr
)
:
explicit
gtpv2c_aggregate_maximum_bit_rate_ie
(
const
core
::
ambr_t
&
ambr
)
:
gtpv2c_ie
(
GTP_IE_AGGREGATE_MAXIMUM_BIT_RATE
)
{
// force length
tlv
.
length
=
8
;
...
...
@@ -836,7 +861,7 @@ public:
uint8_t
b
;
}
u1
;
//--------
explicit
gtpv2c_eps_bearer_id_ie
(
const
core
::
ebi_t
&
e
)
:
explicit
gtpv2c_eps_bearer_id_ie
(
const
core
::
ebi_t
&
e
)
:
gtpv2c_ie
(
GTP_IE_EPS_BEARER_ID
){
tlv
.
length
=
1
;
u1
.
b
=
0
;
...
...
@@ -883,7 +908,7 @@ public:
}
u1
;
bool
is_ipv4
;
//--------
explicit
gtpv2c_ip_address_ie
(
const
core
::
ip_address_t
&
i
)
:
explicit
gtpv2c_ip_address_ie
(
const
core
::
ip_address_t
&
i
)
:
gtpv2c_ie
(
GTP_IE_IP_ADDRESS
)
{
is_ipv4
=
i
.
is_ipv4
;
if
(
is_ipv4
)
{
...
...
@@ -971,7 +996,7 @@ public:
uint
num_digits
;
//--------
explicit
gtpv2c_mei_ie
(
const
core
::
mei_t
&
i
)
:
explicit
gtpv2c_mei_ie
(
const
core
::
mei_t
&
i
)
:
gtpv2c_ie
(
GTP_IE_MOBILE_EQUIPMENT_IDENTITY
)
{
// avoid using b[]
u1
.
digits
.
digit1
=
i
.
u1
.
digits
.
digit1
;
...
...
@@ -1037,7 +1062,7 @@ gtpv2c_ie(GTP_IE_MOBILE_EQUIPMENT_IDENTITY) {
void
load_from
(
std
::
istream
&
is
)
{
//tlv.load_from(is);
is
.
read
(
reinterpret_cast
<
char
*>
(
u1
.
b
),
tlv
.
length
);
num_digits
=
tlv
.
get_length
()
*
2
;
num_digits
=
tlv
.
get_length
()
*
2
;
if
((
u1
.
b
[
tlv
.
get_length
()
-
1
]
&
0xF0
)
==
0xF0
)
{
num_digits
-=
1
;
}
...
...
@@ -1258,7 +1283,7 @@ public:
}
u7
;
//--------
explicit
gtpv2c_indication_ie
(
const
core
::
indication_t
&
i
)
:
explicit
gtpv2c_indication_ie
(
const
core
::
indication_t
&
i
)
:
gtpv2c_ie
(
GTP_IE_INDICATION
)
{
u1
.
bf
.
daf
=
i
.
daf
;
u1
.
bf
.
dtf
=
i
.
dtf
;
...
...
@@ -1478,15 +1503,16 @@ public:
protocol_or_container_id
()
{
protocol_id
=
0
;
length_of_protocol_id_contents
=
0
;
protocol_id_contents
=
{};
}
explicit
protocol_or_container_id
(
std
::
istream
&
is
)
:
protocol_or_container_id
()
{
load_from
(
is
);
}
protocol_or_container_id
(
const
uint16_t
proto_id
,
const
std
::
string
&
proto_id_contents
)
:
protocol_id
(
proto_id
),
protocol_id_contents
(
proto_id_contents
),
length_of_protocol_id_contents
(
protocol_id_contents
.
size
()
)
{}
explicit
protocol_or_container_id
(
const
protocol_or_container_id
&
p
)
:
protocol_or_container_id
(
const
uint16_t
proto_id
,
const
std
::
string
&
proto_id_contents
)
:
protocol_id
(
proto_id
),
length_of_protocol_id_contents
(
protocol_id_contents
.
size
()),
protocol_id_contents
(
proto_id_contents
)
{}
explicit
protocol_or_container_id
(
const
protocol_or_container_id
&
p
)
:
protocol_id
(
p
.
protocol_id
),
length_of_protocol_id_contents
(
p
.
length_of_protocol_id_contents
),
protocol_id_contents
(
p
.
protocol_id_contents
)
{}
...
...
@@ -1496,6 +1522,13 @@ public:
length_of_protocol_id_contents
(
p
.
length_of_protocol_id_contents
),
protocol_id_contents
(
p
.
protocol_id_contents
)
{}
protocol_or_container_id
&
operator
=
(
protocol_or_container_id
other
)
{
std
::
swap
(
protocol_id
,
other
.
protocol_id
);
std
::
swap
(
length_of_protocol_id_contents
,
other
.
length_of_protocol_id_contents
);
std
::
swap
(
protocol_id_contents
,
other
.
protocol_id_contents
);
return
*
this
;
}
//--------
void
dump_to
(
std
::
ostream
&
os
)
{
auto
ns_protocol_id
=
htons
(
protocol_id
);
...
...
@@ -1528,7 +1561,7 @@ public:
std
::
vector
<
protocol_or_container_id
>
protocol_or_container_ids
;
//--------
gtpv2c_pco_ie
()
:
gtpv2c_ie
(
GTP_IE_PROTOCOL_CONFIGURATION_OPTIONS
),
gtpv2c_pco_ie
()
:
gtpv2c_ie
(
GTP_IE_PROTOCOL_CONFIGURATION_OPTIONS
),
protocol_or_container_ids
(),
num_protocol_or_container_id
(
0
)
{
tlv
.
length
=
1
;
u1
.
b
=
0
;
...
...
@@ -1536,7 +1569,7 @@ public:
protocol_or_container_ids
.
reserve
(
PCO_UNSPEC_MAXIMUM_PROTOCOL_ID_OR_CONTAINER_ID
);
}
//--------
explicit
gtpv2c_pco_ie
(
const
core
::
protocol_configuration_options_t
&
p
)
:
explicit
gtpv2c_pco_ie
(
const
core
::
protocol_configuration_options_t
&
p
)
:
gtpv2c_pco_ie
(){
tlv
.
length
=
1
;
u1
.
b
=
0
;
...
...
@@ -1624,7 +1657,7 @@ public:
u1
.
b
=
0
;
}
//--------
explicit
gtpv2c_bearer_tft_ie
(
const
core
::
traffic_flow_template_t
&
t
)
:
explicit
gtpv2c_bearer_tft_ie
(
const
core
::
traffic_flow_template_t
&
t
)
:
gtpv2c_bearer_tft_ie
(){
tlv
.
length
=
2
;
u1
.
bf
.
tftoperationcode
=
t
.
tftoperationcode
;
...
...
@@ -1712,7 +1745,7 @@ public:
uint32_t
charging_id
;
//--------
explicit
gtpv2c_charging_id_ie
(
const
core
::
charging_id_t
&
c
)
:
explicit
gtpv2c_charging_id_ie
(
const
core
::
charging_id_t
&
c
)
:
gtpv2c_ie
(
GTP_IE_CHARGING_ID
){
charging_id
=
c
.
charging_id_value
;
tlv
.
length
=
4
;
...
...
@@ -1769,7 +1802,7 @@ public:
}
u1
;
//--------
explicit
gtpv2c_bearer_flags_ie
(
const
core
::
bearer_flags_t
&
b
)
:
explicit
gtpv2c_bearer_flags_ie
(
const
core
::
bearer_flags_t
&
b
)
:
gtpv2c_ie
(
GTP_IE_CHARGING_ID
){
u1
.
b
=
0
;
u1
.
bf
.
asi
=
b
.
asi
;
...
...
@@ -1883,7 +1916,7 @@ public:
in6_addr
ipv6_address
;
in_addr
ipv4_address
;
//network byte order
//--------
explicit
gtpv2c_paa_ie
(
const
core
::
paa_t
&
p
)
:
explicit
gtpv2c_paa_ie
(
const
core
::
paa_t
&
p
)
:
gtpv2c_ie
(
GTP_IE_PDN_ADDRESS_ALLOCATION
){
u1
.
b
=
0
;
u1
.
bf
.
pdn_type
=
p
.
pdn_type
.
pdn_type
;
...
...
@@ -2043,7 +2076,7 @@ public:
uint8_t
guaranted_bit_rate_for_downlink
[
5
];
//--------
explicit
gtpv2c_bearer_qos_ie
(
const
core
::
bearer_qos_t
&
b
)
:
explicit
gtpv2c_bearer_qos_ie
(
const
core
::
bearer_qos_t
&
b
)
:
gtpv2c_ie
(
GTP_IE_BEARER_QUALITY_OF_SERVICE
){
u1
.
b
=
0
;
u1
.
bf
.
pci
=
b
.
pci
;
...
...
@@ -2160,7 +2193,7 @@ public:
uint8_t
guaranted_bit_rate_for_downlink
[
5
];
//--------
explicit
gtpv2c_flow_qos_ie
(
const
core
::
flow_qos_t
&
b
)
:
explicit
gtpv2c_flow_qos_ie
(
const
core
::
flow_qos_t
&
b
)
:
gtpv2c_ie
(
GTP_IE_FLOW_QUALITY_OF_SERVICE
){
label_qci
=
b
.
label_qci
;
uint64_t
max_uplink
=
b
.
maximum_bit_rate_for_uplink
&
0x000000FFFFFFFFFF
;
...
...
@@ -2324,7 +2357,7 @@ public:
}
u3
;
//--------
explicit
gtpv2c_serving_network_ie
(
const
core
::
serving_network_t
&
s
)
:
explicit
gtpv2c_serving_network_ie
(
const
core
::
serving_network_t
&
s
)
:
gtpv2c_ie
(
GTP_IE_SERVING_NETWORK
){
u1
.
bf
.
mcc_digit_2
=
s
.
mcc_digit_2
;
u1
.
bf
.
mcc_digit_1
=
s
.
mcc_digit_1
;
...
...
@@ -2348,6 +2381,20 @@ gtpv2c_ie(GTP_IE_SERVING_NETWORK){
u3
.
b
=
0
;
};
//--------
explicit
gtpv2c_serving_network_ie
(
const
gtpv2c_serving_network_ie
&
i
)
:
gtpv2c_ie
(
i
),
u1
(
i
.
u1
),
u2
(
i
.
u2
),
u3
(
i
.
u3
)
{}
//--------
gtpv2c_serving_network_ie
&
operator
=
(
gtpv2c_serving_network_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
u1
,
other
.
u1
);
std
::
swap
(
u2
,
other
.
u2
);
std
::
swap
(
u3
,
other
.
u3
);
return
*
this
;
}
//--------
void
to_core_type
(
core
::
serving_network_t
&
s
)
{
s
.
mcc_digit_2
=
u1
.
bf
.
mcc_digit_2
;
s
.
mcc_digit_1
=
u1
.
bf
.
mcc_digit_1
;
...
...
@@ -2967,7 +3014,7 @@ public:
uint16_t
extended_macro_enodeb_id
;
//--------
explicit
gtpv2c_extended_macro_enodeb_id_field_ie
(
const
explicit
gtpv2c_extended_macro_enodeb_id_field_ie
(
const
core
::
extended_macro_enodeb_id_field_t
&
t
){
u1
.
bf
.
mcc_digit_2
=
t
.
mcc_digit_2
;
u1
.
bf
.
mcc_digit_1
=
t
.
mcc_digit_1
;
...
...
@@ -3048,7 +3095,7 @@ public:
gtpv2c_extended_macro_enodeb_id_field_ie
extended_macro_enodeb_id
;
//--------
explicit
gtpv2c_user_location_information_ie
(
const
core
::
uli_t
&
u
)
:
explicit
gtpv2c_user_location_information_ie
(
const
core
::
uli_t
&
u
)
:
gtpv2c_ie
(
GTP_IE_USER_LOCATION_INFORMATION
){
tlv
.
length
=
1
;
u1
.
bf
.
extended_macro_enodeb_id
=
u
.
user_location_information_ie_hdr
.
extended_macro_enodeb_id
;
...
...
@@ -3118,6 +3165,32 @@ gtpv2c_ie(GTP_IE_USER_LOCATION_INFORMATION){
macro_enodeb_id
=
gtpv2c_macro_enodeb_id_field_ie
();
extended_macro_enodeb_id
=
gtpv2c_extended_macro_enodeb_id_field_ie
();
};
explicit
gtpv2c_user_location_information_ie
(
const
gtpv2c_user_location_information_ie
&
i
)
:
gtpv2c_ie
(
i
),
u1
(
i
.
u1
),
cgi
(
i
.
cgi
),
sai
(
i
.
sai
),
rai
(
i
.
rai
),
tai
(
i
.
tai
),
ecgi
(
i
.
ecgi
),
lai
(
i
.
lai
),
macro_enodeb_id
(
i
.
macro_enodeb_id
),
extended_macro_enodeb_id
(
i
.
extended_macro_enodeb_id
)
{}
//--------
gtpv2c_user_location_information_ie
&
operator
=
(
gtpv2c_user_location_information_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
u1
,
other
.
u1
);
std
::
swap
(
cgi
,
other
.
cgi
);
std
::
swap
(
sai
,
other
.
sai
);
std
::
swap
(
rai
,
other
.
rai
);
std
::
swap
(
tai
,
other
.
tai
);
std
::
swap
(
ecgi
,
other
.
ecgi
);
std
::
swap
(
lai
,
other
.
lai
);
std
::
swap
(
macro_enodeb_id
,
other
.
macro_enodeb_id
);
std
::
swap
(
extended_macro_enodeb_id
,
other
.
extended_macro_enodeb_id
);
return
*
this
;
}
//--------
void
to_core_type
(
core
::
uli_t
&
u
)
{
u
=
{
0
};
...
...
@@ -3237,7 +3310,7 @@ public:
struct
in6_addr
ipv6_address
;
//--------
explicit
gtpv2c_fully_qualified_teid_ie
(
const
core
::
fteid_t
&
f
)
:
explicit
gtpv2c_fully_qualified_teid_ie
(
const
core
::
fteid_t
&
f
)
:
gtpv2c_ie
(
GTP_IE_FULLY_QUALIFIED_TUNNEL_ENDPOINT_IDENTIFIER
){
tlv
.
length
=
5
;
u1
.
b
=
0
;
...
...
@@ -3270,6 +3343,16 @@ gtpv2c_ie(GTP_IE_FULLY_QUALIFIED_TUNNEL_ENDPOINT_IDENTIFIER){
ipv6_address
=
in6addr_any
;
};
//--------
gtpv2c_fully_qualified_teid_ie
&
operator
=
(
gtpv2c_fully_qualified_teid_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
u1
,
other
.
u1
);
std
::
swap
(
teid_gre_key
,
other
.
teid_gre_key
);
std
::
swap
(
ipv4_address
,
other
.
ipv4_address
);
std
::
swap
(
ipv6_address
,
other
.
ipv6_address
);
return
*
this
;
}
//--------
void
to_core_type
(
core
::
fteid_t
&
f
)
{
f
=
{
0
};
f
.
v4
=
u1
.
bf
.
v4
;
...
...
@@ -3325,7 +3408,7 @@ public:
uint8_t
delay_value
;
//--------
explicit
gtpv2c_delay_value_ie
(
const
core
::
delay_value_t
&
d
)
:
explicit
gtpv2c_delay_value_ie
(
const
core
::
delay_value_t
&
d
)
:
gtpv2c_ie
(
GTP_IE_DELAY_VALUE
){
tlv
.
length
=
1
;
delay_value
=
d
.
delay_value
;
...
...
@@ -3340,6 +3423,13 @@ gtpv2c_ie(GTP_IE_DELAY_VALUE){
delay_value
=
0
;
};
//--------
gtpv2c_delay_value_ie
&
operator
=
(
gtpv2c_delay_value_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
delay_value
,
other
.
delay_value
);
return
*
this
;
}
//--------
void
to_core_type
(
core
::
delay_value_t
&
d
)
{
d
=
{
0
};
d
.
delay_value
=
delay_value
;
...
...
@@ -3380,7 +3470,7 @@ public:
}
u1
;
//--------
explicit
gtpv2c_ue_time_zone_ie
(
const
core
::
ue_time_zone_t
&
t
)
:
explicit
gtpv2c_ue_time_zone_ie
(
const
core
::
ue_time_zone_t
&
t
)
:
gtpv2c_ie
(
GTP_IE_UE_TIME_ZONE
){
tlv
.
length
=
2
;
time_zone
=
t
.
time_zone
;
...
...
@@ -3399,6 +3489,14 @@ gtpv2c_ie(GTP_IE_UE_TIME_ZONE){
u1
.
b
=
0
;
};
//--------
gtpv2c_ue_time_zone_ie
&
operator
=
(
gtpv2c_ue_time_zone_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
u1
,
other
.
u1
);
std
::
swap
(
time_zone
,
other
.
time_zone
);
return
*
this
;
}
//--------
void
to_core_type
(
core
::
ue_time_zone_t
&
t
)
{
t
=
{
0
};
t
.
time_zone
=
time_zone
;
...
...
@@ -3434,7 +3532,7 @@ public:
uint8_t
restriction_type_value
;
//--------
explicit
gtpv2c_apn_restriction_ie
(
const
core
::
access_point_name_restriction_t
&
a
)
:
explicit
gtpv2c_apn_restriction_ie
(
const
core
::
access_point_name_restriction_t
&
a
)
:
gtpv2c_ie
(
GTP_IE_APN_RESTRICTION
){
tlv
.
length
=
1
;
restriction_type_value
=
a
.
restriction_type_value
;
...
...
@@ -3449,6 +3547,13 @@ gtpv2c_ie(GTP_IE_APN_RESTRICTION){
restriction_type_value
=
0
;
};
//--------
gtpv2c_apn_restriction_ie
&
operator
=
(
gtpv2c_apn_restriction_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
restriction_type_value
,
other
.
restriction_type_value
);
return
*
this
;
}
//--------
void
to_core_type
(
core
::
access_point_name_restriction_t
&
a
)
{
a
=
{
0
};
a
.
restriction_type_value
=
restriction_type_value
;
...
...
@@ -3486,7 +3591,7 @@ public:
}
u1
;
//--------
explicit
gtpv2c_selection_mode_ie
(
const
core
::
selection_mode_t
&
s
)
:
explicit
gtpv2c_selection_mode_ie
(
const
core
::
selection_mode_t
&
s
)
:
gtpv2c_ie
(
GTP_IE_SELECTION_MODE
){
tlv
.
length
=
1
;
u1
.
b
=
0
;
...
...
@@ -3502,6 +3607,13 @@ gtpv2c_ie(GTP_IE_SELECTION_MODE){
u1
.
b
=
0
;
};
//--------
gtpv2c_selection_mode_ie
&
operator
=
(
gtpv2c_selection_mode_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
u1
,
other
.
u1
);
return
*
this
;
}
//--------
void
to_core_type
(
core
::
selection_mode_t
&
s
)
{
s
=
{
0
};
s
.
selec_mode
=
u1
.
bf
.
selec_mode
;
...
...
@@ -3591,6 +3703,15 @@ public:
pdn_connection_set_identifier
.
reserve
(
PDN_CONNECTION_SET_IDENTIFIER_MAX
);
};
//--------
gtpv2c_fq_csid_ie
&
operator
=
(
gtpv2c_fq_csid_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
u1
,
other
.
u1
);
std
::
swap
(
u2
,
other
.
u2
);
std
::
swap
(
pdn_connection_set_identifier
,
other
.
pdn_connection_set_identifier
);
return
*
this
;
}
//--------
void
to_core_type
(
core
::
fq_csid_t
&
f
)
{
f
=
{
0
};
f
.
fq_csid_ie_hdr
.
node_id_type
=
u1
.
bf
.
node_id_type
;
...
...
@@ -3709,6 +3830,13 @@ public:
node_type
=
0
;
};
//--------
gtpv2c_node_type_ie
&
operator
=
(
gtpv2c_node_type_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
node_type
,
other
.
node_type
);
return
*
this
;
}
//--------
void
to_core_type
(
core
::
node_type_t
&
n
)
{
n
=
{
0
};
n
.
node_type
=
node_type
;
...
...
@@ -3770,6 +3898,13 @@ public:
u1
.
b
=
0
;
};
//--------
gtpv2c_node_features_ie
&
operator
=
(
gtpv2c_node_features_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
u1
,
other
.
u1
);
return
*
this
;
}
//--------
void
to_core_type
(
core
::
node_features_t
&
s
)
{
s
=
{
0
};
s
.
prn
=
u1
.
bf
.
prn
;
...
...
@@ -3817,10 +3952,10 @@ public:
uint16_t
diameter
;
uint16_t
ikev2
;
}
cause_value
;
//--------
explicit
gtpv2c_ran_nas_cause_ie
(
const
core
::
ran_nas_cause_t
&
c
)
:
explicit
gtpv2c_ran_nas_cause_ie
(
const
core
::
ran_nas_cause_t
&
c
)
:
gtpv2c_ie
(
GTP_IE_RAN_NAS_CAUSE
){
tlv
.
length
=
1
;
u1
.
bf
.
protocol_type
=
c
.
protocol_type
;
...
...
@@ -3846,7 +3981,7 @@ gtpv2c_ie(GTP_IE_RAN_NAS_CAUSE){
cause_value
.
ikev2
=
c
.
cause_value
.
ikev2
;
tlv
.
length
+=
sizeof
(
cause_value
.
ikev2
);
break
;
default:
default:
throw
gtpc_ie_value_exception
(
GTP_IE_RAN_NAS_CAUSE
,
"protocol_type"
);
}
}
...
...
@@ -3864,6 +3999,14 @@ gtpv2c_ie(GTP_IE_RAN_NAS_CAUSE){
explicit
gtpv2c_ran_nas_cause_ie
(
const
gtpv2c_tlv
&
t
)
:
gtpv2c_ie
(
t
),
u1
(),
cause_value
()
{}
gtpv2c_ran_nas_cause_ie
&
operator
=
(
gtpv2c_ran_nas_cause_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
u1
,
other
.
u1
);
std
::
swap
(
cause_value
,
other
.
cause_value
);
return
*
this
;
}
//--------
void
to_core_type
(
core
::
ran_nas_cause_t
&
c
)
{
c
=
{
0
};
...
...
@@ -3885,7 +4028,7 @@ gtpv2c_ie(GTP_IE_RAN_NAS_CAUSE){
case
core
:
:
PROTOCOL_TYPE_E_IKEV2
:
c
.
cause_value
.
ikev2
=
cause_value
.
ikev2
;
break
;
default:
default:
throw
gtpc_ie_value_exception
(
GTP_IE_RAN_NAS_CAUSE
,
"protocol_type"
);
}
}
...
...
@@ -3915,7 +4058,7 @@ gtpv2c_ie(GTP_IE_RAN_NAS_CAUSE){
os
.
write
(
reinterpret_cast
<
const
char
*>
(
&
ns_ikev2
),
sizeof
(
ns_ikev2
));
}
break
;
default:
default:
throw
gtpc_ie_value_exception
(
GTP_IE_RAN_NAS_CAUSE
,
"protocol_type"
);
}
}
...
...
@@ -3942,7 +4085,7 @@ gtpv2c_ie(GTP_IE_RAN_NAS_CAUSE){
is
.
read
(
reinterpret_cast
<
char
*>
(
&
cause_value
.
ikev2
),
sizeof
(
cause_value
.
ikev2
));
cause_value
.
ikev2
=
ntohs
(
cause_value
.
ikev2
);
break
;
default:
default:
throw
gtpc_ie_value_exception
(
GTP_IE_RAN_NAS_CAUSE
,
"protocol_type"
);
}
}
...
...
@@ -3970,8 +4113,8 @@ public:
}
u1
;
//--------
explicit
gtpv2c_ciot_optimizations_support_indication_ie
(
const
core
::
ciot_optimizations_support_indication_t
&
s
)
:
explicit
gtpv2c_ciot_optimizations_support_indication_ie
(
const
core
::
ciot_optimizations_support_indication_t
&
s
)
:
gtpv2c_ie
(
GTP_IE_CIOT_OPTIMIZATIONS_SUPPORT_INDICATION
){
tlv
.
length
=
1
;
u1
.
b
=
0
;
...
...
@@ -3990,6 +4133,13 @@ gtpv2c_ie(GTP_IE_CIOT_OPTIMIZATIONS_SUPPORT_INDICATION){
u1
.
b
=
0
;
};
//--------
gtpv2c_ciot_optimizations_support_indication_ie
&
operator
=
(
gtpv2c_ciot_optimizations_support_indication_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
u1
,
other
.
u1
);
return
*
this
;
}
//--------
void
to_core_type
(
core
::
ciot_optimizations_support_indication_t
&
s
)
{
s
=
{
0
};
s
.
ihcsi
=
u1
.
bf
.
ihcsi
;
...
...
@@ -4012,7 +4162,7 @@ gtpv2c_ie(GTP_IE_CIOT_OPTIMIZATIONS_SUPPORT_INDICATION){
}
//--------
void
to_core_type
(
gtpv2c_ies_container
&
s
,
const
uint8_t
instance
)
{
core
::
ciot_optimizations_support_indication_t
core
::
ciot_optimizations_support_indication_t
ciot_optimizations_support_indication
=
{};
to_core_type
(
ciot_optimizations_support_indication
);
s
.
set
(
ciot_optimizations_support_indication
,
instance
);
...
...
@@ -4025,7 +4175,7 @@ class gtpv2c_epco_ie : public gtpv2c_ie {
public:
std
::
string
extended_protocol_configuration_options
;
//--------
explicit
gtpv2c_epco_ie
(
const
core
::
extended_protocol_configuration_options_t
&
e
)
:
explicit
gtpv2c_epco_ie
(
const
core
::
extended_protocol_configuration_options_t
&
e
)
:
gtpv2c_ie
(
GTP_IE_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS
),
extended_protocol_configuration_options
(
e
.
extended_protocol_configuration_options
)
{
tlv
.
length
=
extended_protocol_configuration_options
.
size
();
...
...
@@ -4037,6 +4187,13 @@ public:
explicit
gtpv2c_epco_ie
(
const
gtpv2c_tlv
&
t
)
:
gtpv2c_ie
(
t
)
{
};
//--------
gtpv2c_epco_ie
&
operator
=
(
gtpv2c_epco_ie
other
)
{
this
->
gtpv2c_ie
::
operator
=
(
other
);
std
::
swap
(
extended_protocol_configuration_options
,
other
.
extended_protocol_configuration_options
);
return
*
this
;
}
//--------
void
to_core_type
(
core
::
extended_protocol_configuration_options_t
&
e
)
{
e
.
extended_protocol_configuration_options
=
extended_protocol_configuration_options
;
}
...
...
@@ -4055,7 +4212,7 @@ public:
}
//--------
void
to_core_type
(
gtpv2c_ies_container
&
s
,
const
uint8_t
instance
)
{
core
::
extended_protocol_configuration_options_t
core
::
extended_protocol_configuration_options_t
extended_protocol_configuration_options
=
{};
to_core_type
(
extended_protocol_configuration_options
);
s
.
set
(
extended_protocol_configuration_options
,
instance
);
...
...
src/gtpv2c/msg_gtpv2c.hpp
View file @
149aa8b6
...
...
@@ -163,11 +163,11 @@ public:
// TODO GTP_IE_REMOTE_UE_CONTEXT
// TODO GTP_IE_REMOTE_USER_ID
// TODO GTP_IE_REMOTE_UE_IP_INFORMATION
virtual
bool
get
(
core
::
ciot_optimizations_support_indication_t
&
v
,
const
uint8_t
instance
=
0
)
const
{
throw
gtpc_msg_illegal_ie_exception
(
0
,
GTP_IE_CIOT_OPTIMIZATIONS_SUPPORT_INDICATION
,
__FILE__
,
virtual
bool
get
(
core
::
ciot_optimizations_support_indication_t
&
v
,
const
uint8_t
instance
=
0
)
const
{
throw
gtpc_msg_illegal_ie_exception
(
0
,
GTP_IE_CIOT_OPTIMIZATIONS_SUPPORT_INDICATION
,
__FILE__
,
__LINE__
);}
// TODO GTP_IE_SCEF_PDN_CONNECTION
// TODO GTP_IE_HEADER_COMPRESSION_CONFIGURATION
virtual
bool
get
(
core
::
extended_protocol_configuration_options_t
&
v
,
const
uint8_t
instance
=
0
)
const
{
throw
gtpc_msg_illegal_ie_exception
(
0
,
GTP_IE_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS
,
virtual
bool
get
(
core
::
extended_protocol_configuration_options_t
&
v
,
const
uint8_t
instance
=
0
)
const
{
throw
gtpc_msg_illegal_ie_exception
(
0
,
GTP_IE_EXTENDED_PROTOCOL_CONFIGURATION_OPTIONS
,
__FILE__
,
__LINE__
);}
// TODO GTP_IE_SERVING_PLMN_RATE_CONTROL
// TODO GTP_IE_COUNTER
...
...
@@ -259,7 +259,7 @@ __FILE__, __LINE__);}
// TODO GTP_IE_CSG_MEMBERSHIP_INDICATION
// TODO GTP_IE_SERVICE_INDICATOR
// TODO GTP_IE_DETACH_TYPE
virtual
void
set
(
const
core
::
local_distinguished_name_t
&
v
,
const
uint8_t
instance
=
0
)
{
throw
gtpc_msg_illegal_ie_exception
(
0
,
GTP_IE_LOCAL_DISTINGUISHED_NAME
,
__FILE__
,
__LINE__
);}
virtual
void
set
(
const
core
::
local_distinguished_name_t
&
v
,
const
uint8_t
instance
=
0
)
{
throw
gtpc_msg_illegal_ie_exception
(
0
,
GTP_IE_LOCAL_DISTINGUISHED_NAME
,
__FILE__
,
__LINE__
);}
virtual
void
set
(
const
core
::
node_features_t
&
v
,
const
uint8_t
instance
=
0
)
{
throw
gtpc_msg_illegal_ie_exception
(
0
,
GTP_IE_NODE_FEATURES
,
__FILE__
,
__LINE__
);}
// TODO GTP_IE_MBMS_TIME_TO_DATA_TRANSFER
// TODO GTP_IE_THROTTLING
...
...
@@ -342,7 +342,7 @@ public:
{
for
(
int
i
=
0
;
i
<
BEARER_CONTEXT_MAX_FTEID_INSTANCES
;
i
++
)
fteid
[
i
]
=
{};
}
bearer_context
(
const
bearer_context
&
b
)
:
eps_bearer_id
(
b
.
eps_bearer_id
),
tft
(
b
.
tft
),
...
...
@@ -356,6 +356,22 @@ public:
{
for
(
int
i
=
0
;
i
<
BEARER_CONTEXT_MAX_FTEID_INSTANCES
;
i
++
)
fteid
[
i
]
=
b
.
fteid
[
i
];
}
bearer_context
&
operator
=
(
bearer_context
other
)
{
std
::
swap
(
eps_bearer_id
,
other
.
eps_bearer_id
);
std
::
swap
(
tft
,
other
.
tft
);
std
::
swap
(
bearer_level_qos
,
other
.
bearer_level_qos
);
std
::
swap
(
cause
,
other
.
cause
);
std
::
swap
(
charging_id
,
other
.
charging_id
);
std
::
swap
(
bearer_flags
,
other
.
bearer_flags
);
std
::
swap
(
pco
,
other
.
pco
);
std
::
swap
(
epco
,
other
.
epco
);
std
::
swap
(
ran_nas_cause
,
other
.
ran_nas_cause
);
for
(
int
i
=
0
;
i
<
BEARER_CONTEXT_MAX_FTEID_INSTANCES
;
i
++
)
std
::
swap
(
fteid
[
i
],
other
.
fteid
[
i
]);
return
*
this
;
}
//virtual ~bearer_context() {};
virtual
void
set
(
const
core
::
ebi_t
&
v
,
const
uint8_t
instance
=
0
)
{
eps_bearer_id
.
first
=
true
;
eps_bearer_id
.
second
=
v
;}
virtual
void
set
(
const
core
::
traffic_flow_template_t
&
v
,
const
uint8_t
instance
=
0
)
{
tft
.
first
=
true
;
tft
.
second
=
v
;}
...
...
@@ -967,7 +983,7 @@ public:
std
::
swap
(
uci
,
i
.
uci
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"CREATE_SESSION_REQUEST"
;};
bool
get
(
core
::
imsi_t
&
v
,
const
uint8_t
instance
=
0
)
const
{
if
(
ie_presence_mask
&
GTPV2C_CREATE_SESSION_REQUEST_PR_IE_IMSI
)
{
v
=
imsi
;
return
true
;}
return
false
;}
...
...
@@ -983,7 +999,7 @@ public:
bool
get
(
core
::
selection_mode_t
&
v
,
const
uint8_t
instance
=
0
)
const
{
if
(
ie_presence_mask
&
GTPV2C_CREATE_SESSION_REQUEST_PR_IE_SELECTION_MODE
)
{
v
=
selection_mode
;
return
true
;}
return
false
;}
bool
get
(
core
::
pdn_type_t
&
v
,
const
uint8_t
instance
=
0
)
const
{
if
(
ie_presence_mask
&
GTPV2C_CREATE_SESSION_REQUEST_PR_IE_PDN_TYPE
)
{
v
=
pdn_type
;
return
true
;}
return
false
;}
bool
get
(
core
::
paa_t
&
v
,
const
uint8_t
instance
=
0
)
const
{
if
(
ie_presence_mask
&
GTPV2C_CREATE_SESSION_REQUEST_PR_IE_PAA
)
{
v
=
paa
;
return
true
;}
return
false
;}
bool
get
(
core
::
apn_restriction_t
&
v
,
const
uint8_t
instance
=
0
)
const
{
if
(
ie_presence_mask
&
GTPV2C_CREATE_SESSION_REQUEST_PR_IE_APN_RESTRICTION
)
{
v
=
apn_restriction
;
return
true
;}
return
bool
get
(
core
::
apn_restriction_t
&
v
,
const
uint8_t
instance
=
0
)
const
{
if
(
ie_presence_mask
&
GTPV2C_CREATE_SESSION_REQUEST_PR_IE_APN_RESTRICTION
)
{
v
=
apn_restriction
;
return
true
;}
return
false
;}
bool
get
(
core
::
ambr_t
&
v
,
const
uint8_t
instance
=
0
)
const
{
if
(
ie_presence_mask
&
GTPV2C_CREATE_SESSION_REQUEST_PR_IE_APN_AMBR
)
{
v
=
ambr
;
return
true
;}
return
false
;}
bool
get
(
core
::
ebi_t
&
v
,
const
uint8_t
instance
=
0
)
const
{
if
(
ie_presence_mask
&
GTPV2C_CREATE_SESSION_REQUEST_PR_IE_LINKED_EPS_BEARER_ID
)
{
v
=
linked_eps_bearer_id
;
return
true
;}
return
false
;}
...
...
@@ -1388,10 +1404,10 @@ public:
// Private Extension ///< This IE may be sent on the S5/S8, S4/S11 and S2b
///< interfaces.
gtpv2c_create_session_response
()
:
cause
(),
pgw_back_off_time
(),
indication_flags
(),
gtpv2c_create_session_response
()
:
cause
(),
sender_fteid_for_cp
(),
pgw_back_off_time
(),
indication_flags
(),
s5_s8_pgw_fteid
(),
paa
(),
apn_restriction
(),
...
...
@@ -1404,11 +1420,11 @@ public:
sgw_fq_csid
(),
sgw_ldn
(),
pgw_ldn
()
{}
gtpv2c_create_session_response
(
const
gtpv2c_create_session_response
&
i
)
:
cause
(
i
.
cause
),
pgw_back_off_time
(
i
.
pgw_back_off_time
),
indication_flags
(
i
.
indication_flags
),
sender_fteid_for_cp
(
i
.
sender_fteid_for_cp
),
pgw_back_off_time
(
i
.
pgw_back_off_time
),
indication_flags
(
i
.
indication_flags
),
s5_s8_pgw_fteid
(
i
.
s5_s8_pgw_fteid
),
paa
(
i
.
paa
),
apn_restriction
(
i
.
apn_restriction
),
...
...
@@ -1422,6 +1438,27 @@ public:
sgw_ldn
(
i
.
sgw_ldn
),
pgw_ldn
(
i
.
pgw_ldn
)
{}
gtpv2c_create_session_response
&
operator
=
(
gtpv2c_create_session_response
other
)
{
std
::
swap
(
cause
,
other
.
cause
);
std
::
swap
(
pgw_back_off_time
,
other
.
pgw_back_off_time
);
std
::
swap
(
indication_flags
,
other
.
indication_flags
);
std
::
swap
(
sender_fteid_for_cp
,
other
.
sender_fteid_for_cp
);
std
::
swap
(
s5_s8_pgw_fteid
,
other
.
s5_s8_pgw_fteid
);
std
::
swap
(
paa
,
other
.
paa
);
std
::
swap
(
apn_restriction
,
other
.
apn_restriction
);
std
::
swap
(
apn_ambr
,
other
.
apn_ambr
);
std
::
swap
(
linked_eps_bearer_id
,
other
.
linked_eps_bearer_id
);
std
::
swap
(
pco
,
other
.
pco
);
std
::
swap
(
bearer_contexts_created
,
other
.
bearer_contexts_created
);
std
::
swap
(
bearer_contexts_marked_for_removal
,
other
.
bearer_contexts_marked_for_removal
);
std
::
swap
(
pgw_fq_csid
,
other
.
pgw_fq_csid
);
std
::
swap
(
sgw_fq_csid
,
other
.
sgw_fq_csid
);
std
::
swap
(
sgw_ldn
,
other
.
sgw_ldn
);
std
::
swap
(
pgw_ldn
,
other
.
pgw_ldn
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"CREATE_SESSION_RESPONSE"
;};
bool
get
(
core
::
cause_t
&
v
,
const
uint8_t
instance
=
0
)
const
{
if
(
cause
.
first
)
{
v
=
cause
.
second
;
return
true
;}
return
false
;}
...
...
@@ -1561,10 +1598,16 @@ public:
static
const
uint8_t
msg_id
=
GTP_ECHO_REQUEST
;
std
::
pair
<
bool
,
core
::
recovery_t
>
recovery_restart_counter
;
std
::
pair
<
bool
,
core
::
node_features_t
>
sending_node_features
;
std
::
pair
<
bool
,
core
::
node_features_t
>
sending_node_features
;
gtpv2c_echo_request
()
:
recovery_restart_counter
(),
sending_node_features
()
{}
gtpv2c_echo_request
(
const
gtpv2c_echo_request
&
i
)
:
recovery_restart_counter
(
i
.
recovery_restart_counter
),
sending_node_features
(
i
.
sending_node_features
)
{}
gtpv2c_echo_request
&
operator
=
(
gtpv2c_echo_request
other
)
{
std
::
swap
(
recovery_restart_counter
,
other
.
recovery_restart_counter
);
std
::
swap
(
sending_node_features
,
other
.
sending_node_features
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"ECHO_REQUEST"
;};
bool
get
(
core
::
recovery_t
&
v
)
const
{
if
(
recovery_restart_counter
.
first
)
{
v
=
recovery_restart_counter
.
second
;
return
true
;}
return
false
;}
...
...
@@ -1578,17 +1621,23 @@ class gtpv2c_echo_response : public gtpv2c_ies_container {
public:
static
const
uint8_t
msg_id
=
GTP_ECHO_RESPONSE
;
std
::
pair
<
bool
,
core
::
recovery_t
>
recovery_restart_counter
;
std
::
pair
<
bool
,
core
::
node_features_t
>
sending_node_features
;
std
::
pair
<
bool
,
core
::
recovery_t
>
recovery_restart_counter
;
std
::
pair
<
bool
,
core
::
node_features_t
>
sending_node_features
;
gtpv2c_echo_response
()
:
recovery_restart_counter
(),
sending_node_features
()
{}
gtpv2c_echo_response
(
const
gtpv2c_echo_response
&
i
)
:
recovery_restart_counter
(
i
.
recovery_restart_counter
),
sending_node_features
(
i
.
sending_node_features
)
{}
gtpv2c_echo_response
&
operator
=
(
gtpv2c_echo_response
other
)
{
std
::
swap
(
recovery_restart_counter
,
other
.
recovery_restart_counter
);
std
::
swap
(
sending_node_features
,
other
.
sending_node_features
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"ECHO_RESPONSE"
;};
bool
get
(
core
::
recovery_t
&
v
)
const
{
if
(
recovery_restart_counter
.
first
)
{
v
=
recovery_restart_counter
.
second
;
return
true
;}
return
false
;}
...
...
@@ -1725,6 +1774,19 @@ public:
sgw_fq_csid
(
i
.
sgw_fq_csid
),
indication_flags
(
i
.
indication_flags
)
{}
gtpv2c_create_bearer_request
&
operator
=
(
gtpv2c_create_bearer_request
other
)
{
std
::
swap
(
ie_presence_mask
,
other
.
ie_presence_mask
);
std
::
swap
(
pti
,
other
.
pti
);
std
::
swap
(
linked_eps_bearer_id
,
other
.
linked_eps_bearer_id
);
std
::
swap
(
pco
,
other
.
pco
);
std
::
swap
(
bearer_contexts
,
other
.
bearer_contexts
);
std
::
swap
(
pgw_fq_csid
,
other
.
pgw_fq_csid
);
std
::
swap
(
sgw_fq_csid
,
other
.
sgw_fq_csid
);
std
::
swap
(
indication_flags
,
other
.
indication_flags
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"CREATE_BEARER_REQUEST"
;};
#define GTPV2C_CREATE_BEARER_REQUEST_PR_IE_PROCEDURE_TRANSACTION_IDENTIFIER ((uint64_t)1)
...
...
@@ -1983,6 +2045,21 @@ public:
ue_time_zone
(
i
.
ue_time_zone
),
uli
(
i
.
uli
)
{}
gtpv2c_create_bearer_response
&
operator
=
(
gtpv2c_create_bearer_response
other
)
{
std
::
swap
(
ie_presence_mask
,
other
.
ie_presence_mask
);
std
::
swap
(
cause
,
other
.
cause
);
std
::
swap
(
bearer_contexts
,
other
.
bearer_contexts
);
std
::
swap
(
mme_fq_csid
,
other
.
mme_fq_csid
);
std
::
swap
(
sgw_fq_csid
,
other
.
sgw_fq_csid
);
std
::
swap
(
epdg_fq_csid
,
other
.
epdg_fq_csid
);
std
::
swap
(
twan_fq_csid
,
other
.
twan_fq_csid
);
std
::
swap
(
pco
,
other
.
pco
);
std
::
swap
(
ue_time_zone
,
other
.
ue_time_zone
);
std
::
swap
(
uli
,
other
.
uli
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"CREATE_BEARER_RESPONSE"
;};
#define GTPV2C_CREATE_BEARER_RESPONSE_PR_IE_CAUSE ((uint64_t)1)
...
...
@@ -2214,6 +2291,28 @@ public:
uci
(
i
.
uci
),
imsi
(
i
.
imsi
)
{}
gtpv2c_modify_bearer_request
&
operator
=
(
gtpv2c_modify_bearer_request
other
)
{
std
::
swap
(
ie_presence_mask
,
other
.
ie_presence_mask
);
std
::
swap
(
mei
,
other
.
mei
);
std
::
swap
(
uli
,
other
.
uli
);
std
::
swap
(
serving_network
,
other
.
serving_network
);
std
::
swap
(
rat_type
,
other
.
rat_type
);
std
::
swap
(
rat_type
,
other
.
rat_type
);
std
::
swap
(
indication_flags
,
other
.
indication_flags
);
std
::
swap
(
sender_fteid_for_cp
,
other
.
sender_fteid_for_cp
);
std
::
swap
(
apn_ambr
,
other
.
apn_ambr
);
std
::
swap
(
delay_dl_packet_notif_req
,
other
.
delay_dl_packet_notif_req
);
std
::
swap
(
bearer_contexts_to_be_modified
,
other
.
bearer_contexts_to_be_modified
);
std
::
swap
(
bearer_contexts_to_be_removed
,
other
.
bearer_contexts_to_be_removed
);
std
::
swap
(
ue_time_zone
,
other
.
ue_time_zone
);
std
::
swap
(
mme_fq_csid
,
other
.
mme_fq_csid
);
std
::
swap
(
sgw_fq_csid
,
other
.
sgw_fq_csid
);
std
::
swap
(
uci
,
other
.
uci
);
std
::
swap
(
imsi
,
other
.
imsi
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"MODIFY_BEARER_REQUEST"
;};
#define GTPV2C_MODIFY_BEARER_REQUEST_PR_IE_MEI ((uint64_t)1)
...
...
@@ -2524,7 +2623,7 @@ public:
}
;
//-----------------------------------------------------------------------------
/** @class
gtpv2c
_modify_bearer_response
/** @class
bearer_context_modified_within
_modify_bearer_response
* @brief Modify Bearer Response
*
* The Modify Bearer Response will be sent on S11 interface as
...
...
@@ -2580,6 +2679,29 @@ public:
if
(
b
.
get
(
s4_u_sgw_fteid
.
second
,
2
))
s4_u_sgw_fteid
.
first
=
true
;
if
(
b
.
get
(
s11_u_sgw_fteid
.
second
,
3
))
s11_u_sgw_fteid
.
first
=
true
;
}
// explicit bearer_context_modified_within_modify_bearer_response(const bearer_context_modified_within_modify_bearer_response& b) :
// eps_bearer_id(b.eps_bearer_id),
// cause(b.cause),
// s1_u_sgw_fteid(b.s1_u_sgw_fteid),
// s12_sgw_fteid(b.s12_sgw_fteid),
// s4_u_sgw_fteid(b.s4_u_sgw_fteid),
// charging_id(b.charging_id),
// bearer_flags(b.bearer_flags),
// s11_u_sgw_fteid(b.s11_u_sgw_fteid) {}
//
// bearer_context_modified_within_modify_bearer_response& operator=(bearer_context_modified_within_modify_bearer_response other)
// {
// std::swap(eps_bearer_id, other.eps_bearer_id);
// std::swap(cause, other.cause);
// std::swap(s1_u_sgw_fteid, other.s1_u_sgw_fteid);
// std::swap(s12_sgw_fteid, other.s12_sgw_fteid);
// std::swap(s4_u_sgw_fteid, other.s4_u_sgw_fteid);
// std::swap(charging_id, other.charging_id);
// std::swap(bearer_flags, other.bearer_flags);
// std::swap(s11_u_sgw_fteid, other.s11_u_sgw_fteid);
// return *this;
// }
};
class
bearer_context_marked_for_removal_within_modify_bearer_response
{
...
...
@@ -2600,6 +2722,18 @@ public:
explicit
bearer_context_marked_for_removal_within_modify_bearer_response
(
const
bearer_context
&
b
)
:
eps_bearer_id
(
b
.
eps_bearer_id
),
cause
(
b
.
cause
)
{}
// explicit bearer_context_marked_for_removal_within_modify_bearer_response(const bearer_context_marked_for_removal_within_modify_bearer_response& b) :
// eps_bearer_id(b.eps_bearer_id),
// cause(b.cause) {}
// bearer_context_marked_for_removal_within_modify_bearer_response& operator=(bearer_context_marked_for_removal_within_modify_bearer_response other)
// {
// std::swap(eps_bearer_id, other.eps_bearer_id);
// std::swap(cause, other.cause);
// return *this;
// }
};
class
gtpv2c_modify_bearer_response
:
public
gtpv2c_ies_container
{
...
...
@@ -2630,6 +2764,22 @@ public:
indication_flags
(
i
.
indication_flags
),
pdn_connection_charging_id
(
i
.
pdn_connection_charging_id
)
{}
gtpv2c_modify_bearer_response
&
operator
=
(
gtpv2c_modify_bearer_response
other
)
{
std
::
swap
(
cause
,
other
.
cause
);
std
::
swap
(
msisdn
,
other
.
msisdn
);
std
::
swap
(
linked_eps_bearer_id
,
other
.
linked_eps_bearer_id
);
std
::
swap
(
apn_restriction
,
other
.
apn_restriction
);
std
::
swap
(
pco
,
other
.
pco
);
std
::
swap
(
bearer_contexts_modified
,
other
.
bearer_contexts_modified
);
std
::
swap
(
bearer_contexts_marked_for_removal
,
other
.
bearer_contexts_marked_for_removal
);
std
::
swap
(
pgw_fq_csid
,
other
.
pgw_fq_csid
);
std
::
swap
(
sgw_fq_csid
,
other
.
sgw_fq_csid
);
std
::
swap
(
indication_flags
,
other
.
indication_flags
);
std
::
swap
(
pdn_connection_charging_id
,
other
.
pdn_connection_charging_id
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"MODIFY_BEARER_RESPONSE"
;};
static
const
uint8_t
msg_id
=
GTP_MODIFY_BEARER_RESPONSE
;
...
...
@@ -2817,7 +2967,23 @@ public:
ue_time_zone
(
i
.
ue_time_zone
),
ran_nas_release_cause
(
i
.
ran_nas_release_cause
),
epco
(
i
.
epco
)
{}
gtpv2c_delete_session_request
&
operator
=
(
gtpv2c_delete_session_request
other
)
{
std
::
swap
(
ie_presence_mask
,
other
.
ie_presence_mask
);
std
::
swap
(
cause
,
other
.
cause
);
std
::
swap
(
linked_eps_bearer_id
,
other
.
linked_eps_bearer_id
);
std
::
swap
(
uli
,
other
.
uli
);
std
::
swap
(
indication_flags
,
other
.
indication_flags
);
std
::
swap
(
pco
,
other
.
pco
);
std
::
swap
(
originating_node
,
other
.
originating_node
);
std
::
swap
(
sender_fteid_for_cp
,
other
.
sender_fteid_for_cp
);
std
::
swap
(
ue_time_zone
,
other
.
ue_time_zone
);
std
::
swap
(
ran_nas_release_cause
,
other
.
ran_nas_release_cause
);
std
::
swap
(
epco
,
other
.
epco
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"DELETE_SESSION_REQUEST"
;};
#define GTPV2C_DELETE_SESSION_REQUEST_PR_IE_CAUSE ((uint64_t)1)
...
...
@@ -2912,6 +3078,16 @@ public:
indication_flags
(
i
.
indication_flags
),
epco
(
i
.
epco
)
{}
gtpv2c_delete_session_response
&
operator
=
(
gtpv2c_delete_session_response
other
)
{
std
::
swap
(
ie_presence_mask
,
other
.
ie_presence_mask
);
std
::
swap
(
cause
,
other
.
cause
);
std
::
swap
(
pco
,
other
.
pco
);
std
::
swap
(
indication_flags
,
other
.
indication_flags
);
std
::
swap
(
epco
,
other
.
epco
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"DELETE_SESSION_RESPONSE"
;};
#define GTPV2C_DELETE_SESSION_RESPONSE_PR_IE_CAUSE ((uint64_t)1)
...
...
@@ -2979,7 +3155,14 @@ public:
gtpv2c_release_access_bearers_request
(
const
gtpv2c_release_access_bearers_request
&
i
)
:
originating_node
(
i
.
originating_node
),
indication_flags
(
i
.
indication_flags
)
{}
gtpv2c_release_access_bearers_request
&
operator
=
(
gtpv2c_release_access_bearers_request
other
)
{
std
::
swap
(
originating_node
,
other
.
originating_node
);
std
::
swap
(
indication_flags
,
other
.
indication_flags
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"RELEASE_ACCESS_BEARERS_REQUEST"
;};
static
const
uint8_t
msg_id
=
GTP_RELEASE_ACCESS_BEARERS_REQUEST
;
...
...
@@ -3018,11 +3201,18 @@ public:
gtpv2c_release_access_bearers_response
()
:
cause
(),
indication_flags
()
{}
gtpv2c_release_access_bearers_response
(
const
gtpv2c_release_access_bearers_response
&
i
)
:
cause
(
i
.
cause
),
indication_flags
(
i
.
indication_flags
)
{}
gtpv2c_release_access_bearers_response
&
operator
=
(
gtpv2c_release_access_bearers_response
other
)
{
std
::
swap
(
cause
,
other
.
cause
);
std
::
swap
(
indication_flags
,
other
.
indication_flags
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"RELEASE_ACCESS_BEARERS_RESPONSE"
;};
std
::
pair
<
bool
,
core
::
cause_t
>
cause
;
...
...
@@ -3064,6 +3254,7 @@ public:
void
set
(
const
core
::
ran_nas_cause_t
&
v
,
const
uint8_t
instance
=
0
)
{
ran_nas_release_cause
=
v
;
ie_presence_mask
|=
GTPV2C_BEARER_CONTEXT_WITHIN_DELETE_BEARER_COMMAND_PR_IE_RAN_NAS_RELEASE_CAUSE
;}
bearer_context_within_delete_bearer_command
()
:
ie_presence_mask
(
0
),
eps_bearer_id
(),
bearer_flags
(),
ran_nas_release_cause
()
{}
...
...
@@ -3074,6 +3265,21 @@ public:
if
(
b
.
get
(
bearer_flags
,
0
))
ie_presence_mask
|=
GTPV2C_BEARER_CONTEXT_WITHIN_DELETE_BEARER_COMMAND_PR_IE_BEARER_FLAGS
;
if
(
b
.
get
(
ran_nas_release_cause
,
0
))
ie_presence_mask
|=
GTPV2C_BEARER_CONTEXT_WITHIN_DELETE_BEARER_COMMAND_PR_IE_RAN_NAS_RELEASE_CAUSE
;
}
explicit
bearer_context_within_delete_bearer_command
(
const
bearer_context_within_delete_bearer_command
&
b
)
:
ie_presence_mask
(
b
.
ie_presence_mask
),
eps_bearer_id
(
b
.
eps_bearer_id
),
bearer_flags
(
b
.
bearer_flags
),
ran_nas_release_cause
(
b
.
ran_nas_release_cause
)
{}
bearer_context_within_delete_bearer_command
&
operator
=
(
bearer_context_within_delete_bearer_command
other
)
{
std
::
swap
(
ie_presence_mask
,
other
.
ie_presence_mask
);
std
::
swap
(
eps_bearer_id
,
other
.
eps_bearer_id
);
std
::
swap
(
bearer_flags
,
other
.
bearer_flags
);
std
::
swap
(
ran_nas_release_cause
,
other
.
ran_nas_release_cause
);
return
*
this
;
}
};
class
gtpv2c_delete_bearer_command
:
public
gtpv2c_ies_container
{
...
...
@@ -3085,12 +3291,23 @@ public:
ue_time_zone
=
{};
sender_fteid_for_cp
=
{};
}
gtpv2c_delete_bearer_command
(
const
gtpv2c_delete_bearer_command
&
i
)
:
bearer_contexts
(
i
.
bearer_contexts
)
{
ie_presence_mask
=
i
.
ie_presence_mask
;
uli
=
i
.
uli
;
uli_timestamp
=
i
.
uli_timestamp
;
ue_time_zone
=
i
.
ue_time_zone
;
sender_fteid_for_cp
=
i
.
sender_fteid_for_cp
;
gtpv2c_delete_bearer_command
(
const
gtpv2c_delete_bearer_command
&
i
)
:
ie_presence_mask
(
i
.
ie_presence_mask
),
bearer_contexts
(
i
.
bearer_contexts
),
uli
(
i
.
uli
),
uli_timestamp
(
i
.
uli_timestamp
),
ue_time_zone
(
i
.
ue_time_zone
),
sender_fteid_for_cp
(
i
.
sender_fteid_for_cp
)
{}
gtpv2c_delete_bearer_command
&
operator
=
(
gtpv2c_delete_bearer_command
other
)
{
std
::
swap
(
ie_presence_mask
,
other
.
ie_presence_mask
);
std
::
swap
(
bearer_contexts
,
other
.
bearer_contexts
);
std
::
swap
(
uli
,
other
.
uli
);
std
::
swap
(
uli_timestamp
,
other
.
uli_timestamp
);
std
::
swap
(
ue_time_zone
,
other
.
ue_time_zone
);
std
::
swap
(
sender_fteid_for_cp
,
other
.
sender_fteid_for_cp
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"DELETE_BEARER_COMMAND"
;};
...
...
@@ -3133,7 +3350,7 @@ public:
};
//-----------------------------------------------------------------------------
/** @class
gtpv2c
_delete_bearer_failure_indication
/** @class
bearer_context_within
_delete_bearer_failure_indication
*/
class
bearer_context_within_delete_bearer_failure_indication
{
public:
...
...
@@ -3158,7 +3375,23 @@ public:
if
(
b
.
get
(
eps_bearer_id
,
0
))
ie_presence_mask
|=
GTPV2C_BEARER_CONTEXT_WITHIN_DELETE_BEARER_FAILURE_INDICATION_PR_IE_EPS_BEARER_ID
;
if
(
b
.
get
(
cause
,
0
))
ie_presence_mask
|=
GTPV2C_BEARER_CONTEXT_WITHIN_DELETE_BEARER_FAILURE_INDICATION_PR_IE_CAUSE
;
}
explicit
bearer_context_within_delete_bearer_failure_indication
(
const
bearer_context_within_delete_bearer_failure_indication
&
b
)
:
ie_presence_mask
(
b
.
ie_presence_mask
),
eps_bearer_id
(
b
.
eps_bearer_id
),
cause
(
b
.
cause
)
{}
bearer_context_within_delete_bearer_failure_indication
&
operator
=
(
bearer_context_within_delete_bearer_failure_indication
other
)
{
std
::
swap
(
ie_presence_mask
,
other
.
ie_presence_mask
);
std
::
swap
(
eps_bearer_id
,
other
.
eps_bearer_id
);
std
::
swap
(
cause
,
other
.
cause
);
return
*
this
;
}
};
//-----------------------------------------------------------------------------
/** @class gtpv2c_delete_bearer_failure_indication
*/
class
gtpv2c_delete_bearer_failure_indication
:
public
gtpv2c_ies_container
{
public:
gtpv2c_delete_bearer_failure_indication
()
:
bearer_contexts
()
{
...
...
@@ -3166,11 +3399,21 @@ public:
cause
=
{};
indication_flags
=
{};
}
gtpv2c_delete_bearer_failure_indication
(
const
gtpv2c_delete_bearer_failure_indication
&
i
)
:
bearer_contexts
(
i
.
bearer_contexts
)
{
ie_presence_mask
=
i
.
ie_presence_mask
;
cause
=
i
.
cause
;
indication_flags
=
i
.
indication_flags
;
explicit
gtpv2c_delete_bearer_failure_indication
(
const
gtpv2c_delete_bearer_failure_indication
&
i
)
:
ie_presence_mask
(
i
.
ie_presence_mask
),
bearer_contexts
(
i
.
bearer_contexts
),
cause
(
i
.
cause
),
indication_flags
(
i
.
indication_flags
)
{}
gtpv2c_delete_bearer_failure_indication
&
operator
=
(
gtpv2c_delete_bearer_failure_indication
other
)
{
std
::
swap
(
ie_presence_mask
,
other
.
ie_presence_mask
);
std
::
swap
(
bearer_contexts
,
other
.
bearer_contexts
);
std
::
swap
(
cause
,
other
.
cause
);
std
::
swap
(
indication_flags
,
other
.
indication_flags
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"DELETE_BEARER_FAILURE_INDICATION"
;};
static
const
uint8_t
msg_id
=
GTP_DELETE_BEARER_FAILURE_INDICATION
;
...
...
@@ -3224,14 +3467,25 @@ public:
sender_fteid_for_cp
=
{};
indication_flags
=
{};
}
gtpv2c_downlink_data_notification
(
const
gtpv2c_downlink_data_notification
&
i
)
{
ie_presence_mask
=
i
.
ie_presence_mask
;
cause
=
i
.
cause
;
eps_bearer_id
=
i
.
eps_bearer_id
;
arp
=
i
.
arp
;
imsi
=
i
.
imsi
;
sender_fteid_for_cp
=
i
.
sender_fteid_for_cp
;
indication_flags
=
i
.
indication_flags
;
gtpv2c_downlink_data_notification
(
const
gtpv2c_downlink_data_notification
&
i
)
:
ie_presence_mask
(
i
.
ie_presence_mask
),
cause
(
i
.
cause
),
eps_bearer_id
(
i
.
eps_bearer_id
),
arp
(
i
.
arp
),
imsi
(
i
.
imsi
),
sender_fteid_for_cp
(
i
.
sender_fteid_for_cp
),
indication_flags
(
i
.
indication_flags
)
{}
gtpv2c_downlink_data_notification
&
operator
=
(
gtpv2c_downlink_data_notification
other
)
{
std
::
swap
(
ie_presence_mask
,
other
.
ie_presence_mask
);
std
::
swap
(
cause
,
other
.
cause
);
std
::
swap
(
eps_bearer_id
,
other
.
eps_bearer_id
);
std
::
swap
(
arp
,
other
.
arp
);
std
::
swap
(
imsi
,
other
.
imsi
);
std
::
swap
(
sender_fteid_for_cp
,
other
.
sender_fteid_for_cp
);
std
::
swap
(
indication_flags
,
other
.
indication_flags
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"DOWNLINK_DATA_NOTIFICATION"
;};
...
...
@@ -3277,11 +3531,19 @@ public:
cause
=
{};
imsi
=
{};
}
gtpv2c_downlink_data_notification_acknowledge
(
const
gtpv2c_downlink_data_notification_acknowledge
&
i
)
{
ie_presence_mask
=
i
.
ie_presence_mask
;
cause
=
i
.
cause
;
imsi
=
i
.
imsi
;
gtpv2c_downlink_data_notification_acknowledge
(
const
gtpv2c_downlink_data_notification_acknowledge
&
i
)
:
ie_presence_mask
(
i
.
ie_presence_mask
),
cause
(
i
.
cause
),
imsi
(
i
.
imsi
)
{}
gtpv2c_downlink_data_notification_acknowledge
&
operator
=
(
gtpv2c_downlink_data_notification_acknowledge
other
)
{
std
::
swap
(
ie_presence_mask
,
other
.
ie_presence_mask
);
std
::
swap
(
cause
,
other
.
cause
);
std
::
swap
(
imsi
,
other
.
imsi
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE"
;};
#define DOWNLINK_DATA_NOTIFICATION_ACK_PR_IE_CAUSE ((uint64_t)1)
...
...
@@ -3320,15 +3582,25 @@ public:
cause
(),
originating_node
(),
imsi
()
{}
gtpv2c_downlink_data_notification_failure_indication
(
const
gtpv2c_downlink_data_notification_failure_indication
&
i
)
:
ie_presence_mask
(
i
.
ie_presence_mask
),
cause
(
i
.
cause
),
originating_node
(
i
.
originating_node
),
imsi
(
i
.
imsi
)
{}
gtpv2c_downlink_data_notification_failure_indication
&
operator
=
(
gtpv2c_downlink_data_notification_failure_indication
other
)
{
std
::
swap
(
ie_presence_mask
,
other
.
ie_presence_mask
);
std
::
swap
(
cause
,
other
.
cause
);
std
::
swap
(
originating_node
,
other
.
originating_node
);
std
::
swap
(
imsi
,
other
.
imsi
);
return
*
this
;
}
static
const
char
*
get_msg_name
()
{
return
"DOWNLINK_DATA_NOTIFICATION_FAILURE_INDICATION"
;};
uint64_t
ie_presence_mask
;
core
::
cause_t
cause
;
core
::
node_type_t
originating_node
;
core
::
imsi_t
imsi
;
...
...
@@ -3338,7 +3610,6 @@ public:
#define DOWNLINK_DATA_NOTIFICATION_FAILURE_IND_PR_IE_IMSI ((uint64_t)1 << 2)
#define DOWNLINK_DATA_NOTIFICATION_FAILURE_IND_PR_IE_PRIVATE_EXTENSION ((uint64_t)1 << 3)
static
const
uint8_t
msg_id
=
GTP_DOWNLINK_DATA_NOTIFICATION_FAILURE_INDICATION
;
uint64_t
ie_presence_mask
;
void
set
(
const
core
::
cause_t
&
v
,
const
uint8_t
instance
=
0
)
{
cause
=
v
;
ie_presence_mask
|=
DOWNLINK_DATA_NOTIFICATION_FAILURE_IND_PR_IE_CAUSE
;}
void
set
(
const
core
::
node_type_t
&
v
,
const
uint8_t
instance
=
0
)
{
originating_node
=
v
;
ie_presence_mask
|=
DOWNLINK_DATA_NOTIFICATION_FAILURE_IND_PR_IE_ORIGINATING_NODE
;}
...
...
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