From e676d47d6ce2c203b72dbb4e9b86f011362decba Mon Sep 17 00:00:00 2001
From: Jan David Mol <mol@astron.nl>
Date: Tue, 22 Jun 2021 17:28:03 +0000
Subject: [PATCH] Use an additional MTU=9000 network to receive UDP through,
 because our data packets are >1500. The new network needs a name
 alphabetically before NETWORK_MODE to force Docker to use that to expose our
 ports on.

---
 docker-compose/Makefile              |  4 +++-
 docker-compose/archiver.yml          | 12 ++++++++----
 docker-compose/astor.yml             |  6 ++++--
 docker-compose/device-pcc.yml        |  3 ++-
 docker-compose/device-sdp.yml        |  3 ++-
 docker-compose/device-statistics.yml |  4 +++-
 docker-compose/elk.yml               |  6 ++++--
 docker-compose/hdbpp_viewer.yml      |  3 ++-
 docker-compose/itango.yml            |  3 ++-
 docker-compose/jupyter.yml           |  3 ++-
 docker-compose/lofar-device-base.yml |  3 ++-
 docker-compose/logviewer.yml         |  3 ++-
 docker-compose/networks.yml          | 24 ++++++++++++++++++++++++
 docker-compose/pogo.yml              |  3 ++-
 docker-compose/pypcc-sim.yml         |  3 ++-
 docker-compose/rest.yml              |  3 ++-
 docker-compose/sdptr-sim.yml         |  3 ++-
 docker-compose/tango.yml             |  6 ++++--
 docker-compose/tangotest.yml         |  3 ++-
 19 files changed, 74 insertions(+), 24 deletions(-)
 create mode 100644 docker-compose/networks.yml

diff --git a/docker-compose/Makefile b/docker-compose/Makefile
index 87101b3e3..e63814ef5 100644
--- a/docker-compose/Makefile
+++ b/docker-compose/Makefile
@@ -124,13 +124,15 @@ down:  ## stop all services and tear down the system
 	$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) down
 ifneq ($(NETWORK_MODE),host)
 	docker network inspect $(NETWORK_MODE) &> /dev/null && ([ $$? -eq 0 ] && docker network rm $(NETWORK_MODE)) || true
+    docker network inspect 9000-$(NETWORK_MODE) &> /dev/null && ([ $$? -eq 0 ] && docker network rm 9000-$(NETWORK_MODE)) || true
 endif
 
 minimal: ## start the base TANGO system
 ifneq ($(NETWORK_MODE),host)
 	docker network inspect $(NETWORK_MODE) &> /dev/null || ([ $$? -ne 0 ] && docker network create $(NETWORK_MODE))
+    docker network inspect 9000-$(NETWORK_MODE) &> /dev/null || ([ $$? -ne 0 ] && docker network create 9000-$(NETWORK_MODE) -o com.docker.network.driver.mtu=9000)
 endif
-	$(DOCKER_COMPOSE_ARGS) docker-compose -f tango.yml up -d
+	$(DOCKER_COMPOSE_ARGS) docker-compose -f tango.yml -f networks.yml up -d
 
 start: up ## start a service (usage: make start <servicename>)
 	if [ $(UNAME_S) = Linux ]; then chmod a+r ~/.Xauthority; fi
diff --git a/docker-compose/archiver.yml b/docker-compose/archiver.yml
index 7aa1c1336..08d90a113 100644
--- a/docker-compose/archiver.yml
+++ b/docker-compose/archiver.yml
@@ -4,7 +4,8 @@ services:
   archiver-maria-db:
     image: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/mariadb_hdbpp:2021-05-28
     container_name: archiver-maria-db
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     depends_on:
       - databaseds
     environment:
@@ -18,7 +19,8 @@ services:
 
   hdbpp-es:
       image: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-archiver:2021-05-28
-      network_mode: ${NETWORK_MODE}
+      networks:
+      - control
       container_name: hdbpp-es
       depends_on:
         - databaseds
@@ -35,7 +37,8 @@ services:
 
   hdbpp-cm:
       image: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-archiver:2021-05-28
-      network_mode: ${NETWORK_MODE}
+      networks:
+      - control
       container_name: hdbpp-cm
       depends_on:
         - databaseds
@@ -53,7 +56,8 @@ services:
   dsconfig:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-dsconfig:1.5.0.6
     container_name: dsconfig
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     depends_on:
       - databaseds
     environment:
diff --git a/docker-compose/astor.yml b/docker-compose/astor.yml
index 747a39c5f..1d86575d4 100644
--- a/docker-compose/astor.yml
+++ b/docker-compose/astor.yml
@@ -15,7 +15,8 @@ services:
   astor:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-java:9.3.3.2
     container_name: ${CONTAINER_NAME_PREFIX}astor
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
       - ${XAUTHORITY_MOUNT}
     environment:
