ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/routing/mrd6/patches/002-missing_netlink_defs.patch b/external/routing/mrd6/patches/002-missing_netlink_defs.patch
new file mode 100644
index 0000000..678dd35
--- /dev/null
+++ b/external/routing/mrd6/patches/002-missing_netlink_defs.patch
@@ -0,0 +1,54 @@
+--- /dev/null
++++ b/include/mrdpriv/linux/netlink_missing_defs.h
+@@ -0,0 +1,41 @@
++#include <linux/version.h>
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
++
++#include <linux/if_link.h>
++#include <linux/if_addr.h>
++#include <linux/neighbour.h>
++
++#ifndef IFA_RTA
++#define IFA_RTA(r) \
++       ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
++#endif
++#ifndef IFA_PAYLOAD
++#define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg))
++#endif
++
++#ifndef IFLA_RTA
++#define IFLA_RTA(r) \
++       ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
++#endif
++#ifndef IFLA_PAYLOAD
++#define IFLA_PAYLOAD(n)        NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
++#endif
++
++#ifndef NDA_RTA
++#define NDA_RTA(r) \
++       ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndmsg))))
++#endif
++#ifndef NDA_PAYLOAD
++#define NDA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ndmsg))
++#endif
++
++#ifndef NDTA_RTA
++#define NDTA_RTA(r) \
++       ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndtmsg))))
++#endif
++#ifndef NDTA_PAYLOAD
++#define NDTA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ndtmsg))
++#endif
++
++#endif
+--- a/src/linux/linux_unicast_route.cpp
++++ b/src/linux/linux_unicast_route.cpp
+@@ -23,6 +23,7 @@
+  */
+ 
+ #include <mrdpriv/linux/unicast_route.h>
++#include <mrdpriv/linux/netlink_missing_defs.h>
+ 
+ #include <mrd/mrd.h>
+ #include <mrd/interface.h>
diff --git a/external/routing/mrd6/patches/101-Accept-default-routes-without-RTA_DST.patch b/external/routing/mrd6/patches/101-Accept-default-routes-without-RTA_DST.patch
new file mode 100644
index 0000000..780a9b1
--- /dev/null
+++ b/external/routing/mrd6/patches/101-Accept-default-routes-without-RTA_DST.patch
@@ -0,0 +1,29 @@
+From b70c7d519ddd178b76d89bca7d3fe1fd186af862 Mon Sep 17 00:00:00 2001
+From: Oryon <pierre@darou.fr>
+Date: Tue, 11 Mar 2014 12:12:07 +0100
+Subject: [PATCH 1/2] Accept default routes without RTA_DST
+
+---
+ src/linux/linux_unicast_route.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/src/linux/linux_unicast_route.cpp
++++ b/src/linux/linux_unicast_route.cpp
+@@ -335,7 +335,7 @@ void linux_unicast_router::handle_route_
+ 	netlink_msg::parse_rtatable(tb, RTA_MAX, RTM_RTA(NLMSG_DATA(hdr)),
+ 				hdr->nlmsg_len - NLMSG_LENGTH(sizeof(rtmsg)));
+ 
+-	if (tb[RTA_DST]) {
++	//if (tb[RTA_DST]) { /* Accept default routes */
+ 		lookup_result res;
+ 
+ 		parse_prefix_rec(tb, msg->r.rtm_dst_len,
+@@ -361,7 +361,7 @@ void linux_unicast_router::handle_route_
+ 		}
+ 
+ 		prefix_changed(isnew, res);
+-	}
++	//}
+ }
+ 
+ void linux_unicast_router::handle_intf_event(bool isnew, nlmsghdr *hdr) {
diff --git a/external/routing/mrd6/patches/102-Metric-should-be-more-important-than-distance.patch b/external/routing/mrd6/patches/102-Metric-should-be-more-important-than-distance.patch
new file mode 100644
index 0000000..ebf843d
--- /dev/null
+++ b/external/routing/mrd6/patches/102-Metric-should-be-more-important-than-distance.patch
@@ -0,0 +1,33 @@
+From 46093914a5f95f50c9aef088b7172d6774d204cb Mon Sep 17 00:00:00 2001
+From: Oryon <pierre@darou.fr>
+Date: Tue, 11 Mar 2014 16:03:58 +0100
+Subject: [PATCH 2/2] Metric should be more important than distance at lookup
+
+---
+ src/mrib.cpp | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/src/mrib.cpp
++++ b/src/mrib.cpp
+@@ -327,16 +327,16 @@ mrib_def::mrib_node *mrib_def::prefix_lo
+ void mrib_def::insert_prefix_in_node(mrib_node *n, prefix *p) {
+ 	prefix *curr = n->head, *prev = 0;
+ 
+-	/* first check the proper place based on distance */
+-	while (curr && curr->distance < p->distance) {
++	/* first check the proper place based on metric */
++	while (curr && curr->metric < p->metric) {
+ 		prev = curr;
+ 		curr = curr->next;
+ 	}
+ 
+-	if (prev && prev->distance == p->distance) {
+-		/* if distance matches, take metric into place */
++	if (prev && prev->metric == p->metric) {
++		/* if metric matches, take distance into place */
+ 		curr = prev;
+-		while (curr && curr->metric <= p->metric) {
++		while (curr && curr->distance <= p->distance) {
+ 			prev = curr;
+ 			curr = curr->next;
+ 		}
diff --git a/external/routing/mrd6/patches/103-Make-build-reproducible.patch b/external/routing/mrd6/patches/103-Make-build-reproducible.patch
new file mode 100644
index 0000000..e0a32e6
--- /dev/null
+++ b/external/routing/mrd6/patches/103-Make-build-reproducible.patch
@@ -0,0 +1,45 @@
+From deb013d93c3ce78891386637d6b3300289130df6 Mon Sep 17 00:00:00 2001
+From: Thomas Preud'homme <robotux@celest.fr>
+Date: Sun, 7 Aug 2016 22:28:50 +0100
+Subject: Make build reproducible
+
+Remove build date from the binary so that two builds on different dates
+are binary identical.
+
+Origin: upstream, https://github.com/hugosantos/mrd6/commit/14f27d5528a3e4c8e5369bdee0e35961a2491661
+Forwarded: https://github.com/hugosantos/mrd6/pull/30
+Last-Update: 2016-08-09
+Applied-Upstream: commit: 14f27d5528a3e4c8e5369bdee0e35961a2491661
+---
+ src/Makefile | 1 -
+ src/mrd.cpp  | 2 --
+ 2 files changed, 3 deletions(-)
+
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -185,7 +185,6 @@ endif
+ $(MRD_VERSION_CPP): $(SOURCES) Makefile Makefile.options
+ 	@set -e; mkdir -p $(dir $@); \
+ 		echo '/* This file is automatically generated */' > $(MRD_VERSION_CPP); \
+-		echo 'const char *BuildDate = "$(NOW)";' >> $(MRD_VERSION_CPP)
+ 
+ $(MODULES_CPP): Makefile Makefile.options
+ 	@set -e; mkdir -p $(dir $@); \
+--- a/src/mrd.cpp
++++ b/src/mrd.cpp
+@@ -75,7 +75,6 @@
+ 
+ mrd *g_mrd = 0;
+ 
+-extern const char *BuildDate;
+ static const char *VersionInfo = "mrd6 0.10.0";
+ 
+ static const char *defaultconffiles[] = {
+@@ -2335,7 +2334,6 @@ bool mrd::socket_regs(base_stream &out,
+ 
+ void mrd::show_base_info(base_stream &out) const {
+ 	out.xprintf("Version: %s\n", VersionInfo);
+-	out.xprintf("Build date: %s\n", BuildDate);
+ }
+ 
+ bool mrd::show_info(base_stream &out, const std::vector<std::string> &ctx) {