Y
  1   ˆl–äY>”Ša,j�ÆÞ¸ÔÅ£¿ƒ/¿_�uÐb&=LyZof¯ÄÃ w    ‹     ­VmoÛ6þî_qÖÉibÁvS óš™Ã–ÆˆÜ´4´DYjõV’r¬ûï{Ž’;é‚~¨'¾ãñáñ¹7z�C§µ)saÒPdÙ­d!•02¢åÍËh4º{ƒcêZÑOó*“ôÂ;t¼Àá/ùF‘PUJŠ|™É‘UŸü¤OÇ‹$ùòZ*ë*éJ„’º·‰,èVR(
×P­%yó9Kc2äéŠ¼—k+,u<Ïb]/ëO¹JZKµÄõs2ò«éx±¡ñûŽWÄøJ
‚_ÛM’7�Ñw¶\áoj™	O*Òe¿¡Dh¤"£D¡3l+M ‹¹ŠdœàZ•+íÏ»½Ý¦Yf¡VéZÂ˜êb	f?PK‘ÐÉÎgÖ°1ªR«ûËÙÑ	Êdl,PTÖ¼÷K]yd�‡ñÕ¾±JW‰Ù³l>tˆŠ4Ä•Æ‡‡°‹*5ˆ®»”jŽBD¦Ò#¿¥½ºE2‰T2.•¤Û’c·îZ¤Û¶çÞl»$¿V, öÆ%„­PeY¤¢4	èc­±Z¬Í…ÛÔ$4~ýq1Š‚îó÷=„RÃqk·çÖn�¸½Aåº7<lº�å�U¤�D
ÿøF„©lG•6ò­]ozr\üÖä'Cü ï~›ÅÖîîïÇ)ÅýKô�eÂäáúOÃ½jÐ¶pÃ]8lCš8ÎVºÚ“@û®ä²ä.UðoÇ“ÙC¾]™ßvI€ÕîA77»¹îÎA;§lŽh;Ê¹E%I#®›dÔà,E-qù7C±*sZqÔ]Mï�–%*Õ–r ÷lÜ˜º•eëô¼_ø"Ô|Z­»=xsfÒ„ºƒæÂEF¿é¡É¸\*m„/‘üJ²€ð¬,àQ$•âÔkÒ;5ºÞbzpD‰XeÑgQ×K-Ã¦@åC…{å,Ìªƒ¦>íjsH.ÔgT–Mê¯ß0óË3PxSXÖJ£²ïÊšÝLÊµR©2”Zó•,TY›ª6lë,fÛ¦r)
ð×Å(S8æm9]—)NŠ-v'±J|ÓÅ¶Œ¹·i™³¶'ŠÔ„ú¶·ÁÀ/¨Ú•�]áW“‘ÍôÕÉIÿàà¾ÞìÆÉ½lÓ¦Áßˆ&§S6âž˜ (žÆ�0t¬;@ý¬““á>àÎ3öó�nBÃ{'éæ?_á'�;f~ö�œCä,Nç£Ñé,Ø�ÆH›3v4ÇlÉ2™ù1BF/°m1¥·'gØzýW½þïè•T­_z/†Þ â;Í=¾äì[Öü$˜óúYÖ9RÒN²&CpVÛ�ÉÔª NŽOµ6iŒQÍf ì4»wú~=¹«0ºíêH~$÷g©-ì�º%4ÅåÈ(^±Í]†Ia‡Ôú ½Íla@èpþ”œ·§çNç‡yz4Ezs¡´ÉÃeÎ“¤jÍQd 5jŽº>¿òg—o›€Mm™ï(ñ\i˜Æs©±?;÷ÇW³ùâÑž½…E‚®ƒâ]§î¾=m€‰G(Z?ãæv¶0á©½q{•Ž}©ºhF^g&å—›}$|*—ºy €×Ý]^ã¥ÿ÷ÛË¹?ó÷]ÜÑ²ÑÅùbzyöÀæ^éûäŒ3R/¤IÊH7†þ¶÷=ZâYwÇ3;û›–i‡¿Õ_=ÚÝX u>ï\6|`J˜í#Ô.ìa*©AÃS˜�Eƒéá™8è¿ññ·ObžI›+Ì¸a‚¡„§b3‘œÊJ†Ï$M óú;^„™ê#v³RË§Üy`ê|ú�|ï§q6VNç?ðtI�õ       �ÅÄÃ      File not found.
  A   ˆl–Ü4ý( ©³( 	Å€fàB¦-ÿÁƒm ‹_†I|¥�+a–ßi~”*j"Tâ€rãb¸ )‹FÿÆ $    /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
 * if_xdp: XDP socket user-space interface
 * Copyright(c) 2018 Intel Corporation.
 *
 * Author(s): BjÃ¶rn TÃ¶pel <bjorn.topel@intel.com>
 *	      Magnus Karlsson <magnus.karlsson@intel.com>
 */

#ifndef _LINUX_IF_XDP_H
#define _LINUX_IF_XDP_H

#include <linux/types.h>

/* Options for the sxdp_flags field */
#define XDP_SHARED_UMEM	(1 << 0)
#define XDP_COPY	(1 << 1) /* Force copy-mode */
#define XDP_ZEROCOPY	(1 << 2) /* Force zero-copy mode */
/* If this option is set, the driver might go sleep and in that case
 * the XDP_RING_NEED_WAKEUP flag in the fill and/or Tx rings will be
 * set. If it is set, the application need to explicitly wake up the
 * driver with a poll() (Rx and Tx) or sendto() (Tx only). If you are
 * running the driver and the application on the same core, you should
 * use this option so that the kernel will yield to the user space
 * application.
 */
#define XDP_USE_NEED_WAKEUP (1 << 3)
/* By setting this option, userspace application indicates that it can
 * handle multiple descriptors per packet thus enabling AF_XDP to split
 * multi-buffer XDP frames into multiple Rx descriptors. Without this set
 * such frames will be dropped.
 */
#define XDP_USE_SG	(1 << 4)

/* Flags for xsk_umem_config flags */
#define XDP_UMEM_UNALIGNED_CHUNK_FLAG	(1 << 0)

/* Force checksum calculation in software. Can be used for testing or
 * working around potential HW issues. This option causes performance
 * degradation and only works in XDP_COPY mode.
 */
#define XDP_UMEM_TX_SW_CSUM		(1 << 1)

/* Request to reserve tx_metadata_len bytes of per-chunk metadata.
 */
#define XDP_UMEM_TX_METADATA_LEN	(1 << 2)

struct sockaddr_xdp {
	__u16 sxdp_family;
	__u16 sxdp_flags;
	__u32 sxdp_ifindex;
	__u32 sxdp_queue_id;
	__u32 sxdp_shared_umem_fd;
};

/* XDP_RING flags */
#define XDP_RING_NEED_WAKEUP (1 << 0)

struct xdp_ring_offset {
	__u64 producer;
	__u64 consumer;
	__u64 desc;
	__u64 flags;
};

struct xdp_mmap_offsets {
	struct xdp_ring_offset rx;
	struct xdp_ring_offset tx;
	struct xdp_ring_offset fr; /* Fill */
	struct xdp_ring_offset cr; /* Completion */
};

/* XDP socket options */
#define XDP_MMAP_OFFSETS		1
#define XDP_RX_RING			2
#define XDP_TX_RING			3
#define XDP_UMEM_REG			4
#define XDP_UMEM_FILL_RING		5
#define XDP_UMEM_COMPLETION_RING	6
#define XDP_STATISTICS			7
#define XDP_OPTIONS			8

struct xdp_umem_reg {
	__u64 addr; /* Start of packet data area */
	__u64 len; /* Length of packet data area 