mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
[XFRM]: BEET mode
This patch introduces the BEET mode (Bound End-to-End Tunnel) with as specified by the ietf draft at the following link: http://www.ietf.org/internet-drafts/draft-nikander-esp-beet-mode-06.txt The patch provides only single family support (i.e. inner family = outer family). Signed-off-by: Diego Beltrami <diego.beltrami@gmail.com> Signed-off-by: Miika Komu <miika@iki.fi> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Abhinav Pathak <abhinav.pathak@hiit.fi> Signed-off-by: Jeff Ahrenholz <ahrenholz@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
80246ab36e
commit
0a69452cb4
14 changed files with 308 additions and 10 deletions
|
@ -253,7 +253,8 @@ static int esp_input(struct xfrm_state *x, struct sk_buff *skb)
|
|||
* as per draft-ietf-ipsec-udp-encaps-06,
|
||||
* section 3.1.2
|
||||
*/
|
||||
if (x->props.mode == XFRM_MODE_TRANSPORT)
|
||||
if (x->props.mode == XFRM_MODE_TRANSPORT ||
|
||||
x->props.mode == XFRM_MODE_BEET)
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
}
|
||||
|
||||
|
@ -271,17 +272,28 @@ static u32 esp4_get_max_size(struct xfrm_state *x, int mtu)
|
|||
{
|
||||
struct esp_data *esp = x->data;
|
||||
u32 blksize = ALIGN(crypto_blkcipher_blocksize(esp->conf.tfm), 4);
|
||||
int enclen = 0;
|
||||
|
||||
if (x->props.mode == XFRM_MODE_TUNNEL) {
|
||||
mtu = ALIGN(mtu + 2, blksize);
|
||||
} else {
|
||||
/* The worst case. */
|
||||
switch (x->props.mode) {
|
||||
case XFRM_MODE_TUNNEL:
|
||||
mtu = ALIGN(mtu +2, blksize);
|
||||
break;
|
||||
default:
|
||||
case XFRM_MODE_TRANSPORT:
|
||||
/* The worst case */
|
||||
mtu = ALIGN(mtu + 2, 4) + blksize - 4;
|
||||
break;
|
||||
case XFRM_MODE_BEET:
|
||||
/* The worst case. */
|
||||
enclen = IPV4_BEET_PHMAXLEN;
|
||||
mtu = ALIGN(mtu + enclen + 2, blksize);
|
||||
break;
|
||||
}
|
||||
|
||||
if (esp->conf.padlen)
|
||||
mtu = ALIGN(mtu, esp->conf.padlen);
|
||||
|
||||
return mtu + x->props.header_len + esp->auth.icv_trunc_len;
|
||||
return mtu + x->props.header_len + esp->auth.icv_trunc_len - enclen;
|
||||
}
|
||||
|
||||
static void esp4_err(struct sk_buff *skb, u32 info)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue