diff --git a/.gitignore b/.gitignore index 74998573e49..922790873db 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,9 @@ src/mpdecimal/* !src/mpdecimal/Makefile src/python3/* !src/python3/Makefile +src/radvd/* +!src/radvd/Makefile +!src/radvd/patch/ src/redis/* !src/redis/Makefile src/snmpd/* diff --git a/dockers/docker-router-advertiser/Dockerfile.j2 b/dockers/docker-router-advertiser/Dockerfile.j2 index 5007daf122c..f9cf5f90b85 100644 --- a/dockers/docker-router-advertiser/Dockerfile.j2 +++ b/dockers/docker-router-advertiser/Dockerfile.j2 @@ -6,9 +6,6 @@ ENV DEBIAN_FRONTEND=noninteractive # Update apt's cache of available packages RUN apt-get update -# Install radvd Debian package -RUN apt-get -y install radvd - {% if docker_router_advertiser_debs.strip() -%} # Copy built Debian packages {%- for deb in docker_router_advertiser_debs.split(' ') %} diff --git a/rules/docker-router-advertiser.mk b/rules/docker-router-advertiser.mk index 129246d8fa2..33e805cf4c2 100644 --- a/rules/docker-router-advertiser.mk +++ b/rules/docker-router-advertiser.mk @@ -2,6 +2,7 @@ DOCKER_ROUTER_ADVERTISER = docker-router-advertiser.gz $(DOCKER_ROUTER_ADVERTISER)_PATH = $(DOCKERS_PATH)/docker-router-advertiser +$(DOCKER_ROUTER_ADVERTISER)_DEPENDS += $(RADVD) $(DOCKER_ROUTER_ADVERTISER)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE) SONIC_DOCKER_IMAGES += $(DOCKER_ROUTER_ADVERTISER) SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_ROUTER_ADVERTISER) diff --git a/rules/radvd.mk b/rules/radvd.mk new file mode 100644 index 00000000000..682f1d5e759 --- /dev/null +++ b/rules/radvd.mk @@ -0,0 +1,9 @@ +# radvd package + +RADVD_VERSION = 1.9.1-1.3 + +export RADVD_VERSION + +RADVD = radvd_$(RADVD_VERSION)_amd64.deb +$(RADVD)_SRC_PATH = $(SRC_PATH)/radvd +SONIC_MAKE_DEBS += $(RADVD) diff --git a/src/radvd/Makefile b/src/radvd/Makefile new file mode 100644 index 00000000000..9064a43c25c --- /dev/null +++ b/src/radvd/Makefile @@ -0,0 +1,30 @@ +.ONESHELL: +SHELL = /bin/bash +.SHELLFLAGS += -e + +MAIN_TARGET = radvd_$(RADVD_VERSION)_amd64.deb + +$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : + # Remove any stale files + rm -rf ./radvd + + # Clone radvd repo + git clone https://salsa.debian.org/debian/radvd.git + pushd ./radvd + + # Reset HEAD to the commit of the proper tag + # NOTE: Using "git checkout " here detaches our HEAD, + # which stg doesn't like, so we use this method instead + # NOTE: For some reason, tags in the Debian radvd repo are prefixed with "1%" + git reset --hard debian/1\%$(RADVD_VERSION) + + # Apply patches + stg init + stg import -s ../patch/series + + # Build source and Debian packages + dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) + popd + + # Move the newly-built .deb packages to the destination directory + mv $* $(DERIVED_TARGETS) $(DEST)/ diff --git a/src/radvd/patch/0001-Don-t-treat-out-of-range-MTU-as-an-error.patch b/src/radvd/patch/0001-Don-t-treat-out-of-range-MTU-as-an-error.patch new file mode 100644 index 00000000000..bb77d57814b --- /dev/null +++ b/src/radvd/patch/0001-Don-t-treat-out-of-range-MTU-as-an-error.patch @@ -0,0 +1,33 @@ +From e5af09b187bcce4e48ea3f1f71b81329e2d91ea4 Mon Sep 17 00:00:00 2001 +From: Joe LeVeque +Date: Tue, 12 Feb 2019 19:13:45 +0000 +Subject: [PATCH] Don't treat out-of-range MTU as an error + +--- + interface.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/interface.c b/interface.c +index d17267e..b59c6e8 100644 +--- a/interface.c ++++ b/interface.c +@@ -158,9 +158,14 @@ check_iface(struct Interface *iface) + ((iface->AdvLinkMTU < MIN_AdvLinkMTU) || + (iface->if_maxmtu != -1 && (iface->AdvLinkMTU > iface->if_maxmtu)))) + { +- flog(LOG_ERR, "AdvLinkMTU for %s (%u) must be zero or between %u and %u", ++ // FIXME: Temporary workaround for SONiC. Currently, when interfaces are added ++ // or removed from VLANs, the kernel sets the MTU size for the VLAN to the ++ // default value of 1500. Here, we prevent radvd from treating a larger value ++ // in its configuration as an error. Instead of logging an error and setting ++ // res to -1, we simply log a warning and continue on. Once the aforementioned ++ // behavior is addressed, this patch should be removed. ++ flog(LOG_WARNING, "AdvLinkMTU for %s (%u) must be zero or between %u and %u", + iface->Name, iface->AdvLinkMTU, MIN_AdvLinkMTU, iface->if_maxmtu); +- res = -1; + } + + if (iface->AdvReachableTime > MAX_AdvReachableTime) +-- +2.17.1 + diff --git a/src/radvd/patch/series b/src/radvd/patch/series new file mode 100644 index 00000000000..2892590bfcd --- /dev/null +++ b/src/radvd/patch/series @@ -0,0 +1,2 @@ +# This series applies on GIT commit 3ab9ce1f298cec3600fdad0a4000c1b1351562fd +0001-Don-t-treat-out-of-range-MTU-as-an-error.patch