@@ -33,7 +34,8 @@ services:
   starter-example:
     image: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-starter:2021-05-28
     container_name: ${CONTAINER_NAME_PREFIX}starter-example
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     # set the hostname, otherwise duplicate device registrations result every
     # time the hostname changes as the container is restarted.
     hostname: starter-example
diff --git a/docker-compose/device-pcc.yml b/docker-compose/device-pcc.yml
index 47f2c9b22..5439161cd 100644
--- a/docker-compose/device-pcc.yml
+++ b/docker-compose/device-pcc.yml
@@ -22,7 +22,8 @@ services:
         args:
             SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-itango:9.3.3.7
     container_name: ${CONTAINER_NAME_PREFIX}device-pcc
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
         - ${TANGO_LOFAR_CONTAINER_MOUNT}
     environment:
diff --git a/docker-compose/device-sdp.yml b/docker-compose/device-sdp.yml
index 132886304..5a83a701f 100644
--- a/docker-compose/device-sdp.yml
+++ b/docker-compose/device-sdp.yml
@@ -22,7 +22,8 @@ services:
         args:
             SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-itango:9.3.3.7
     container_name: ${CONTAINER_NAME_PREFIX}device-sdp
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
         - ${TANGO_LOFAR_CONTAINER_MOUNT}
     environment:
diff --git a/docker-compose/device-statistics.yml b/docker-compose/device-statistics.yml
index c2d450dbd..c3b9d9ff4 100644
--- a/docker-compose/device-statistics.yml
+++ b/docker-compose/device-statistics.yml
@@ -22,7 +22,9 @@ services:
         args:
             SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-itango:9.3.3.7
     container_name: ${CONTAINER_NAME_PREFIX}device-statistics
-    network_mode: ${NETWORK_MODE}
+    networks:
+        - control
+        - data
     volumes:
         - ${TANGO_LOFAR_CONTAINER_MOUNT}
     environment:
diff --git a/docker-compose/elk.yml b/docker-compose/elk.yml
index 50060566f..cce66839b 100644
--- a/docker-compose/elk.yml
+++ b/docker-compose/elk.yml
@@ -17,7 +17,8 @@ services:
     build:
         context: elk-configure-host
     container_name: ${CONTAINER_NAME_PREFIX}elk-configure-host
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     privileged: true
 
   elk:
@@ -25,7 +26,8 @@ services:
     build:
         context: elk
     container_name: ${CONTAINER_NAME_PREFIX}elk
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
       - elk-data:/var/lib/elasticsearch
     ports:
diff --git a/docker-compose/hdbpp_viewer.yml b/docker-compose/hdbpp_viewer.yml
index c3d10c3ff..c7a54f7e6 100644
--- a/docker-compose/hdbpp_viewer.yml
+++ b/docker-compose/hdbpp_viewer.yml
@@ -12,7 +12,8 @@ services:
   hdbpp-viewer:
     image: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/hdbpp_viewer:2021-05-28
     container_name: ${CONTAINER_NAME_PREFIX}hdbpp-viewer
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     depends_on:
       - databaseds
       - dsconfig
diff --git a/docker-compose/itango.yml b/docker-compose/itango.yml
index 4af318480..cd5283f23 100644
--- a/docker-compose/itango.yml
+++ b/docker-compose/itango.yml
@@ -19,7 +19,8 @@ services:
         args:
             SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-itango:9.3.3.7
     container_name: ${CONTAINER_NAME_PREFIX}itango
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
         - ${TANGO_LOFAR_CONTAINER_MOUNT}
         - ${HOME}:/hosthome
diff --git a/docker-compose/jupyter.yml b/docker-compose/jupyter.yml
index 9c4c8053c..cbd2ab9ce 100644
--- a/docker-compose/jupyter.yml
+++ b/docker-compose/jupyter.yml
@@ -17,7 +17,8 @@ services:
             CONTAINER_EXECUTION_UID: ${CONTAINER_EXECUTION_UID}
             SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-itango:9.3.3.7
     container_name: ${CONTAINER_NAME_PREFIX}jupyter
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
         - ${TANGO_LOFAR_CONTAINER_MOUNT}
         - ${TANGO_LOFAR_LOCAL_DIR}/jupyter-notebooks:/jupyter-notebooks:rw
