Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
U
UERANSIM
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
Libraries
UERANSIM
Commits
23d7d61c
Commit
23d7d61c
authored
May 01, 2021
by
aligungr
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Narrowing conversion fixes
parent
7ff3ec37
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
32 additions
and
31 deletions
+32
-31
src/gnb/gtp/utils.cpp
src/gnb/gtp/utils.cpp
+11
-11
src/gnb/gtp/utils.hpp
src/gnb/gtp/utils.hpp
+21
-20
No files found.
src/gnb/gtp/utils.cpp
View file @
23d7d61c
...
...
@@ -78,16 +78,16 @@ TokenBucket::TokenBucket(long byteCapacity) : byteCapacity(byteCapacity)
}
}
bool
TokenBucket
::
tryConsume
(
int64_t
numberTokens
)
bool
TokenBucket
::
tryConsume
(
u
int64_t
numberTokens
)
{
if
(
byteCapacity
>
0
)
{
refill
();
if
(
availableTokens
<
numberTokens
)
if
(
availableTokens
<
static_cast
<
double
>
(
numberTokens
)
)
return
false
;
else
{
availableTokens
-=
numberTokens
;
availableTokens
-=
static_cast
<
double
>
(
numberTokens
)
;
return
true
;
}
}
...
...
@@ -95,7 +95,7 @@ bool TokenBucket::tryConsume(int64_t numberTokens)
return
true
;
}
void
TokenBucket
::
updateCapacity
(
int64_t
newByteCapacity
)
void
TokenBucket
::
updateCapacity
(
u
int64_t
newByteCapacity
)
{
byteCapacity
=
newByteCapacity
;
if
(
newByteCapacity
>
0
)
...
...
@@ -108,13 +108,13 @@ void TokenBucket::refill()
if
(
currentTimeMillis
>
lastRefillTimestamp
)
{
int64_t
millisSinceLastRefill
=
currentTimeMillis
-
lastRefillTimestamp
;
double
refill
=
millisSinceLastRefill
*
refillTokensPerOneMillis
;
double
refill
=
static_cast
<
double
>
(
millisSinceLastRefill
)
*
refillTokensPerOneMillis
;
availableTokens
=
std
::
min
(
static_cast
<
double
>
(
byteCapacity
),
availableTokens
+
refill
);
lastRefillTimestamp
=
currentTimeMillis
;
}
}
bool
RateLimiter
::
allowDownlinkPacket
(
uint64_t
pduSession
,
int64_t
packetSize
)
bool
RateLimiter
::
allowDownlinkPacket
(
uint64_t
pduSession
,
u
int64_t
packetSize
)
{
int
ueId
=
GetUeId
(
pduSession
);
...
...
@@ -135,7 +135,7 @@ bool RateLimiter::allowDownlinkPacket(uint64_t pduSession, int64_t packetSize)
return
true
;
}
bool
RateLimiter
::
allowUplinkPacket
(
uint64_t
pduSession
,
int64_t
packetSize
)
bool
RateLimiter
::
allowUplinkPacket
(
uint64_t
pduSession
,
u
int64_t
packetSize
)
{
int
ueId
=
GetUeId
(
pduSession
);
...
...
@@ -156,7 +156,7 @@ bool RateLimiter::allowUplinkPacket(uint64_t pduSession, int64_t packetSize)
return
true
;
}
void
RateLimiter
::
updateUeUplinkLimit
(
int
ueId
,
int64_t
limit
)
void
RateLimiter
::
updateUeUplinkLimit
(
int
ueId
,
u
int64_t
limit
)
{
if
(
limit
<=
0
)
{
...
...
@@ -175,7 +175,7 @@ void RateLimiter::updateUeUplinkLimit(int ueId, int64_t limit)
}
}
void
RateLimiter
::
updateUeDownlinkLimit
(
int
ueId
,
int64_t
limit
)
void
RateLimiter
::
updateUeDownlinkLimit
(
int
ueId
,
u
int64_t
limit
)
{
if
(
limit
<=
0
)
{
...
...
@@ -194,7 +194,7 @@ void RateLimiter::updateUeDownlinkLimit(int ueId, int64_t limit)
}
}
void
RateLimiter
::
updateSessionUplinkLimit
(
uint64_t
pduSession
,
int64_t
limit
)
void
RateLimiter
::
updateSessionUplinkLimit
(
uint64_t
pduSession
,
u
int64_t
limit
)
{
if
(
limit
<=
0
)
{
...
...
@@ -213,7 +213,7 @@ void RateLimiter::updateSessionUplinkLimit(uint64_t pduSession, int64_t limit)
}
}
void
RateLimiter
::
updateSessionDownlinkLimit
(
uint64_t
pduSession
,
int64_t
limit
)
void
RateLimiter
::
updateSessionDownlinkLimit
(
uint64_t
pduSession
,
u
int64_t
limit
)
{
if
(
limit
<=
0
)
{
...
...
src/gnb/gtp/utils.hpp
View file @
23d7d61c
...
...
@@ -32,17 +32,6 @@ inline int GetPsi(uint64_t sessionResInd)
return
static_cast
<
int
>
(
sessionResInd
&
0xFFFFFFFFuLL
);
}
class
IRateLimiter
{
public:
virtual
bool
allowDownlinkPacket
(
uint64_t
pduSession
,
int64_t
packetSize
)
=
0
;
virtual
bool
allowUplinkPacket
(
uint64_t
pduSession
,
int64_t
packetSize
)
=
0
;
virtual
void
updateUeUplinkLimit
(
int
ueId
,
int64_t
limit
)
=
0
;
virtual
void
updateUeDownlinkLimit
(
int
ueId
,
int64_t
limit
)
=
0
;
virtual
void
updateSessionUplinkLimit
(
uint64_t
pduSession
,
int64_t
limit
)
=
0
;
virtual
void
updateSessionDownlinkLimit
(
uint64_t
pduSession
,
int64_t
limit
)
=
0
;
};
class
PduSessionTree
{
std
::
unordered_map
<
uint32_t
,
uint64_t
>
mapByDownTeid
;
...
...
@@ -61,20 +50,32 @@ class TokenBucket
{
static
constexpr
const
int64_t
REFILL_PERIOD
=
1000L
;
int64_t
byteCapacity
;
u
int64_t
byteCapacity
;
double
refillTokensPerOneMillis
;
double
availableTokens
;
int64_t
lastRefillTimestamp
;
public:
explicit
TokenBucket
(
long
byteCapacity
);
bool
tryConsume
(
int64_t
numberTokens
);
void
updateCapacity
(
int64_t
newByteCapacity
);
bool
tryConsume
(
uint64_t
numberTokens
);
void
updateCapacity
(
uint64_t
newByteCapacity
);
private:
void
refill
();
};
class
IRateLimiter
{
public:
virtual
bool
allowDownlinkPacket
(
uint64_t
pduSession
,
uint64_t
packetSize
)
=
0
;
virtual
bool
allowUplinkPacket
(
uint64_t
pduSession
,
uint64_t
packetSize
)
=
0
;
virtual
void
updateUeUplinkLimit
(
int
ueId
,
uint64_t
limit
)
=
0
;
virtual
void
updateUeDownlinkLimit
(
int
ueId
,
uint64_t
limit
)
=
0
;
virtual
void
updateSessionUplinkLimit
(
uint64_t
pduSession
,
uint64_t
limit
)
=
0
;
virtual
void
updateSessionDownlinkLimit
(
uint64_t
pduSession
,
uint64_t
limit
)
=
0
;
};
class
RateLimiter
:
public
IRateLimiter
{
std
::
unordered_map
<
int
,
std
::
unique_ptr
<
TokenBucket
>>
downlinkByUe
;
...
...
@@ -83,12 +84,12 @@ class RateLimiter : public IRateLimiter
std
::
unordered_map
<
uint64_t
,
std
::
unique_ptr
<
TokenBucket
>>
uplinkBySession
;
public:
bool
allowDownlinkPacket
(
uint64_t
pduSession
,
int64_t
packetSize
)
override
;
bool
allowUplinkPacket
(
uint64_t
pduSession
,
int64_t
packetSize
)
override
;
void
updateUeUplinkLimit
(
int
ueId
,
int64_t
limit
)
override
;
void
updateUeDownlinkLimit
(
int
ueId
,
int64_t
limit
)
override
;
void
updateSessionUplinkLimit
(
uint64_t
pduSession
,
int64_t
limit
)
override
;
void
updateSessionDownlinkLimit
(
uint64_t
pduSession
,
int64_t
limit
)
override
;
bool
allowDownlinkPacket
(
uint64_t
pduSession
,
u
int64_t
packetSize
)
override
;
bool
allowUplinkPacket
(
uint64_t
pduSession
,
u
int64_t
packetSize
)
override
;
void
updateUeUplinkLimit
(
int
ueId
,
u
int64_t
limit
)
override
;
void
updateUeDownlinkLimit
(
int
ueId
,
u
int64_t
limit
)
override
;
void
updateSessionUplinkLimit
(
uint64_t
pduSession
,
u
int64_t
limit
)
override
;
void
updateSessionDownlinkLimit
(
uint64_t
pduSession
,
u
int64_t
limit
)
override
;
};
}
// namespace nr::gnb
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