Commit b439475a authored by Steffen Klassert's avatar Steffen Klassert
Browse files

xfrm: Use the XFRM_GRO to indicate a GRO call on input



This is needed to support GRO for ESP in UDP encapsulation.

Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
Co-developed-by: default avatarAntony Antony <antony.antony@secunet.com>
Signed-off-by: default avatarAntony Antony <antony.antony@secunet.com>
Reviewed-by: default avatarEyal Birger <eyal.birger@gmail.com>
parent 1d495f1c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ static struct sk_buff *esp4_gro_receive(struct list_head *head,

	/* We don't need to handle errors from xfrm_input, it does all
	 * the error handling and frees the resources on error. */
	xfrm_input(skb, IPPROTO_ESP, spi, -2);
	xfrm_input(skb, IPPROTO_ESP, spi, 0);

	return ERR_PTR(-EINPROGRESS);
out_reset:
+1 −1
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ static struct sk_buff *esp6_gro_receive(struct list_head *head,

	/* We don't need to handle errors from xfrm_input, it does all
	 * the error handling and frees the resources on error. */
	xfrm_input(skb, IPPROTO_ESP, spi, -2);
	xfrm_input(skb, IPPROTO_ESP, spi, 0);

	return ERR_PTR(-EINPROGRESS);
out_reset:
+2 −4
Original line number Diff line number Diff line
@@ -462,7 +462,7 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
	struct xfrm_offload *xo = xfrm_offload(skb);
	struct sec_path *sp;

	if (encap_type < 0) {
	if (encap_type < 0 || (xo && xo->flags & XFRM_GRO)) {
		x = xfrm_input_state(skb);

		if (unlikely(x->km.state != XFRM_STATE_VALID)) {
@@ -485,9 +485,7 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
			seq = XFRM_SKB_CB(skb)->seq.input.low;
			goto resume;
		}

		/* encap_type < -1 indicates a GRO call. */
		encap_type = 0;
		/* GRO call */
		seq = XFRM_SPI_SKB_CB(skb)->seq;

		if (xo && (xo->flags & CRYPTO_DONE)) {