// SPDX-License-Identifier: GPL-2.0
// tcp_MAX_SKB_FRAGS test
//
// Verify that sending an iovec of tcp_MAX_SKB_FRAGS + 1 elements will
// 1) fit in a single packet without zerocopy
// 2) spill over into a second packet with zerocopy,
//    because each iovec element becomes a frag
// 3) the PSH bit is set on an skb when it runs out of fragments

--send_omit_free	// do not reuse send buffers with zerocopy

`./defaults.sh`

    0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
   +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
   +0 setsockopt(3, SOL_SOCKET, SO_ZEROCOPY, [1], 4) = 0

   // Each pinned zerocopy page is fully accounted to skb->truesize.
   // This test generates a worst case packet with each frag storing
   // one byte, but increasing truesize with a page (64KB on PPC).
   +0 setsockopt(3, SOL_SOCKET, SO_SNDBUF, [2000000], 4) = 0

   +0 bind(3, ..., ...) = 0
   +0 listen(3, 1) = 0

   +0 < S 0:0(0) win 32792 <mss 1000,sackOK,nop,nop,nop,wscale 7>
   +0 > S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
   +0 < . 1:1(0) ack 1 win 257

   +0 accept(3, ..., ...) = 4

   // send an iov of 18 elements: just becomes a linear skb
   +0 sendmsg(4, {msg_name(...)=...,
		  msg_iov(18)=[{..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}],
		  msg_flags=0}, 0) = 18

   +0 > P. 1:19(18) ack 1
   +0 < . 1:1(0) ack 19 win 257

   // send a zerocopy iov of 18 elements:
   +1 sendmsg(4, {msg_name(...)=...,
		  msg_iov(18)=[{..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}],
		  msg_flags=0}, MSG_ZEROCOPY) = 18

   // verify that it is split in one skb of 17 frags + 1 of 1 frag
   // verify that both have the PSH bit set
   +0 > P. 19:36(17) ack 1
   +0 < . 1:1(0) ack 36 win 257

   +0 > P. 36:37(1) ack 1
   +0 < . 1:1(0) ack 37 win 257

   +1 recvmsg(4, {msg_name(...)=...,
                  msg_iov(1)=[{...,0}],
                  msg_flags=MSG_ERRQUEUE,
                  msg_control=[
                        {cmsg_level=CMSG_LEVEL_IP,
                         cmsg_type=CMSG_TYPE_RECVERR,
                         cmsg_data={ee_errno=0,
                                    ee_origin=SO_EE_ORIGIN_ZEROCOPY,
                                    ee_type=0,
                                    ee_code=SO_EE_CODE_ZEROCOPY_COPIED,
                                    ee_info=0,
                                    ee_data=0}}
                   ]}, MSG_ERRQUEUE) = 0

   // send a zerocopy iov of 64 elements:
   +0 sendmsg(4, {msg_name(...)=...,
                  msg_iov(64)=[{..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1},
			       {..., 1}, {..., 1}, {..., 1}, {..., 1}],
                  msg_flags=0}, MSG_ZEROCOPY) = 64

   // verify that it is split in skbs with 17 frags
   +0 > P. 37:54(17) ack 1
   +0 < . 1:1(0) ack 54 win 257

   +0 > P. 54:71(17) ack 1
   +0 < . 1:1(0) ack 71 win 257

   +0 > P. 71:88(17) ack 1
   +0 < . 1:1(0) ack 88 win 257

   +0 > P. 88:101(13) ack 1
   +0 < . 1:1(0) ack 101 win 257

   +1 recvmsg(4, {msg_name(...)=...,
                  msg_iov(1)=[{...,0}],
                  msg_flags=MSG_ERRQUEUE,
                  msg_control=[
                        {cmsg_level=CMSG_LEVEL_IP,
                         cmsg_type=CMSG_TYPE_RECVERR,
                         cmsg_data={ee_errno=0,
                                    ee_origin=SO_EE_ORIGIN_ZEROCOPY,
                                    ee_type=0,
                                    ee_code=SO_EE_CODE_ZEROCOPY_COPIED,
                                    ee_info=1,
                                    ee_data=1}}
                   ]}, MSG_ERRQUEUE) = 0
