From 20a7fa7bf33d47e8fbcbcb553d5bb8a542808fbf Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Mon, 30 Sep 2019 16:52:28 +0200 Subject: [PATCH 2/2] babeld: Add src_plen patch This patch is currently pending upstream. Babeld version (babeld -V) won't indicate the change! Signed-off-by: Adrian Schmutzler --- babeld/Makefile | 2 +- ...nments-which-break-v4mapped-encoding.patch | 71 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 babeld/patches/0001-Remove-src_plen-assignments-which-break-v4mapped-encoding.patch diff --git a/babeld/Makefile b/babeld/Makefile index 78fdf83..5a7b8cd 100644 --- a/babeld/Makefile +++ b/babeld/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=babeld PKG_VERSION:=1.9.1 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://www.irif.fr/~jch/software/files/ diff --git a/babeld/patches/0001-Remove-src_plen-assignments-which-break-v4mapped-encoding.patch b/babeld/patches/0001-Remove-src_plen-assignments-which-break-v4mapped-encoding.patch new file mode 100644 index 0000000..089e35f --- /dev/null +++ b/babeld/patches/0001-Remove-src_plen-assignments-which-break-v4mapped-encoding.patch @@ -0,0 +1,71 @@ +From 36121c1e67fb5a60a35fed0faa37297cd97c9ffc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabian=20Bl=C3=A4se?= +Date: Thu, 19 Sep 2019 01:16:46 +0200 +Subject: [PATCH] Remove src_plen assignments which break v4mapped encoding +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +These assignments were introduced in f8bce04, probably +to ensure that src_plen doesn't contain any leftovers from +earlier revisions when source specific wasn't done via sub-TLVs. + +This however breaks v4mapped encoding as a prefix length of 0 +for IPv4 routes is represented as src_plen = 96. This offset is +already added outside of the affected functions and therefore +gets overwritten by this assignment. + +Both functions contain an additional check if the message contains +ipv4 addresses, but as this check is only executed if the message has +a source-specific sub-TLV, the offset isn't added for non source-specific +routes. + +Because the offset is already added outside of the subtlv parsing +functions, this additional check is also removed, as it would otherwise +break IPv4 source specifics by adding the IPv4 offset two times. + +Signed-off-by: Fabian Bläse +--- + message.c | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/message.c b/message.c +index 0f6ca19d..78f9aa93 100644 +--- a/message.c ++++ b/message.c +@@ -137,8 +137,6 @@ parse_update_subtlv(struct interface *ifp, int metric, int ae, + } + } + +- *src_plen = 0; +- + while(i < alen) { + type = a[i]; + if(type == SUBTLV_PAD1) { +@@ -170,8 +168,6 @@ parse_update_subtlv(struct interface *ifp, int metric, int ae, + len - 1, src_prefix); + if(rc < 0) + goto fail; +- if(ae == 1) +- (*src_plen) += 96; + } else { + debugf("Received unknown%s Update sub-TLV %d.\n", + (type & 0x80) != 0 ? " mandatory" : "", type); +@@ -305,8 +301,6 @@ parse_request_subtlv(int ae, const unsigned char *a, int alen, + { + int type, len, i = 0; + +- *src_plen = 0; +- + while(i < alen) { + type = a[0]; + if(type == SUBTLV_PAD1) { +@@ -336,8 +330,6 @@ parse_request_subtlv(int ae, const unsigned char *a, int alen, + len - 1, src_prefix); + if(rc < 0) + goto fail; +- if(ae == 1) +- (*src_plen) += 96; + } else { + debugf("Received unknown%s Route Request sub-TLV %d.\n", + ((type & 0x80) != 0) ? " mandatory" : "", type); -- 2.25.1