[201811] [radvd] Build radvd from source; Patch so as not to treat out-of-range MTU as an error (#2796)
This commit is contained in:
parent
543aec6a18
commit
d210f86b24
3
.gitignore
vendored
3
.gitignore
vendored
@ -33,6 +33,9 @@ src/python-click/*
|
|||||||
!src/python-click/Makefile
|
!src/python-click/Makefile
|
||||||
src/python3/*
|
src/python3/*
|
||||||
!src/python3/Makefile
|
!src/python3/Makefile
|
||||||
|
src/radvd/*
|
||||||
|
!src/radvd/Makefile
|
||||||
|
!src/radvd/patch/
|
||||||
src/redis/*
|
src/redis/*
|
||||||
!src/redis/Makefile
|
!src/redis/Makefile
|
||||||
src/snmpd/*
|
src/snmpd/*
|
||||||
|
@ -9,9 +9,6 @@ ENV DEBIAN_FRONTEND=noninteractive
|
|||||||
# Update apt's cache of available packages
|
# Update apt's cache of available packages
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
|
|
||||||
# Install radvd Debian package
|
|
||||||
RUN apt-get -y install radvd
|
|
||||||
|
|
||||||
{% if docker_router_advertiser_debs.strip() -%}
|
{% if docker_router_advertiser_debs.strip() -%}
|
||||||
# Copy built Debian packages
|
# Copy built Debian packages
|
||||||
{%- for deb in docker_router_advertiser_debs.split(' ') %}
|
{%- for deb in docker_router_advertiser_debs.split(' ') %}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
DOCKER_ROUTER_ADVERTISER = docker-router-advertiser.gz
|
DOCKER_ROUTER_ADVERTISER = docker-router-advertiser.gz
|
||||||
$(DOCKER_ROUTER_ADVERTISER)_PATH = $(DOCKERS_PATH)/docker-router-advertiser
|
$(DOCKER_ROUTER_ADVERTISER)_PATH = $(DOCKERS_PATH)/docker-router-advertiser
|
||||||
$(DOCKER_ROUTER_ADVERTISER)_DEPENDS += $(REDIS_TOOLS)
|
$(DOCKER_ROUTER_ADVERTISER)_DEPENDS += $(RADVD) $(REDIS_TOOLS)
|
||||||
$(DOCKER_ROUTER_ADVERTISER)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE)
|
$(DOCKER_ROUTER_ADVERTISER)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE)
|
||||||
SONIC_DOCKER_IMAGES += $(DOCKER_ROUTER_ADVERTISER)
|
SONIC_DOCKER_IMAGES += $(DOCKER_ROUTER_ADVERTISER)
|
||||||
SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_ROUTER_ADVERTISER)
|
SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_ROUTER_ADVERTISER)
|
||||||
|
9
rules/radvd.mk
Normal file
9
rules/radvd.mk
Normal file
@ -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)
|
30
src/radvd/Makefile
Normal file
30
src/radvd/Makefile
Normal file
@ -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 <tag_name>" 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)/
|
@ -0,0 +1,33 @@
|
|||||||
|
From e5af09b187bcce4e48ea3f1f71b81329e2d91ea4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Joe LeVeque <jolevequ@microsoft.com>
|
||||||
|
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
|
||||||
|
|
2
src/radvd/patch/series
Normal file
2
src/radvd/patch/series
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# This series applies on GIT commit 3ab9ce1f298cec3600fdad0a4000c1b1351562fd
|
||||||
|
0001-Don-t-treat-out-of-range-MTU-as-an-error.patch
|
Reference in New Issue
Block a user