From 9f1ab992654a261f8be05cda19b7d527bac8c2eb Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 9 Aug 2022 08:07:52 +0000 Subject: [PATCH] Support basic IPv6 --- supervisor/const.py | 1 + supervisor/docker/network.py | 20 ++++++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/supervisor/const.py b/supervisor/const.py index f504a702b..c618ce69e 100644 --- a/supervisor/const.py +++ b/supervisor/const.py @@ -38,6 +38,7 @@ SYSTEMD_JOURNAL_VOLATILE = Path("/run/log/journal") DOCKER_NETWORK = "hassio" DOCKER_NETWORK_MASK = ip_network("172.30.32.0/23") DOCKER_NETWORK_RANGE = ip_network("172.30.33.0/24") +DOCKER_NETWORK_LINK_LOCAL = ip_network("fd00:172:30:32::/64") # This needs to match the dockerd --cpu-rt-runtime= argument. DOCKER_CPU_RUNTIME_TOTAL = 950_000 diff --git a/supervisor/docker/network.py b/supervisor/docker/network.py index 7b6179bbd..39367dd95 100644 --- a/supervisor/docker/network.py +++ b/supervisor/docker/network.py @@ -7,7 +7,12 @@ from typing import Optional import docker import requests -from ..const import DOCKER_NETWORK, DOCKER_NETWORK_MASK, DOCKER_NETWORK_RANGE +from ..const import ( + DOCKER_NETWORK, + DOCKER_NETWORK_LINK_LOCAL, + DOCKER_NETWORK_MASK, + DOCKER_NETWORK_RANGE, +) from ..exceptions import DockerError _LOGGER: logging.Logger = logging.getLogger(__name__) @@ -80,19 +85,26 @@ class DockerNetwork: except docker.errors.NotFound: _LOGGER.info("Can't find Supervisor network, creating a new network") - ipam_pool = docker.types.IPAMPool( + # IP configuration + ipam_pool_v4 = docker.types.IPAMPool( subnet=str(DOCKER_NETWORK_MASK), gateway=str(self.gateway), iprange=str(DOCKER_NETWORK_RANGE), ) + ipam_pool_v6 = docker.types.IPAMPool( + subnet=str(DOCKER_NETWORK_LINK_LOCAL), + gateway=str(self.gateway), + iprange=str(DOCKER_NETWORK_LINK_LOCAL), + ) - ipam_config = docker.types.IPAMConfig(pool_configs=[ipam_pool]) + ipam_config = docker.types.IPAMConfig(pool_configs=[ipam_pool_v4, ipam_pool_v6]) + # Create Network return self.docker.networks.create( DOCKER_NETWORK, driver="bridge", ipam=ipam_config, - enable_ipv6=False, + enable_ipv6=True, options={"com.docker.network.bridge.name": DOCKER_NETWORK}, )