Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenXG
OpenXG UE
Commits
b33d02cb
Commit
b33d02cb
authored
May 11, 2021
by
Laurent THOMAS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix 4G DL rb id
parent
6861d97c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
43 additions
and
30 deletions
+43
-30
openair3/ocp-gtpu/gtp_itf.cpp
openair3/ocp-gtpu/gtp_itf.cpp
+42
-29
openair3/ocp-gtpu/gtp_itf.h
openair3/ocp-gtpu/gtp_itf.h
+1
-1
No files found.
openair3/ocp-gtpu/gtp_itf.cpp
View file @
b33d02cb
...
@@ -62,7 +62,7 @@ typedef struct {
...
@@ -62,7 +62,7 @@ typedef struct {
typedef
struct
{
typedef
struct
{
rnti_t
rnti
;
rnti_t
rnti
;
ebi_t
rb_id
;
ebi_t
incoming_
rb_id
;
gtpCallback
callBack
;
gtpCallback
callBack
;
}
rntiData_t
;
}
rntiData_t
;
...
@@ -156,14 +156,14 @@ static int gtpv1uCreateAndSendMsg(int h, uint32_t peerIp, uint16_t peerPort, te
...
@@ -156,14 +156,14 @@ static int gtpv1uCreateAndSendMsg(int h, uint32_t peerIp, uint16_t peerPort, te
static
void
gtpv1uSend
(
instance_t
instance
,
gtpv1u_enb_tunnel_data_req_t
*
req
,
bool
seqNumFlag
,
bool
npduNumFlag
)
{
static
void
gtpv1uSend
(
instance_t
instance
,
gtpv1u_enb_tunnel_data_req_t
*
req
,
bool
seqNumFlag
,
bool
npduNumFlag
)
{
uint8_t
*
buffer
=
req
->
buffer
+
req
->
offset
;
uint8_t
*
buffer
=
req
->
buffer
+
req
->
offset
;
size_t
length
=
req
->
length
;
size_t
length
=
req
->
length
;
uint64
_t
rnti
=
req
->
rnti
;
rnti
_t
rnti
=
req
->
rnti
;
int
rab_id
=
req
->
rab_id
;
int
rab_id
=
req
->
rab_id
;
pthread_mutex_lock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_lock
(
&
globGtp
.
gtp_lock
);
auto
inst
=&
globGtp
.
instances
[
compatInst
(
instance
)];
auto
inst
=&
globGtp
.
instances
[
compatInst
(
instance
)];
auto
ptrRnti
=
inst
->
ue2te_mapping
.
find
(
rnti
);
auto
ptrRnti
=
inst
->
ue2te_mapping
.
find
(
rnti
);
if
(
ptrRnti
==
inst
->
ue2te_mapping
.
end
()
)
{
if
(
ptrRnti
==
inst
->
ue2te_mapping
.
end
()
)
{
LOG_E
(
GTPU
,
"gtpv1uSend failed: while getting ue rnti %
l
x in hashtable ue_mapping
\n
"
,
rnti
);
LOG_E
(
GTPU
,
"gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping
\n
"
,
rnti
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
return
;
return
;
}
}
...
@@ -171,11 +171,11 @@ static void gtpv1uSend(instance_t instance, gtpv1u_enb_tunnel_data_req_t *req, b
...
@@ -171,11 +171,11 @@ static void gtpv1uSend(instance_t instance, gtpv1u_enb_tunnel_data_req_t *req, b
auto
ptr
=
ptrRnti
->
second
.
bearers
;
auto
ptr
=
ptrRnti
->
second
.
bearers
;
if
(
ptr
.
find
(
rab_id
)
==
ptr
.
end
()
)
{
if
(
ptr
.
find
(
rab_id
)
==
ptr
.
end
()
)
{
LOG_E
(
GTPU
,
"sending a packet to a non existant RNTI:RAB: %
l
x/%x
\n
"
,
rnti
,
rab_id
);
LOG_E
(
GTPU
,
"sending a packet to a non existant RNTI:RAB: %x/%x
\n
"
,
rnti
,
rab_id
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
return
;
return
;
}
else
}
else
LOG_D
(
GTPU
,
"sending a packet to RNTI:RAB:teid %
l
x/%x/%x, len %lu, oldseq %d, oldnum %d
\n
"
,
LOG_D
(
GTPU
,
"sending a packet to RNTI:RAB:teid %x/%x/%x, len %lu, oldseq %d, oldnum %d
\n
"
,
rnti
,
rab_id
,
ptr
[
rab_id
].
teid_outgoing
,
length
,
ptr
[
rab_id
].
seqNum
,
ptr
[
rab_id
].
npduNum
);
rnti
,
rab_id
,
ptr
[
rab_id
].
teid_outgoing
,
length
,
ptr
[
rab_id
].
seqNum
,
ptr
[
rab_id
].
npduNum
);
if
(
seqNumFlag
)
if
(
seqNumFlag
)
...
@@ -197,14 +197,14 @@ static void gtpv1uSend(instance_t instance, gtpv1u_enb_tunnel_data_req_t *req, b
...
@@ -197,14 +197,14 @@ static void gtpv1uSend(instance_t instance, gtpv1u_enb_tunnel_data_req_t *req, b
static
void
gtpv1uSend2
(
instance_t
instance
,
gtpv1u_gnb_tunnel_data_req_t
*
req
,
bool
seqNumFlag
,
bool
npduNumFlag
)
{
static
void
gtpv1uSend2
(
instance_t
instance
,
gtpv1u_gnb_tunnel_data_req_t
*
req
,
bool
seqNumFlag
,
bool
npduNumFlag
)
{
uint8_t
*
buffer
=
req
->
buffer
+
req
->
offset
;
uint8_t
*
buffer
=
req
->
buffer
+
req
->
offset
;
size_t
length
=
req
->
length
;
size_t
length
=
req
->
length
;
uint64
_t
rnti
=
req
->
rnti
;
rnti
_t
rnti
=
req
->
rnti
;
int
rab_id
=
req
->
pdusession_id
;
int
rab_id
=
req
->
pdusession_id
;
pthread_mutex_lock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_lock
(
&
globGtp
.
gtp_lock
);
auto
inst
=&
globGtp
.
instances
[
compatInst
(
instance
)];
auto
inst
=&
globGtp
.
instances
[
compatInst
(
instance
)];
auto
ptrRnti
=
inst
->
ue2te_mapping
.
find
(
rnti
);
auto
ptrRnti
=
inst
->
ue2te_mapping
.
find
(
rnti
);
if
(
ptrRnti
==
inst
->
ue2te_mapping
.
end
()
)
{
if
(
ptrRnti
==
inst
->
ue2te_mapping
.
end
()
)
{
LOG_E
(
GTPU
,
"gtpv1uSend failed: while getting ue rnti %
l
x in hashtable ue_mapping
\n
"
,
rnti
);
LOG_E
(
GTPU
,
"gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping
\n
"
,
rnti
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
return
;
return
;
}
}
...
@@ -212,11 +212,11 @@ static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req,
...
@@ -212,11 +212,11 @@ static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req,
auto
ptr
=
ptrRnti
->
second
.
bearers
;
auto
ptr
=
ptrRnti
->
second
.
bearers
;
if
(
ptr
.
find
(
rab_id
)
==
ptr
.
end
()
)
{
if
(
ptr
.
find
(
rab_id
)
==
ptr
.
end
()
)
{
LOG_E
(
GTPU
,
"sending a packet to a non existant RNTI:RAB: %
l
x/%x
\n
"
,
rnti
,
rab_id
);
LOG_E
(
GTPU
,
"sending a packet to a non existant RNTI:RAB: %x/%x
\n
"
,
rnti
,
rab_id
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
return
;
return
;
}
else
}
else
LOG_D
(
GTPU
,
"sending a packet to RNTI:RAB:teid %
l
x/%x/%x, len %lu, oldseq %d, oldnum %d
\n
"
,
LOG_D
(
GTPU
,
"sending a packet to RNTI:RAB:teid %x/%x/%x, len %lu, oldseq %d, oldnum %d
\n
"
,
rnti
,
rab_id
,
ptr
[
rab_id
].
teid_outgoing
,
length
,
ptr
[
rab_id
].
seqNum
,
ptr
[
rab_id
].
npduNum
);
rnti
,
rab_id
,
ptr
[
rab_id
].
teid_outgoing
,
length
,
ptr
[
rab_id
].
seqNum
,
ptr
[
rab_id
].
npduNum
);
if
(
seqNumFlag
)
if
(
seqNumFlag
)
...
@@ -236,14 +236,14 @@ static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req,
...
@@ -236,14 +236,14 @@ static void gtpv1uSend2(instance_t instance, gtpv1u_gnb_tunnel_data_req_t *req,
}
}
static
void
gtpv1uEndTunnel
(
instance_t
instance
,
gtpv1u_enb_tunnel_data_req_t
*
req
)
{
static
void
gtpv1uEndTunnel
(
instance_t
instance
,
gtpv1u_enb_tunnel_data_req_t
*
req
)
{
uint64
_t
rnti
=
req
->
rnti
;
rnti
_t
rnti
=
req
->
rnti
;
int
rab_id
=
req
->
rab_id
;
int
rab_id
=
req
->
rab_id
;
pthread_mutex_lock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_lock
(
&
globGtp
.
gtp_lock
);
auto
inst
=&
globGtp
.
instances
[
compatInst
(
instance
)];
auto
inst
=&
globGtp
.
instances
[
compatInst
(
instance
)];
auto
ptrRnti
=
inst
->
ue2te_mapping
.
find
(
rnti
);
auto
ptrRnti
=
inst
->
ue2te_mapping
.
find
(
rnti
);
if
(
ptrRnti
==
inst
->
ue2te_mapping
.
end
()
)
{
if
(
ptrRnti
==
inst
->
ue2te_mapping
.
end
()
)
{
LOG_E
(
GTPU
,
"gtpv1uSend failed: while getting ue rnti %
l
x in hashtable ue_mapping
\n
"
,
rnti
);
LOG_E
(
GTPU
,
"gtpv1uSend failed: while getting ue rnti %x in hashtable ue_mapping
\n
"
,
rnti
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
return
;
return
;
}
}
...
@@ -251,11 +251,11 @@ static void gtpv1uEndTunnel(instance_t instance, gtpv1u_enb_tunnel_data_req_t *r
...
@@ -251,11 +251,11 @@ static void gtpv1uEndTunnel(instance_t instance, gtpv1u_enb_tunnel_data_req_t *r
auto
ptr
=
ptrRnti
->
second
.
bearers
;
auto
ptr
=
ptrRnti
->
second
.
bearers
;
if
(
ptr
.
find
(
rab_id
)
==
ptr
.
end
()
)
{
if
(
ptr
.
find
(
rab_id
)
==
ptr
.
end
()
)
{
LOG_E
(
GTPU
,
"sending a packet to a non existant RNTI:RAB: %
l
x/%x
\n
"
,
rnti
,
rab_id
);
LOG_E
(
GTPU
,
"sending a packet to a non existant RNTI:RAB: %x/%x
\n
"
,
rnti
,
rab_id
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
return
;
return
;
}
else
}
else
LOG_D
(
GTPU
,
"sending a end packet packet to RNTI:RAB:teid %
l
x/%x/%x
\n
"
,
LOG_D
(
GTPU
,
"sending a end packet packet to RNTI:RAB:teid %x/%x/%x
\n
"
,
rnti
,
rab_id
,
ptr
[
rab_id
].
teid_outgoing
);
rnti
,
rab_id
,
ptr
[
rab_id
].
teid_outgoing
);
ocp_gtpv1u_bearer_t
tmp
=
ptr
[
rab_id
];
ocp_gtpv1u_bearer_t
tmp
=
ptr
[
rab_id
];
...
@@ -386,8 +386,8 @@ instance_t ocp_gtpv1Init(openAddr_t context) {
...
@@ -386,8 +386,8 @@ instance_t ocp_gtpv1Init(openAddr_t context) {
return
id
;
return
id
;
}
}
teid_t
newGtpuCreateTunnel
(
instance_t
instance
,
rnti_t
rnti
,
int
bearer_id
,
teid_t
outgoing_teid
,
teid_t
newGtpuCreateTunnel
(
instance_t
instance
,
rnti_t
rnti
,
int
incoming_bearer_id
,
int
outgoing_
bearer_id
,
teid_t
outgoing_teid
,
transport_layer_addr_t
remoteAddr
,
int
port
,
gtpCallback
callBack
)
{
transport_layer_addr_t
remoteAddr
,
int
port
,
gtpCallback
callBack
)
{
pthread_mutex_lock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_lock
(
&
globGtp
.
gtp_lock
);
auto
inst
=&
globGtp
.
instances
[
instance
];
auto
inst
=&
globGtp
.
instances
[
instance
];
auto
it
=
inst
->
ue2te_mapping
.
find
(
rnti
);
auto
it
=
inst
->
ue2te_mapping
.
find
(
rnti
);
...
@@ -400,17 +400,17 @@ teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int bearer_id, teid
...
@@ -400,17 +400,17 @@ teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int bearer_id, teid
uint32_t
incoming_teid
=
gtpv1uNewTeid
();
uint32_t
incoming_teid
=
gtpv1uNewTeid
();
while
(
inst
->
te2ue_mapping
.
find
(
incoming_teid
)
!=
inst
->
te2ue_mapping
.
end
()
)
{
while
(
inst
->
te2ue_mapping
.
find
(
incoming_teid
)
!=
inst
->
te2ue_mapping
.
end
()
)
{
LOG_W
(
GTPU
,
"generated a random Teid that exists, re-generating (%
u
)
\n
"
,
incoming_teid
);
LOG_W
(
GTPU
,
"generated a random Teid that exists, re-generating (%
x
)
\n
"
,
incoming_teid
);
incoming_teid
=
gtpv1uNewTeid
();
incoming_teid
=
gtpv1uNewTeid
();
};
};
inst
->
te2ue_mapping
[
incoming_teid
].
rnti
=
rnti
;
inst
->
te2ue_mapping
[
incoming_teid
].
rnti
=
rnti
;
inst
->
te2ue_mapping
[
incoming_teid
].
rb_id
=
outgoing_te
id
;
inst
->
te2ue_mapping
[
incoming_teid
].
incoming_rb_id
=
incoming_bearer_
id
;
inst
->
te2ue_mapping
[
incoming_teid
].
callBack
=
callBack
;
inst
->
te2ue_mapping
[
incoming_teid
].
callBack
=
callBack
;
auto
tmp
=&
inst
->
ue2te_mapping
[
rnti
].
bearers
[
bearer_id
];
auto
tmp
=&
inst
->
ue2te_mapping
[
rnti
].
bearers
[
outgoing_
bearer_id
];
int
addrs_length_in_bytes
=
remoteAddr
.
length
/
8
;
int
addrs_length_in_bytes
=
remoteAddr
.
length
/
8
;
...
@@ -433,14 +433,15 @@ teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int bearer_id, teid
...
@@ -433,14 +433,15 @@ teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int bearer_id, teid
default:
default:
AssertFatal
(
false
,
"SGW Address size impossible"
);
AssertFatal
(
false
,
"SGW Address size impossible"
);
}
}
tmp
->
teid_incoming
=
incoming_teid
;
tmp
->
teid_incoming
=
incoming_teid
;
tmp
->
outgoing_port
=
port
;
tmp
->
outgoing_port
=
port
;
tmp
->
teid_outgoing
=
outgoing_teid
;
tmp
->
teid_outgoing
=
outgoing_teid
;
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
LOG_I
(
GTPU
,
"Created tunnel for RNTI %x,
teid for DL: %d, teid for UL %d
\n
"
,
LOG_I
(
GTPU
,
"Created tunnel for RNTI %x,
bearer: %d/%d teid for DL: %x, teid for UL %x
\n
"
,
rnti
,
rnti
,
tmp
->
teid_incoming
,
outgoing_bearer_id
,
incoming_bearer_id
,
tmp
->
teid_incoming
,
tmp
->
teid_outgoing
);
tmp
->
teid_outgoing
);
return
incoming_teid
;
return
incoming_teid
;
}
}
...
@@ -448,13 +449,18 @@ teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int bearer_id, teid
...
@@ -448,13 +449,18 @@ teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int bearer_id, teid
int
ocp_gtpv1u_create_s1u_tunnel
(
instance_t
instance
,
int
ocp_gtpv1u_create_s1u_tunnel
(
instance_t
instance
,
const
gtpv1u_enb_create_tunnel_req_t
*
create_tunnel_req
,
const
gtpv1u_enb_create_tunnel_req_t
*
create_tunnel_req
,
gtpv1u_enb_create_tunnel_resp_t
*
create_tunnel_resp
)
{
gtpv1u_enb_create_tunnel_resp_t
*
create_tunnel_resp
)
{
LOG_D
(
GTPU
,
"Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %
d
\n
"
,
LOG_D
(
GTPU
,
"Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %
x
\n
"
,
create_tunnel_req
->
rnti
,
create_tunnel_req
->
rnti
,
create_tunnel_req
->
num_tunnels
,
create_tunnel_req
->
num_tunnels
,
create_tunnel_req
->
sgw_S1u_teid
[
0
]);
create_tunnel_req
->
sgw_S1u_teid
[
0
]);
for
(
int
i
=
0
;
i
<
create_tunnel_req
->
num_tunnels
;
i
++
)
{
for
(
int
i
=
0
;
i
<
create_tunnel_req
->
num_tunnels
;
i
++
)
{
AssertFatal
(
create_tunnel_req
->
eps_bearer_id
[
i
]
>
4
,
"From legacy code not clear, seems impossible (bearer=%d)
\n
"
,
create_tunnel_req
->
eps_bearer_id
[
i
]);
int
incoming_rb_id
=
create_tunnel_req
->
eps_bearer_id
[
i
]
-
4
;
teid_t
teid
=
newGtpuCreateTunnel
(
compatInst
(
instance
),
create_tunnel_req
->
rnti
,
teid_t
teid
=
newGtpuCreateTunnel
(
compatInst
(
instance
),
create_tunnel_req
->
rnti
,
incoming_rb_id
,
create_tunnel_req
->
eps_bearer_id
[
i
],
create_tunnel_req
->
eps_bearer_id
[
i
],
create_tunnel_req
->
sgw_S1u_teid
[
i
],
create_tunnel_req
->
sgw_S1u_teid
[
i
],
create_tunnel_req
->
sgw_addr
[
i
],
2152
,
create_tunnel_req
->
sgw_addr
[
i
],
2152
,
...
@@ -477,7 +483,7 @@ int ocp_gtpv1u_update_s1u_tunnel(
...
@@ -477,7 +483,7 @@ int ocp_gtpv1u_update_s1u_tunnel(
const
gtpv1u_enb_create_tunnel_req_t
*
const
create_tunnel_req
,
const
gtpv1u_enb_create_tunnel_req_t
*
const
create_tunnel_req
,
const
rnti_t
prior_rnti
const
rnti_t
prior_rnti
)
{
)
{
LOG_D
(
GTPU
,
"Start update tunnels for old RNTI %x, new RNTI %x, num_tunnels %d, sgw_S1u_teid %
d, eps_bearer_id %d
\n
"
,
LOG_D
(
GTPU
,
"Start update tunnels for old RNTI %x, new RNTI %x, num_tunnels %d, sgw_S1u_teid %
x, eps_bearer_id %x
\n
"
,
prior_rnti
,
prior_rnti
,
create_tunnel_req
->
rnti
,
create_tunnel_req
->
rnti
,
create_tunnel_req
->
num_tunnels
,
create_tunnel_req
->
num_tunnels
,
...
@@ -509,13 +515,14 @@ int ocp_gtpv1u_update_s1u_tunnel(
...
@@ -509,13 +515,14 @@ int ocp_gtpv1u_update_s1u_tunnel(
int
gtpv1u_create_ngu_tunnel
(
const
instance_t
instance
,
int
gtpv1u_create_ngu_tunnel
(
const
instance_t
instance
,
const
gtpv1u_gnb_create_tunnel_req_t
*
const
create_tunnel_req
,
const
gtpv1u_gnb_create_tunnel_req_t
*
const
create_tunnel_req
,
gtpv1u_gnb_create_tunnel_resp_t
*
const
create_tunnel_resp
)
{
gtpv1u_gnb_create_tunnel_resp_t
*
const
create_tunnel_resp
)
{
LOG_D
(
GTPU
,
"Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %
d
\n
"
,
LOG_D
(
GTPU
,
"Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %
x
\n
"
,
create_tunnel_req
->
rnti
,
create_tunnel_req
->
rnti
,
create_tunnel_req
->
num_tunnels
,
create_tunnel_req
->
num_tunnels
,
create_tunnel_req
->
upf_NGu_teid
[
0
]);
create_tunnel_req
->
upf_NGu_teid
[
0
]);
for
(
int
i
=
0
;
i
<
create_tunnel_req
->
num_tunnels
;
i
++
)
{
for
(
int
i
=
0
;
i
<
create_tunnel_req
->
num_tunnels
;
i
++
)
{
teid_t
teid
=
newGtpuCreateTunnel
(
compatInst
(
instance
),
create_tunnel_req
->
rnti
,
teid_t
teid
=
newGtpuCreateTunnel
(
compatInst
(
instance
),
create_tunnel_req
->
rnti
,
create_tunnel_req
->
pdusession_id
[
i
],
create_tunnel_req
->
pdusession_id
[
i
],
create_tunnel_req
->
pdusession_id
[
i
],
create_tunnel_req
->
upf_NGu_teid
[
i
],
create_tunnel_req
->
upf_NGu_teid
[
i
],
create_tunnel_req
->
upf_addr
[
i
],
2152
,
create_tunnel_req
->
upf_addr
[
i
],
2152
,
...
@@ -560,13 +567,19 @@ int newGtpuDeleteTunnel(instance_t instance, rnti_t rnti) {
...
@@ -560,13 +567,19 @@ int newGtpuDeleteTunnel(instance_t instance, rnti_t rnti) {
return
-
1
;
return
-
1
;
}
}
int
nb
=
0
;
for
(
auto
j
=
it
->
second
.
bearers
.
begin
();
for
(
auto
j
=
it
->
second
.
bearers
.
begin
();
j
!=
it
->
second
.
bearers
.
end
();
j
!=
it
->
second
.
bearers
.
end
();
++
j
)
++
j
)
{
inst
->
te2ue_mapping
.
erase
(
j
->
second
.
teid_incoming
);
inst
->
te2ue_mapping
.
erase
(
j
->
second
.
teid_incoming
);
nb
++
;
}
inst
->
ue2te_mapping
.
erase
(
it
);
inst
->
ue2te_mapping
.
erase
(
it
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
LOG_I
(
GTPU
,
"Deleted all tunnels for RNTI %d (%d tunnels deleted)
\n
"
,
rnti
,
nb
);
return
!
GTPNOK
;
return
!
GTPNOK
;
}
}
...
@@ -634,7 +647,7 @@ static int Gtpv1uHandleEndMarker(int h,
...
@@ -634,7 +647,7 @@ static int Gtpv1uHandleEndMarker(int h,
auto
tunnel
=
inst
->
te2ue_mapping
.
find
(
ntohl
(
msgHdr
->
teid
));
auto
tunnel
=
inst
->
te2ue_mapping
.
find
(
ntohl
(
msgHdr
->
teid
));
if
(
tunnel
==
inst
->
te2ue_mapping
.
end
()
)
{
if
(
tunnel
==
inst
->
te2ue_mapping
.
end
()
)
{
LOG_E
(
GTPU
,
"Received a incoming packet on unknown teid (%
d
) Dropping!
\n
"
,
msgHdr
->
teid
);
LOG_E
(
GTPU
,
"Received a incoming packet on unknown teid (%
x
) Dropping!
\n
"
,
msgHdr
->
teid
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
return
GTPNOK
;
return
GTPNOK
;
}
}
...
@@ -653,7 +666,7 @@ static int Gtpv1uHandleEndMarker(int h,
...
@@ -653,7 +666,7 @@ static int Gtpv1uHandleEndMarker(int h,
ctxt
.
configured
=
0
;
ctxt
.
configured
=
0
;
ctxt
.
brOption
=
0
;
ctxt
.
brOption
=
0
;
const
srb_flag_t
srb_flag
=
SRB_FLAG_NO
;
const
srb_flag_t
srb_flag
=
SRB_FLAG_NO
;
const
rb_id_t
rb_id
=
tunnel
->
second
.
rb_id
;
const
rb_id_t
rb_id
=
tunnel
->
second
.
incoming_
rb_id
;
const
mui_t
mui
=
RLC_MUI_UNDEFINED
;
const
mui_t
mui
=
RLC_MUI_UNDEFINED
;
const
confirm_t
confirm
=
RLC_SDU_CONFIRM_NO
;
const
confirm_t
confirm
=
RLC_SDU_CONFIRM_NO
;
const
pdcp_transmission_mode_t
mode
=
PDCP_TRANSMISSION_MODE_DATA
;
const
pdcp_transmission_mode_t
mode
=
PDCP_TRANSMISSION_MODE_DATA
;
...
@@ -695,7 +708,7 @@ static int Gtpv1uHandleGpdu(int h,
...
@@ -695,7 +708,7 @@ static int Gtpv1uHandleGpdu(int h,
auto
tunnel
=
inst
->
te2ue_mapping
.
find
(
ntohl
(
msgHdr
->
teid
));
auto
tunnel
=
inst
->
te2ue_mapping
.
find
(
ntohl
(
msgHdr
->
teid
));
if
(
tunnel
==
inst
->
te2ue_mapping
.
end
()
)
{
if
(
tunnel
==
inst
->
te2ue_mapping
.
end
()
)
{
LOG_E
(
GTPU
,
"Received a incoming packet on unknown teid (%
d
) Dropping!
\n
"
,
msgHdr
->
teid
);
LOG_E
(
GTPU
,
"Received a incoming packet on unknown teid (%
x
) Dropping!
\n
"
,
msgHdr
->
teid
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
pthread_mutex_unlock
(
&
globGtp
.
gtp_lock
);
return
GTPNOK
;
return
GTPNOK
;
}
}
...
@@ -719,7 +732,7 @@ static int Gtpv1uHandleGpdu(int h,
...
@@ -719,7 +732,7 @@ static int Gtpv1uHandleGpdu(int h,
ctxt
.
configured
=
0
;
ctxt
.
configured
=
0
;
ctxt
.
brOption
=
0
;
ctxt
.
brOption
=
0
;
const
srb_flag_t
srb_flag
=
SRB_FLAG_NO
;
const
srb_flag_t
srb_flag
=
SRB_FLAG_NO
;
const
rb_id_t
rb_id
=
tunnel
->
second
.
rb_id
;
const
rb_id_t
rb_id
=
tunnel
->
second
.
incoming_
rb_id
;
const
mui_t
mui
=
RLC_MUI_UNDEFINED
;
const
mui_t
mui
=
RLC_MUI_UNDEFINED
;
const
confirm_t
confirm
=
RLC_SDU_CONFIRM_NO
;
const
confirm_t
confirm
=
RLC_SDU_CONFIRM_NO
;
const
sdu_size_t
sdu_buffer_size
=
msgBufLen
-
offset
;
const
sdu_size_t
sdu_buffer_size
=
msgBufLen
-
offset
;
...
...
openair3/ocp-gtpu/gtp_itf.h
View file @
b33d02cb
...
@@ -60,7 +60,7 @@ int ocp_gtpv1u_create_x2u_tunnel(
...
@@ -60,7 +60,7 @@ int ocp_gtpv1u_create_x2u_tunnel(
// New API
// New API
teid_t
newGtpuCreateTunnel
(
instance_t
instance
,
rnti_t
rnti
,
int
bearer
_id
,
teid_t
teid
,
teid_t
newGtpuCreateTunnel
(
instance_t
instance
,
rnti_t
rnti
,
int
incoming_bearer_id
,
int
outgoing_rb
_id
,
teid_t
teid
,
transport_layer_addr_t
remoteAddr
,
int
port
,
gtpCallback
callBack
);
transport_layer_addr_t
remoteAddr
,
int
port
,
gtpCallback
callBack
);
instance_t
ocp_gtpv1Init
(
openAddr_t
context
);
instance_t
ocp_gtpv1Init
(
openAddr_t
context
);
void
*
ocp_gtpv1uTask
(
void
*
args
);
void
*
ocp_gtpv1uTask
(
void
*
args
);
...
...
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