summaryrefslogtreecommitdiffstats
path: root/src/target/fake_trx
AgeCommit message (Collapse)AuthorFilesLines
2018-02-28fake_trx/fake_trx.py: add options to enable field randomizationVadim Yanitskiy1-4/+37
By default, both RSSI and ToA fields randomization is disabled. Let's add command line options, which allow one to enable it. Change-Id: Ieac63cc3aadef397906479a6179ba54a53a5311a
2018-02-28fake_trx/burst_fwd.py: disable field randomization by defaultVadim Yanitskiy1-0/+24
Both RSSI and ToA fields randomization is only required in some specific test / use cases, so let's disable it by default. Change-Id: I94835a840b6239f2c05197292825cb26977d0216
2018-02-28fake_trx/burst_fwd.py: calculate both RSSI and ToA separatelyVadim Yanitskiy1-29/+61
In order to be able to simulate and randomize both RSSI and ToA values for Uplink and Downlink separately, let's calculate them in separate methods of the BurstForwarder. Change-Id: Ia2031f22f2b549c799c782d0c8c8d0691fb6f18c
2018-02-28fake_trx: handle SETTA (Timing Advance) indicated by MSVadim Yanitskiy2-0/+33
Timing Advance value is a timing correction value, indicated by the network to MS, which is used to compensate UL signal delay. In other words, the network instructs a phone to transmit bursts N=TA symbol periods earlier than expected. Since we are in virtual environment, let's use TA value to calculate the ToA (Timing of Arrival) value for BTS. Change-Id: Ie5833a9f221587bbcac10f0b223ead9c1cbda72b
2018-02-28fake_trx/data_msg.py: implement ToA parsing supportVadim Yanitskiy3-31/+3
This change implements ToA (Timing of Arrival) parsing, which was missing in the DATAMSG_TRX2L1. Since we use integer math, a ToA value is represented in units of 1/256 symbol periods. Change-Id: Ib11482c06b977c4cf01b0644f5845a2e49d059fb
2018-02-28fake_trx/data_msg.py: use integer math for ToAVadim Yanitskiy5-45/+47
In order to avoid both float arithmetic as well as loosing any precision, let's use integer math fot ToA (Timing of Arrival), i.e. let's express ToA values in units of 1/256 symbol periods. Change-Id: I56b88740f4d782ac7591fc096d1969514784a4e1
2018-02-28fake_trx/burst_fwd.py: drop useless set_slot() methodVadim Yanitskiy1-6/+0
Change-Id: I721c87758f04a1962427341eb1b2d47cfdd3f780
2018-02-28fake_trx/data_msg.py: use a single unified constructorVadim Yanitskiy1-18/+5
There are no message specific initialization parts, excepting the header specific fields setting. Let's us a common constructor, dropping custom fields from its arguments. Change-Id: I13a3e4b2f6a1f443ebe7d809df62736e3c43f56f
2018-02-28fake_trx/data_dump.py: fix python3 compatibilityVadim Yanitskiy1-6/+6
There is no 'file' type in Python3 anymore, so let's reverse the condition in DATADumpFile constructor. Also, the tag definition was incorrect: both '\x01' and b'\x01' aren't the same. Change-Id: Ib00c7f0bd5871fcfce931a4bfa501ae5bf797c45
2018-02-28fake_trx/data_msg.py: fix python3 compatibility in testsVadim Yanitskiy1-2/+2
In Python3 a range has it's own type, so its comparasion with a list is incorrect. Let's explicitly convert both bit ranges to lists in the bit conversation tests. Change-Id: I98c40d3d63cbcdc3e5dc840ebf8d7310c5c08e56
2018-02-27fake_trx/burst_fwd.py: use DATAMSG transformation APIVadim Yanitskiy1-18/+65
As the DATAMSG classes were introduced, let's use them. This approach abstracts one from dealing with raw bytes. Also, now BurstForwarder randomizes both RSSI and ToA values, as this feature is supported from-the-box by the DATAMSG_TRX2L1. Change-Id: Ib15018eab749150e244914dab4b6e433ce0c9209
2018-02-27fake_trx/data_msg.py: implement message transformation APIVadim Yanitskiy1-0/+37
This change introduces two new methods, which allow to perform L12TRX <-> TRX2L1 message type transformations. Change-Id: Ic99cf74baa1864bf20a8fc0fc025604bc160084c
2018-02-27fake_trx/udp_link.py: set SO_REUSEADDR socket optionVadim Yanitskiy1-0/+1
Setting this option allows one to reuse existing connections, for example, by injecting CTRL commands or DATA bursts into existing connections between fake_trx.py and trxcon. Change-Id: I0882c76affa9a668a12d10967081054d2b666ed1
2018-02-27fake_trx/udp_link.py: drop useless UDPLink.loop() APIVadim Yanitskiy1-12/+0
So far, this API is not used anywhere. Let's drop it. Change-Id: I87ea2436f0b6bbeb62fe17700af48a048be143bb
2018-02-27fake_trx/udp_link.py: close socket in destructorVadim Yanitskiy8-38/+3
Previously it was required to call the UDPLink.shutdown() method manually in order to close a socket. Let's do this automatically using the destructor of UDPLink. Change-Id: I59c3dc61ec58cd9effeb789947d28fd602ca91f4
2018-02-23trxcon|fake_trx: change default TRX port number to 6700Harald Welte1-1/+1
In order to avoid clashes with OsmoTRX, which may be also running on the same host, let's use a different port range starting from 6700 by default. This idea was introduced as a result of OS#2984. Change-Id: I66b5f25aaba3b836448ed29839c39869b5622bed Related: OS#2984
2018-02-20fake_trx/data_dump.py: use 2 bytes to store message lengthVadim Yanitskiy1-4/+7
One byte may store a value in range [0x00, 0xff]. The maximal 0xff value is 255 in dec, so a message length is limited to 255 bytes. This is enough for GSM bursts, but not for EDGE. Since this change, two bytes of header are used to store the pending message length. All captures created before are not supported anymore... Change-Id: I5a69d5cf2914fe56b2f9acca6054c9470627f91e
2018-02-20fake_trx/burst_send.py: implement DATA capture supportVadim Yanitskiy2-108/+103
Previously, this tool was only able to read a hand-crafted text file with bursts and send them via the DATA interface. This is not so useful... This change implements support of reading DATA capture files, which can be generated e.g. by trx_sniff.py or burst_gen.py. Both standart input (stdio) and text-files are not supported anymore. Usage example: ./burst_send.py -m L1 -i capture.bin --timeslot 2 Change-Id: I626662bd1897c874421ab5178970ec19325f8a47
2018-02-20fake_trx/burst_gen.py: add burst capture supportVadim Yanitskiy1-1/+15
Now all generated bursts can be also written to a capture file, using a new option called '--output-file'. If a file already exists, bursts would be appended to the end. Otherwise a new capture file is created. Change-Id: I074ff7dbc4d6beecdecce20de9dade5939e707f2
2018-02-20fake_trx/trx_sniff.py: use DATADumpFile for capture writingVadim Yanitskiy1-22/+8
Since we have a separate class for DATA capture management now, no need to implement the wheel - let's just use it! Change-Id: I7c30bcea294ce7270bf905ae5420a06dbc2e46f1
2018-02-20fake_trx: implement classes for DATA capture menagementVadim Yanitskiy1-0/+379
This change introduces the following classes: - DATADump - basic class, which contains methods to generate and parse the a message header, and some constants. - DATADumpFile - a child class, which contains methods to write and parse DATA messages from capture files. Usage example: # Open a capture file ddf = DATADumpFile("capture.bin") # Parse the 10th message msg = ddf.parse_msg(10) msg.fn = 100 msg.tn = 0 # Append one to the end of the capture ddf.append_msg(msg) Change-Id: I1b31183bd7bcca94de089847ee0b2f4ec88a7f1d
2018-01-29fake_trx/burst_send.py: handle both GSM and EDGE burstsVadim Yanitskiy1-2/+2
Previously, it was expected that burst length should be equal to 148. Let's also handle EDGE bursts and use GSM constants. Change-Id: Iab13dd06f175556137c5e25d2cbddb9bea403b09
2018-01-29fake_trx/burst_send.py: also handle RSSI and ToA valuesVadim Yanitskiy1-7/+29
Change-Id: Idb9a5ae4a8980a320f6e620c66add7c7393d3ecb
2018-01-29fake_trx/burst_gen.py: also handle RSSI and ToA valuesVadim Yanitskiy1-7/+29
Change-Id: I7c9441c1154c925dcb5c743e39445495233c123e
2018-01-29fake_trx: use DATAMSG classes for DATA messagesVadim Yanitskiy4-159/+116
The DATAMSG API, that was introduced and extended a few commits before, provides all required methods to create, validate, generate and parse DATA messages. Let's use it now. Change-Id: Ibc99126dc05d873c1ba538a5f4e74866de563f56
2018-01-29fake_trx/burst_gen.py: don't store RandBurstGenVadim Yanitskiy1-5/+5
No need to keep it as a class member. Change-Id: I5bf5846c2b8fa1211cf5150545b9d001c17fa0eb
2018-01-29fake_trx/burst_gen.py: check argv separatelyVadim Yanitskiy1-7/+12
Change-Id: I35b5475d3b6df6dc92a1981c693afb63df866c87
2018-01-29fake_trx/data_msg.py: implement header descriptionVadim Yanitskiy1-0/+37
This change introduces a new method for both types of messages called 'desc_hdr', that generates human-readable header description. Examples: TRX -> L1: fn=571353 tn=1 rssi=-108 toa=-0.53 L1 -> TRX: fn=1777477 tn=3 pwr=161 Change-Id: Iafe63e39ad68f4ff373ae098424d76ca9f83c8fc
2018-01-29fake_trx/data_msg.py: handle bursts properlyVadim Yanitskiy1-13/+65
One L1 -> TRX message carries one to be transmitted burst encoded as regular bits (0 or 1). One TRX -> L1 message carries one received burst encoded as unsigned soft-bits (0..254). This shall be noted during message encoding and decoding process. Also, we shall distinguish between GSM and EDGE bursts. Change-Id: I909b7a4dc70e8c632987bde07f00281a6595c4cb
2018-01-29fake_trx/data_msg.py: implement header randomizationVadim Yanitskiy1-0/+64
This feature could be used by both burst_gen.py and burst_send.py. Change-Id: I724e267382ff32ef1f964b1ee6cbe99069139867
2018-01-29fake_trx: implement classes for DATA messagesVadim Yanitskiy1-0/+372
This change introduces three new classes: - DATAMSG - abstract class, defines common fields and methods for any message on DATA interface, e.g. frame and timeslot numbers, bit conversation methods, etc. - DATAMSG_L12TRX - a child of DATAMSG, defines a message coming from L1 to TRX. - DATAMSG_TRX2L1 - a child of DATAMSG, defines a message coming from TRX to L1. Both child classes could be used to generate DATA messages from known fields (i.e. fn, tn, etc.), and parse them back from already encoded DATA messages. Change-Id: Id1c72f0b18fb128acc74d0cd899fb7aab7bd8790
2018-01-29fake_trx: share and use common GSM constantsVadim Yanitskiy6-14/+46
Previously there were multiple definitions of some common GSM constants in different modules. Let's share them. Change-Id: Id6cdfbc6e8688755a0df7e44daa512c9afa7dad2
2018-01-21fake_trx: implement a new tool for TRX protocol sniffingVadim Yanitskiy2-0/+324
This change introduces a new tool, which could be used to sniff a single connection between L1 and TRX in both directions, filter captured bursts by direction, timeslot and/or frame number, and finally write them to a binary file for further analysis. Sniffing capability is based on Scapy framework, so it should be installed in order to run this tool. Please also note, that sniffing requires root access. For details, see: https://github.com/secdev/scapy https://scapy.readthedocs.io/en/latest/ Usage example: sudo ./trx_sniff --frame-count 30 --timeslot 2 -o /tmp/bursts This command will capture 30 frames on timeslot number 2, and write them to a binary file. The format of this file is based on TLV (Tag Length Value), that wraps each burst: ... |-TAG (byte)-|-LEN (byte)-|-BURST (LEN bytes)-| ... TAG 0x01 - a message coming from L1 to TRX TAG 0x02 - a message coming from TRX to L1 Change-Id: I6e65e1d657574cc3e67bc7cdb1c01ef6bf08ecde
2018-01-20fake_trx/burst_send.py: indicate actual burst sourceVadim Yanitskiy1-0/+2
Change-Id: I7e45996f4a7a2aacc962ff9b65107c6b04e7bf68
2017-12-09fake_trx: don't sent clock indications until POWERONVadim Yanitskiy2-1/+10
Change-Id: I86ccc9d26fc54e6511f74f858afdaebb2b284c19
2017-12-09fake_trx/clck_gen.py: reset the clck_src when calling stop()Vadim Yanitskiy1-0/+4
Change-Id: I1043f71a2cbe856a0cb605db8a7feab9defa6afd
2017-12-09fake_trx/clck_gen.py: send the first indication immediatelyVadim Yanitskiy1-6/+9
Change-Id: I0132dd939b02db357d248abf65c9116d6a1802d0
2017-11-21fake_trx: correct brief descriptions of filesVadim Yanitskiy4-7/+7
Change-Id: Ie76fee4a567681a5380be90e5744621c2aa3e5f0
2017-11-21fake_trx: implement a new tool for burst sendingVadim Yanitskiy2-1/+194
This change introduces a new tool for sending existing bursts from file or standard input either to L1 (OsmoBTS or OsmocomBB) or to TRX (OsmoTRX and GR-GSM TRX). Change-Id: I2c542583252d31daac466e6c7837317fda8a7020
2017-11-21fake_trx/burst_gen.py: remove unused importVadim Yanitskiy1-1/+0
Change-Id: I407877e2025663f706d1a2f93e6228770bfc253c
2017-11-21fake_trx/README: correct the branch nameVadim Yanitskiy1-1/+1
Change-Id: I9d65580570d9bced65a7bcc95ca073ecc3e130e5
2017-11-19fake_trx/ctrl_cmd.py: add help and basic command line optionsVadim Yanitskiy1-8/+53
Sometimes it's important to use different CTRL port, for example when OsmoTRX is running at the same time. This change adds the corresponding command line options and help message. Change-Id: Ic6eeb69d9a1fc151eab2e63f3708e3d70e2e558b
2017-11-19fake_trx: whitespace fixVadim Yanitskiy2-6/+6
Change-Id: Iad2be36777e4a2454e181c856c7902574a4ab20c
2017-11-19fake_trx: separate DataInterface from burst_gen.pyVadim Yanitskiy2-81/+108
Change-Id: I325cf2ae59ef8834c2ddfb67206eede44d1e0acf
2017-11-19fake_trx: add options to specify fn, tn and pwrVadim Yanitskiy1-5/+31
Change-Id: Ifd4f4864707596a69fece11218a4800b98551c31
2017-11-19fake_trx: add a new tool for burst generationVadim Yanitskiy3-0/+428
This change introduces a new tool named 'burst_gen.py'. One can be used for sending GSM bursts either to L1 (OsmoBTS or OsmocomBB) or to TRX (OsmoTRX and GR-GSM TRX). Currently it is only possible to send random bursts of different types: NB, FB, SB, AB. Change-Id: Ie14281222d29536b8690517e57af2a1007fcbc91
2017-11-19fake_trx: add copyright message to clck_gen.py and ctrl_cmd.pyVadim Yanitskiy2-0/+20
Change-Id: Ia79279dd9e85d131d66d790f1f3fd64fb1914f58
2017-11-19fake_trx: don't send clock indications to mobile stationsVadim Yanitskiy1-5/+2
Clock indications are only required for BTS, while MS can obtain current frame number from messages on DATA interface. Change-Id: Id2993847a3581cac0d355850ad09ceabc6116d3f
2017-11-19fake_trx: fix compatibility with Python 3Vadim Yanitskiy4-5/+8
Change-Id: Idce0c631aa3fcd20092a3773558570e442b2fec8
2017-11-19fake_trx: implement simple freq. filterVadim Yanitskiy4-0/+26
Change-Id: Ifbeaebeaf68a88c07a05b672502f503ab7b890f2