From d3bd2c2ba90f7bee0467a399187189b2207d52c4 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Wed, 18 Nov 2020 16:48:07 +0100 Subject: [PATCH] Introduce osmo-ran docker image set up See osmo-ran/README.md in this commit for a description. Related: SYS#4889 Change-Id: If5d22e9fa818310cbb4adc34bd7aceb4416ec969 --- jenkins-common.sh | 23 +++- make/Makefile | 3 + osmo-ran/Dockerfile | 94 +++++++++++++ osmo-ran/Makefile | 2 + osmo-ran/README.md | 55 ++++++++ osmo-ran/Release.key | 20 +++ osmo-ran/jenkins.sh | 47 +++++++ osmo-ran/osmocom/osmo-bsc.cfg | 123 ++++++++++++++++++ osmo-ran/osmocom/osmo-bts-trx.cfg | 36 +++++ osmo-ran/osmocom/osmo-mgw.cfg | 22 ++++ osmo-ran/osmocom/osmo-pcu.cfg | 11 ++ osmo-ran/osmocom/osmo-trx-ipc.cfg | 33 +++++ osmo-ran/osmocom/osmo-trx-uhd.cfg | 22 ++++ osmo-ran/split/jenkins-split.sh | 97 ++++++++++++++ osmo-ran/split/ran-bsc_mgw/Dockerfile | 80 ++++++++++++ osmo-ran/split/ran-bsc_mgw/Makefile | 2 + osmo-ran/split/ran-bsc_mgw/Release.key | 20 +++ .../split/ran-bsc_mgw/osmocom/osmo-bsc.cfg | 123 ++++++++++++++++++ .../split/ran-bsc_mgw/osmocom/osmo-mgw.cfg | 22 ++++ osmo-ran/split/ran-bts_pcu/Dockerfile | 78 +++++++++++ osmo-ran/split/ran-bts_pcu/Makefile | 2 + osmo-ran/split/ran-bts_pcu/Release.key | 20 +++ .../ran-bts_pcu/osmocom/osmo-bts-trx.cfg | 36 +++++ .../split/ran-bts_pcu/osmocom/osmo-pcu.cfg | 11 ++ osmo-ran/split/ran-trx-ipc/Dockerfile | 76 +++++++++++ osmo-ran/split/ran-trx-ipc/Makefile | 2 + osmo-ran/split/ran-trx-ipc/Release.key | 20 +++ .../ran-trx-ipc/osmocom/osmo-trx-ipc.cfg | 29 +++++ osmo-ran/split/ran-trx-uhd/Dockerfile | 79 +++++++++++ osmo-ran/split/ran-trx-uhd/Makefile | 2 + osmo-ran/split/ran-trx-uhd/Release.key | 20 +++ .../ran-trx-uhd/osmocom/osmo-trx-uhd.cfg | 27 ++++ systemd/Dockerfile | 41 ++++++ systemd/Makefile | 2 + 34 files changed, 1278 insertions(+), 2 deletions(-) create mode 100644 osmo-ran/Dockerfile create mode 100644 osmo-ran/Makefile create mode 100644 osmo-ran/README.md create mode 100644 osmo-ran/Release.key create mode 100755 osmo-ran/jenkins.sh create mode 100644 osmo-ran/osmocom/osmo-bsc.cfg create mode 100644 osmo-ran/osmocom/osmo-bts-trx.cfg create mode 100644 osmo-ran/osmocom/osmo-mgw.cfg create mode 100644 osmo-ran/osmocom/osmo-pcu.cfg create mode 100644 osmo-ran/osmocom/osmo-trx-ipc.cfg create mode 100644 osmo-ran/osmocom/osmo-trx-uhd.cfg create mode 100755 osmo-ran/split/jenkins-split.sh create mode 100644 osmo-ran/split/ran-bsc_mgw/Dockerfile create mode 100644 osmo-ran/split/ran-bsc_mgw/Makefile create mode 100644 osmo-ran/split/ran-bsc_mgw/Release.key create mode 100644 osmo-ran/split/ran-bsc_mgw/osmocom/osmo-bsc.cfg create mode 100644 osmo-ran/split/ran-bsc_mgw/osmocom/osmo-mgw.cfg create mode 100644 osmo-ran/split/ran-bts_pcu/Dockerfile create mode 100644 osmo-ran/split/ran-bts_pcu/Makefile create mode 100644 osmo-ran/split/ran-bts_pcu/Release.key create mode 100644 osmo-ran/split/ran-bts_pcu/osmocom/osmo-bts-trx.cfg create mode 100644 osmo-ran/split/ran-bts_pcu/osmocom/osmo-pcu.cfg create mode 100644 osmo-ran/split/ran-trx-ipc/Dockerfile create mode 100644 osmo-ran/split/ran-trx-ipc/Makefile create mode 100644 osmo-ran/split/ran-trx-ipc/Release.key create mode 100644 osmo-ran/split/ran-trx-ipc/osmocom/osmo-trx-ipc.cfg create mode 100644 osmo-ran/split/ran-trx-uhd/Dockerfile create mode 100644 osmo-ran/split/ran-trx-uhd/Makefile create mode 100644 osmo-ran/split/ran-trx-uhd/Release.key create mode 100644 osmo-ran/split/ran-trx-uhd/osmocom/osmo-trx-uhd.cfg create mode 100644 systemd/Dockerfile create mode 100644 systemd/Makefile diff --git a/jenkins-common.sh b/jenkins-common.sh index fdcfd404..e172a4fa 100644 --- a/jenkins-common.sh +++ b/jenkins-common.sh @@ -44,6 +44,7 @@ docker_dir_from_image_name() { # Dockerfile for multiple distributions, without duplicating configs for # each distribution. Dependencies listed in docker_depends() are built # automatically too. +IMAGE_DIR_PREFIX=".." docker_images_require() { local i local from_line @@ -68,13 +69,13 @@ docker_images_require() { # Pull upstream base images pull_arg="--pull" - from_line="$(grep '^FROM' ../$dir/Dockerfile)" + from_line="$(grep '^FROM' ${IMAGE_DIR_PREFIX}/${dir}/Dockerfile)" if echo "$from_line" | grep -q '$USER'; then pull_arg="" fi echo "Building image: $i (export NO_DOCKER_IMAGE_BUILD=1 to prevent this)" - make -C "../$dir" \ + make -C "${IMAGE_DIR_PREFIX}/${dir}" \ PULL="$pull_arg" \ UPSTREAM_DISTRO="$upstream_distro_arg" \ DISTRO="$distro_arg" \ @@ -108,6 +109,24 @@ network_create() { docker network create --internal --subnet $SUB4 --ipv6 --subnet $SUB6 $NET_NAME } +network_bridge_create() { + NET=$1 + if docker network ls | grep -q $NET_NAME; then + echo removing stale network and containers... + network_clean + network_remove + fi + SUB4="172.18.$NET.0/24" + SUB6="fd02:db8:$NET::/64" + echo Creating network $NET_NAME + docker network create \ + --driver=bridge \ + --subnet $SUB4 \ + --ipv6 --subnet $SUB6 \ + -o "com.docker.network.bridge.host_binding_ipv4"="172.18.$NET.1" \ + $NET_NAME +} + network_remove() { echo Removing network $NET_NAME docker network remove $NET_NAME diff --git a/make/Makefile b/make/Makefile index 4f2263bc..7bb03458 100644 --- a/make/Makefile +++ b/make/Makefile @@ -37,6 +37,8 @@ UPSTREAM_DISTRO?=debian:stretch DISTRO?=debian-stretch OSMOCOM_REPO_MIRROR?=http://download.opensuse.org # Use if down: OSMOCOM_REPO_MIRROR=http://ftp.uni-stuttgart.de/opensuse +OSMOCOM_REPO_VERSION?=latest +# Use "nightly" to use the nightly repo RELEASE_SUPPORT := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))/.make-release-support IMAGE?=$(REGISTRY_HOST)/$(USER)/$(NAME) @@ -67,6 +69,7 @@ docker-build: .release --build-arg UPSTREAM_DISTRO=$(UPSTREAM_DISTRO) \ --build-arg DISTRO=$(DISTRO) \ --build-arg OSMOCOM_REPO_MIRROR=$(OSMOCOM_REPO_MIRROR) \ + --build-arg OSMOCOM_REPO_VERSION=$(OSMOCOM_REPO_VERSION) \ --build-arg LIBOSMOCORE_BRANCH=$(LIBOSMOCORE_BRANCH) \ --build-arg OSMO_BB_BRANCH=$(OSMO_BB_BRANCH) \ --build-arg OSMO_BSC_BRANCH=$(OSMO_BSC_BRANCH) \ diff --git a/osmo-ran/Dockerfile b/osmo-ran/Dockerfile new file mode 100644 index 00000000..4b5195ed --- /dev/null +++ b/osmo-ran/Dockerfile @@ -0,0 +1,94 @@ +ARG USER +FROM $USER/systemd +# Arguments used after FROM must be specified again +ARG DISTRO +ARG OSMOCOM_REPO_MIRROR="http://download.opensuse.org" +ARG OSMOCOM_REPO_VERSION=latest + +MAINTAINER Pau Espin Pedrol + +ARG OSMOCOM_REPO_DEBIAN="$OSMOCOM_REPO_MIRROR/repositories/network:/osmocom:/$OSMOCOM_REPO_VERSION/Debian_9.0/" +ARG OSMOCOM_REPO_CENTOS="$OSMOCOM_REPO_MIRROR/repositories/network:/osmocom:/$OSMOCOM_REPO_VERSION/CentOS_8/" + +COPY Release.key /tmp/Release.key + +RUN case "$DISTRO" in \ + debian*) \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + gnupg && \ + apt-key add /tmp/Release.key && \ + rm /tmp/Release.key && \ + echo "deb " $OSMOCOM_REPO_DEBIAN " ./" > /etc/apt/sources.list.d/osmocom-$OSMOCOM_REPO_VERSION.list \ + ;; \ + centos*) \ + echo "metadata_expire=60" >> /etc/dnf/dnf.conf && cat /etc/dnf/dnf.conf && \ + dnf install -y dnf-utils wget && \ + yum config-manager --set-enabled PowerTools && \ + cd /etc/yum.repos.d/ && \ + wget ${OSMOCOM_REPO_CENTOS}/network:osmocom:$OSMOCOM_REPO_VERSION.repo \ + ;; \ + esac + +# we need to add this to invalidate the cache once the repository is updated. +# unfortunately Dockerfiles don't support a conditional ARG, so we need to add both DPKG + RPM +ADD $OSMOCOM_REPO_DEBIAN/Release /tmp/Release +ADD $OSMOCOM_REPO_CENTOS/repodata/repomd.xml /tmp/repomd.xml + +RUN case "$DISTRO" in \ + debian*) \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + less \ + apt-utils \ + strace \ + tcpdump \ + telnet \ + vim \ + osmo-bsc \ + osmo-bsc-ipaccess-utils \ + osmo-bts-trx \ + osmo-mgw \ + osmo-pcu \ + osmo-trx-ipc \ + osmo-trx-uhd && \ + apt-get clean \ + ;; \ + centos*) \ + dnf install -y \ + less \ + strace \ + tcpdump \ + telnet \ + vim \ + osmo-bsc \ + osmo-bsc-ipaccess-utils \ + osmo-bts \ + osmo-mgw \ + osmo-pcu \ + osmo-trx-ipc \ + osmo-trx-uhd \ + ;; \ + esac + +RUN systemctl enable osmo-bsc osmo-bts-trx osmo-mgw osmo-pcu + +WORKDIR /tmp +RUN cp -r /etc/osmocom /etc/osmocom-default +VOLUME /data +VOLUME /etc/osmocom + +COPY osmocom/* /etc/osmocom/ + +CMD ["/lib/systemd/systemd", "--system", "--unit=multi-user.target"] + +#osmo-bsc: VTY CTRL +EXPOSE 4242 4249 +#osmo-bts: VTY CTRL +EXPOSE 4241 4238 +#osmo-mgw: VTY CTRL +EXPOSE 4243 4267 +#osmo-pcu: VTY CTRL +EXPOSE 4240 +#osmo-trx: VTY CTRL +#EXPOSE 4237 4236 diff --git a/osmo-ran/Makefile b/osmo-ran/Makefile new file mode 100644 index 00000000..80b10696 --- /dev/null +++ b/osmo-ran/Makefile @@ -0,0 +1,2 @@ +RUN_ARGS?=--sysctl net.ipv6.conf.all.disable_ipv6=0 --rm --network sigtran --ip 172.18.25.200 -v bsc-vol:/data +include ../make/Makefile diff --git a/osmo-ran/README.md b/osmo-ran/README.md new file mode 100644 index 00000000..db534a1c --- /dev/null +++ b/osmo-ran/README.md @@ -0,0 +1,55 @@ +This directory provides an environment to set up and run an Osmocom RAN +(osmo-bts, osmo-pcu, osmo-bsc, osmo-mgw) managed by systemd, all run inside a +docker container. + +Easiest way to build + run the setup is to execute _jenkins.sh_ in this same +directory. + +This script will build the Dockerfile image, then set up a bridge network on +subnet `172.18.$SUBNET.0/24`, where the IP address `172.18.$SUBNET.200` is +assigned to the internal network interface inside the docker container (and +which RAN processes will be using), and `172.18.$SUBNET.1` is assigned to the +bridge network interface outside the docker container. All The VTY and CTRL +ports are available on both `172.18.$SUBNET.200` and also on `172.18.$SUBNET.1` +(through docker port mapping). + +Shared directories between docker container and the host are mounted in +_/tmp/logs/ran-$SUBNET/_ on the host, with _osmocom_ subdirectory mapping to +container's _/etc/osmocom_, and _data_ to _/data:_. + +The script has the following parameters (environment variables): +- `SUBNET`: The IPv4 subnet to configure and use (`172.18.$SUBNET.0/24`) when + running the container (defaults to `25`) +- `SGSN_IP`: The IP address where the SGSN outside the docker container listens to (Gb interface) +- `STP_IP`: The IP address where the STP outside the docker container listens to (A interface) +- `TRX_IP`: The IP address where the OsmoTRX outside the docker container listens to (TRXC/TRXD interface) +- `IMAGE_SUFFIX`: Type of base image to use: Leave unset to build on top of + Debian (default), set to `centos8` to run on top of CentOS8 distribution +- `OSMOCOM_REPO_VERSION`: Osmocom OBS repository version to use: `nightly` or `latest` (default). + +The above IP addresses will be replaced by _jenkins.sh_ from tokens of the same +name in the provided configuration files, available in _osmocom/_ directory, +which will be then placer inside docker image's `/etc/osmocom/` directory, where +the osmocom projects will read the configuration by default (see systemd +services). + +Example: +Run Osmocom RAN on a Centos8 distro with osmocom's nightly repository on subnet 26: +``` +OSMOCOM_REPO_VERSION="nightly" IMAGE_SUFFIX="centos8" SUBNET=26 ./jenkins.sh +``` + +If several independent RANs are to be set up by the user, it's up to them to +configure iptables rules to forbid access from one docker container to another. +It should be doable pretty easily by rejecting connections between +`172.18.$subnetA.0/24` and `172.18.$subnetB.0/24`. + +The docker container started by _jenkins.sh_ is running systemd and hence is +expected to run forever (until the container instance is killed through docker +or by killing the process, eg. pressing CTRL+C on the terminal). + +While the container is running, shell access to to it in order inspect the RAN +processes managed by systemd can be obtained by using: +``` +docker exec -it nonjenkins-ran-subnet$SUBNET bash +``` diff --git a/osmo-ran/Release.key b/osmo-ran/Release.key new file mode 100644 index 00000000..a737316d --- /dev/null +++ b/osmo-ran/Release.key @@ -0,0 +1,20 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.5 (GNU/Linux) + +mQENBFJBt/wBCADAht3d/ilNuyzaXYw/QwTRvmjyoDvfXw+H/3Fvk1zlDZoiKPPc +a1wCVBINUZl7vYM2OXqbJwYa++JP2Q48xKSvC6thbRc/YLievkbcvTemf7IaREfl +CTjoYpoqXHa9kHMw1aALDm8CNU88jZmnV7v9L6hKkbYDxie+jpoj7D6B9JlxgNJ4 +5dQyRNsFGVcIl4Vplt1HyGc5Q5nQI/VgS2rlF/IOXmhRQBc4LEDdU8R2IKnkU4ee +S7TWanAigGAQhxGuCkS39/CWzc1DhLhjlNhBl/+RTPejkqJtAy00ZLps3+RqUN1Y +CU/Fsr7aRlYVGqQ/BlptwV0XQ2VVYJX2oEBBABEBAAG0MG5ldHdvcmsgT0JTIFBy +b2plY3QgPG5ldHdvcmtAYnVpbGQub3BlbnN1c2Uub3JnPokBPAQTAQIAJgUCXm/4 +pgIbAwUJEEzwqgYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEGLrGgkXKA3f/1AH +/A7WVSpfM4wV/DMqZPTsSjChB4JyDotxpV7qHZzBC5aaP2dINZyi9PayIwZWbvCY +VKvt+Fw8oCGC9F9mdh10Xe+ElHeVNSihzABPuu1RkRkb1nvkymScy0yxydodYOBi +K4WQ+BhpijXWmYvOekIwbS5Hi9BHpfgK4TinK0xsvh1bVLeQJ8YjrnNFIAR2CnBa +X7Y72Up/kKL08DdQzuS+mKrJtAQlGMtIsukWC2ajYQMkNwm8Gvhpn8za113dCkBW +XAFnlQqQobKwC7b19QgEtJI/YpGSrRc6WaZxPyAjscbWQlFEAB900sVj4BWT55ig +7O2uSdsCVhTuU7T0ztwsgvmIRgQTEQIABgUCUkG3/AAKCRA7MBG3a51lIzhdAJ9v +d6XPffMZRcCGgDEY5OaTn/MsCQCgrXbeZpFJgnirSrc8rRonvzYFiF4= +=/Tek +-----END PGP PUBLIC KEY BLOCK----- diff --git a/osmo-ran/jenkins.sh b/osmo-ran/jenkins.sh new file mode 100755 index 00000000..1b5d93ab --- /dev/null +++ b/osmo-ran/jenkins.sh @@ -0,0 +1,47 @@ +#!/bin/sh + +. ../jenkins-common.sh +IMAGE_SUFFIX="${IMAGE_SUFFIX?centos8}" +if [ "x$IMAGE_SUFFIX" != "x" ]; then + IMAGE_SUFFIX="-${IMAGE_SUFFIX}" # append dash +fi +docker_images_require \ + "systemd" \ + "osmo-ran$IMAGE_SUFFIX" + +SUBNET=${SUBNET:-25} +IPSUFFIX=200 +NET_NAME="osmo-ran-subnet$SUBNET" +network_bridge_create $SUBNET + +VOL_RAN_DIR="$VOL_BASE_DIR/ran-$SUBNET" +mkdir $VOL_RAN_DIR +mkdir $VOL_RAN_DIR/data +mkdir $VOL_RAN_DIR/osmocom +cp osmocom/* $VOL_RAN_DIR/osmocom/ + +DOCKER_IN_IP="172.18.$SUBNET.$IPSUFFIX" +SGSN_IP="${SGSN_IP:-192.168.30.1}" +STP_IP="${STP_IP:-192.168.30.1}" +TRX_IP="${TRX_IP:-192.168.30.100}" +sed -i "s/\$DOCKER_IN_IP/${DOCKER_IN_IP}/g" $VOL_RAN_DIR/osmocom/* +sed -i "s/\$SGSN_IP/${SGSN_IP}/g" $VOL_RAN_DIR/osmocom/* +sed -i "s/\$STP_IP/${STP_IP}/g" $VOL_RAN_DIR/osmocom/* +sed -i "s/\$TRX_IP/${TRX_IP}/g" $VOL_RAN_DIR/osmocom/* + +echo Starting container with RAN +docker run --rm \ + $(docker_network_params $SUBNET 200) \ + --privileged \ + --ulimit core=-1 \ + -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ + -v $VOL_RAN_DIR/data:/data \ + -v $VOL_RAN_DIR/osmocom:/etc/osmocom \ + -p 4242:4242 -p 4249:4249 \ + -p 4241:4241 -p 4238:4238 \ + -p 4243:4243 -p 4267:4267 \ + -p 4240:4240 -p 23010:23010 \ + --name ${BUILD_TAG}-ran-subnet$SUBNET \ + $DOCKER_ARGS \ + $REPO_USER/osmo-ran$IMAGE_SUFFIX +network_remove diff --git a/osmo-ran/osmocom/osmo-bsc.cfg b/osmo-ran/osmocom/osmo-bsc.cfg new file mode 100644 index 00000000..af53647b --- /dev/null +++ b/osmo-ran/osmocom/osmo-bsc.cfg @@ -0,0 +1,123 @@ +line vty + no login + bind 0.0.0.0 +! +e1_input + e1_line 0 driver ipa +network + network country code 234 + mobile network code 70 + encryption a5 0 + neci 1 + paging any use tch 0 + handover 0 + handover algorithm 1 + handover1 window rxlev averaging 10 + handover1 window rxqual averaging 1 + handover1 window rxlev neighbor averaging 10 + handover1 power budget interval 6 + handover1 power budget hysteresis 3 + handover1 maximum distance 9999 + periodic location update 30 + bts 0 + type sysmobts + band DCS1800 + cell_identity 0 + location_area_code 5 + base_station_id_code 63 + ms max power 15 + cell reselection hysteresis 4 + rxlev access min 0 + radio-link-timeout 32 + channel allocator ascending + rach tx integer 9 + rach max transmission 7 + channel-description attach 1 + channel-description bs-pa-mfrms 5 + channel-description bs-ag-blks-res 1 + early-classmark-sending forbidden + ip.access unit_id 6969 0 + oml ip.access stream_id 255 line 0 + codec-support fr amr + gprs mode egprs + gprs routing area 0 + gprs network-control-order nc1 + gprs cell bvci 1800 + gprs nsei 1800 + gprs nsvc 0 nsvci 1800 + gprs nsvc 0 local udp port 23020 + gprs nsvc 0 remote udp port 23000 + gprs nsvc 0 remote ip $SGSN_IP + trx 0 + rf_locked 0 + arfcn 871 + nominal power 23 + ! to use full TRX power, set max_power_red 0 + max_power_red 4 + rsl e1 tei 0 + timeslot 0 + phys_chan_config CCCH+SDCCH4 + hopping enabled 0 + timeslot 1 + phys_chan_config TCH/F + hopping enabled 0 + timeslot 2 + phys_chan_config TCH/F + hopping enabled 0 + timeslot 3 + phys_chan_config TCH/F + hopping enabled 0 + timeslot 4 + phys_chan_config TCH/F + hopping enabled 0 + timeslot 5 + phys_chan_config PDCH + hopping enabled 0 + timeslot 6 + phys_chan_config PDCH + !phys_chan_config TCH/F + hopping enabled 0 + timeslot 7 + phys_chan_config PDCH + !phys_chan_config TCH/F + hopping enabled 0 +! +cs7 instance 0 + point-code 0.0.2 + asp asp0 2905 0 m3ua + local-ip $DOCKER_IN_IP + remote-ip $STP_IP + as as0 m3ua + asp asp0 + routing-key 30 0.0.2 + traffic-mode loadshare + sccp-address bsc_local + point-code 0.0.2 + routing-indicator PC + sccp-address msc_remote + point-code 0.23.1 + routing-indicator PC +! +msc 0 + no bsc-welcome-text + no bsc-msc-lost-text + no bsc-grace-text + type normal + allow-emergency allow + codec-list hr3 fr3 + !mgw remote-ip 192.168.30.1 + mgw remote-ip 127.0.0.1 + mgw remote-port 2427 + amr-config 12_2k forbidden + amr-config 10_2k forbidden + amr-config 7_95k forbidden + amr-config 7_40k forbidden + amr-config 6_70k forbidden + amr-config 5_90k allowed + amr-config 5_15k forbidden + amr-config 4_75k forbidden + msc-addr msc_remote + bsc-addr bsc_local +bsc + mid-call-timeout 0 + no missing-msc-text diff --git a/osmo-ran/osmocom/osmo-bts-trx.cfg b/osmo-ran/osmocom/osmo-bts-trx.cfg new file mode 100644 index 00000000..20aeae09 --- /dev/null +++ b/osmo-ran/osmocom/osmo-bts-trx.cfg @@ -0,0 +1,36 @@ +! +! OsmoBTS () configuration saved from vty +!! +! +log stderr + logging color 1 + logging timestamp 0 + logging level rsl notice + logging level oml notice + logging level rll notice + logging level rr notice + logging level meas error + logging level pag error + logging level l1c error + logging level l1p error + logging level dsp error + logging level abis error +! +line vty + no login + bind 0.0.0.0 +! +phy 0 + instance 0 + osmotrx ip local $DOCKER_IN_IP + osmotrx ip remote $TRX_IP +bts 0 + band 1800 + ipa unit-id 6969 0 + oml remote-ip 127.0.0.1 + gsmtap-sapi ccch + gsmtap-sapi pdtch + trx 0 + phy 0 instance 0 +cpu-sched + policy rr 1 diff --git a/osmo-ran/osmocom/osmo-mgw.cfg b/osmo-ran/osmocom/osmo-mgw.cfg new file mode 100644 index 00000000..421816ff --- /dev/null +++ b/osmo-ran/osmocom/osmo-mgw.cfg @@ -0,0 +1,22 @@ +! +! MGCP configuration example +! +line vty + no login + bind 0.0.0.0 +! +mgcp + bind ip 127.0.0.1 + rtp port-range 4002 16000 + rtp bind-ip $DOCKER_IN_IP + rtp ip-probing + rtp ip-tos 184 + bind port 2427 + sdp audio payload number 98 + sdp audio payload name GSM + number endpoints 31 + loop 0 + force-realloc 1 + rtcp-omit + rtp-patch ssrc + rtp-patch timestamp diff --git a/osmo-ran/osmocom/osmo-pcu.cfg b/osmo-ran/osmocom/osmo-pcu.cfg new file mode 100644 index 00000000..2e31cbcc --- /dev/null +++ b/osmo-ran/osmocom/osmo-pcu.cfg @@ -0,0 +1,11 @@ +! +line vty + no login + bind 0.0.0.0 +! +pcu + flow-control-interval 10 + cs 2 + alloc-algorithm dynamic + alpha 0 + gamma 0 diff --git a/osmo-ran/osmocom/osmo-trx-ipc.cfg b/osmo-ran/osmocom/osmo-trx-ipc.cfg new file mode 100644 index 00000000..32419506 --- /dev/null +++ b/osmo-ran/osmocom/osmo-trx-ipc.cfg @@ -0,0 +1,33 @@ +log stderr + logging filter all 1 + logging color 1 + logging print category 1 + logging timestamp 1 + logging print file basename + logging level set-all notice +! +line vty +no login +bind 0.0.0.0 +! +cpu-sched + policy rr 18 +trx + bind-ip 127.0.0.1 + remote-ip 127.0.0.1 + ! 28 dB offset below is valid only for the B2xx in 1800 MHz band, see + ! https://osmocom.org/issues/4468 for more details + rssi-offset 28.000000 + tx-sps 4 + rx-sps 4 + clock-ref external + egprs disable + ext-rach disable + dev-args ipc_msock=/tmp/ipc_sock0 + multi-arfcn disable + chan 0 + tx-path TX/RX + rx-path RX2 + chan 1 + tx-path TX/RX + rx-path RX2 diff --git a/osmo-ran/osmocom/osmo-trx-uhd.cfg b/osmo-ran/osmocom/osmo-trx-uhd.cfg new file mode 100644 index 00000000..234a2ee5 --- /dev/null +++ b/osmo-ran/osmocom/osmo-trx-uhd.cfg @@ -0,0 +1,22 @@ +log stderr + logging filter all 1 + logging color 1 + logging print category 1 + logging timestamp 1 + logging print file basename + logging level set-all notice +! +line vty +no login +bind 0.0.0.0 +! +cpu-sched + policy rr 18 +trx + bind-ip 127.0.0.1 + remote-ip 127.0.0.1 + egprs disable + tx-sps 4 + rx-sps 4 + clock-ref external + chan 0 diff --git a/osmo-ran/split/jenkins-split.sh b/osmo-ran/split/jenkins-split.sh new file mode 100755 index 00000000..5cecf4a4 --- /dev/null +++ b/osmo-ran/split/jenkins-split.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +. ../../jenkins-common.sh +IMAGE_SUFFIX="${IMAGE_SUFFIX?centos8}" +if [ "x$IMAGE_SUFFIX" != "x" ]; then + IMAGE_SUFFIX="-${IMAGE_SUFFIX}" # append dash +fi + +IMAGE_DIR_PREFIX="../.." docker_images_require \ + "systemd" + +networks=() +docker_names=() + +SUBNET=${SUBNET:-25} + +NET_NAME="osmo-ran-subnet$subnet" +networks+=("$NET_NAME") +network_bridge_create $SUBNET + +#$1:image_name, $2: subnet, $3: ip suffix, $4: docker args +run_image() { + local image_name=$1 + local subnet=$2 + local ipsuffix=$3 + local docker_args=$4 + + IMAGE_DIR_PREFIX="." + docker_images_require \ + $image_name + + VOL_RAN_DIR="$VOL_BASE_DIR/$image_name-$subnet" + mkdir $VOL_RAN_DIR + mkdir $VOL_RAN_DIR/data + mkdir $VOL_RAN_DIR/osmocom + cp $IMAGE_DIR_PREFIX/${image_name}/osmocom/* $VOL_RAN_DIR/osmocom/ + + DOCKER_IN_IP="172.18.$subnet.$ipsuffix" + SGSN_IP="${SGSN_IP:-192.168.30.1}" + STP_IP="${STP_IP:-192.168.30.1}" + BSC_IP="172.18.$SUBNET.200" + MGW_IP="172.18.$SUBNET.200" + BTS_IP="172.18.$SUBNET.201" + PCU_IP="172.18.$SUBNET.201" + TRX_IP="${TRX_IP:-172.18.$SUBNET.202}" + sed -i "s/\$DOCKER_IN_IP/${DOCKER_IN_IP}/g" $VOL_RAN_DIR/osmocom/* + sed -i "s/\$SGSN_IP/${SGSN_IP}/g" $VOL_RAN_DIR/osmocom/* + sed -i "s/\$STP_IP/${STP_IP}/g" $VOL_RAN_DIR/osmocom/* + sed -i "s/\$BSC_IP/${BSC_IP}/g" $VOL_RAN_DIR/osmocom/* + sed -i "s/\$MGW_IP/${MGW_IP}/g" $VOL_RAN_DIR/osmocom/* + sed -i "s/\$BTS_IP/${BTS_IP}/g" $VOL_RAN_DIR/osmocom/* + sed -i "s/\$PCU_IP/${PCU_IP}/g" $VOL_RAN_DIR/osmocom/* + sed -i "s/\$TRX_IP/${TRX_IP}/g" $VOL_RAN_DIR/osmocom/* + + echo Starting container with RAN + docker_name="${BUILD_TAG}-ran-${image_name}-subnet$subnet" + docker run --rm \ + $(docker_network_params $subnet $ipsuffix) \ + --privileged \ + --ulimit core=-1 \ + -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ + -v $VOL_RAN_DIR/data:/data \ + -v $VOL_RAN_DIR/osmocom:/etc/osmocom \ + --name ${docker_name} -d \ + $docker_args \ + $REPO_USER/${image_name}${IMAGE_SUFFIX} + docker_names+=("$docker_name") +} + +kill_containers() { + for i in "${docker_names[@]}"; do + docker kill $i + done +} + +remove_networks() { + for i in "${networks[@]}"; do + NET_NAME="$i" + network_remove + done +} + +sighandler() { + echo "SIGINT, exiting..." + kill_containers + remove_networks + exit 0 +} + +trap 'sighandler' SIGINT + +run_image "ran-bsc_mgw" $SUBNET 200 "-p 4242:4242 -p 4249:4249 -p 4243:4243 -p 4267:4267" +run_image "ran-bts_pcu" $SUBNET 201 "-p 4241:4241 -p 4238:4238 -p 4240:4240" +run_image "ran-trx-uhd" $SUBNET 202 "-p 4237:4237 -p 4236:4236 -p 5700:5700 -p 5701:5701 -p 5702:5702 -v /dev/bus/usb:/dev/bus/usb" +#run_image "ran-trx-ipc" $SUBNET 202 "-p 4237:4237 -p 4236:4236 -p 5700:5700 -p 5701:5701 -p 5702:5702 -v /tmp/ud:/tmp/ud --ipc=host" + +while true; do sleep 1000; done diff --git a/osmo-ran/split/ran-bsc_mgw/Dockerfile b/osmo-ran/split/ran-bsc_mgw/Dockerfile new file mode 100644 index 00000000..f75316f4 --- /dev/null +++ b/osmo-ran/split/ran-bsc_mgw/Dockerfile @@ -0,0 +1,80 @@ +ARG USER +FROM $USER/systemd +# Arguments used after FROM must be specified again +ARG DISTRO +ARG OSMOCOM_REPO_MIRROR="http://download.opensuse.org" +ARG OSMOCOM_REPO_VERSION=latest + +MAINTAINER Pau Espin Pedrol + +ARG OSMOCOM_REPO_DEBIAN="$OSMOCOM_REPO_MIRROR/repositories/network:/osmocom:/$OSMOCOM_REPO_VERSION/Debian_9.0/" +ARG OSMOCOM_REPO_CENTOS="$OSMOCOM_REPO_MIRROR/repositories/network:/osmocom:/$OSMOCOM_REPO_VERSION/CentOS_8/" + +COPY Release.key /tmp/Release.key + +RUN case "$DISTRO" in \ + debian*) \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + gnupg && \ + apt-key add /tmp/Release.key && \ + rm /tmp/Release.key && \ + echo "deb " $OSMOCOM_REPO_DEBIAN " ./" > /etc/apt/sources.list.d/osmocom-$OSMOCOM_REPO_VERSION.list \ + ;; \ + centos*) \ + echo "metadata_expire=60" >> /etc/dnf/dnf.conf && cat /etc/dnf/dnf.conf && \ + dnf install -y dnf-utils wget && \ + yum config-manager --set-enabled PowerTools && \ + cd /etc/yum.repos.d/ && \ + wget ${OSMOCOM_REPO_CENTOS}/network:osmocom:$OSMOCOM_REPO_VERSION.repo \ + ;; \ + esac + +# we need to add this to invalidate the cache once the repository is updated. +# unfortunately Dockerfiles don't support a conditional ARG, so we need to add both DPKG + RPM +ADD $OSMOCOM_REPO_DEBIAN/Release /tmp/Release +ADD $OSMOCOM_REPO_CENTOS/repodata/repomd.xml /tmp/repomd.xml + +RUN case "$DISTRO" in \ + debian*) \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + less \ + apt-utils \ + strace \ + tcpdump \ + telnet \ + vim \ + osmo-bsc \ + osmo-bsc-ipaccess-utils \ + osmo-mgw && \ + apt-get clean \ + ;; \ + centos*) \ + dnf install -y \ + less \ + strace \ + tcpdump \ + telnet \ + vim \ + osmo-bsc \ + osmo-bsc-ipaccess-utils \ + osmo-mgw \ + ;; \ + esac + +RUN systemctl enable osmo-bsc osmo-mgw + +WORKDIR /tmp +RUN cp -r /etc/osmocom /etc/osmocom-default +VOLUME /data +VOLUME /etc/osmocom + +COPY osmocom/* /etc/osmocom/ + +CMD ["/lib/systemd/systemd", "--system", "--unit=multi-user.target"] + +#osmo-bsc: VTY CTRL +EXPOSE 4242 4249 +#osmo-mgw: VTY CTRL +EXPOSE 4243 4267 diff --git a/osmo-ran/split/ran-bsc_mgw/Makefile b/osmo-ran/split/ran-bsc_mgw/Makefile new file mode 100644 index 00000000..0239a23c --- /dev/null +++ b/osmo-ran/split/ran-bsc_mgw/Makefile @@ -0,0 +1,2 @@ +RUN_ARGS?=--sysctl net.ipv6.conf.all.disable_ipv6=0 --rm --network sigtran --ip 172.18.25.200 -v bsc-vol:/data +include ../../../make/Makefile diff --git a/osmo-ran/split/ran-bsc_mgw/Release.key b/osmo-ran/split/ran-bsc_mgw/Release.key new file mode 100644 index 00000000..a737316d --- /dev/null +++ b/osmo-ran/split/ran-bsc_mgw/Release.key @@ -0,0 +1,20 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.5 (GNU/Linux) + +mQENBFJBt/wBCADAht3d/ilNuyzaXYw/QwTRvmjyoDvfXw+H/3Fvk1zlDZoiKPPc +a1wCVBINUZl7vYM2OXqbJwYa++JP2Q48xKSvC6thbRc/YLievkbcvTemf7IaREfl +CTjoYpoqXHa9kHMw1aALDm8CNU88jZmnV7v9L6hKkbYDxie+jpoj7D6B9JlxgNJ4 +5dQyRNsFGVcIl4Vplt1HyGc5Q5nQI/VgS2rlF/IOXmhRQBc4LEDdU8R2IKnkU4ee +S7TWanAigGAQhxGuCkS39/CWzc1DhLhjlNhBl/+RTPejkqJtAy00ZLps3+RqUN1Y +CU/Fsr7aRlYVGqQ/BlptwV0XQ2VVYJX2oEBBABEBAAG0MG5ldHdvcmsgT0JTIFBy +b2plY3QgPG5ldHdvcmtAYnVpbGQub3BlbnN1c2Uub3JnPokBPAQTAQIAJgUCXm/4 +pgIbAwUJEEzwqgYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEGLrGgkXKA3f/1AH +/A7WVSpfM4wV/DMqZPTsSjChB4JyDotxpV7qHZzBC5aaP2dINZyi9PayIwZWbvCY +VKvt+Fw8oCGC9F9mdh10Xe+ElHeVNSihzABPuu1RkRkb1nvkymScy0yxydodYOBi +K4WQ+BhpijXWmYvOekIwbS5Hi9BHpfgK4TinK0xsvh1bVLeQJ8YjrnNFIAR2CnBa +X7Y72Up/kKL08DdQzuS+mKrJtAQlGMtIsukWC2ajYQMkNwm8Gvhpn8za113dCkBW +XAFnlQqQobKwC7b19QgEtJI/YpGSrRc6WaZxPyAjscbWQlFEAB900sVj4BWT55ig +7O2uSdsCVhTuU7T0ztwsgvmIRgQTEQIABgUCUkG3/AAKCRA7MBG3a51lIzhdAJ9v +d6XPffMZRcCGgDEY5OaTn/MsCQCgrXbeZpFJgnirSrc8rRonvzYFiF4= +=/Tek +-----END PGP PUBLIC KEY BLOCK----- diff --git a/osmo-ran/split/ran-bsc_mgw/osmocom/osmo-bsc.cfg b/osmo-ran/split/ran-bsc_mgw/osmocom/osmo-bsc.cfg new file mode 100644 index 00000000..af53647b --- /dev/null +++ b/osmo-ran/split/ran-bsc_mgw/osmocom/osmo-bsc.cfg @@ -0,0 +1,123 @@ +line vty + no login + bind 0.0.0.0 +! +e1_input + e1_line 0 driver ipa +network + network country code 234 + mobile network code 70 + encryption a5 0 + neci 1 + paging any use tch 0 + handover 0 + handover algorithm 1 + handover1 window rxlev averaging 10 + handover1 window rxqual averaging 1 + handover1 window rxlev neighbor averaging 10 + handover1 power budget interval 6 + handover1 power budget hysteresis 3 + handover1 maximum distance 9999 + periodic location update 30 + bts 0 + type sysmobts + band DCS1800 + cell_identity 0 + location_area_code 5 + base_station_id_code 63 + ms max power 15 + cell reselection hysteresis 4 + rxlev access min 0 + radio-link-timeout 32 + channel allocator ascending + rach tx integer 9 + rach max transmission 7 + channel-description attach 1 + channel-description bs-pa-mfrms 5 + channel-description bs-ag-blks-res 1 + early-classmark-sending forbidden + ip.access unit_id 6969 0 + oml ip.access stream_id 255 line 0 + codec-support fr amr + gprs mode egprs + gprs routing area 0 + gprs network-control-order nc1 + gprs cell bvci 1800 + gprs nsei 1800 + gprs nsvc 0 nsvci 1800 + gprs nsvc 0 local udp port 23020 + gprs nsvc 0 remote udp port 23000 + gprs nsvc 0 remote ip $SGSN_IP + trx 0 + rf_locked 0 + arfcn 871 + nominal power 23 + ! to use full TRX power, set max_power_red 0 + max_power_red 4 + rsl e1 tei 0 + timeslot 0 + phys_chan_config CCCH+SDCCH4 + hopping enabled 0 + timeslot 1 + phys_chan_config TCH/F + hopping enabled 0 + timeslot 2 + phys_chan_config TCH/F + hopping enabled 0 + timeslot 3 + phys_chan_config TCH/F + hopping enabled 0 + timeslot 4 + phys_chan_config TCH/F + hopping enabled 0 + timeslot 5 + phys_chan_config PDCH + hopping enabled 0 + timeslot 6 + phys_chan_config PDCH + !phys_chan_config TCH/F + hopping enabled 0 + timeslot 7 + phys_chan_config PDCH + !phys_chan_config TCH/F + hopping enabled 0 +! +cs7 instance 0 + point-code 0.0.2 + asp asp0 2905 0 m3ua + local-ip $DOCKER_IN_IP + remote-ip $STP_IP + as as0 m3ua + asp asp0 + routing-key 30 0.0.2 + traffic-mode loadshare + sccp-address bsc_local + point-code 0.0.2 + routing-indicator PC + sccp-address msc_remote + point-code 0.23.1 + routing-indicator PC +! +msc 0 + no bsc-welcome-text + no bsc-msc-lost-text + no bsc-grace-text + type normal + allow-emergency allow + codec-list hr3 fr3 + !mgw remote-ip 192.168.30.1 + mgw remote-ip 127.0.0.1 + mgw remote-port 2427 + amr-config 12_2k forbidden + amr-config 10_2k forbidden + amr-config 7_95k forbidden + amr-config 7_40k forbidden + amr-config 6_70k forbidden + amr-config 5_90k allowed + amr-config 5_15k forbidden + amr-config 4_75k forbidden + msc-addr msc_remote + bsc-addr bsc_local +bsc + mid-call-timeout 0 + no missing-msc-text diff --git a/osmo-ran/split/ran-bsc_mgw/osmocom/osmo-mgw.cfg b/osmo-ran/split/ran-bsc_mgw/osmocom/osmo-mgw.cfg new file mode 100644 index 00000000..421816ff --- /dev/null +++ b/osmo-ran/split/ran-bsc_mgw/osmocom/osmo-mgw.cfg @@ -0,0 +1,22 @@ +! +! MGCP configuration example +! +line vty + no login + bind 0.0.0.0 +! +mgcp + bind ip 127.0.0.1 + rtp port-range 4002 16000 + rtp bind-ip $DOCKER_IN_IP + rtp ip-probing + rtp ip-tos 184 + bind port 2427 + sdp audio payload number 98 + sdp audio payload name GSM + number endpoints 31 + loop 0 + force-realloc 1 + rtcp-omit + rtp-patch ssrc + rtp-patch timestamp diff --git a/osmo-ran/split/ran-bts_pcu/Dockerfile b/osmo-ran/split/ran-bts_pcu/Dockerfile new file mode 100644 index 00000000..68f710e9 --- /dev/null +++ b/osmo-ran/split/ran-bts_pcu/Dockerfile @@ -0,0 +1,78 @@ +ARG USER +FROM $USER/systemd +# Arguments used after FROM must be specified again +ARG DISTRO +ARG OSMOCOM_REPO_MIRROR="http://download.opensuse.org" +ARG OSMOCOM_REPO_VERSION=latest + +MAINTAINER Pau Espin Pedrol + +ARG OSMOCOM_REPO_DEBIAN="$OSMOCOM_REPO_MIRROR/repositories/network:/osmocom:/$OSMOCOM_REPO_VERSION/Debian_9.0/" +ARG OSMOCOM_REPO_CENTOS="$OSMOCOM_REPO_MIRROR/repositories/network:/osmocom:/$OSMOCOM_REPO_VERSION/CentOS_8/" + +COPY Release.key /tmp/Release.key + +RUN case "$DISTRO" in \ + debian*) \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + gnupg && \ + apt-key add /tmp/Release.key && \ + rm /tmp/Release.key && \ + echo "deb " $OSMOCOM_REPO_DEBIAN " ./" > /etc/apt/sources.list.d/osmocom-$OSMOCOM_REPO_VERSION.list \ + ;; \ + centos*) \ + echo "metadata_expire=60" >> /etc/dnf/dnf.conf && cat /etc/dnf/dnf.conf && \ + dnf install -y dnf-utils wget && \ + yum config-manager --set-enabled PowerTools && \ + cd /etc/yum.repos.d/ && \ + wget ${OSMOCOM_REPO_CENTOS}/network:osmocom:$OSMOCOM_REPO_VERSION.repo \ + ;; \ + esac + +# we need to add this to invalidate the cache once the repository is updated. +# unfortunately Dockerfiles don't support a conditional ARG, so we need to add both DPKG + RPM +ADD $OSMOCOM_REPO_DEBIAN/Release /tmp/Release +ADD $OSMOCOM_REPO_CENTOS/repodata/repomd.xml /tmp/repomd.xml + +RUN case "$DISTRO" in \ + debian*) \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + less \ + apt-utils \ + strace \ + tcpdump \ + telnet \ + vim \ + osmo-bts-trx \ + osmo-pcu && \ + apt-get clean \ + ;; \ + centos*) \ + dnf install -y \ + less \ + strace \ + tcpdump \ + telnet \ + vim \ + osmo-bts \ + osmo-pcu \ + ;; \ + esac + +RUN systemctl enable osmo-bts-trx osmo-pcu + +WORKDIR /tmp +RUN cp -r /etc/osmocom /etc/osmocom-default +VOLUME /data +VOLUME /etc/osmocom + +COPY osmocom/* /etc/osmocom/ + +CMD ["/lib/systemd/systemd", "--system", "--unit=multi-user.target"] + +#osmo-bts: VTY CTRL +EXPOSE 4241 4238 +#osmo-pcu: VTY CTRL +EXPOSE 4240 diff --git a/osmo-ran/split/ran-bts_pcu/Makefile b/osmo-ran/split/ran-bts_pcu/Makefile new file mode 100644 index 00000000..3d539d1c --- /dev/null +++ b/osmo-ran/split/ran-bts_pcu/Makefile @@ -0,0 +1,2 @@ +RUN_ARGS?=--sysctl net.ipv6.conf.all.disable_ipv6=0 --rm --network sigtran --ip 172.18.25.201 -v bsc-vol:/data +include ../../../make/Makefile diff --git a/osmo-ran/split/ran-bts_pcu/Release.key b/osmo-ran/split/ran-bts_pcu/Release.key new file mode 100644 index 00000000..a737316d --- /dev/null +++ b/osmo-ran/split/ran-bts_pcu/Release.key @@ -0,0 +1,20 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.5 (GNU/Linux) + +mQENBFJBt/wBCADAht3d/ilNuyzaXYw/QwTRvmjyoDvfXw+H/3Fvk1zlDZoiKPPc +a1wCVBINUZl7vYM2OXqbJwYa++JP2Q48xKSvC6thbRc/YLievkbcvTemf7IaREfl +CTjoYpoqXHa9kHMw1aALDm8CNU88jZmnV7v9L6hKkbYDxie+jpoj7D6B9JlxgNJ4 +5dQyRNsFGVcIl4Vplt1HyGc5Q5nQI/VgS2rlF/IOXmhRQBc4LEDdU8R2IKnkU4ee +S7TWanAigGAQhxGuCkS39/CWzc1DhLhjlNhBl/+RTPejkqJtAy00ZLps3+RqUN1Y +CU/Fsr7aRlYVGqQ/BlptwV0XQ2VVYJX2oEBBABEBAAG0MG5ldHdvcmsgT0JTIFBy +b2plY3QgPG5ldHdvcmtAYnVpbGQub3BlbnN1c2Uub3JnPokBPAQTAQIAJgUCXm/4 +pgIbAwUJEEzwqgYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEGLrGgkXKA3f/1AH +/A7WVSpfM4wV/DMqZPTsSjChB4JyDotxpV7qHZzBC5aaP2dINZyi9PayIwZWbvCY +VKvt+Fw8oCGC9F9mdh10Xe+ElHeVNSihzABPuu1RkRkb1nvkymScy0yxydodYOBi +K4WQ+BhpijXWmYvOekIwbS5Hi9BHpfgK4TinK0xsvh1bVLeQJ8YjrnNFIAR2CnBa +X7Y72Up/kKL08DdQzuS+mKrJtAQlGMtIsukWC2ajYQMkNwm8Gvhpn8za113dCkBW +XAFnlQqQobKwC7b19QgEtJI/YpGSrRc6WaZxPyAjscbWQlFEAB900sVj4BWT55ig +7O2uSdsCVhTuU7T0ztwsgvmIRgQTEQIABgUCUkG3/AAKCRA7MBG3a51lIzhdAJ9v +d6XPffMZRcCGgDEY5OaTn/MsCQCgrXbeZpFJgnirSrc8rRonvzYFiF4= +=/Tek +-----END PGP PUBLIC KEY BLOCK----- diff --git a/osmo-ran/split/ran-bts_pcu/osmocom/osmo-bts-trx.cfg b/osmo-ran/split/ran-bts_pcu/osmocom/osmo-bts-trx.cfg new file mode 100644 index 00000000..df20e5e3 --- /dev/null +++ b/osmo-ran/split/ran-bts_pcu/osmocom/osmo-bts-trx.cfg @@ -0,0 +1,36 @@ +! +! OsmoBTS () configuration saved from vty +!! +! +log stderr + logging color 1 + logging timestamp 0 + logging level rsl notice + logging level oml notice + logging level rll notice + logging level rr notice + logging level meas error + logging level pag error + logging level l1c error + logging level l1p error + logging level dsp error + logging level abis error +! +line vty + no login + bind 0.0.0.0 +! +phy 0 + instance 0 + osmotrx ip local $DOCKER_IN_IP + osmotrx ip remote $TRX_IP +bts 0 + band 1800 + ipa unit-id 6969 0 + oml remote-ip $BSC_IP + gsmtap-sapi ccch + gsmtap-sapi pdtch + trx 0 + phy 0 instance 0 +cpu-sched + policy rr 1 diff --git a/osmo-ran/split/ran-bts_pcu/osmocom/osmo-pcu.cfg b/osmo-ran/split/ran-bts_pcu/osmocom/osmo-pcu.cfg new file mode 100644 index 00000000..2e31cbcc --- /dev/null +++ b/osmo-ran/split/ran-bts_pcu/osmocom/osmo-pcu.cfg @@ -0,0 +1,11 @@ +! +line vty + no login + bind 0.0.0.0 +! +pcu + flow-control-interval 10 + cs 2 + alloc-algorithm dynamic + alpha 0 + gamma 0 diff --git a/osmo-ran/split/ran-trx-ipc/Dockerfile b/osmo-ran/split/ran-trx-ipc/Dockerfile new file mode 100644 index 00000000..c5ce0577 --- /dev/null +++ b/osmo-ran/split/ran-trx-ipc/Dockerfile @@ -0,0 +1,76 @@ +ARG USER +FROM $USER/systemd +# Arguments used after FROM must be specified again +ARG DISTRO +ARG OSMOCOM_REPO_MIRROR="http://download.opensuse.org" +ARG OSMOCOM_REPO_VERSION=latest + +MAINTAINER Pau Espin Pedrol + +ARG OSMOCOM_REPO_DEBIAN="$OSMOCOM_REPO_MIRROR/repositories/network:/osmocom:/$OSMOCOM_REPO_VERSION/Debian_9.0/" +ARG OSMOCOM_REPO_CENTOS="$OSMOCOM_REPO_MIRROR/repositories/network:/osmocom:/$OSMOCOM_REPO_VERSION/CentOS_8/" + +COPY Release.key /tmp/Release.key + +RUN case "$DISTRO" in \ + debian*) \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + gnupg && \ + apt-key add /tmp/Release.key && \ + rm /tmp/Release.key && \ + echo "deb " $OSMOCOM_REPO_DEBIAN " ./" > /etc/apt/sources.list.d/osmocom-$OSMOCOM_REPO_VERSION.list \ + ;; \ + centos*) \ + echo "metadata_expire=60" >> /etc/dnf/dnf.conf && cat /etc/dnf/dnf.conf && \ + dnf install -y dnf-utils wget && \ + yum config-manager --set-enabled PowerTools && \ + cd /etc/yum.repos.d/ && \ + wget ${OSMOCOM_REPO_CENTOS}/network:osmocom:$OSMOCOM_REPO_VERSION.repo \ + ;; \ + esac + +# we need to add this to invalidate the cache once the repository is updated. +# unfortunately Dockerfiles don't support a conditional ARG, so we need to add both DPKG + RPM +ADD $OSMOCOM_REPO_DEBIAN/Release /tmp/Release +ADD $OSMOCOM_REPO_CENTOS/repodata/repomd.xml /tmp/repomd.xml + +RUN case "$DISTRO" in \ + debian*) \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + less \ + apt-utils \ + strace \ + tcpdump \ + telnet \ + vim \ + osmo-trx-ipc && \ + apt-get clean \ + ;; \ + centos*) \ + dnf install -y \ + less \ + strace \ + tcpdump \ + telnet \ + vim \ + osmo-trx-ipc \ + ;; \ + esac + +RUN systemctl enable osmo-trx-ipc + +WORKDIR /tmp +RUN cp -r /etc/osmocom /etc/osmocom-default +VOLUME /data +VOLUME /etc/osmocom +VOLUME /tmp/ud + +COPY osmocom/* /etc/osmocom/ + +CMD ["/lib/systemd/systemd", "--system", "--unit=multi-user.target"] + +#osmo-trx-ipc: VTY CTRL +EXPOSE 4237 4236 +EXPOSE 5700 5701 5702 diff --git a/osmo-ran/split/ran-trx-ipc/Makefile b/osmo-ran/split/ran-trx-ipc/Makefile new file mode 100644 index 00000000..1d99f06e --- /dev/null +++ b/osmo-ran/split/ran-trx-ipc/Makefile @@ -0,0 +1,2 @@ +RUN_ARGS?=--sysctl net.ipv6.conf.all.disable_ipv6=0 --rm --network sigtran --ip 172.18.25.202 -v bsc-vol:/data +include ../../../make/Makefile diff --git a/osmo-ran/split/ran-trx-ipc/Release.key b/osmo-ran/split/ran-trx-ipc/Release.key new file mode 100644 index 00000000..a737316d --- /dev/null +++ b/osmo-ran/split/ran-trx-ipc/Release.key @@ -0,0 +1,20 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.5 (GNU/Linux) + +mQENBFJBt/wBCADAht3d/ilNuyzaXYw/QwTRvmjyoDvfXw+H/3Fvk1zlDZoiKPPc +a1wCVBINUZl7vYM2OXqbJwYa++JP2Q48xKSvC6thbRc/YLievkbcvTemf7IaREfl +CTjoYpoqXHa9kHMw1aALDm8CNU88jZmnV7v9L6hKkbYDxie+jpoj7D6B9JlxgNJ4 +5dQyRNsFGVcIl4Vplt1HyGc5Q5nQI/VgS2rlF/IOXmhRQBc4LEDdU8R2IKnkU4ee +S7TWanAigGAQhxGuCkS39/CWzc1DhLhjlNhBl/+RTPejkqJtAy00ZLps3+RqUN1Y +CU/Fsr7aRlYVGqQ/BlptwV0XQ2VVYJX2oEBBABEBAAG0MG5ldHdvcmsgT0JTIFBy +b2plY3QgPG5ldHdvcmtAYnVpbGQub3BlbnN1c2Uub3JnPokBPAQTAQIAJgUCXm/4 +pgIbAwUJEEzwqgYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEGLrGgkXKA3f/1AH +/A7WVSpfM4wV/DMqZPTsSjChB4JyDotxpV7qHZzBC5aaP2dINZyi9PayIwZWbvCY +VKvt+Fw8oCGC9F9mdh10Xe+ElHeVNSihzABPuu1RkRkb1nvkymScy0yxydodYOBi +K4WQ+BhpijXWmYvOekIwbS5Hi9BHpfgK4TinK0xsvh1bVLeQJ8YjrnNFIAR2CnBa +X7Y72Up/kKL08DdQzuS+mKrJtAQlGMtIsukWC2ajYQMkNwm8Gvhpn8za113dCkBW +XAFnlQqQobKwC7b19QgEtJI/YpGSrRc6WaZxPyAjscbWQlFEAB900sVj4BWT55ig +7O2uSdsCVhTuU7T0ztwsgvmIRgQTEQIABgUCUkG3/AAKCRA7MBG3a51lIzhdAJ9v +d6XPffMZRcCGgDEY5OaTn/MsCQCgrXbeZpFJgnirSrc8rRonvzYFiF4= +=/Tek +-----END PGP PUBLIC KEY BLOCK----- diff --git a/osmo-ran/split/ran-trx-ipc/osmocom/osmo-trx-ipc.cfg b/osmo-ran/split/ran-trx-ipc/osmocom/osmo-trx-ipc.cfg new file mode 100644 index 00000000..38a758c5 --- /dev/null +++ b/osmo-ran/split/ran-trx-ipc/osmocom/osmo-trx-ipc.cfg @@ -0,0 +1,29 @@ +log stderr + logging filter all 1 + logging color 1 + logging print category 1 + logging timestamp 1 + logging print file basename + logging level set-all notice +! +line vty + no login +! +cpu-sched + policy rr 18 +trx + bind-ip $DOCKER_IN_IP + remote-ip $BTS_IP + ! 28 dB offset below is valid only for the B2xx in 1800 MHz band, see + ! https://osmocom.org/issues/4468 for more details + rssi-offset 28.000000 + tx-sps 4 + rx-sps 4 + clock-ref external + egprs disable + ext-rach disable + dev-args ipc_msock=/tmp/ud/ipc_sock0 + multi-arfcn disable + chan 0 + tx-path TX/RX + rx-path RX2 diff --git a/osmo-ran/split/ran-trx-uhd/Dockerfile b/osmo-ran/split/ran-trx-uhd/Dockerfile new file mode 100644 index 00000000..5fe0cc36 --- /dev/null +++ b/osmo-ran/split/ran-trx-uhd/Dockerfile @@ -0,0 +1,79 @@ +ARG USER +FROM $USER/systemd +# Arguments used after FROM must be specified again +ARG DISTRO +ARG OSMOCOM_REPO_MIRROR="http://download.opensuse.org" +ARG OSMOCOM_REPO_VERSION=latest + +MAINTAINER Pau Espin Pedrol + +ARG OSMOCOM_REPO_DEBIAN="$OSMOCOM_REPO_MIRROR/repositories/network:/osmocom:/$OSMOCOM_REPO_VERSION/Debian_9.0/" +ARG OSMOCOM_REPO_CENTOS="$OSMOCOM_REPO_MIRROR/repositories/network:/osmocom:/$OSMOCOM_REPO_VERSION/CentOS_8/" + +COPY Release.key /tmp/Release.key + +RUN case "$DISTRO" in \ + debian*) \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + gnupg && \ + apt-key add /tmp/Release.key && \ + rm /tmp/Release.key && \ + echo "deb " $OSMOCOM_REPO_DEBIAN " ./" > /etc/apt/sources.list.d/osmocom-$OSMOCOM_REPO_VERSION.list \ + ;; \ + centos*) \ + echo "metadata_expire=60" >> /etc/dnf/dnf.conf && cat /etc/dnf/dnf.conf && \ + dnf install -y dnf-utils wget && \ + yum config-manager --set-enabled PowerTools && \ + cd /etc/yum.repos.d/ && \ + wget ${OSMOCOM_REPO_CENTOS}/network:osmocom:$OSMOCOM_REPO_VERSION.repo \ + ;; \ + esac + +# we need to add this to invalidate the cache once the repository is updated. +# unfortunately Dockerfiles don't support a conditional ARG, so we need to add both DPKG + RPM +ADD $OSMOCOM_REPO_DEBIAN/Release /tmp/Release +ADD $OSMOCOM_REPO_CENTOS/repodata/repomd.xml /tmp/repomd.xml + +RUN case "$DISTRO" in \ + debian*) \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + less \ + apt-utils \ + strace \ + tcpdump \ + telnet \ + vim \ + uhd-host \ + osmo-trx-uhd && \ + apt-get clean \ + ;; \ + centos*) \ + dnf install -y \ + less \ + strace \ + tcpdump \ + telnet \ + vim \ + osmo-trx-uhd \ + ;; \ + esac + +RUN /usr/lib/uhd/utils/uhd_images_downloader.py + +RUN systemctl enable osmo-trx-uhd + +WORKDIR /tmp +RUN cp -r /etc/osmocom /etc/osmocom-default +VOLUME /data +VOLUME /etc/osmocom +VOLUME /dev/bus/usb + +COPY osmocom/* /etc/osmocom/ + +CMD ["/lib/systemd/systemd", "--system", "--unit=multi-user.target"] + +#osmo-trx-ipc: VTY CTRL +EXPOSE 4237 4236 +EXPOSE 5700 5701 5702 diff --git a/osmo-ran/split/ran-trx-uhd/Makefile b/osmo-ran/split/ran-trx-uhd/Makefile new file mode 100644 index 00000000..1d99f06e --- /dev/null +++ b/osmo-ran/split/ran-trx-uhd/Makefile @@ -0,0 +1,2 @@ +RUN_ARGS?=--sysctl net.ipv6.conf.all.disable_ipv6=0 --rm --network sigtran --ip 172.18.25.202 -v bsc-vol:/data +include ../../../make/Makefile diff --git a/osmo-ran/split/ran-trx-uhd/Release.key b/osmo-ran/split/ran-trx-uhd/Release.key new file mode 100644 index 00000000..a737316d --- /dev/null +++ b/osmo-ran/split/ran-trx-uhd/Release.key @@ -0,0 +1,20 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.5 (GNU/Linux) + +mQENBFJBt/wBCADAht3d/ilNuyzaXYw/QwTRvmjyoDvfXw+H/3Fvk1zlDZoiKPPc +a1wCVBINUZl7vYM2OXqbJwYa++JP2Q48xKSvC6thbRc/YLievkbcvTemf7IaREfl +CTjoYpoqXHa9kHMw1aALDm8CNU88jZmnV7v9L6hKkbYDxie+jpoj7D6B9JlxgNJ4 +5dQyRNsFGVcIl4Vplt1HyGc5Q5nQI/VgS2rlF/IOXmhRQBc4LEDdU8R2IKnkU4ee +S7TWanAigGAQhxGuCkS39/CWzc1DhLhjlNhBl/+RTPejkqJtAy00ZLps3+RqUN1Y +CU/Fsr7aRlYVGqQ/BlptwV0XQ2VVYJX2oEBBABEBAAG0MG5ldHdvcmsgT0JTIFBy +b2plY3QgPG5ldHdvcmtAYnVpbGQub3BlbnN1c2Uub3JnPokBPAQTAQIAJgUCXm/4 +pgIbAwUJEEzwqgYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEGLrGgkXKA3f/1AH +/A7WVSpfM4wV/DMqZPTsSjChB4JyDotxpV7qHZzBC5aaP2dINZyi9PayIwZWbvCY +VKvt+Fw8oCGC9F9mdh10Xe+ElHeVNSihzABPuu1RkRkb1nvkymScy0yxydodYOBi +K4WQ+BhpijXWmYvOekIwbS5Hi9BHpfgK4TinK0xsvh1bVLeQJ8YjrnNFIAR2CnBa +X7Y72Up/kKL08DdQzuS+mKrJtAQlGMtIsukWC2ajYQMkNwm8Gvhpn8za113dCkBW +XAFnlQqQobKwC7b19QgEtJI/YpGSrRc6WaZxPyAjscbWQlFEAB900sVj4BWT55ig +7O2uSdsCVhTuU7T0ztwsgvmIRgQTEQIABgUCUkG3/AAKCRA7MBG3a51lIzhdAJ9v +d6XPffMZRcCGgDEY5OaTn/MsCQCgrXbeZpFJgnirSrc8rRonvzYFiF4= +=/Tek +-----END PGP PUBLIC KEY BLOCK----- diff --git a/osmo-ran/split/ran-trx-uhd/osmocom/osmo-trx-uhd.cfg b/osmo-ran/split/ran-trx-uhd/osmocom/osmo-trx-uhd.cfg new file mode 100644 index 00000000..02c92d3c --- /dev/null +++ b/osmo-ran/split/ran-trx-uhd/osmocom/osmo-trx-uhd.cfg @@ -0,0 +1,27 @@ +log stderr + logging filter all 1 + logging color 1 + logging print category 1 + logging timestamp 1 + logging print file basename + logging level set-all notice +! +line vty + no login +! +cpu-sched + policy rr 18 +trx + bind-ip $DOCKER_IN_IP + remote-ip $BTS_IP + ! 28 dB offset below is valid only for the B2xx in 1800 MHz band, see + ! https://osmocom.org/issues/4468 for more details + rssi-offset 28.000000 + tx-sps 4 + rx-sps 4 + dev-args type=b200 + clock-ref internal + egprs enable + ext-rach disable + multi-arfcn enable + chan 0 diff --git a/systemd/Dockerfile b/systemd/Dockerfile new file mode 100644 index 00000000..8f1763de --- /dev/null +++ b/systemd/Dockerfile @@ -0,0 +1,41 @@ +ARG REGISTRY=docker.io +ARG UPSTREAM_DISTRO=centos:centos8 +FROM ${REGISTRY}/${UPSTREAM_DISTRO} +# Arguments used after FROM must be specified again +ARG DISTRO + +MAINTAINER Pau Espin Pedrol + +# set up systemd +# container=docker: systemd likes to know it is running inside a container +ENV container docker +RUN case "$DISTRO" in \ + debian*) \ + apt-get update && \ + apt-get install -y --no-install-recommends systemd; \ + (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do test "$i" = "systemd-tmpfiles-setup.service" || rm -f $i; done); \ + rm -f /lib/systemd/system/multi-user.target.wants/*; \ + rm -f /etc/systemd/system/*.wants/*; \ + rm -f /lib/systemd/system/local-fs.target.wants/*; \ + rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ + rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ + rm -f /lib/systemd/system/basic.target.wants/*; \ + rm -f /lib/systemd/system/anaconda.target.wants/*; \ + ;; \ + centos*) \ + yum -y install systemd; yum clean all; \ + (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do test "$i" = "systemd-tmpfiles-setup.service" || rm -f $i; done); \ + rm -f /lib/systemd/system/multi-user.target.wants/*; \ + rm -f /etc/systemd/system/*.wants/*; \ + rm -f /lib/systemd/system/local-fs.target.wants/*; \ + rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ + rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ + rm -f /lib/systemd/system/basic.target.wants/*; \ + rm -f /lib/systemd/system/anaconda.target.wants/*; \ + ;; \ + esac +VOLUME [ "/sys/fs/cgroup" ] + +#RUN systemctl enable osmo-bsc osmo-bts-trx osmo-mgw osmo-pcu + +CMD ["/lib/systemd/systemd", "--system", "--unit=multi-user.target"] diff --git a/systemd/Makefile b/systemd/Makefile new file mode 100644 index 00000000..80b10696 --- /dev/null +++ b/systemd/Makefile @@ -0,0 +1,2 @@ +RUN_ARGS?=--sysctl net.ipv6.conf.all.disable_ipv6=0 --rm --network sigtran --ip 172.18.25.200 -v bsc-vol:/data +include ../make/Makefile