osmo-gsm-tester/src/osmo_gsm_tester/obj
Pau Espin 410912333e 4g: Introduce ZMQ GnuRadio stream broker
srsENB currently creates 1 zmq stream (1 tx, 1 rx) for each cell (2 if
MIMO is enabled). Each cell transceives on a given EARFCN (and several
cells can transmit on same EARFCN).

However, for handover test purposes, we want to join all cells operating
on the same EARFCN to transceive on the same ZMQ conn, so that an srsUE
can interact with them at the same time (same as if the medium was shared).
Furthermore, we want to set different gains on each of those paths
before merging them in order to emulate RF conditions like handover.

In order to do so, a new element called the Broker is introduced, which
is placed in between ENBs and UEs ZMQ conenctions, multiplexing the
connections on the ENB side towards the UE side.

A separate process for the broker is run remotely (ENB run host) which
listens on a ctrl socket for commands. An internal Broker class is used
in osmo-gsm-tester to interact with the remote script, for instance to
configure the ports, start and stop the remote process, send commands to
it, etc.
On each ENB, when the rfemu "gnuradio_zmq" rfemu implementation is selected
in configuration, it will configure its zmq connections and the UE ones to
go over the Broker.

As a result, that means the UE zmq port configuration is expected to be
different than when no broker is in used, since there's the multiplexing
per EARFCN in between.

In this commit, only 1 ENB is supported, but multi-enb support is
planned in the future.

The handover test passes in the docker setup with this config:
"""
OSMO_GSM_TESTER_OPTS="-T -l dbg -s 4g:srsue-rftype@zmq+srsenb-rftype@zmq+" \
	"mod-enb-nprb@6+mod-enb-ncells@2+mod-enb-cells-2ca+suite-4g@10,2+" \
	"mod-enb-meas-enable -t =handover.py"
"""

and in resources.conf (or scenario), added:
"""
enb:
  ...
  cell_list:
    - dl_rfemu:
       type: gnuradio_zmq
    - dl_rfemu:
        type: gnuradio_zmq
"""

Note that since the broker is used, there's not need for mod-srsue-ncarriers@2
since the broker is joining the 2 enb cells into 1 stream on the UE side.

Change-Id: I6282cda400558dcb356276786d91e6388524c5b1
2020-10-15 12:34:36 +00:00
..
bsc_osmo.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
bts.py Update obj classes in obj/ to use testenv instead of suite_run 2020-05-05 13:56:01 +02:00
bts_nanobts.py EventLoop: Fix log error "Origin parent loop" during wait() 2020-06-10 19:50:12 +02:00
bts_oc2g.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
bts_octphy.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
bts_osmo.py Update obj classes in obj/ to use testenv instead of suite_run 2020-05-05 13:56:01 +02:00
bts_osmotrx.py EventLoop: Fix log error "Origin parent loop" during wait() 2020-06-10 19:50:12 +02:00
bts_osmovirtual.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
bts_sysmo.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
enb.py 4g: Introduce ZMQ GnuRadio stream broker 2020-10-15 12:34:36 +00:00
enb_amarisoft.py 4g: Introduce ZMQ GnuRadio stream broker 2020-10-15 12:34:36 +00:00
enb_srs.py 4g: Introduce ZMQ GnuRadio stream broker 2020-10-15 12:34:36 +00:00
epc.py epc: refactor run_wait() method and rename to prepare_proc() 2020-06-15 15:09:37 +00:00
epc_amarisoft.py 4G: Add milenage support 2020-07-13 18:33:53 +02:00
epc_srs.py {enb,epc,ms}_srs: remove uneeded class variable 2020-10-13 17:57:38 +02:00
esme.py EventLoop: Fix log error "Origin parent loop" during wait() 2020-06-10 19:50:12 +02:00
ggsn_osmo.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
hlr_osmo.py ms: Fix and use ms msisdn() getter 2020-10-15 14:01:27 +02:00
iperf3.py iperf3: increase additional wait time for iperf client 2020-07-15 11:48:23 +02:00
mgcpgw_osmo.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
mgw_osmo.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
ms.py ms: Fix and use ms msisdn() getter 2020-10-15 14:01:27 +02:00
ms_amarisoft.py enb/ue: Assign zmq binding ports dynamically at runtime 2020-10-15 11:57:01 +00:00
ms_driver.py ms_driver: Fix typos after recent refactorings 2020-05-07 17:10:51 +02:00
ms_ofono.py ms: Fix and use ms msisdn() getter 2020-10-15 14:01:27 +02:00
ms_osmo_mobile.py ms_osmo_mobile.py: Fix missing sublcass implementation of abstract MS methods 2020-06-17 12:29:03 +02:00
ms_srs.py 4g: Introduce ZMQ GnuRadio stream broker 2020-10-15 12:34:36 +00:00
msc_osmo.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
nitb_osmo.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
osmo_ctrl.py Move object classes used by tests into obj/ subdir 2020-04-11 19:15:56 +02:00
osmocon.py EventLoop: Fix log error "Origin parent loop" during wait() 2020-06-10 19:50:12 +02:00
pcap_recorder.py Update obj classes in obj/ to use testenv instead of suite_run 2020-05-05 13:56:01 +02:00
pcu.py Update obj classes in obj/ to use testenv instead of suite_run 2020-05-05 13:56:01 +02:00
pcu_oc2g.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
pcu_osmo.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
pcu_sysmo.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
powersupply.py EventLoop: Fix log error "Origin parent loop" during wait() 2020-06-10 19:50:12 +02:00
powersupply_intellinet.py Move object classes used by tests into obj/ subdir 2020-04-11 19:15:56 +02:00
powersupply_sispm.py EventLoop: Fix log error "Origin parent loop" during wait() 2020-06-10 19:50:12 +02:00
rfemu.py 4g: Introduce ZMQ GnuRadio stream broker 2020-10-15 12:34:36 +00:00
rfemu_amarisoftctrl.py rfemu_amarisoft: handle exception and log event if WS is closed 2020-08-27 15:37:54 +02:00
rfemu_gnuradio_zmq.py 4g: Introduce ZMQ GnuRadio stream broker 2020-10-15 12:34:36 +00:00
rfemu_minicircuits.py rfemu_minicircuits: reset attenuation to zero in dtor 2020-07-09 13:43:00 +00:00
rfemu_srsenb_stdin.py rfemu_srsenb_stdin: use negative dB value to set attenuation 2020-10-13 18:05:28 +02:00
run_node.py enb: Reuse run_node to hold run info 2020-05-28 13:13:05 +00:00
sgsn_osmo.py obj: Fix objects placing their content in suite rundir instead of test rundir 2020-05-11 10:56:52 +02:00
sms.py Move object classes used by tests into obj/ subdir 2020-04-11 19:15:56 +02:00
smsc.py Move object classes used by tests into obj/ subdir 2020-04-11 19:15:56 +02:00
srslte_common.py srslte_common: fix indent in whole file 2020-10-05 20:03:13 +02:00
stp_osmo.py testenv: Support test overlaying a directory to look for templates 2020-06-04 20:03:07 +02:00
stress.py Introduce stress tool object 2020-07-02 13:22:48 +02:00