diff options
author | Timo Teräs <timo.teras@iki.fi> | 2010-11-03 00:41:38 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-11-15 13:44:04 -0500 |
commit | cc9ff19da9bf76a2f70bcb80225a1c587c162e52 (patch) | |
tree | 181efcd617a42a48fa94c51cfe9dc0e77b3b5775 /include | |
parent | e1f2d8c2cc61d2b9472efe44e8a2b098336914b4 (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 'include')
-rw-r--r-- | include/net/flow.h | 2 | ||||
-rw-r--r-- | include/net/xfrm.h | 6 |
2 files changed, 8 insertions, 0 deletions
diff --git a/include/net/flow.h b/include/net/flow.h index 0ac3fb5e0973..7196e6864b8d 100644 --- a/include/net/flow.h +++ b/include/net/flow.h | |||
@@ -67,6 +67,7 @@ struct flowi { | |||
67 | } dnports; | 67 | } dnports; |
68 | 68 | ||
69 | __be32 spi; | 69 | __be32 spi; |
70 | __be32 gre_key; | ||
70 | 71 | ||
71 | struct { | 72 | struct { |
72 | __u8 type; | 73 | __u8 type; |
@@ -78,6 +79,7 @@ struct flowi { | |||
78 | #define fl_icmp_code uli_u.icmpt.code | 79 | #define fl_icmp_code uli_u.icmpt.code |
79 | #define fl_ipsec_spi uli_u.spi | 80 | #define fl_ipsec_spi uli_u.spi |
80 | #define fl_mh_type uli_u.mht.type | 81 | #define fl_mh_type uli_u.mht.type |
82 | #define fl_gre_key uli_u.gre_key | ||
81 | __u32 secid; /* used by xfrm; see secid.txt */ | 83 | __u32 secid; /* used by xfrm; see secid.txt */ |
82 | } __attribute__((__aligned__(BITS_PER_LONG/8))); | 84 | } __attribute__((__aligned__(BITS_PER_LONG/8))); |
83 | 85 | ||
diff --git a/include/net/xfrm.h b/include/net/xfrm.h index bcfb6b24b019..54b283229488 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h | |||
@@ -805,6 +805,9 @@ __be16 xfrm_flowi_sport(struct flowi *fl) | |||
805 | case IPPROTO_MH: | 805 | case IPPROTO_MH: |
806 | port = htons(fl->fl_mh_type); | 806 | port = htons(fl->fl_mh_type); |
807 | break; | 807 | break; |
808 | case IPPROTO_GRE: | ||
809 | port = htonl(fl->fl_gre_key) >> 16; | ||
810 | break; | ||
808 | default: | 811 | default: |
809 | port = 0; /*XXX*/ | 812 | port = 0; /*XXX*/ |
810 | } | 813 | } |
@@ -826,6 +829,9 @@ __be16 xfrm_flowi_dport(struct flowi *fl) | |||
826 | case IPPROTO_ICMPV6: | 829 | case IPPROTO_ICMPV6: |
827 | port = htons(fl->fl_icmp_code); | 830 | port = htons(fl->fl_icmp_code); |
828 | break; | 831 | break; |
832 | case IPPROTO_GRE: | ||
833 | port = htonl(fl->fl_gre_key) & 0xffff; | ||
834 | break; | ||
829 | default: | 835 | default: |
830 | port = 0; /*XXX*/ | 836 | port = 0; /*XXX*/ |
831 | } | 837 | } |