diff mbox

net: Use routing mark from skb in multicast forwarding routing lookups

Message ID 200910081619.44880.atis@mikrotik.com
State Rejected, archived
Delegated to: David Miller
Headers show

Commit Message

Atis Elsts Oct. 8, 2009, 1:19 p.m. UTC
On Wednesday 07 October 2009 23:56:27 David Miller wrote:
> 
> Ok submit just the else part and we'll have a look at it.
> 
Here is a try.

Use routing mark from skb in routing lookup in IPv4 and IPv6 multicast forwarding code.
Signed-off-by: Atis Elsts <atis@mikrotik.com>
---
 net/ipv4/ipmr.c  |    1 +
 net/ipv6/ip6mr.c |    1 +
 2 files changed, 2 insertions(+)

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

David Miller Oct. 13, 2009, 10:33 a.m. UTC | #1
From: Atis Elsts <atis@mikrotik.com>
Date: Thu, 8 Oct 2009 16:19:44 +0300

> On Wednesday 07 October 2009 23:56:27 David Miller wrote:
>> 
>> Ok submit just the else part and we'll have a look at it.
>> 
> Here is a try.
> 
> Use routing mark from skb in routing lookup in IPv4 and IPv6 multicast forwarding code.
> Signed-off-by: Atis Elsts <atis@mikrotik.com>

The more I think about the less this makes sense.

There is no way to setup these semantics of lower level
routes and satisfy every reasonable use case.

We'll need to provide another facility or suggest other
methods to control marking of encapsulated routes from
the socket level, sorry.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
index 630a56d..5522cf8 100644
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
@@ -1248,6 +1248,7 @@  static void ipmr_queue_xmit(struct sk_buff *skb, struct mfc_cache *c, int vifi)
 		encap = sizeof(struct iphdr);
 	} else {
 		struct flowi fl = { .oif = vif->link,
+				    .mark = skb->mark,
 				    .nl_u = { .ip4_u =
 					      { .daddr = iph->daddr,
 						.tos = RT_TOS(iph->tos) } },
diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
index 7161539..d98df54 100644
--- a/net/ipv6/ip6mr.c
+++ b/net/ipv6/ip6mr.c
@@ -1523,6 +1523,7 @@  static int ip6mr_forward2(struct sk_buff *skb, struct mfc6_cache *c, int vifi)
 
 	fl = (struct flowi) {
 		.oif = vif->link,
+		.mark = skb->mark,
 		.nl_u = { .ip6_u =
 				{ .daddr = ipv6h->daddr, }
 		}