aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/xfrm4_policy.c
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2010-11-03 00:41:38 -0400
committerDavid S. Miller <davem@davemloft.net>2010-11-15 13:44:04 -0500
commitcc9ff19da9bf76a2f70bcb80225a1c587c162e52 (patch)
tree181efcd617a42a48fa94c51cfe9dc0e77b3b5775 /net/ipv4/xfrm4_policy.c
parente1f2d8c2cc61d2b9472efe44e8a2b098336914b4 (diff)
xfrm: use gre key as flow upper protocol info
The GRE Key field is intended to be used for identifying an individual traffic flow within a tunnel. It is useful to be able to have XFRM policy selector matches to have different policies for different GRE tunnels. Signed-off-by: Timo Teräs <timo.teras@iki.fi> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/xfrm4_policy.c')
-rw-r--r--net/ipv4/xfrm4_policy.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c
index dd1fd8c473fc..4a8c5335770c 100644
--- a/net/ipv4/xfrm4_policy.c
+++ b/net/ipv4/xfrm4_policy.c
@@ -11,6 +11,7 @@
11#include <linux/err.h> 11#include <linux/err.h>
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/inetdevice.h> 13#include <linux/inetdevice.h>
14#include <linux/if_tunnel.h>
14#include <net/dst.h> 15#include <net/dst.h>
15#include <net/xfrm.h> 16#include <net/xfrm.h>
16#include <net/ip.h> 17#include <net/ip.h>
@@ -154,6 +155,20 @@ _decode_session4(struct sk_buff *skb, struct flowi *fl, int reverse)
154 fl->fl_ipsec_spi = htonl(ntohs(ipcomp_hdr[1])); 155 fl->fl_ipsec_spi = htonl(ntohs(ipcomp_hdr[1]));
155 } 156 }
156 break; 157 break;
158
159 case IPPROTO_GRE:
160 if (pskb_may_pull(skb, xprth + 12 - skb->data)) {
161 __be16 *greflags = (__be16 *)xprth;
162 __be32 *gre_hdr = (__be32 *)xprth;
163
164 if (greflags[0] & GRE_KEY) {
165 if (greflags[0] & GRE_CSUM)
166 gre_hdr++;
167 fl->fl_gre_key = gre_hdr[1];
168 }
169 }
170 break;
171
157 default: 172 default:
158 fl->fl_ipsec_spi = 0; 173 fl->fl_ipsec_spi = 0;
159 break; 174 break;