diff --git a/docker-compose/lofar-device-base.yml b/docker-compose/lofar-device-base.yml
index 18c8ef36b..2a2cdc4dd 100644
--- a/docker-compose/lofar-device-base.yml
+++ b/docker-compose/lofar-device-base.yml
@@ -20,4 +20,5 @@ services:
         args:
             SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-itango:9.3.3.7
     container_name: ${CONTAINER_NAME_PREFIX}lofar-device-base
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
diff --git a/docker-compose/logviewer.yml b/docker-compose/logviewer.yml
index 0959d8b94..cea364027 100644
--- a/docker-compose/logviewer.yml
+++ b/docker-compose/logviewer.yml
@@ -14,7 +14,8 @@ services:
   logviewer:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-java:9.3.3.2
     container_name: ${CONTAINER_NAME_PREFIX}logviewer
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
       - ${XAUTHORITY_MOUNT}
     environment:
diff --git a/docker-compose/networks.yml b/docker-compose/networks.yml
new file mode 100644
index 000000000..bdacc3005
--- /dev/null
+++ b/docker-compose/networks.yml
@@ -0,0 +1,24 @@
+#
+# Docker compose file that describes our docker networks.
+#
+version: '3.5'
+
+networks:
+
+  # Control network, with MTU=1500. Our default network.
+  control:
+    name: ${NETWORK_MODE}
+    # The networks are created and destroyed in the Makefile.
+    external: true
+
+  # Data network, with MTU=9000, to receive the Jumbo frames from SDP
+  data:
+    # This name needs to be alphabetically before the control network.
+    #
+    # As we add the data-receiving devices to both control and data
+    # network, we need to make sure the UDP data are forwarded to
+    # the data network, not the control network. The way Docker decides
+    # which network to actually expose ports on is by chosing the
+    # first one in alphabetical order.
+    name: 9000-${NETWORK_MODE}
+    external: true
diff --git a/docker-compose/pogo.yml b/docker-compose/pogo.yml
index 85bf0ef3d..6f87f640a 100644
--- a/docker-compose/pogo.yml
+++ b/docker-compose/pogo.yml
@@ -22,7 +22,8 @@ services:
   pogo:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-pogo:9.6.31.2
     container_name: ${CONTAINER_NAME_PREFIX}pogo
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
       - pogo:/home/tango
       - ${XAUTHORITY_MOUNT}
diff --git a/docker-compose/pypcc-sim.yml b/docker-compose/pypcc-sim.yml
index d1c47c046..15739d3f4 100644
--- a/docker-compose/pypcc-sim.yml
+++ b/docker-compose/pypcc-sim.yml
@@ -11,7 +11,8 @@ services:
     build:
         context: pypcc-sim
     container_name: ${CONTAINER_NAME_PREFIX}pypcc-sim
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     volumes:
         - ${HOME}:/hosthome
     ports:
diff --git a/docker-compose/rest.yml b/docker-compose/rest.yml
index 4019b9fdd..f5bfbd329 100644
--- a/docker-compose/rest.yml
+++ b/docker-compose/rest.yml
@@ -15,7 +15,8 @@ services:
   rest:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-rest:1.14.1.2
     container_name: ${CONTAINER_NAME_PREFIX}tango-rest
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     # set the hostname, otherwise duplicate device registrations result every
     # time the hostname changes as the container is restarted.
     hostname: tango-rest
diff --git a/docker-compose/sdptr-sim.yml b/docker-compose/sdptr-sim.yml
index 677433019..70c1edf63 100644
--- a/docker-compose/sdptr-sim.yml
+++ b/docker-compose/sdptr-sim.yml
@@ -11,7 +11,8 @@ services:
     build:
         context: sdptr-sim
     container_name: ${CONTAINER_NAME_PREFIX}sdptr-sim
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     ports:
         - "4840:4840"
     restart: on-failure
diff --git a/docker-compose/tango.yml b/docker-compose/tango.yml
index 2e2494ff9..0cde93b0c 100644
--- a/docker-compose/tango.yml
+++ b/docker-compose/tango.yml
@@ -17,7 +17,8 @@ services:
   tangodb:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-db:10.4.10
     container_name: ${CONTAINER_NAME_PREFIX}tangodb
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     environment:
       - MYSQL_ROOT_PASSWORD=secret
       - MYSQL_DATABASE=tango
@@ -32,7 +33,8 @@ services:
   databaseds:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-cpp:9.3.4.2
     container_name: ${CONTAINER_NAME_PREFIX}databaseds
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     ports:
       - "10000:10000"
     depends_on:
diff --git a/docker-compose/tangotest.yml b/docker-compose/tangotest.yml
index 707b1cb7c..30e057502 100644
--- a/docker-compose/tangotest.yml
+++ b/docker-compose/tangotest.yml
@@ -13,7 +13,8 @@ services:
   tangotest:
     image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-java:9.3.3.2
     container_name: ${CONTAINER_NAME_PREFIX}tangotest
-    network_mode: ${NETWORK_MODE}
+    networks:
+      - control
     environment:
       - TANGO_HOST=${TANGO_HOST}
     entrypoint:
-- 
GitLab