Skip to content

Commit

Permalink
Merge pull request SysSec-KAIST#41 from SysSec-KAIST/LTESniffer-v2.0.2
Browse files Browse the repository at this point in the history
fixed some bugs
  • Loading branch information
hdtuanss authored Nov 2, 2023
2 parents 250126c + 37263b9 commit 42256d1
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 13 deletions.
8 changes: 7 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,12 @@
"typeindex": "cpp",
"typeinfo": "cpp",
"bit": "cpp",
"*.ipp": "cpp"
"*.ipp": "cpp",
"compare": "cpp",
"concepts": "cpp",
"numbers": "cpp",
"semaphore": "cpp",
"stop_token": "cpp",
"variant": "cpp"
}
}
10 changes: 7 additions & 3 deletions lib/include/falcon/util/RNTIManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@
#include <string.h>
#include <strings.h>
#include <string>
#include <memory>
#include "mutex"
#include "memory"

#include "falcon/common/Settings.h"
#include "rnti_manager_c.h"
Expand Down Expand Up @@ -81,8 +84,8 @@ class RNTIManager {
virtual bool validate(uint16_t rnti, uint32_t formatIdx);
virtual bool validateAndRefresh(uint16_t rnti, uint32_t formatIdx);
virtual void activateAndRefresh(uint16_t rnti, uint32_t formatIdx, ActivationReason reason);
virtual bool isEvergreen(uint16_t rnti, uint32_t formatIdx) const;
virtual bool isForbidden(uint16_t rnti, uint32_t formatIdx) const;
virtual bool isEvergreen(uint16_t rnti, uint32_t formatIdx) ;
virtual bool isForbidden(uint16_t rnti, uint32_t formatIdx) ;
virtual void stepTime();
virtual void stepTime(uint32_t nSteps);
virtual void setHistogramThreshold(uint32_t threshold);
Expand All @@ -101,7 +104,7 @@ class RNTIManager {
virtual uint32_t getLikelyDlFormatIdx(uint16_t rnti);
void activateRNTI(uint16_t rnti, ActivationReason reason);
void deactivateRNTI(uint16_t rnti);
bool isExpired(uint16_t rnti) const;
bool isExpired(uint16_t rnti) ;
void cleanExpired();
uint32_t nformats;
std::vector<Histogram> histograms;
Expand All @@ -116,4 +119,5 @@ class RNTIManager {
uint32_t threshold;
uint32_t maxCandidatesPerStepPerFormat;
std::vector<int32_t> remainingCandidates;
std::mutex rntiManagerMutex;
};
19 changes: 15 additions & 4 deletions lib/src/util/RNTIManager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -159,12 +159,12 @@ void RNTIManager::addForbidden(uint16_t rntiStart, uint16_t rntiEnd, uint32_t fo
}

void RNTIManager::addCandidate(uint16_t rnti, uint32_t formatIdx) {
std::unique_lock<std::mutex> rntiManagerLock(rntiManagerMutex);
histograms[formatIdx].add(rnti);
remainingCandidates[formatIdx]--;
}

bool RNTIManager::validate(uint16_t rnti, uint32_t formatIdx) {

// evergreen consultation
if(isEvergreen(rnti, formatIdx)) {
return true;
Expand Down Expand Up @@ -195,15 +195,19 @@ bool RNTIManager::validate(uint16_t rnti, uint32_t formatIdx) {
bool RNTIManager::validateAndRefresh(uint16_t rnti, uint32_t formatIdx) {
bool result = validate(rnti, formatIdx);
if(result) {
std::unique_lock<std::mutex> rntiManagerLock(rntiManagerMutex);
lastSeen[rnti] = timestamp;
rntiManagerLock.unlock();
}
return result;
}

void RNTIManager::activateAndRefresh(uint16_t rnti, uint32_t formatIdx, ActivationReason reason) {
activateRNTI(rnti, reason);
std::unique_lock<std::mutex> rntiManagerLock(rntiManagerMutex);
lastSeen[rnti] = timestamp;
assocFormatIdx[rnti] = formatIdx;
rntiManagerLock.unlock();
}

uint32_t RNTIManager::getFrequency(uint16_t rnti, uint32_t formatIdx) {
Expand All @@ -215,13 +219,15 @@ uint32_t RNTIManager::getAssociatedFormatIdx(uint16_t rnti) {
}

ActivationReason RNTIManager::getActivationReason(uint16_t rnti) {
std::unique_lock<std::mutex> rntiManagerLock(rntiManagerMutex);
for(list<RNTIActiveSetItem>::iterator it = activeSet.begin(); it != activeSet.end(); it++) {
if(it->rnti == rnti) return it->reason;
}
return RM_ACT_UNSET;
}

vector<rnti_manager_active_set_t> RNTIManager::getActiveSet() {
std::unique_lock<std::mutex> rntiManagerLock(rntiManagerMutex);
cleanExpired();
vector<rnti_manager_active_set_t> result(activeSet.size());
uint32_t index = 0;
Expand Down Expand Up @@ -288,15 +294,17 @@ void RNTIManager::getHistogramSummary(uint32_t *buf)
}
}

bool RNTIManager::isEvergreen(uint16_t rnti, uint32_t formatIdx) const {
bool RNTIManager::isEvergreen(uint16_t rnti, uint32_t formatIdx) {
std::unique_lock<std::mutex> rntiManagerLock(rntiManagerMutex);
const vector<Interval>& intervals = evergreen[formatIdx];
for(vector<Interval>::const_iterator inter = intervals.begin(); inter != intervals.end(); inter++) {
if(inter->matches(rnti)) return true;
}
return false;
}

bool RNTIManager::isForbidden(uint16_t rnti, uint32_t formatIdx) const {
bool RNTIManager::isForbidden(uint16_t rnti, uint32_t formatIdx) {
std::unique_lock<std::mutex> rntiManagerLock(rntiManagerMutex);
const vector<Interval>& intervals = forbidden[formatIdx];
for(vector<Interval>::const_iterator inter = intervals.begin(); inter != intervals.end(); inter++) {
if(inter->matches(rnti)) return true;
Expand All @@ -305,6 +313,7 @@ bool RNTIManager::isForbidden(uint16_t rnti, uint32_t formatIdx) const {
}

RMValidationResult_t RNTIManager::validateByActiveList(uint16_t rnti, uint32_t formatIdx) {
std::unique_lock<std::mutex> rntiManagerLock(rntiManagerMutex);
if(active[rnti]) { // active RNTI
if(!isExpired(rnti)) { // lifetime check
return RMV_TRUE;
Expand Down Expand Up @@ -375,6 +384,7 @@ uint32_t RNTIManager::getLikelyDlFormatIdx(uint16_t rnti) {
}

void RNTIManager::activateRNTI(uint16_t rnti, ActivationReason reason) {
std::unique_lock<std::mutex> rntiManagerLock(rntiManagerMutex);
if(!active[rnti]) {
active[rnti] = true;
activeSet.push_back(RNTIActiveSetItem(rnti, reason));
Expand All @@ -389,7 +399,7 @@ void RNTIManager::deactivateRNTI(uint16_t rnti) {
}
}

bool RNTIManager::isExpired(uint16_t rnti) const {
bool RNTIManager::isExpired(uint16_t rnti) {
bool result = true;
if(active[rnti]) {
if(timestamp - lastSeen[rnti] < lifetime) {
Expand All @@ -400,6 +410,7 @@ bool RNTIManager::isExpired(uint16_t rnti) const {
}

void RNTIManager::cleanExpired() {
std::unique_lock<std::mutex> rntiManagerLock(rntiManagerMutex);
list<RNTIActiveSetItem>::iterator it = activeSet.begin();
while(it != activeSet.end()) {
if(isExpired(it->rnti)) {
Expand Down
8 changes: 7 additions & 1 deletion src/include/DL_Sniffer_PDSCH.h
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,12 @@ class PDSCH_Decoder
int length,
bool result,
srsran_chest_dl_res_t* ce_res);
void set_target_rnti(uint16_t rnti) {target_rnti = rnti;}
void set_target_rnti(uint16_t rnti) {
if (rnti != 0){
has_target_rnti = true;
target_rnti = rnti;
}
}
void set_debug_mode(bool debug) { en_debug = debug;}
void set_api_mode(int api_mode_) { api_mode = api_mode_;}
void print_api_dl(uint32_t tti, uint16_t rnti, int ident, std::string value, int msg);
Expand All @@ -155,6 +160,7 @@ class PDSCH_Decoder
int api_mode = -1;
bool en_debug = false;
uint16_t target_rnti = 0;
bool has_target_rnti = false;
int nof_antenna = 2;
/*RRC Con Set*/
bool found_con_ret = false;
Expand Down
8 changes: 7 additions & 1 deletion src/include/UL_Sniffer_PUSCH.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,17 @@ class PUSCH_Decoder
void work_prach();

void set_ul_harq (UL_HARQ *ul_harq_) { ul_harq = ul_harq_; }
void set_target_rnti(uint16_t rnti) { target_rnti = rnti; }
void set_target_rnti(uint16_t rnti) {
if (rnti != 0){
target_rnti = rnti;
has_target_rnti = true;
}
}
void set_debug_mode(bool en_debug_) { en_debug = en_debug_;}
void set_api_mode(int api_mode_) { api_mode = api_mode_;}
private:
uint16_t target_rnti = -1;
bool has_target_rnti = false;
bool en_debug = false;
int api_mode = -1;
bool configed = false;
Expand Down
6 changes: 3 additions & 3 deletions src/src/UL_Sniffer_PUSCH.cc
Original file line number Diff line number Diff line change
Expand Up @@ -263,8 +263,8 @@ void PUSCH_Decoder::decode_run(std::string info, DCI_UL &decoding_mem, std::stri
}

/*Only print debug when SNR of RNTI >= 1 */
if ((en_debug) && (enb_ul.chest_res.snr_db >= 1))
{ //|| target_rnti !=0
if ((en_debug) && ((enb_ul.chest_res.snr_db >= 1 && !has_target_rnti) || (decoding_mem.rnti == target_rnti && has_target_rnti))&& decoding_mem.rnti != 0)
{
float signal_power = enb_ul.chest_res.snr_db;
float falcon_signal_power = 0.0f;
float tmp_sum = 0.0f;
Expand Down Expand Up @@ -416,7 +416,7 @@ void PUSCH_Decoder::decode()
/*Investigate current decoding member to know it has a valid UL grant or not*/
valid_ul_grant = investigate_valid_ul_grant(decoding_mem);
/*Only decode member with valid UL grant*/
if (((decoding_mem.rnti == target_rnti) || (valid_ul_grant == SRSRAN_SUCCESS))&& decoding_mem.rnti != 0)
if (((decoding_mem.rnti == target_rnti && has_target_rnti) || (valid_ul_grant == SRSRAN_SUCCESS))&& decoding_mem.rnti != 0)
{
/*Setup uplink config for decoding*/
ul_cfg.pusch.rnti = decoding_mem.rnti;
Expand Down

0 comments on commit 42256d1

Please sign in to comment.