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)
...
@@ -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
)
if
(
byteCapacity
>
0
)
{
{
refill
();
refill
();
if
(
availableTokens
<
numberTokens
)
if
(
availableTokens
<
static_cast
<
double
>
(
numberTokens
)
)
return
false
;
return
false
;
else
else
{
{
availableTokens
-=
numberTokens
;
availableTokens
-=
static_cast
<
double
>
(
numberTokens
)
;
return
true
;
return
true
;
}
}
}
}
...
@@ -95,7 +95,7 @@ bool TokenBucket::tryConsume(int64_t numberTokens)
...
@@ -95,7 +95,7 @@ bool TokenBucket::tryConsume(int64_t numberTokens)
return
true
;
return
true
;
}
}
void
TokenBucket
::
updateCapacity
(
int64_t
newByteCapacity
)
void
TokenBucket
::
updateCapacity
(
u
int64_t
newByteCapacity
)
{
{
byteCapacity
=
newByteCapacity
;
byteCapacity
=
newByteCapacity
;
if
(
newByteCapacity
>
0
)
if
(
newByteCapacity
>
0
)
...
@@ -108,13 +108,13 @@ void TokenBucket::refill()
...
@@ -108,13 +108,13 @@ void TokenBucket::refill()
if
(
currentTimeMillis
>
lastRefillTimestamp
)
if
(
currentTimeMillis
>
lastRefillTimestamp
)
{
{
int64_t
millisSinceLastRefill
=
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
);
availableTokens
=
std
::
min
(
static_cast
<
double
>
(
byteCapacity
),
availableTokens
+
refill
);
lastRefillTimestamp
=
currentTimeMillis
;
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
);
int
ueId
=
GetUeId
(
pduSession
);
...
@@ -135,7 +135,7 @@ bool RateLimiter::allowDownlinkPacket(uint64_t pduSession, int64_t packetSize)
...
@@ -135,7 +135,7 @@ bool RateLimiter::allowDownlinkPacket(uint64_t pduSession, int64_t packetSize)
return
true
;
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
);
int
ueId
=
GetUeId
(
pduSession
);
...
@@ -156,7 +156,7 @@ bool RateLimiter::allowUplinkPacket(uint64_t pduSession, int64_t packetSize)
...
@@ -156,7 +156,7 @@ bool RateLimiter::allowUplinkPacket(uint64_t pduSession, int64_t packetSize)
return
true
;
return
true
;
}
}
void
RateLimiter
::
updateUeUplinkLimit
(
int
ueId
,
int64_t
limit
)
void
RateLimiter
::
updateUeUplinkLimit
(
int
ueId
,
u
int64_t
limit
)
{
{
if
(
limit
<=
0
)
if
(
limit
<=
0
)
{
{
...
@@ -175,7 +175,7 @@ void RateLimiter::updateUeUplinkLimit(int ueId, int64_t limit)
...
@@ -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
)
if
(
limit
<=
0
)
{
{
...
@@ -194,7 +194,7 @@ void RateLimiter::updateUeDownlinkLimit(int ueId, int64_t limit)
...
@@ -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
)
if
(
limit
<=
0
)
{
{
...
@@ -213,7 +213,7 @@ void RateLimiter::updateSessionUplinkLimit(uint64_t pduSession, int64_t limit)
...
@@ -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
)
if
(
limit
<=
0
)
{
{
...
...
src/gnb/gtp/utils.hpp
View file @
23d7d61c
...
@@ -32,17 +32,6 @@ inline int GetPsi(uint64_t sessionResInd)
...
@@ -32,17 +32,6 @@ inline int GetPsi(uint64_t sessionResInd)
return
static_cast
<
int
>
(
sessionResInd
&
0xFFFFFFFFuLL
);
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
class
PduSessionTree
{
{
std
::
unordered_map
<
uint32_t
,
uint64_t
>
mapByDownTeid
;
std
::
unordered_map
<
uint32_t
,
uint64_t
>
mapByDownTeid
;
...
@@ -61,20 +50,32 @@ class TokenBucket
...
@@ -61,20 +50,32 @@ class TokenBucket
{
{
static
constexpr
const
int64_t
REFILL_PERIOD
=
1000L
;
static
constexpr
const
int64_t
REFILL_PERIOD
=
1000L
;
int64_t
byteCapacity
;
u
int64_t
byteCapacity
;
double
refillTokensPerOneMillis
;
double
refillTokensPerOneMillis
;
double
availableTokens
;
double
availableTokens
;
int64_t
lastRefillTimestamp
;
int64_t
lastRefillTimestamp
;
public:
public:
explicit
TokenBucket
(
long
byteCapacity
);
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:
private:
void
refill
();
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
class
RateLimiter
:
public
IRateLimiter
{
{
std
::
unordered_map
<
int
,
std
::
unique_ptr
<
TokenBucket
>>
downlinkByUe
;
std
::
unordered_map
<
int
,
std
::
unique_ptr
<
TokenBucket
>>
downlinkByUe
;
...
@@ -83,12 +84,12 @@ class RateLimiter : public IRateLimiter
...
@@ -83,12 +84,12 @@ class RateLimiter : public IRateLimiter
std
::
unordered_map
<
uint64_t
,
std
::
unique_ptr
<
TokenBucket
>>
uplinkBySession
;
std
::
unordered_map
<
uint64_t
,
std
::
unique_ptr
<
TokenBucket
>>
uplinkBySession
;
public:
public:
bool
allowDownlinkPacket
(
uint64_t
pduSession
,
int64_t
packetSize
)
override
;
bool
allowDownlinkPacket
(
uint64_t
pduSession
,
u
int64_t
packetSize
)
override
;
bool
allowUplinkPacket
(
uint64_t
pduSession
,
int64_t
packetSize
)
override
;
bool
allowUplinkPacket
(
uint64_t
pduSession
,
u
int64_t
packetSize
)
override
;
void
updateUeUplinkLimit
(
int
ueId
,
int64_t
limit
)
override
;
void
updateUeUplinkLimit
(
int
ueId
,
u
int64_t
limit
)
override
;
void
updateUeDownlinkLimit
(
int
ueId
,
int64_t
limit
)
override
;
void
updateUeDownlinkLimit
(
int
ueId
,
u
int64_t
limit
)
override
;
void
updateSessionUplinkLimit
(
uint64_t
pduSession
,
int64_t
limit
)
override
;
void
updateSessionUplinkLimit
(
uint64_t
pduSession
,
u
int64_t
limit
)
override
;
void
updateSessionDownlinkLimit
(
uint64_t
pduSession
,
int64_t
limit
)
override
;
void
updateSessionDownlinkLimit
(
uint64_t
pduSession
,
u
int64_t
limit
)
override
;
};
};
}
// namespace nr::gnb
}
// 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