services:
    mysql:
        container_name: "rfsim5g-mysql"
        image: mysql:8.0
        init: true
        volumes:
            - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
            - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
        environment:
            - TZ=Europe/Paris
            - MYSQL_DATABASE=oai_db
            - MYSQL_USER=test
            - MYSQL_PASSWORD=test
            - MYSQL_ROOT_PASSWORD=linux
        healthcheck:
            test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
            interval: 10s
            timeout: 5s
            start_period: 10s
            start_interval: 500ms
            retries: 30
        networks:
            public_net:
                ipv4_address: 192.168.71.131
    oai-amf:
        container_name: "rfsim5g-oai-amf"
        image: oaisoftwarealliance/oai-amf:v2.1.10
        environment:
            - TZ=Europe/paris
        volumes:
            - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-amf/etc/config.yaml
        depends_on:
            - mysql
        networks:
            public_net:
                ipv4_address: 192.168.71.132
    oai-smf:
        container_name: "rfsim5g-oai-smf"
        image: oaisoftwarealliance/oai-smf:v2.1.10
        environment:
            - TZ=Europe/Paris
        volumes:
            - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-smf/etc/config.yaml
        depends_on:
            - oai-amf
        networks:
            public_net:
                ipv4_address: 192.168.71.133
    oai-upf:
        container_name: "rfsim5g-oai-upf"
        image: oaisoftwarealliance/oai-upf:v2.1.10
        init: true
        environment:
            - TZ=Europe/Paris
        volumes:
            - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-upf/etc/config.yaml
        depends_on:
            - oai-smf
        cap_add:
            - NET_ADMIN
            - SYS_ADMIN
        cap_drop:
            - ALL
        privileged: true
        networks:
            public_net:
                ipv4_address: 192.168.71.134
                interface_name: eth0
            traffic_net:
                ipv4_address: 192.168.72.134
                interface_name: eth1
    oai-ext-dn:
        privileged: true
        container_name: rfsim5g-oai-ext-dn
        image: oaisoftwarealliance/trf-gen-cn5g:latest
        init: true
        entrypoint: /bin/bash -c \
              "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
              "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
        depends_on:
            - oai-upf
        networks:
            traffic_net:
                ipv4_address: 192.168.72.135
        healthcheck:
            test: /bin/bash -c "ping -c 2 192.168.72.134"
            interval: 10s
            timeout: 5s
            retries: 5
            start_period: 10s
            start_interval: 500ms
    oai-gnb:
        image: ${REGISTRY-oaisoftwarealliance/}${GNB_IMG:-oai-gnb}:${TAG:-develop}
        container_name: rfsim5g-oai-gnb
        cap_drop:
            - ALL
        environment:
            USE_ADDITIONAL_OPTIONS: -E --log_config.global_log_options level,nocolor,time --device.name vrtsim --vrtsim.role server --vrtsim.chanmod 1
        depends_on:
            - oai-ext-dn
        networks:
            public_net:
                ipv4_address: 192.168.71.140
        volumes:
            - ../../conf_files/gnb.sa.band78.106prb.vrtsim.2x2.yaml:/opt/oai-gnb/etc/gnb.yaml
            - tmp_data:/tmp/
        healthcheck:
            test: /bin/bash -c "pgrep nr-softmodem"
            interval: 10s
            timeout: 5s
            start_period: 10s
            start_interval: 500ms
            retries: 5
        ipc: host
    oai-nr-ue:
        image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
        container_name: rfsim5g-oai-nr-ue
        cap_drop:
            - ALL
        cap_add:
            - NET_ADMIN  # for interface bringup
            - NET_RAW    # for ping
        environment:
            USE_ADDITIONAL_OPTIONS: -E -r 106 --numerology 1 --band 78 -C 3619200000 --ssb 516 --uicc0.imsi 208990100001100 --log_config.global_log_options level,nocolor,time --device.name vrtsim
        depends_on:
            - oai-gnb
        networks:
            public_net:
                ipv4_address: 192.168.71.150
        devices:
             - /dev/net/tun:/dev/net/tun
        volumes:
            - ../../conf_files/nrue.vrtsim.chanmod.yaml:/opt/oai-nr-ue/etc/nr-ue.yaml
            - tmp_data:/tmp/
        healthcheck:
            test: /bin/bash -c "pgrep nr-uesoftmodem"
            interval: 10s
            timeout: 5s
            retries: 5
            start_period: 10s
            start_interval: 500ms
        ipc: host

networks:
    public_net:
        driver: bridge
        name: rfsim5g-oai-public-net
        ipam:
            config:
                - subnet: 192.168.71.128/26
        driver_opts:
            com.docker.network.bridge.name: "rfsim5g-public"
    traffic_net:
        driver: bridge
        name: rfsim5g-oai-traffic-net
        ipam:
            config:
                - subnet: 192.168.72.128/26
        driver_opts:
            com.docker.network.bridge.name: "rfsim5g-traffic"

volumes:
    tmp_data:
