aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/xfrm.h
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2009-11-24 19:29:52 -0500
committerDavid S. Miller <davem@davemloft.net>2009-11-25 18:48:38 -0500
commit4447bb33f09444920a8f1d89e1540137429351b6 (patch)
tree0aeadd5f09b412380974d3155255ba8db27dd1ed /include/net/xfrm.h
parent4e242d1616781f9f1f0b01abf878700b259cd8b5 (diff)
xfrm: Store aalg in xfrm_state with a user specified truncation length
Adding a xfrm_state requires an authentication algorithm specified either as xfrm_algo or as xfrm_algo_auth with a specific truncation length. For compatibility, both attributes are dumped to userspace, and we also accept both attributes, but prefer the new syntax. If no truncation length is specified, or the authentication algorithm is specified using xfrm_algo, the truncation length from the algorithm description in the kernel is used. Signed-off-by: Martin Willi <martin@strongswan.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/xfrm.h')
-rw-r--r--include/net/xfrm.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index 93d184b91a8c..6d85861ab990 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -162,7 +162,7 @@ struct xfrm_state {
162 struct xfrm_lifetime_cfg lft; 162 struct xfrm_lifetime_cfg lft;
163 163
164 /* Data for transformer */ 164 /* Data for transformer */
165 struct xfrm_algo *aalg; 165 struct xfrm_algo_auth *aalg;
166 struct xfrm_algo *ealg; 166 struct xfrm_algo *ealg;
167 struct xfrm_algo *calg; 167 struct xfrm_algo *calg;
168 struct xfrm_algo_aead *aead; 168 struct xfrm_algo_aead *aead;
@@ -1532,12 +1532,22 @@ static inline int xfrm_alg_len(struct xfrm_algo *alg)
1532 return sizeof(*alg) + ((alg->alg_key_len + 7) / 8); 1532 return sizeof(*alg) + ((alg->alg_key_len + 7) / 8);
1533} 1533}
1534 1534
1535static inline int xfrm_alg_auth_len(struct xfrm_algo_auth *alg)
1536{
1537 return sizeof(*alg) + ((alg->alg_key_len + 7) / 8);
1538}
1539
1535#ifdef CONFIG_XFRM_MIGRATE 1540#ifdef CONFIG_XFRM_MIGRATE
1536static inline struct xfrm_algo *xfrm_algo_clone(struct xfrm_algo *orig) 1541static inline struct xfrm_algo *xfrm_algo_clone(struct xfrm_algo *orig)
1537{ 1542{
1538 return kmemdup(orig, xfrm_alg_len(orig), GFP_KERNEL); 1543 return kmemdup(orig, xfrm_alg_len(orig), GFP_KERNEL);
1539} 1544}
1540 1545
1546static inline struct xfrm_algo_auth *xfrm_algo_auth_clone(struct xfrm_algo_auth *orig)
1547{
1548 return kmemdup(orig, xfrm_alg_auth_len(orig), GFP_KERNEL);
1549}
1550
1541static inline void xfrm_states_put(struct xfrm_state **states, int n) 1551static inline void xfrm_states_put(struct xfrm_state **states, int n)
1542{ 1552{
1543 int i; 1553 int i;