794737dac2
fix compile error in drbd_req.c for improper usage of request queue API; fix warning in kernel/bpf/core.c for implicit declaration trace call for CFLAG -Werror-implicit-function-declaration remove patch change is_swiotlb_buffer in lib/swiotlb.c As change already in new kernel code base Story: 2004521 Task: 28260 Depends-On: https://review.openstack.org/625773/ Change-Id: I4a3af98b6efe6d31e66db39302f3af8c4ff19d2c Signed-off-by: Martin, Chen <haochuan.z.chen@intel.com>
59 lines
2.6 KiB
Diff
59 lines
2.6 KiB
Diff
From 049ff2fee2c00370ddc9c9bb598fe1e89aaced2d Mon Sep 17 00:00:00 2001
|
|
Message-Id: <049ff2fee2c00370ddc9c9bb598fe1e89aaced2d.1527544850.git.Jim.Somerville@windriver.com>
|
|
In-Reply-To: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com>
|
|
References: <b6ceef1c915827b50ce3f76da4dc47f3eb768b44.1527544850.git.Jim.Somerville@windriver.com>
|
|
From: Allain Legacy <allain.legacy@windriver.com>
|
|
Date: Fri, 29 Jan 2016 12:13:40 -0500
|
|
Subject: [PATCH 03/26] CGTS-3744: route: do not cache fib route info on local
|
|
routes with oif
|
|
|
|
For local routes that require a particular output interface we do not want to
|
|
cache the result. Caching the result causes incorrect behaviour when there are
|
|
multiple source addresses on the interface. The end result being that if the
|
|
intended recipient is waiting on that interface for the packet he won't receive
|
|
it because it will be delivered on the loopback interface and the IP_PKTINFO
|
|
ipi_ifindex will be set to the loopback interface as well.
|
|
|
|
This can be tested by running a program such as "dhcp_release" which attempts
|
|
to inject a packet on a particular interface so that it is received by another
|
|
program on the same board. The receiving process should see an IP_PKTINFO
|
|
ipi_ifndex value of the source interface (e.g., eth1) instead of the loopback
|
|
interface (e.g., lo). The packet will still appear on the loopback interface
|
|
in tcpdump but the important aspect is that the CMSG info is correct.
|
|
|
|
Sample dhcp_release command line:
|
|
|
|
dhcp_release eth1 192.168.204.222 02:11:33:22:44:66
|
|
|
|
Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
|
|
Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com>
|
|
---
|
|
net/ipv4/route.c | 11 +++++++++++
|
|
1 file changed, 11 insertions(+)
|
|
|
|
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
|
|
index f19aca2..5246096 100644
|
|
--- a/net/ipv4/route.c
|
|
+++ b/net/ipv4/route.c
|
|
@@ -2121,6 +2121,17 @@ static struct rtable *__mkroute_output(const struct fib_result *res,
|
|
*/
|
|
if (fi && res->prefixlen < 4)
|
|
fi = NULL;
|
|
+ } else if ((type == RTN_LOCAL) && (orig_oif != 0)) {
|
|
+ /*
|
|
+ * For local routes that require a particular output interface we do
|
|
+ * not want to cache the result. Caching the result causes incorrect
|
|
+ * behaviour when there are multiple source addresses on the interface.
|
|
+ * The end result being that if the intended recipient is waiting on
|
|
+ * that interface for the packet he won't receive it because it will be
|
|
+ * delivered on the loopback interface and the IP_PKTINFO ipi_ifindex
|
|
+ * will be set to the loopback interface as well.
|
|
+ */
|
|
+ fi = NULL;
|
|
}
|
|
|
|
fnhe = NULL;
|
|
--
|
|
1.8.3.1
|
|
|