Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f40ac71 authored by Eric Leblond's avatar Eric Leblond Committed by Patrick McHardy
Browse files

netfilter: nfmark IPV6 routing in OUTPUT, mangle, NFQUEUE



This patch let nfmark to be evaluated for routing decision for OUTPUT
packet, in mangle table, when process paquet in NFQUEUE. This patch is
an IPv6 port of Laurent Licour IPv4 one.

Signed-off-by: default avatarEric Leblond <eric@inl.fr>
Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
parent 5f145e44
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -56,6 +56,7 @@ EXPORT_SYMBOL(ip6_route_me_harder);
struct ip6_rt_info {
struct ip6_rt_info {
	struct in6_addr daddr;
	struct in6_addr daddr;
	struct in6_addr saddr;
	struct in6_addr saddr;
	u_int32_t mark;
};
};


static void nf_ip6_saveroute(const struct sk_buff *skb,
static void nf_ip6_saveroute(const struct sk_buff *skb,
@@ -68,6 +69,7 @@ static void nf_ip6_saveroute(const struct sk_buff *skb,


		rt_info->daddr = iph->daddr;
		rt_info->daddr = iph->daddr;
		rt_info->saddr = iph->saddr;
		rt_info->saddr = iph->saddr;
		rt_info->mark = skb->mark;
	}
	}
}
}


@@ -79,7 +81,8 @@ static int nf_ip6_reroute(struct sk_buff *skb,
	if (entry->hook == NF_INET_LOCAL_OUT) {
	if (entry->hook == NF_INET_LOCAL_OUT) {
		struct ipv6hdr *iph = ipv6_hdr(skb);
		struct ipv6hdr *iph = ipv6_hdr(skb);
		if (!ipv6_addr_equal(&iph->daddr, &rt_info->daddr) ||
		if (!ipv6_addr_equal(&iph->daddr, &rt_info->daddr) ||
		    !ipv6_addr_equal(&iph->saddr, &rt_info->saddr))
		    !ipv6_addr_equal(&iph->saddr, &rt_info->saddr) ||
		    skb->mark != rt_info->mark)
			return ip6_route_me_harder(skb);
			return ip6_route_me_harder(skb);
	}
	}
	return 0;
	return 0;