mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-28 23:23:55 +08:00
5271953cad
Use the UDP encap_rcv hook to cut the bit out of the rxrpc packet reception in which a packet is placed onto the UDP receive queue and then immediately removed again by rxrpc. Going via the queue in this manner seems like it should be unnecessary. This does, however, require the invention of a value to place in encap_type as that's one of the conditions to switch packets out to the encap_rcv hook. Possibly the value doesn't actually matter for anything other than sockopts on the UDP socket, which aren't accessible outside of rxrpc anyway. This seems to cut a bit of time out of the time elapsed between each sk_buff being timestamped and turning up in rxrpc (the final number in the following trace excerpts). I measured this by making the rxrpc_rx_packet trace point print the time elapsed between the skb being timestamped and the current time (in ns), e.g.: ... 424.278721: rxrpc_rx_packet: ... ACK 25026 So doing a 512MiB DIO read from my test server, with an unmodified kernel: N min max sum mean stddev 27605 2626 7581 7.83992e+07 2840.04 181.029 and with the patch applied: N min max sum mean stddev 27547 1895 12165 6.77461e+07 2459.29 255.02 Signed-off-by: David Howells <dhowells@redhat.com>
46 lines
1.5 KiB
C
46 lines
1.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
|
|
/*
|
|
* INET An implementation of the TCP/IP protocol suite for the LINUX
|
|
* operating system. INET is implemented using the BSD Socket
|
|
* interface as the means of communication with the user level.
|
|
*
|
|
* Definitions for the UDP protocol.
|
|
*
|
|
* Version: @(#)udp.h 1.0.2 04/28/93
|
|
*
|
|
* Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the License, or (at your option) any later version.
|
|
*/
|
|
#ifndef _UAPI_LINUX_UDP_H
|
|
#define _UAPI_LINUX_UDP_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct udphdr {
|
|
__be16 source;
|
|
__be16 dest;
|
|
__be16 len;
|
|
__sum16 check;
|
|
};
|
|
|
|
/* UDP socket options */
|
|
#define UDP_CORK 1 /* Never send partially complete segments */
|
|
#define UDP_ENCAP 100 /* Set the socket to accept encapsulated packets */
|
|
#define UDP_NO_CHECK6_TX 101 /* Disable sending checksum for UDP6X */
|
|
#define UDP_NO_CHECK6_RX 102 /* Disable accpeting checksum for UDP6 */
|
|
#define UDP_SEGMENT 103 /* Set GSO segmentation size */
|
|
|
|
/* UDP encapsulation types */
|
|
#define UDP_ENCAP_ESPINUDP_NON_IKE 1 /* draft-ietf-ipsec-nat-t-ike-00/01 */
|
|
#define UDP_ENCAP_ESPINUDP 2 /* draft-ietf-ipsec-udp-encaps-06 */
|
|
#define UDP_ENCAP_L2TPINUDP 3 /* rfc2661 */
|
|
#define UDP_ENCAP_GTP0 4 /* GSM TS 09.60 */
|
|
#define UDP_ENCAP_GTP1U 5 /* 3GPP TS 29.060 */
|
|
#define UDP_ENCAP_RXRPC 6
|
|
|
|
#endif /* _UAPI_LINUX_UDP_H */
|