From 8c79e2ce6b7aa61687cdda8fd0bd01d7a2e6d9e8 Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Thu, 25 Jan 2018 01:24:44 +0600 Subject: fake_trx/data_msg.py: implement header randomization This feature could be used by both burst_gen.py and burst_send.py. Change-Id: I724e267382ff32ef1f964b1ee6cbe99069139867 --- src/target/fake_trx/data_msg.py | 64 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/src/target/fake_trx/data_msg.py b/src/target/fake_trx/data_msg.py index 9acc0f1d..c561280f 100644 --- a/src/target/fake_trx/data_msg.py +++ b/src/target/fake_trx/data_msg.py @@ -44,6 +44,19 @@ class DATAMSG: def parse_hdr(self, hdr): raise NotImplementedError + # Generates a random frame number + def rand_fn(self): + return random.randint(0, GSM_HYPERFRAME) + + # Generates a random timeslot number + def rand_tn(self): + return random.randint(0, 7) + + # Randomizes the message header + def rand_hdr(self): + self.fn = self.rand_fn() + self.tn = self.rand_tn() + # Converts unsigned soft-bits {254..0} to soft-bits {-127..127} def usbit2sbit(self, bits): buf = [] @@ -201,6 +214,21 @@ class DATAMSG_L12TRX(DATAMSG): return True + # Generates a random power level + def rand_pwr(self, min = None, max = None): + if min is None: + min = self.PWR_MIN + + if max is None: + max = self.PWR_MAX + + return random.randint(min, max) + + # Randomizes message specific header + def rand_hdr(self): + DATAMSG.rand_hdr(self) + self.pwr = self.rand_pwr() + # Generates message specific header part def gen_hdr(self): # Allocate an empty byte-array @@ -258,6 +286,32 @@ class DATAMSG_TRX2L1(DATAMSG): return True + # Generates a random RSSI value + def rand_rssi(self, min = None, max = None): + if min is None: + min = self.RSSI_MIN + + if max is None: + max = self.RSSI_MAX + + return random.randint(min, max) + + # Generates a ToA (Time of Arrival) value + def rand_toa(self, min = None, max = None): + if min is None: + min = self.TOA_MIN + + if max is None: + max = self.TOA_MAX + + return random.uniform(min, max) + + # Randomizes message specific header + def rand_hdr(self): + DATAMSG.rand_hdr(self) + self.rssi = self.rand_rssi() + self.toa = self.rand_toa() + # Generates message specific header part def gen_hdr(self): # Allocate an empty byte-array @@ -350,6 +404,16 @@ if __name__ == '__main__': print("[?] Compare message specific data: OK") + # Validate header randomization + for i in range(0, 100): + msg_l12trx_ref.rand_hdr() + msg_trx2l1_ref.rand_hdr() + + assert(msg_l12trx_ref.validate()) + assert(msg_trx2l1_ref.validate()) + + print("[?] Validate header randomization: OK") + # Bit conversation test usbits_ref = range(0, 256) sbits_ref = range(-127, 128) -- cgit v1.2.3