mirror of
https://github.com/systemd/systemd.git
synced 2025-01-09 01:18:19 +03:00
linux: import more network related headers from v6.11-rc6
Hopefully, no effective change.
This commit is contained in:
parent
978e7d166c
commit
a84649592c
90
src/basic/linux/filter.h
Normal file
90
src/basic/linux/filter.h
Normal file
@ -0,0 +1,90 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
/*
|
||||
* Linux Socket Filter Data Structures
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_FILTER_H__
|
||||
#define __LINUX_FILTER_H__
|
||||
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/bpf_common.h>
|
||||
|
||||
/*
|
||||
* Current version of the filter code architecture.
|
||||
*/
|
||||
#define BPF_MAJOR_VERSION 1
|
||||
#define BPF_MINOR_VERSION 1
|
||||
|
||||
/*
|
||||
* Try and keep these values and structures similar to BSD, especially
|
||||
* the BPF code definitions which need to match so you can share filters
|
||||
*/
|
||||
|
||||
struct sock_filter { /* Filter block */
|
||||
__u16 code; /* Actual filter code */
|
||||
__u8 jt; /* Jump true */
|
||||
__u8 jf; /* Jump false */
|
||||
__u32 k; /* Generic multiuse field */
|
||||
};
|
||||
|
||||
struct sock_fprog { /* Required for SO_ATTACH_FILTER. */
|
||||
unsigned short len; /* Number of filter blocks */
|
||||
struct sock_filter *filter;
|
||||
};
|
||||
|
||||
/* ret - BPF_K and BPF_X also apply */
|
||||
#define BPF_RVAL(code) ((code) & 0x18)
|
||||
#define BPF_A 0x10
|
||||
|
||||
/* misc */
|
||||
#define BPF_MISCOP(code) ((code) & 0xf8)
|
||||
#define BPF_TAX 0x00
|
||||
#define BPF_TXA 0x80
|
||||
|
||||
/*
|
||||
* Macros for filter block array initializers.
|
||||
*/
|
||||
#ifndef BPF_STMT
|
||||
#define BPF_STMT(code, k) { (unsigned short)(code), 0, 0, k }
|
||||
#endif
|
||||
#ifndef BPF_JUMP
|
||||
#define BPF_JUMP(code, k, jt, jf) { (unsigned short)(code), jt, jf, k }
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Number of scratch memory words for: BPF_ST and BPF_STX
|
||||
*/
|
||||
#define BPF_MEMWORDS 16
|
||||
|
||||
/* RATIONALE. Negative offsets are invalid in BPF.
|
||||
We use them to reference ancillary data.
|
||||
Unlike introduction new instructions, it does not break
|
||||
existing compilers/optimizers.
|
||||
*/
|
||||
#define SKF_AD_OFF (-0x1000)
|
||||
#define SKF_AD_PROTOCOL 0
|
||||
#define SKF_AD_PKTTYPE 4
|
||||
#define SKF_AD_IFINDEX 8
|
||||
#define SKF_AD_NLATTR 12
|
||||
#define SKF_AD_NLATTR_NEST 16
|
||||
#define SKF_AD_MARK 20
|
||||
#define SKF_AD_QUEUE 24
|
||||
#define SKF_AD_HATYPE 28
|
||||
#define SKF_AD_RXHASH 32
|
||||
#define SKF_AD_CPU 36
|
||||
#define SKF_AD_ALU_XOR_X 40
|
||||
#define SKF_AD_VLAN_TAG 44
|
||||
#define SKF_AD_VLAN_TAG_PRESENT 48
|
||||
#define SKF_AD_PAY_OFFSET 52
|
||||
#define SKF_AD_RANDOM 56
|
||||
#define SKF_AD_VLAN_TPID 60
|
||||
#define SKF_AD_MAX 64
|
||||
|
||||
#define SKF_NET_OFF (-0x100000)
|
||||
#define SKF_LL_OFF (-0x200000)
|
||||
|
||||
#define BPF_NET_OFF SKF_NET_OFF
|
||||
#define BPF_LL_OFF SKF_LL_OFF
|
||||
|
||||
#endif /* __LINUX_FILTER_H__ */
|
33
src/basic/linux/if_addrlabel.h
Normal file
33
src/basic/linux/if_addrlabel.h
Normal file
@ -0,0 +1,33 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
/*
|
||||
* if_addrlabel.h - netlink interface for address labels
|
||||
*
|
||||
* Copyright (C)2007 USAGI/WIDE Project, All Rights Reserved.
|
||||
*
|
||||
* Authors:
|
||||
* YOSHIFUJI Hideaki @ USAGI/WIDE <yoshfuji@linux-ipv6.org>
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_IF_ADDRLABEL_H
|
||||
#define __LINUX_IF_ADDRLABEL_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct ifaddrlblmsg {
|
||||
__u8 ifal_family; /* Address family */
|
||||
__u8 __ifal_reserved; /* Reserved */
|
||||
__u8 ifal_prefixlen; /* Prefix length */
|
||||
__u8 ifal_flags; /* Flags */
|
||||
__u32 ifal_index; /* Link index */
|
||||
__u32 ifal_seq; /* sequence number */
|
||||
};
|
||||
|
||||
enum {
|
||||
IFAL_ADDRESS = 1,
|
||||
IFAL_LABEL = 2,
|
||||
__IFAL_MAX
|
||||
};
|
||||
|
||||
#define IFAL_MAX (__IFAL_MAX - 1)
|
||||
|
||||
#endif
|
165
src/basic/linux/if_arp.h
Normal file
165
src/basic/linux/if_arp.h
Normal file
@ -0,0 +1,165 @@
|
||||
/* 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.
|
||||
*
|
||||
* Global definitions for the ARP (RFC 826) protocol.
|
||||
*
|
||||
* Version: @(#)if_arp.h 1.0.1 04/16/93
|
||||
*
|
||||
* Authors: Original taken from Berkeley UNIX 4.3, (c) UCB 1986-1988
|
||||
* Portions taken from the KA9Q/NOS (v2.00m PA0GRI) source.
|
||||
* Ross Biro
|
||||
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
|
||||
* Florian La Roche,
|
||||
* Jonathan Layes <layes@loran.com>
|
||||
* Arnaldo Carvalho de Melo <acme@conectiva.com.br> ARPHRD_HWX25
|
||||
*
|
||||
* 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 _LINUX_IF_ARP_H
|
||||
#define _LINUX_IF_ARP_H
|
||||
|
||||
#include <linux/netdevice.h>
|
||||
|
||||
/* ARP protocol HARDWARE identifiers. */
|
||||
#define ARPHRD_NETROM 0 /* from KA9Q: NET/ROM pseudo */
|
||||
#define ARPHRD_ETHER 1 /* Ethernet 10Mbps */
|
||||
#define ARPHRD_EETHER 2 /* Experimental Ethernet */
|
||||
#define ARPHRD_AX25 3 /* AX.25 Level 2 */
|
||||
#define ARPHRD_PRONET 4 /* PROnet token ring */
|
||||
#define ARPHRD_CHAOS 5 /* Chaosnet */
|
||||
#define ARPHRD_IEEE802 6 /* IEEE 802.2 Ethernet/TR/TB */
|
||||
#define ARPHRD_ARCNET 7 /* ARCnet */
|
||||
#define ARPHRD_APPLETLK 8 /* APPLEtalk */
|
||||
#define ARPHRD_DLCI 15 /* Frame Relay DLCI */
|
||||
#define ARPHRD_ATM 19 /* ATM */
|
||||
#define ARPHRD_METRICOM 23 /* Metricom STRIP (new IANA id) */
|
||||
#define ARPHRD_IEEE1394 24 /* IEEE 1394 IPv4 - RFC 2734 */
|
||||
#define ARPHRD_EUI64 27 /* EUI-64 */
|
||||
#define ARPHRD_INFINIBAND 32 /* InfiniBand */
|
||||
|
||||
/* Dummy types for non ARP hardware */
|
||||
#define ARPHRD_SLIP 256
|
||||
#define ARPHRD_CSLIP 257
|
||||
#define ARPHRD_SLIP6 258
|
||||
#define ARPHRD_CSLIP6 259
|
||||
#define ARPHRD_RSRVD 260 /* Notional KISS type */
|
||||
#define ARPHRD_ADAPT 264
|
||||
#define ARPHRD_ROSE 270
|
||||
#define ARPHRD_X25 271 /* CCITT X.25 */
|
||||
#define ARPHRD_HWX25 272 /* Boards with X.25 in firmware */
|
||||
#define ARPHRD_CAN 280 /* Controller Area Network */
|
||||
#define ARPHRD_MCTP 290
|
||||
#define ARPHRD_PPP 512
|
||||
#define ARPHRD_CISCO 513 /* Cisco HDLC */
|
||||
#define ARPHRD_HDLC ARPHRD_CISCO
|
||||
#define ARPHRD_LAPB 516 /* LAPB */
|
||||
#define ARPHRD_DDCMP 517 /* Digital's DDCMP protocol */
|
||||
#define ARPHRD_RAWHDLC 518 /* Raw HDLC */
|
||||
#define ARPHRD_RAWIP 519 /* Raw IP */
|
||||
|
||||
#define ARPHRD_TUNNEL 768 /* IPIP tunnel */
|
||||
#define ARPHRD_TUNNEL6 769 /* IP6IP6 tunnel */
|
||||
#define ARPHRD_FRAD 770 /* Frame Relay Access Device */
|
||||
#define ARPHRD_SKIP 771 /* SKIP vif */
|
||||
#define ARPHRD_LOOPBACK 772 /* Loopback device */
|
||||
#define ARPHRD_LOCALTLK 773 /* Localtalk device */
|
||||
#define ARPHRD_FDDI 774 /* Fiber Distributed Data Interface */
|
||||
#define ARPHRD_BIF 775 /* AP1000 BIF */
|
||||
#define ARPHRD_SIT 776 /* sit0 device - IPv6-in-IPv4 */
|
||||
#define ARPHRD_IPDDP 777 /* IP over DDP tunneller */
|
||||
#define ARPHRD_IPGRE 778 /* GRE over IP */
|
||||
#define ARPHRD_PIMREG 779 /* PIMSM register interface */
|
||||
#define ARPHRD_HIPPI 780 /* High Performance Parallel Interface */
|
||||
#define ARPHRD_ASH 781 /* Nexus 64Mbps Ash */
|
||||
#define ARPHRD_ECONET 782 /* Acorn Econet */
|
||||
#define ARPHRD_IRDA 783 /* Linux-IrDA */
|
||||
/* ARP works differently on different FC media .. so */
|
||||
#define ARPHRD_FCPP 784 /* Point to point fibrechannel */
|
||||
#define ARPHRD_FCAL 785 /* Fibrechannel arbitrated loop */
|
||||
#define ARPHRD_FCPL 786 /* Fibrechannel public loop */
|
||||
#define ARPHRD_FCFABRIC 787 /* Fibrechannel fabric */
|
||||
/* 787->799 reserved for fibrechannel media types */
|
||||
#define ARPHRD_IEEE802_TR 800 /* Magic type ident for TR */
|
||||
#define ARPHRD_IEEE80211 801 /* IEEE 802.11 */
|
||||
#define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */
|
||||
#define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */
|
||||
#define ARPHRD_IEEE802154 804
|
||||
#define ARPHRD_IEEE802154_MONITOR 805 /* IEEE 802.15.4 network monitor */
|
||||
|
||||
#define ARPHRD_PHONET 820 /* PhoNet media type */
|
||||
#define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */
|
||||
#define ARPHRD_CAIF 822 /* CAIF media type */
|
||||
#define ARPHRD_IP6GRE 823 /* GRE over IPv6 */
|
||||
#define ARPHRD_NETLINK 824 /* Netlink header */
|
||||
#define ARPHRD_6LOWPAN 825 /* IPv6 over LoWPAN */
|
||||
#define ARPHRD_VSOCKMON 826 /* Vsock monitor header */
|
||||
|
||||
#define ARPHRD_VOID 0xFFFF /* Void type, nothing is known */
|
||||
#define ARPHRD_NONE 0xFFFE /* zero header length */
|
||||
|
||||
/* ARP protocol opcodes. */
|
||||
#define ARPOP_REQUEST 1 /* ARP request */
|
||||
#define ARPOP_REPLY 2 /* ARP reply */
|
||||
#define ARPOP_RREQUEST 3 /* RARP request */
|
||||
#define ARPOP_RREPLY 4 /* RARP reply */
|
||||
#define ARPOP_InREQUEST 8 /* InARP request */
|
||||
#define ARPOP_InREPLY 9 /* InARP reply */
|
||||
#define ARPOP_NAK 10 /* (ATM)ARP NAK */
|
||||
|
||||
|
||||
/* ARP ioctl request. */
|
||||
struct arpreq {
|
||||
struct sockaddr arp_pa; /* protocol address */
|
||||
struct sockaddr arp_ha; /* hardware address */
|
||||
int arp_flags; /* flags */
|
||||
struct sockaddr arp_netmask; /* netmask (only for proxy arps) */
|
||||
char arp_dev[IFNAMSIZ];
|
||||
};
|
||||
|
||||
struct arpreq_old {
|
||||
struct sockaddr arp_pa; /* protocol address */
|
||||
struct sockaddr arp_ha; /* hardware address */
|
||||
int arp_flags; /* flags */
|
||||
struct sockaddr arp_netmask; /* netmask (only for proxy arps) */
|
||||
};
|
||||
|
||||
/* ARP Flag values. */
|
||||
#define ATF_COM 0x02 /* completed entry (ha valid) */
|
||||
#define ATF_PERM 0x04 /* permanent entry */
|
||||
#define ATF_PUBL 0x08 /* publish entry */
|
||||
#define ATF_USETRAILERS 0x10 /* has requested trailers */
|
||||
#define ATF_NETMASK 0x20 /* want to use a netmask (only
|
||||
for proxy entries) */
|
||||
#define ATF_DONTPUB 0x40 /* don't answer this addresses */
|
||||
|
||||
/*
|
||||
* This structure defines an ethernet arp header.
|
||||
*/
|
||||
|
||||
struct arphdr {
|
||||
__be16 ar_hrd; /* format of hardware address */
|
||||
__be16 ar_pro; /* format of protocol address */
|
||||
unsigned char ar_hln; /* length of hardware address */
|
||||
unsigned char ar_pln; /* length of protocol address */
|
||||
__be16 ar_op; /* ARP opcode (command) */
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* Ethernet looks like this : This bit is variable sized however...
|
||||
*/
|
||||
unsigned char ar_sha[ETH_ALEN]; /* sender hardware address */
|
||||
unsigned char ar_sip[4]; /* sender IP address */
|
||||
unsigned char ar_tha[ETH_ALEN]; /* target hardware address */
|
||||
unsigned char ar_tip[4]; /* target IP address */
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif /* _LINUX_IF_ARP_H */
|
30
src/basic/linux/if_infiniband.h
Normal file
30
src/basic/linux/if_infiniband.h
Normal file
@ -0,0 +1,30 @@
|
||||
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */
|
||||
/*
|
||||
* This software is available to you under a choice of one of two
|
||||
* licenses. You may choose to be licensed under the terms of the GNU
|
||||
* General Public License (GPL) Version 2, available at
|
||||
* <http://www.fsf.org/copyleft/gpl.html>, or the OpenIB.org BSD
|
||||
* license, available in the LICENSE.TXT file accompanying this
|
||||
* software. These details are also available at
|
||||
* <http://www.openfabrics.org/software_license.htm>.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* Copyright (c) 2004 Topspin Communications. All rights reserved.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_IF_INFINIBAND_H
|
||||
#define _LINUX_IF_INFINIBAND_H
|
||||
|
||||
#define INFINIBAND_ALEN 20 /* Octets in IPoIB HW addr */
|
||||
|
||||
#endif /* _LINUX_IF_INFINIBAND_H */
|
319
src/basic/linux/if_packet.h
Normal file
319
src/basic/linux/if_packet.h
Normal file
@ -0,0 +1,319 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef __LINUX_IF_PACKET_H
|
||||
#define __LINUX_IF_PACKET_H
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
struct sockaddr_pkt {
|
||||
unsigned short spkt_family;
|
||||
unsigned char spkt_device[14];
|
||||
__be16 spkt_protocol;
|
||||
};
|
||||
|
||||
struct sockaddr_ll {
|
||||
unsigned short sll_family;
|
||||
__be16 sll_protocol;
|
||||
int sll_ifindex;
|
||||
unsigned short sll_hatype;
|
||||
unsigned char sll_pkttype;
|
||||
unsigned char sll_halen;
|
||||
unsigned char sll_addr[8];
|
||||
};
|
||||
|
||||
/* Packet types */
|
||||
|
||||
#define PACKET_HOST 0 /* To us */
|
||||
#define PACKET_BROADCAST 1 /* To all */
|
||||
#define PACKET_MULTICAST 2 /* To group */
|
||||
#define PACKET_OTHERHOST 3 /* To someone else */
|
||||
#define PACKET_OUTGOING 4 /* Outgoing of any type */
|
||||
#define PACKET_LOOPBACK 5 /* MC/BRD frame looped back */
|
||||
#define PACKET_USER 6 /* To user space */
|
||||
#define PACKET_KERNEL 7 /* To kernel space */
|
||||
/* Unused, PACKET_FASTROUTE and PACKET_LOOPBACK are invisible to user space */
|
||||
#define PACKET_FASTROUTE 6 /* Fastrouted frame */
|
||||
|
||||
/* Packet socket options */
|
||||
|
||||
#define PACKET_ADD_MEMBERSHIP 1
|
||||
#define PACKET_DROP_MEMBERSHIP 2
|
||||
#define PACKET_RECV_OUTPUT 3
|
||||
/* Value 4 is still used by obsolete turbo-packet. */
|
||||
#define PACKET_RX_RING 5
|
||||
#define PACKET_STATISTICS 6
|
||||
#define PACKET_COPY_THRESH 7
|
||||
#define PACKET_AUXDATA 8
|
||||
#define PACKET_ORIGDEV 9
|
||||
#define PACKET_VERSION 10
|
||||
#define PACKET_HDRLEN 11
|
||||
#define PACKET_RESERVE 12
|
||||
#define PACKET_TX_RING 13
|
||||
#define PACKET_LOSS 14
|
||||
#define PACKET_VNET_HDR 15
|
||||
#define PACKET_TX_TIMESTAMP 16
|
||||
#define PACKET_TIMESTAMP 17
|
||||
#define PACKET_FANOUT 18
|
||||
#define PACKET_TX_HAS_OFF 19
|
||||
#define PACKET_QDISC_BYPASS 20
|
||||
#define PACKET_ROLLOVER_STATS 21
|
||||
#define PACKET_FANOUT_DATA 22
|
||||
#define PACKET_IGNORE_OUTGOING 23
|
||||
#define PACKET_VNET_HDR_SZ 24
|
||||
|
||||
#define PACKET_FANOUT_HASH 0
|
||||
#define PACKET_FANOUT_LB 1
|
||||
#define PACKET_FANOUT_CPU 2
|
||||
#define PACKET_FANOUT_ROLLOVER 3
|
||||
#define PACKET_FANOUT_RND 4
|
||||
#define PACKET_FANOUT_QM 5
|
||||
#define PACKET_FANOUT_CBPF 6
|
||||
#define PACKET_FANOUT_EBPF 7
|
||||
#define PACKET_FANOUT_FLAG_ROLLOVER 0x1000
|
||||
#define PACKET_FANOUT_FLAG_UNIQUEID 0x2000
|
||||
#define PACKET_FANOUT_FLAG_IGNORE_OUTGOING 0x4000
|
||||
#define PACKET_FANOUT_FLAG_DEFRAG 0x8000
|
||||
|
||||
struct tpacket_stats {
|
||||
unsigned int tp_packets;
|
||||
unsigned int tp_drops;
|
||||
};
|
||||
|
||||
struct tpacket_stats_v3 {
|
||||
unsigned int tp_packets;
|
||||
unsigned int tp_drops;
|
||||
unsigned int tp_freeze_q_cnt;
|
||||
};
|
||||
|
||||
struct tpacket_rollover_stats {
|
||||
__aligned_u64 tp_all;
|
||||
__aligned_u64 tp_huge;
|
||||
__aligned_u64 tp_failed;
|
||||
};
|
||||
|
||||
union tpacket_stats_u {
|
||||
struct tpacket_stats stats1;
|
||||
struct tpacket_stats_v3 stats3;
|
||||
};
|
||||
|
||||
struct tpacket_auxdata {
|
||||
__u32 tp_status;
|
||||
__u32 tp_len;
|
||||
__u32 tp_snaplen;
|
||||
__u16 tp_mac;
|
||||
__u16 tp_net;
|
||||
__u16 tp_vlan_tci;
|
||||
__u16 tp_vlan_tpid;
|
||||
};
|
||||
|
||||
/* Rx ring - header status */
|
||||
#define TP_STATUS_KERNEL 0
|
||||
#define TP_STATUS_USER (1 << 0)
|
||||
#define TP_STATUS_COPY (1 << 1)
|
||||
#define TP_STATUS_LOSING (1 << 2)
|
||||
#define TP_STATUS_CSUMNOTREADY (1 << 3)
|
||||
#define TP_STATUS_VLAN_VALID (1 << 4) /* auxdata has valid tp_vlan_tci */
|
||||
#define TP_STATUS_BLK_TMO (1 << 5)
|
||||
#define TP_STATUS_VLAN_TPID_VALID (1 << 6) /* auxdata has valid tp_vlan_tpid */
|
||||
#define TP_STATUS_CSUM_VALID (1 << 7)
|
||||
#define TP_STATUS_GSO_TCP (1 << 8)
|
||||
|
||||
/* Tx ring - header status */
|
||||
#define TP_STATUS_AVAILABLE 0
|
||||
#define TP_STATUS_SEND_REQUEST (1 << 0)
|
||||
#define TP_STATUS_SENDING (1 << 1)
|
||||
#define TP_STATUS_WRONG_FORMAT (1 << 2)
|
||||
|
||||
/* Rx and Tx ring - header status */
|
||||
#define TP_STATUS_TS_SOFTWARE (1 << 29)
|
||||
#define TP_STATUS_TS_SYS_HARDWARE (1 << 30) /* deprecated, never set */
|
||||
#define TP_STATUS_TS_RAW_HARDWARE (1U << 31)
|
||||
|
||||
/* Rx ring - feature request bits */
|
||||
#define TP_FT_REQ_FILL_RXHASH 0x1
|
||||
|
||||
struct tpacket_hdr {
|
||||
unsigned long tp_status;
|
||||
unsigned int tp_len;
|
||||
unsigned int tp_snaplen;
|
||||
unsigned short tp_mac;
|
||||
unsigned short tp_net;
|
||||
unsigned int tp_sec;
|
||||
unsigned int tp_usec;
|
||||
};
|
||||
|
||||
#define TPACKET_ALIGNMENT 16
|
||||
#define TPACKET_ALIGN(x) (((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1))
|
||||
#define TPACKET_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll))
|
||||
|
||||
struct tpacket2_hdr {
|
||||
__u32 tp_status;
|
||||
__u32 tp_len;
|
||||
__u32 tp_snaplen;
|
||||
__u16 tp_mac;
|
||||
__u16 tp_net;
|
||||
__u32 tp_sec;
|
||||
__u32 tp_nsec;
|
||||
__u16 tp_vlan_tci;
|
||||
__u16 tp_vlan_tpid;
|
||||
__u8 tp_padding[4];
|
||||
};
|
||||
|
||||
struct tpacket_hdr_variant1 {
|
||||
__u32 tp_rxhash;
|
||||
__u32 tp_vlan_tci;
|
||||
__u16 tp_vlan_tpid;
|
||||
__u16 tp_padding;
|
||||
};
|
||||
|
||||
struct tpacket3_hdr {
|
||||
__u32 tp_next_offset;
|
||||
__u32 tp_sec;
|
||||
__u32 tp_nsec;
|
||||
__u32 tp_snaplen;
|
||||
__u32 tp_len;
|
||||
__u32 tp_status;
|
||||
__u16 tp_mac;
|
||||
__u16 tp_net;
|
||||
/* pkt_hdr variants */
|
||||
union {
|
||||
struct tpacket_hdr_variant1 hv1;
|
||||
};
|
||||
__u8 tp_padding[8];
|
||||
};
|
||||
|
||||
struct tpacket_bd_ts {
|
||||
unsigned int ts_sec;
|
||||
union {
|
||||
unsigned int ts_usec;
|
||||
unsigned int ts_nsec;
|
||||
};
|
||||
};
|
||||
|
||||
struct tpacket_hdr_v1 {
|
||||
__u32 block_status;
|
||||
__u32 num_pkts;
|
||||
__u32 offset_to_first_pkt;
|
||||
|
||||
/* Number of valid bytes (including padding)
|
||||
* blk_len <= tp_block_size
|
||||
*/
|
||||
__u32 blk_len;
|
||||
|
||||
/*
|
||||
* Quite a few uses of sequence number:
|
||||
* 1. Make sure cache flush etc worked.
|
||||
* Well, one can argue - why not use the increasing ts below?
|
||||
* But look at 2. below first.
|
||||
* 2. When you pass around blocks to other user space decoders,
|
||||
* you can see which blk[s] is[are] outstanding etc.
|
||||
* 3. Validate kernel code.
|
||||
*/
|
||||
__aligned_u64 seq_num;
|
||||
|
||||
/*
|
||||
* ts_last_pkt:
|
||||
*
|
||||
* Case 1. Block has 'N'(N >=1) packets and TMO'd(timed out)
|
||||
* ts_last_pkt == 'time-stamp of last packet' and NOT the
|
||||
* time when the timer fired and the block was closed.
|
||||
* By providing the ts of the last packet we can absolutely
|
||||
* guarantee that time-stamp wise, the first packet in the
|
||||
* next block will never precede the last packet of the
|
||||
* previous block.
|
||||
* Case 2. Block has zero packets and TMO'd
|
||||
* ts_last_pkt = time when the timer fired and the block
|
||||
* was closed.
|
||||
* Case 3. Block has 'N' packets and NO TMO.
|
||||
* ts_last_pkt = time-stamp of the last pkt in the block.
|
||||
*
|
||||
* ts_first_pkt:
|
||||
* Is always the time-stamp when the block was opened.
|
||||
* Case a) ZERO packets
|
||||
* No packets to deal with but atleast you know the
|
||||
* time-interval of this block.
|
||||
* Case b) Non-zero packets
|
||||
* Use the ts of the first packet in the block.
|
||||
*
|
||||
*/
|
||||
struct tpacket_bd_ts ts_first_pkt, ts_last_pkt;
|
||||
};
|
||||
|
||||
union tpacket_bd_header_u {
|
||||
struct tpacket_hdr_v1 bh1;
|
||||
};
|
||||
|
||||
struct tpacket_block_desc {
|
||||
__u32 version;
|
||||
__u32 offset_to_priv;
|
||||
union tpacket_bd_header_u hdr;
|
||||
};
|
||||
|
||||
#define TPACKET2_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll))
|
||||
#define TPACKET3_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket3_hdr)) + sizeof(struct sockaddr_ll))
|
||||
|
||||
enum tpacket_versions {
|
||||
TPACKET_V1,
|
||||
TPACKET_V2,
|
||||
TPACKET_V3
|
||||
};
|
||||
|
||||
/*
|
||||
Frame structure:
|
||||
|
||||
- Start. Frame must be aligned to TPACKET_ALIGNMENT=16
|
||||
- struct tpacket_hdr
|
||||
- pad to TPACKET_ALIGNMENT=16
|
||||
- struct sockaddr_ll
|
||||
- Gap, chosen so that packet data (Start+tp_net) alignes to TPACKET_ALIGNMENT=16
|
||||
- Start+tp_mac: [ Optional MAC header ]
|
||||
- Start+tp_net: Packet data, aligned to TPACKET_ALIGNMENT=16.
|
||||
- Pad to align to TPACKET_ALIGNMENT=16
|
||||
*/
|
||||
|
||||
struct tpacket_req {
|
||||
unsigned int tp_block_size; /* Minimal size of contiguous block */
|
||||
unsigned int tp_block_nr; /* Number of blocks */
|
||||
unsigned int tp_frame_size; /* Size of frame */
|
||||
unsigned int tp_frame_nr; /* Total number of frames */
|
||||
};
|
||||
|
||||
struct tpacket_req3 {
|
||||
unsigned int tp_block_size; /* Minimal size of contiguous block */
|
||||
unsigned int tp_block_nr; /* Number of blocks */
|
||||
unsigned int tp_frame_size; /* Size of frame */
|
||||
unsigned int tp_frame_nr; /* Total number of frames */
|
||||
unsigned int tp_retire_blk_tov; /* timeout in msecs */
|
||||
unsigned int tp_sizeof_priv; /* offset to private data area */
|
||||
unsigned int tp_feature_req_word;
|
||||
};
|
||||
|
||||
union tpacket_req_u {
|
||||
struct tpacket_req req;
|
||||
struct tpacket_req3 req3;
|
||||
};
|
||||
|
||||
struct packet_mreq {
|
||||
int mr_ifindex;
|
||||
unsigned short mr_type;
|
||||
unsigned short mr_alen;
|
||||
unsigned char mr_address[8];
|
||||
};
|
||||
|
||||
struct fanout_args {
|
||||
#if defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
__u16 id;
|
||||
__u16 type_flags;
|
||||
#else
|
||||
__u16 type_flags;
|
||||
__u16 id;
|
||||
#endif
|
||||
__u32 max_num_members;
|
||||
};
|
||||
|
||||
#define PACKET_MR_MULTICAST 0
|
||||
#define PACKET_MR_PROMISC 1
|
||||
#define PACKET_MR_ALLMULTI 2
|
||||
#define PACKET_MR_UNICAST 3
|
||||
|
||||
#endif
|
66
src/basic/linux/if_vlan.h
Normal file
66
src/basic/linux/if_vlan.h
Normal file
@ -0,0 +1,66 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
|
||||
/*
|
||||
* VLAN An implementation of 802.1Q VLAN tagging.
|
||||
*
|
||||
* Authors: Ben Greear <greearb@candelatech.com>
|
||||
*
|
||||
* 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 _LINUX_IF_VLAN_H_
|
||||
#define _LINUX_IF_VLAN_H_
|
||||
|
||||
|
||||
/* VLAN IOCTLs are found in sockios.h */
|
||||
|
||||
/* Passed in vlan_ioctl_args structure to determine behaviour. */
|
||||
enum vlan_ioctl_cmds {
|
||||
ADD_VLAN_CMD,
|
||||
DEL_VLAN_CMD,
|
||||
SET_VLAN_INGRESS_PRIORITY_CMD,
|
||||
SET_VLAN_EGRESS_PRIORITY_CMD,
|
||||
GET_VLAN_INGRESS_PRIORITY_CMD,
|
||||
GET_VLAN_EGRESS_PRIORITY_CMD,
|
||||
SET_VLAN_NAME_TYPE_CMD,
|
||||
SET_VLAN_FLAG_CMD,
|
||||
GET_VLAN_REALDEV_NAME_CMD, /* If this works, you know it's a VLAN device, btw */
|
||||
GET_VLAN_VID_CMD /* Get the VID of this VLAN (specified by name) */
|
||||
};
|
||||
|
||||
enum vlan_flags {
|
||||
VLAN_FLAG_REORDER_HDR = 0x1,
|
||||
VLAN_FLAG_GVRP = 0x2,
|
||||
VLAN_FLAG_LOOSE_BINDING = 0x4,
|
||||
VLAN_FLAG_MVRP = 0x8,
|
||||
VLAN_FLAG_BRIDGE_BINDING = 0x10,
|
||||
};
|
||||
|
||||
enum vlan_name_types {
|
||||
VLAN_NAME_TYPE_PLUS_VID, /* Name will look like: vlan0005 */
|
||||
VLAN_NAME_TYPE_RAW_PLUS_VID, /* name will look like: eth1.0005 */
|
||||
VLAN_NAME_TYPE_PLUS_VID_NO_PAD, /* Name will look like: vlan5 */
|
||||
VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD, /* Name will look like: eth0.5 */
|
||||
VLAN_NAME_TYPE_HIGHEST
|
||||
};
|
||||
|
||||
struct vlan_ioctl_args {
|
||||
int cmd; /* Should be one of the vlan_ioctl_cmds enum above. */
|
||||
char device1[24];
|
||||
|
||||
union {
|
||||
char device2[24];
|
||||
int VID;
|
||||
unsigned int skb_priority;
|
||||
unsigned int name_type;
|
||||
unsigned int bind_type;
|
||||
unsigned int flag; /* Matches vlan_dev_priv flags */
|
||||
} u;
|
||||
|
||||
short vlan_qos;
|
||||
};
|
||||
|
||||
#endif /* _LINUX_IF_VLAN_H_ */
|
181
src/basic/linux/ip.h
Normal file
181
src/basic/linux/ip.h
Normal file
@ -0,0 +1,181 @@
|
||||
/* 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 IP protocol.
|
||||
*
|
||||
* Version: @(#)ip.h 1.0.2 04/28/93
|
||||
*
|
||||
* Authors: 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 _LINUX_IP_H
|
||||
#define _LINUX_IP_H
|
||||
#include <linux/types.h>
|
||||
#include <linux/stddef.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
#define IPTOS_TOS_MASK 0x1E
|
||||
#define IPTOS_TOS(tos) ((tos)&IPTOS_TOS_MASK)
|
||||
#define IPTOS_LOWDELAY 0x10
|
||||
#define IPTOS_THROUGHPUT 0x08
|
||||
#define IPTOS_RELIABILITY 0x04
|
||||
#define IPTOS_MINCOST 0x02
|
||||
|
||||
#define IPTOS_PREC_MASK 0xE0
|
||||
#define IPTOS_PREC(tos) ((tos)&IPTOS_PREC_MASK)
|
||||
#define IPTOS_PREC_NETCONTROL 0xe0
|
||||
#define IPTOS_PREC_INTERNETCONTROL 0xc0
|
||||
#define IPTOS_PREC_CRITIC_ECP 0xa0
|
||||
#define IPTOS_PREC_FLASHOVERRIDE 0x80
|
||||
#define IPTOS_PREC_FLASH 0x60
|
||||
#define IPTOS_PREC_IMMEDIATE 0x40
|
||||
#define IPTOS_PREC_PRIORITY 0x20
|
||||
#define IPTOS_PREC_ROUTINE 0x00
|
||||
|
||||
|
||||
/* IP options */
|
||||
#define IPOPT_COPY 0x80
|
||||
#define IPOPT_CLASS_MASK 0x60
|
||||
#define IPOPT_NUMBER_MASK 0x1f
|
||||
|
||||
#define IPOPT_COPIED(o) ((o)&IPOPT_COPY)
|
||||
#define IPOPT_CLASS(o) ((o)&IPOPT_CLASS_MASK)
|
||||
#define IPOPT_NUMBER(o) ((o)&IPOPT_NUMBER_MASK)
|
||||
|
||||
#define IPOPT_CONTROL 0x00
|
||||
#define IPOPT_RESERVED1 0x20
|
||||
#define IPOPT_MEASUREMENT 0x40
|
||||
#define IPOPT_RESERVED2 0x60
|
||||
|
||||
#define IPOPT_END (0 |IPOPT_CONTROL)
|
||||
#define IPOPT_NOOP (1 |IPOPT_CONTROL)
|
||||
#define IPOPT_SEC (2 |IPOPT_CONTROL|IPOPT_COPY)
|
||||
#define IPOPT_LSRR (3 |IPOPT_CONTROL|IPOPT_COPY)
|
||||
#define IPOPT_TIMESTAMP (4 |IPOPT_MEASUREMENT)
|
||||
#define IPOPT_CIPSO (6 |IPOPT_CONTROL|IPOPT_COPY)
|
||||
#define IPOPT_RR (7 |IPOPT_CONTROL)
|
||||
#define IPOPT_SID (8 |IPOPT_CONTROL|IPOPT_COPY)
|
||||
#define IPOPT_SSRR (9 |IPOPT_CONTROL|IPOPT_COPY)
|
||||
#define IPOPT_RA (20|IPOPT_CONTROL|IPOPT_COPY)
|
||||
|
||||
#define IPVERSION 4
|
||||
#define MAXTTL 255
|
||||
#define IPDEFTTL 64
|
||||
|
||||
#define IPOPT_OPTVAL 0
|
||||
#define IPOPT_OLEN 1
|
||||
#define IPOPT_OFFSET 2
|
||||
#define IPOPT_MINOFF 4
|
||||
#define MAX_IPOPTLEN 40
|
||||
#define IPOPT_NOP IPOPT_NOOP
|
||||
#define IPOPT_EOL IPOPT_END
|
||||
#define IPOPT_TS IPOPT_TIMESTAMP
|
||||
|
||||
#define IPOPT_TS_TSONLY 0 /* timestamps only */
|
||||
#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */
|
||||
#define IPOPT_TS_PRESPEC 3 /* specified modules only */
|
||||
|
||||
#define IPV4_BEET_PHMAXLEN 8
|
||||
|
||||
struct iphdr {
|
||||
#if defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
__u8 ihl:4,
|
||||
version:4;
|
||||
#elif defined (__BIG_ENDIAN_BITFIELD)
|
||||
__u8 version:4,
|
||||
ihl:4;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
__u8 tos;
|
||||
__be16 tot_len;
|
||||
__be16 id;
|
||||
__be16 frag_off;
|
||||
__u8 ttl;
|
||||
__u8 protocol;
|
||||
__sum16 check;
|
||||
__struct_group(/* no tag */, addrs, /* no attrs */,
|
||||
__be32 saddr;
|
||||
__be32 daddr;
|
||||
);
|
||||
/*The options start here. */
|
||||
};
|
||||
|
||||
|
||||
struct ip_auth_hdr {
|
||||
__u8 nexthdr;
|
||||
__u8 hdrlen; /* This one is measured in 32 bit units! */
|
||||
__be16 reserved;
|
||||
__be32 spi;
|
||||
__be32 seq_no; /* Sequence number */
|
||||
__u8 auth_data[]; /* Variable len but >=4. Mind the 64 bit alignment! */
|
||||
};
|
||||
|
||||
struct ip_esp_hdr {
|
||||
__be32 spi;
|
||||
__be32 seq_no; /* Sequence number */
|
||||
__u8 enc_data[]; /* Variable len but >=8. Mind the 64 bit alignment! */
|
||||
};
|
||||
|
||||
struct ip_comp_hdr {
|
||||
__u8 nexthdr;
|
||||
__u8 flags;
|
||||
__be16 cpi;
|
||||
};
|
||||
|
||||
struct ip_beet_phdr {
|
||||
__u8 nexthdr;
|
||||
__u8 hdrlen;
|
||||
__u8 padlen;
|
||||
__u8 reserved;
|
||||
};
|
||||
|
||||
/* index values for the variables in ipv4_devconf */
|
||||
enum
|
||||
{
|
||||
IPV4_DEVCONF_FORWARDING=1,
|
||||
IPV4_DEVCONF_MC_FORWARDING,
|
||||
IPV4_DEVCONF_PROXY_ARP,
|
||||
IPV4_DEVCONF_ACCEPT_REDIRECTS,
|
||||
IPV4_DEVCONF_SECURE_REDIRECTS,
|
||||
IPV4_DEVCONF_SEND_REDIRECTS,
|
||||
IPV4_DEVCONF_SHARED_MEDIA,
|
||||
IPV4_DEVCONF_RP_FILTER,
|
||||
IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE,
|
||||
IPV4_DEVCONF_BOOTP_RELAY,
|
||||
IPV4_DEVCONF_LOG_MARTIANS,
|
||||
IPV4_DEVCONF_TAG,
|
||||
IPV4_DEVCONF_ARPFILTER,
|
||||
IPV4_DEVCONF_MEDIUM_ID,
|
||||
IPV4_DEVCONF_NOXFRM,
|
||||
IPV4_DEVCONF_NOPOLICY,
|
||||
IPV4_DEVCONF_FORCE_IGMP_VERSION,
|
||||
IPV4_DEVCONF_ARP_ANNOUNCE,
|
||||
IPV4_DEVCONF_ARP_IGNORE,
|
||||
IPV4_DEVCONF_PROMOTE_SECONDARIES,
|
||||
IPV4_DEVCONF_ARP_ACCEPT,
|
||||
IPV4_DEVCONF_ARP_NOTIFY,
|
||||
IPV4_DEVCONF_ACCEPT_LOCAL,
|
||||
IPV4_DEVCONF_SRC_VMARK,
|
||||
IPV4_DEVCONF_PROXY_ARP_PVLAN,
|
||||
IPV4_DEVCONF_ROUTE_LOCALNET,
|
||||
IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL,
|
||||
IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL,
|
||||
IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
|
||||
IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
|
||||
IPV4_DEVCONF_DROP_GRATUITOUS_ARP,
|
||||
IPV4_DEVCONF_BC_FORWARDING,
|
||||
IPV4_DEVCONF_ARP_EVICT_NOCARRIER,
|
||||
__IPV4_DEVCONF_MAX
|
||||
};
|
||||
|
||||
#define IPV4_DEVCONF_MAX (__IPV4_DEVCONF_MAX - 1)
|
||||
|
||||
#endif /* _LINUX_IP_H */
|
56
src/basic/linux/ip6_tunnel.h
Normal file
56
src/basic/linux/ip6_tunnel.h
Normal file
@ -0,0 +1,56 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef _IP6_TUNNEL_H
|
||||
#define _IP6_TUNNEL_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/if.h> /* For IFNAMSIZ. */
|
||||
#include <linux/in6.h> /* For struct in6_addr. */
|
||||
|
||||
#define IPV6_TLV_TNL_ENCAP_LIMIT 4
|
||||
#define IPV6_DEFAULT_TNL_ENCAP_LIMIT 4
|
||||
|
||||
/* don't add encapsulation limit if one isn't present in inner packet */
|
||||
#define IP6_TNL_F_IGN_ENCAP_LIMIT 0x1
|
||||
/* copy the traffic class field from the inner packet */
|
||||
#define IP6_TNL_F_USE_ORIG_TCLASS 0x2
|
||||
/* copy the flowlabel from the inner packet */
|
||||
#define IP6_TNL_F_USE_ORIG_FLOWLABEL 0x4
|
||||
/* being used for Mobile IPv6 */
|
||||
#define IP6_TNL_F_MIP6_DEV 0x8
|
||||
/* copy DSCP from the outer packet */
|
||||
#define IP6_TNL_F_RCV_DSCP_COPY 0x10
|
||||
/* copy fwmark from inner packet */
|
||||
#define IP6_TNL_F_USE_ORIG_FWMARK 0x20
|
||||
/* allow remote endpoint on the local node */
|
||||
#define IP6_TNL_F_ALLOW_LOCAL_REMOTE 0x40
|
||||
|
||||
struct ip6_tnl_parm {
|
||||
char name[IFNAMSIZ]; /* name of tunnel device */
|
||||
int link; /* ifindex of underlying L2 interface */
|
||||
__u8 proto; /* tunnel protocol */
|
||||
__u8 encap_limit; /* encapsulation limit for tunnel */
|
||||
__u8 hop_limit; /* hop limit for tunnel */
|
||||
__be32 flowinfo; /* traffic class and flowlabel for tunnel */
|
||||
__u32 flags; /* tunnel flags */
|
||||
struct in6_addr laddr; /* local tunnel end-point address */
|
||||
struct in6_addr raddr; /* remote tunnel end-point address */
|
||||
};
|
||||
|
||||
struct ip6_tnl_parm2 {
|
||||
char name[IFNAMSIZ]; /* name of tunnel device */
|
||||
int link; /* ifindex of underlying L2 interface */
|
||||
__u8 proto; /* tunnel protocol */
|
||||
__u8 encap_limit; /* encapsulation limit for tunnel */
|
||||
__u8 hop_limit; /* hop limit for tunnel */
|
||||
__be32 flowinfo; /* traffic class and flowlabel for tunnel */
|
||||
__u32 flags; /* tunnel flags */
|
||||
struct in6_addr laddr; /* local tunnel end-point address */
|
||||
struct in6_addr raddr; /* remote tunnel end-point address */
|
||||
|
||||
__be16 i_flags;
|
||||
__be16 o_flags;
|
||||
__be32 i_key;
|
||||
__be32 o_key;
|
||||
};
|
||||
|
||||
#endif
|
206
src/basic/linux/ipv6.h
Normal file
206
src/basic/linux/ipv6.h
Normal file
@ -0,0 +1,206 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef _IPV6_H
|
||||
#define _IPV6_H
|
||||
|
||||
#include <linux/libc-compat.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/in6.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
/* The latest drafts declared increase in minimal mtu up to 1280. */
|
||||
|
||||
#define IPV6_MIN_MTU 1280
|
||||
|
||||
/*
|
||||
* Advanced API
|
||||
* source interface/address selection, source routing, etc...
|
||||
* *under construction*
|
||||
*/
|
||||
|
||||
#if __UAPI_DEF_IN6_PKTINFO
|
||||
struct in6_pktinfo {
|
||||
struct in6_addr ipi6_addr;
|
||||
int ipi6_ifindex;
|
||||
};
|
||||
#endif
|
||||
|
||||
#if __UAPI_DEF_IP6_MTUINFO
|
||||
struct ip6_mtuinfo {
|
||||
struct sockaddr_in6 ip6m_addr;
|
||||
__u32 ip6m_mtu;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct in6_ifreq {
|
||||
struct in6_addr ifr6_addr;
|
||||
__u32 ifr6_prefixlen;
|
||||
int ifr6_ifindex;
|
||||
};
|
||||
|
||||
#define IPV6_SRCRT_STRICT 0x01 /* Deprecated; will be removed */
|
||||
#define IPV6_SRCRT_TYPE_0 0 /* Deprecated; will be removed */
|
||||
#define IPV6_SRCRT_TYPE_2 2 /* IPv6 type 2 Routing Header */
|
||||
#define IPV6_SRCRT_TYPE_3 3 /* RPL Segment Routing with IPv6 */
|
||||
#define IPV6_SRCRT_TYPE_4 4 /* Segment Routing with IPv6 */
|
||||
|
||||
/*
|
||||
* routing header
|
||||
*/
|
||||
struct ipv6_rt_hdr {
|
||||
__u8 nexthdr;
|
||||
__u8 hdrlen;
|
||||
__u8 type;
|
||||
__u8 segments_left;
|
||||
|
||||
/*
|
||||
* type specific data
|
||||
* variable length field
|
||||
*/
|
||||
};
|
||||
|
||||
|
||||
struct ipv6_opt_hdr {
|
||||
__u8 nexthdr;
|
||||
__u8 hdrlen;
|
||||
/*
|
||||
* TLV encoded option data follows.
|
||||
*/
|
||||
} __attribute__((packed)); /* required for some archs */
|
||||
|
||||
#define ipv6_destopt_hdr ipv6_opt_hdr
|
||||
#define ipv6_hopopt_hdr ipv6_opt_hdr
|
||||
|
||||
/* Router Alert option values (RFC2711) */
|
||||
#define IPV6_OPT_ROUTERALERT_MLD 0x0000 /* MLD(RFC2710) */
|
||||
|
||||
/*
|
||||
* routing header type 0 (used in cmsghdr struct)
|
||||
*/
|
||||
|
||||
struct rt0_hdr {
|
||||
struct ipv6_rt_hdr rt_hdr;
|
||||
__u32 reserved;
|
||||
struct in6_addr addr[];
|
||||
|
||||
#define rt0_type rt_hdr.type
|
||||
};
|
||||
|
||||
/*
|
||||
* routing header type 2
|
||||
*/
|
||||
|
||||
struct rt2_hdr {
|
||||
struct ipv6_rt_hdr rt_hdr;
|
||||
__u32 reserved;
|
||||
struct in6_addr addr;
|
||||
|
||||
#define rt2_type rt_hdr.type
|
||||
};
|
||||
|
||||
/*
|
||||
* home address option in destination options header
|
||||
*/
|
||||
|
||||
struct ipv6_destopt_hao {
|
||||
__u8 type;
|
||||
__u8 length;
|
||||
struct in6_addr addr;
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* IPv6 fixed header
|
||||
*
|
||||
* BEWARE, it is incorrect. The first 4 bits of flow_lbl
|
||||
* are glued to priority now, forming "class".
|
||||
*/
|
||||
|
||||
struct ipv6hdr {
|
||||
#if defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
__u8 priority:4,
|
||||
version:4;
|
||||
#elif defined(__BIG_ENDIAN_BITFIELD)
|
||||
__u8 version:4,
|
||||
priority:4;
|
||||
#else
|
||||
#error "Please fix <asm/byteorder.h>"
|
||||
#endif
|
||||
__u8 flow_lbl[3];
|
||||
|
||||
__be16 payload_len;
|
||||
__u8 nexthdr;
|
||||
__u8 hop_limit;
|
||||
|
||||
__struct_group(/* no tag */, addrs, /* no attrs */,
|
||||
struct in6_addr saddr;
|
||||
struct in6_addr daddr;
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
/* index values for the variables in ipv6_devconf */
|
||||
enum {
|
||||
DEVCONF_FORWARDING = 0,
|
||||
DEVCONF_HOPLIMIT,
|
||||
DEVCONF_MTU6,
|
||||
DEVCONF_ACCEPT_RA,
|
||||
DEVCONF_ACCEPT_REDIRECTS,
|
||||
DEVCONF_AUTOCONF,
|
||||
DEVCONF_DAD_TRANSMITS,
|
||||
DEVCONF_RTR_SOLICITS,
|
||||
DEVCONF_RTR_SOLICIT_INTERVAL,
|
||||
DEVCONF_RTR_SOLICIT_DELAY,
|
||||
DEVCONF_USE_TEMPADDR,
|
||||
DEVCONF_TEMP_VALID_LFT,
|
||||
DEVCONF_TEMP_PREFERED_LFT,
|
||||
DEVCONF_REGEN_MAX_RETRY,
|
||||
DEVCONF_MAX_DESYNC_FACTOR,
|
||||
DEVCONF_MAX_ADDRESSES,
|
||||
DEVCONF_FORCE_MLD_VERSION,
|
||||
DEVCONF_ACCEPT_RA_DEFRTR,
|
||||
DEVCONF_ACCEPT_RA_PINFO,
|
||||
DEVCONF_ACCEPT_RA_RTR_PREF,
|
||||
DEVCONF_RTR_PROBE_INTERVAL,
|
||||
DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN,
|
||||
DEVCONF_PROXY_NDP,
|
||||
DEVCONF_OPTIMISTIC_DAD,
|
||||
DEVCONF_ACCEPT_SOURCE_ROUTE,
|
||||
DEVCONF_MC_FORWARDING,
|
||||
DEVCONF_DISABLE_IPV6,
|
||||
DEVCONF_ACCEPT_DAD,
|
||||
DEVCONF_FORCE_TLLAO,
|
||||
DEVCONF_NDISC_NOTIFY,
|
||||
DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL,
|
||||
DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL,
|
||||
DEVCONF_SUPPRESS_FRAG_NDISC,
|
||||
DEVCONF_ACCEPT_RA_FROM_LOCAL,
|
||||
DEVCONF_USE_OPTIMISTIC,
|
||||
DEVCONF_ACCEPT_RA_MTU,
|
||||
DEVCONF_STABLE_SECRET,
|
||||
DEVCONF_USE_OIF_ADDRS_ONLY,
|
||||
DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT,
|
||||
DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
|
||||
DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
|
||||
DEVCONF_DROP_UNSOLICITED_NA,
|
||||
DEVCONF_KEEP_ADDR_ON_DOWN,
|
||||
DEVCONF_RTR_SOLICIT_MAX_INTERVAL,
|
||||
DEVCONF_SEG6_ENABLED,
|
||||
DEVCONF_SEG6_REQUIRE_HMAC,
|
||||
DEVCONF_ENHANCED_DAD,
|
||||
DEVCONF_ADDR_GEN_MODE,
|
||||
DEVCONF_DISABLE_POLICY,
|
||||
DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN,
|
||||
DEVCONF_NDISC_TCLASS,
|
||||
DEVCONF_RPL_SEG_ENABLED,
|
||||
DEVCONF_RA_DEFRTR_METRIC,
|
||||
DEVCONF_IOAM6_ENABLED,
|
||||
DEVCONF_IOAM6_ID,
|
||||
DEVCONF_IOAM6_ID_WIDE,
|
||||
DEVCONF_NDISC_EVICT_NOCARRIER,
|
||||
DEVCONF_ACCEPT_UNTRACKED_NA,
|
||||
DEVCONF_ACCEPT_RA_MIN_LFT,
|
||||
DEVCONF_MAX
|
||||
};
|
||||
|
||||
|
||||
#endif /* _IPV6_H */
|
224
src/basic/linux/neighbour.h
Normal file
224
src/basic/linux/neighbour.h
Normal file
@ -0,0 +1,224 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef __LINUX_NEIGHBOUR_H
|
||||
#define __LINUX_NEIGHBOUR_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/netlink.h>
|
||||
|
||||
struct ndmsg {
|
||||
__u8 ndm_family;
|
||||
__u8 ndm_pad1;
|
||||
__u16 ndm_pad2;
|
||||
__s32 ndm_ifindex;
|
||||
__u16 ndm_state;
|
||||
__u8 ndm_flags;
|
||||
__u8 ndm_type;
|
||||
};
|
||||
|
||||
enum {
|
||||
NDA_UNSPEC,
|
||||
NDA_DST,
|
||||
NDA_LLADDR,
|
||||
NDA_CACHEINFO,
|
||||
NDA_PROBES,
|
||||
NDA_VLAN,
|
||||
NDA_PORT,
|
||||
NDA_VNI,
|
||||
NDA_IFINDEX,
|
||||
NDA_MASTER,
|
||||
NDA_LINK_NETNSID,
|
||||
NDA_SRC_VNI,
|
||||
NDA_PROTOCOL, /* Originator of entry */
|
||||
NDA_NH_ID,
|
||||
NDA_FDB_EXT_ATTRS,
|
||||
NDA_FLAGS_EXT,
|
||||
NDA_NDM_STATE_MASK,
|
||||
NDA_NDM_FLAGS_MASK,
|
||||
__NDA_MAX
|
||||
};
|
||||
|
||||
#define NDA_MAX (__NDA_MAX - 1)
|
||||
|
||||
/*
|
||||
* Neighbor Cache Entry Flags
|
||||
*/
|
||||
|
||||
#define NTF_USE (1 << 0)
|
||||
#define NTF_SELF (1 << 1)
|
||||
#define NTF_MASTER (1 << 2)
|
||||
#define NTF_PROXY (1 << 3) /* == ATF_PUBL */
|
||||
#define NTF_EXT_LEARNED (1 << 4)
|
||||
#define NTF_OFFLOADED (1 << 5)
|
||||
#define NTF_STICKY (1 << 6)
|
||||
#define NTF_ROUTER (1 << 7)
|
||||
/* Extended flags under NDA_FLAGS_EXT: */
|
||||
#define NTF_EXT_MANAGED (1 << 0)
|
||||
#define NTF_EXT_LOCKED (1 << 1)
|
||||
|
||||
/*
|
||||
* Neighbor Cache Entry States.
|
||||
*/
|
||||
|
||||
#define NUD_INCOMPLETE 0x01
|
||||
#define NUD_REACHABLE 0x02
|
||||
#define NUD_STALE 0x04
|
||||
#define NUD_DELAY 0x08
|
||||
#define NUD_PROBE 0x10
|
||||
#define NUD_FAILED 0x20
|
||||
|
||||
/* Dummy states */
|
||||
#define NUD_NOARP 0x40
|
||||
#define NUD_PERMANENT 0x80
|
||||
#define NUD_NONE 0x00
|
||||
|
||||
/* NUD_NOARP & NUD_PERMANENT are pseudostates, they never change and make no
|
||||
* address resolution or NUD.
|
||||
*
|
||||
* NUD_PERMANENT also cannot be deleted by garbage collectors. This holds true
|
||||
* for dynamic entries with NTF_EXT_LEARNED flag as well. However, upon carrier
|
||||
* down event, NUD_PERMANENT entries are not flushed whereas NTF_EXT_LEARNED
|
||||
* flagged entries explicitly are (which is also consistent with the routing
|
||||
* subsystem).
|
||||
*
|
||||
* When NTF_EXT_LEARNED is set for a bridge fdb entry the different cache entry
|
||||
* states don't make sense and thus are ignored. Such entries don't age and
|
||||
* can roam.
|
||||
*
|
||||
* NTF_EXT_MANAGED flagged neigbor entries are managed by the kernel on behalf
|
||||
* of a user space control plane, and automatically refreshed so that (if
|
||||
* possible) they remain in NUD_REACHABLE state.
|
||||
*
|
||||
* NTF_EXT_LOCKED flagged bridge FDB entries are entries generated by the
|
||||
* bridge in response to a host trying to communicate via a locked bridge port
|
||||
* with MAB enabled. Their purpose is to notify user space that a host requires
|
||||
* authentication.
|
||||
*/
|
||||
|
||||
struct nda_cacheinfo {
|
||||
__u32 ndm_confirmed;
|
||||
__u32 ndm_used;
|
||||
__u32 ndm_updated;
|
||||
__u32 ndm_refcnt;
|
||||
};
|
||||
|
||||
/*****************************************************************
|
||||
* Neighbour tables specific messages.
|
||||
*
|
||||
* To retrieve the neighbour tables send RTM_GETNEIGHTBL with the
|
||||
* NLM_F_DUMP flag set. Every neighbour table configuration is
|
||||
* spread over multiple messages to avoid running into message
|
||||
* size limits on systems with many interfaces. The first message
|
||||
* in the sequence transports all not device specific data such as
|
||||
* statistics, configuration, and the default parameter set.
|
||||
* This message is followed by 0..n messages carrying device
|
||||
* specific parameter sets.
|
||||
* Although the ordering should be sufficient, NDTA_NAME can be
|
||||
* used to identify sequences. The initial message can be identified
|
||||
* by checking for NDTA_CONFIG. The device specific messages do
|
||||
* not contain this TLV but have NDTPA_IFINDEX set to the
|
||||
* corresponding interface index.
|
||||
*
|
||||
* To change neighbour table attributes, send RTM_SETNEIGHTBL
|
||||
* with NDTA_NAME set. Changeable attribute include NDTA_THRESH[1-3],
|
||||
* NDTA_GC_INTERVAL, and all TLVs in NDTA_PARMS unless marked
|
||||
* otherwise. Device specific parameter sets can be changed by
|
||||
* setting NDTPA_IFINDEX to the interface index of the corresponding
|
||||
* device.
|
||||
****/
|
||||
|
||||
struct ndt_stats {
|
||||
__u64 ndts_allocs;
|
||||
__u64 ndts_destroys;
|
||||
__u64 ndts_hash_grows;
|
||||
__u64 ndts_res_failed;
|
||||
__u64 ndts_lookups;
|
||||
__u64 ndts_hits;
|
||||
__u64 ndts_rcv_probes_mcast;
|
||||
__u64 ndts_rcv_probes_ucast;
|
||||
__u64 ndts_periodic_gc_runs;
|
||||
__u64 ndts_forced_gc_runs;
|
||||
__u64 ndts_table_fulls;
|
||||
};
|
||||
|
||||
enum {
|
||||
NDTPA_UNSPEC,
|
||||
NDTPA_IFINDEX, /* u32, unchangeable */
|
||||
NDTPA_REFCNT, /* u32, read-only */
|
||||
NDTPA_REACHABLE_TIME, /* u64, read-only, msecs */
|
||||
NDTPA_BASE_REACHABLE_TIME, /* u64, msecs */
|
||||
NDTPA_RETRANS_TIME, /* u64, msecs */
|
||||
NDTPA_GC_STALETIME, /* u64, msecs */
|
||||
NDTPA_DELAY_PROBE_TIME, /* u64, msecs */
|
||||
NDTPA_QUEUE_LEN, /* u32 */
|
||||
NDTPA_APP_PROBES, /* u32 */
|
||||
NDTPA_UCAST_PROBES, /* u32 */
|
||||
NDTPA_MCAST_PROBES, /* u32 */
|
||||
NDTPA_ANYCAST_DELAY, /* u64, msecs */
|
||||
NDTPA_PROXY_DELAY, /* u64, msecs */
|
||||
NDTPA_PROXY_QLEN, /* u32 */
|
||||
NDTPA_LOCKTIME, /* u64, msecs */
|
||||
NDTPA_QUEUE_LENBYTES, /* u32 */
|
||||
NDTPA_MCAST_REPROBES, /* u32 */
|
||||
NDTPA_PAD,
|
||||
NDTPA_INTERVAL_PROBE_TIME_MS, /* u64, msecs */
|
||||
__NDTPA_MAX
|
||||
};
|
||||
#define NDTPA_MAX (__NDTPA_MAX - 1)
|
||||
|
||||
struct ndtmsg {
|
||||
__u8 ndtm_family;
|
||||
__u8 ndtm_pad1;
|
||||
__u16 ndtm_pad2;
|
||||
};
|
||||
|
||||
struct ndt_config {
|
||||
__u16 ndtc_key_len;
|
||||
__u16 ndtc_entry_size;
|
||||
__u32 ndtc_entries;
|
||||
__u32 ndtc_last_flush; /* delta to now in msecs */
|
||||
__u32 ndtc_last_rand; /* delta to now in msecs */
|
||||
__u32 ndtc_hash_rnd;
|
||||
__u32 ndtc_hash_mask;
|
||||
__u32 ndtc_hash_chain_gc;
|
||||
__u32 ndtc_proxy_qlen;
|
||||
};
|
||||
|
||||
enum {
|
||||
NDTA_UNSPEC,
|
||||
NDTA_NAME, /* char *, unchangeable */
|
||||
NDTA_THRESH1, /* u32 */
|
||||
NDTA_THRESH2, /* u32 */
|
||||
NDTA_THRESH3, /* u32 */
|
||||
NDTA_CONFIG, /* struct ndt_config, read-only */
|
||||
NDTA_PARMS, /* nested TLV NDTPA_* */
|
||||
NDTA_STATS, /* struct ndt_stats, read-only */
|
||||
NDTA_GC_INTERVAL, /* u64, msecs */
|
||||
NDTA_PAD,
|
||||
__NDTA_MAX
|
||||
};
|
||||
#define NDTA_MAX (__NDTA_MAX - 1)
|
||||
|
||||
/* FDB activity notification bits used in NFEA_ACTIVITY_NOTIFY:
|
||||
* - FDB_NOTIFY_BIT - notify on activity/expire for any entry
|
||||
* - FDB_NOTIFY_INACTIVE_BIT - mark as inactive to avoid multiple notifications
|
||||
*/
|
||||
enum {
|
||||
FDB_NOTIFY_BIT = (1 << 0),
|
||||
FDB_NOTIFY_INACTIVE_BIT = (1 << 1)
|
||||
};
|
||||
|
||||
/* embedded into NDA_FDB_EXT_ATTRS:
|
||||
* [NDA_FDB_EXT_ATTRS] = {
|
||||
* [NFEA_ACTIVITY_NOTIFY]
|
||||
* ...
|
||||
* }
|
||||
*/
|
||||
enum {
|
||||
NFEA_UNSPEC,
|
||||
NFEA_ACTIVITY_NOTIFY,
|
||||
NFEA_DONT_REFRESH,
|
||||
__NFEA_MAX
|
||||
};
|
||||
#define NFEA_MAX (__NFEA_MAX - 1)
|
||||
|
||||
#endif
|
26
src/basic/linux/net_namespace.h
Normal file
26
src/basic/linux/net_namespace.h
Normal file
@ -0,0 +1,26 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
/* Copyright (c) 2015 6WIND S.A.
|
||||
* Author: Nicolas Dichtel <nicolas.dichtel@6wind.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*/
|
||||
#ifndef _LINUX_NET_NAMESPACE_H_
|
||||
#define _LINUX_NET_NAMESPACE_H_
|
||||
|
||||
/* Attributes of RTM_NEWNSID/RTM_GETNSID messages */
|
||||
enum {
|
||||
NETNSA_NONE,
|
||||
#define NETNSA_NSID_NOT_ASSIGNED -1
|
||||
NETNSA_NSID,
|
||||
NETNSA_PID,
|
||||
NETNSA_FD,
|
||||
NETNSA_TARGET_NSID,
|
||||
NETNSA_CURRENT_NSID,
|
||||
__NETNSA_MAX,
|
||||
};
|
||||
|
||||
#define NETNSA_MAX (__NETNSA_MAX - 1)
|
||||
|
||||
#endif /* _LINUX_NET_NAMESPACE_H_ */
|
148
src/basic/linux/netfilter/nf_conntrack_common.h
Normal file
148
src/basic/linux/netfilter/nf_conntrack_common.h
Normal file
@ -0,0 +1,148 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef _NF_CONNTRACK_COMMON_H
|
||||
#define _NF_CONNTRACK_COMMON_H
|
||||
/* Connection state tracking for netfilter. This is separated from,
|
||||
but required by, the NAT layer; it can also be used by an iptables
|
||||
extension. */
|
||||
enum ip_conntrack_info {
|
||||
/* Part of an established connection (either direction). */
|
||||
IP_CT_ESTABLISHED,
|
||||
|
||||
/* Like NEW, but related to an existing connection, or ICMP error
|
||||
(in either direction). */
|
||||
IP_CT_RELATED,
|
||||
|
||||
/* Started a new connection to track (only
|
||||
IP_CT_DIR_ORIGINAL); may be a retransmission. */
|
||||
IP_CT_NEW,
|
||||
|
||||
/* >= this indicates reply direction */
|
||||
IP_CT_IS_REPLY,
|
||||
|
||||
IP_CT_ESTABLISHED_REPLY = IP_CT_ESTABLISHED + IP_CT_IS_REPLY,
|
||||
IP_CT_RELATED_REPLY = IP_CT_RELATED + IP_CT_IS_REPLY,
|
||||
/* No NEW in reply direction. */
|
||||
|
||||
/* Number of distinct IP_CT types. */
|
||||
IP_CT_NUMBER,
|
||||
|
||||
/* only for userspace compatibility */
|
||||
IP_CT_NEW_REPLY = IP_CT_NUMBER,
|
||||
};
|
||||
|
||||
#define NF_CT_STATE_INVALID_BIT (1 << 0)
|
||||
#define NF_CT_STATE_BIT(ctinfo) (1 << ((ctinfo) % IP_CT_IS_REPLY + 1))
|
||||
#define NF_CT_STATE_UNTRACKED_BIT (1 << 6)
|
||||
|
||||
/* Bitset representing status of connection. */
|
||||
enum ip_conntrack_status {
|
||||
/* It's an expected connection: bit 0 set. This bit never changed */
|
||||
IPS_EXPECTED_BIT = 0,
|
||||
IPS_EXPECTED = (1 << IPS_EXPECTED_BIT),
|
||||
|
||||
/* We've seen packets both ways: bit 1 set. Can be set, not unset. */
|
||||
IPS_SEEN_REPLY_BIT = 1,
|
||||
IPS_SEEN_REPLY = (1 << IPS_SEEN_REPLY_BIT),
|
||||
|
||||
/* Conntrack should never be early-expired. */
|
||||
IPS_ASSURED_BIT = 2,
|
||||
IPS_ASSURED = (1 << IPS_ASSURED_BIT),
|
||||
|
||||
/* Connection is confirmed: originating packet has left box */
|
||||
IPS_CONFIRMED_BIT = 3,
|
||||
IPS_CONFIRMED = (1 << IPS_CONFIRMED_BIT),
|
||||
|
||||
/* Connection needs src nat in orig dir. This bit never changed. */
|
||||
IPS_SRC_NAT_BIT = 4,
|
||||
IPS_SRC_NAT = (1 << IPS_SRC_NAT_BIT),
|
||||
|
||||
/* Connection needs dst nat in orig dir. This bit never changed. */
|
||||
IPS_DST_NAT_BIT = 5,
|
||||
IPS_DST_NAT = (1 << IPS_DST_NAT_BIT),
|
||||
|
||||
/* Both together. */
|
||||
IPS_NAT_MASK = (IPS_DST_NAT | IPS_SRC_NAT),
|
||||
|
||||
/* Connection needs TCP sequence adjusted. */
|
||||
IPS_SEQ_ADJUST_BIT = 6,
|
||||
IPS_SEQ_ADJUST = (1 << IPS_SEQ_ADJUST_BIT),
|
||||
|
||||
/* NAT initialization bits. */
|
||||
IPS_SRC_NAT_DONE_BIT = 7,
|
||||
IPS_SRC_NAT_DONE = (1 << IPS_SRC_NAT_DONE_BIT),
|
||||
|
||||
IPS_DST_NAT_DONE_BIT = 8,
|
||||
IPS_DST_NAT_DONE = (1 << IPS_DST_NAT_DONE_BIT),
|
||||
|
||||
/* Both together */
|
||||
IPS_NAT_DONE_MASK = (IPS_DST_NAT_DONE | IPS_SRC_NAT_DONE),
|
||||
|
||||
/* Connection is dying (removed from lists), can not be unset. */
|
||||
IPS_DYING_BIT = 9,
|
||||
IPS_DYING = (1 << IPS_DYING_BIT),
|
||||
|
||||
/* Connection has fixed timeout. */
|
||||
IPS_FIXED_TIMEOUT_BIT = 10,
|
||||
IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT),
|
||||
|
||||
/* Conntrack is a template */
|
||||
IPS_TEMPLATE_BIT = 11,
|
||||
IPS_TEMPLATE = (1 << IPS_TEMPLATE_BIT),
|
||||
|
||||
/* Conntrack is a fake untracked entry. Obsolete and not used anymore */
|
||||
IPS_UNTRACKED_BIT = 12,
|
||||
IPS_UNTRACKED = (1 << IPS_UNTRACKED_BIT),
|
||||
|
||||
|
||||
/* Conntrack got a helper explicitly attached (ruleset, ctnetlink). */
|
||||
IPS_HELPER_BIT = 13,
|
||||
IPS_HELPER = (1 << IPS_HELPER_BIT),
|
||||
|
||||
/* Conntrack has been offloaded to flow table. */
|
||||
IPS_OFFLOAD_BIT = 14,
|
||||
IPS_OFFLOAD = (1 << IPS_OFFLOAD_BIT),
|
||||
|
||||
/* Conntrack has been offloaded to hardware. */
|
||||
IPS_HW_OFFLOAD_BIT = 15,
|
||||
IPS_HW_OFFLOAD = (1 << IPS_HW_OFFLOAD_BIT),
|
||||
|
||||
/* Be careful here, modifying these bits can make things messy,
|
||||
* so don't let users modify them directly.
|
||||
*/
|
||||
IPS_UNCHANGEABLE_MASK = (IPS_NAT_DONE_MASK | IPS_NAT_MASK |
|
||||
IPS_EXPECTED | IPS_CONFIRMED | IPS_DYING |
|
||||
IPS_SEQ_ADJUST | IPS_TEMPLATE | IPS_UNTRACKED |
|
||||
IPS_OFFLOAD | IPS_HW_OFFLOAD),
|
||||
|
||||
__IPS_MAX_BIT = 16,
|
||||
};
|
||||
|
||||
/* Connection tracking event types */
|
||||
enum ip_conntrack_events {
|
||||
IPCT_NEW, /* new conntrack */
|
||||
IPCT_RELATED, /* related conntrack */
|
||||
IPCT_DESTROY, /* destroyed conntrack */
|
||||
IPCT_REPLY, /* connection has seen two-way traffic */
|
||||
IPCT_ASSURED, /* connection status has changed to assured */
|
||||
IPCT_PROTOINFO, /* protocol information has changed */
|
||||
IPCT_HELPER, /* new helper has been set */
|
||||
IPCT_MARK, /* new mark has been set */
|
||||
IPCT_SEQADJ, /* sequence adjustment has changed */
|
||||
IPCT_NATSEQADJ = IPCT_SEQADJ,
|
||||
IPCT_SECMARK, /* new security mark has been set */
|
||||
IPCT_LABEL, /* new connlabel has been set */
|
||||
IPCT_SYNPROXY, /* synproxy has been set */
|
||||
};
|
||||
|
||||
enum ip_conntrack_expect_events {
|
||||
IPEXP_NEW, /* new expectation */
|
||||
IPEXP_DESTROY, /* destroyed expectation */
|
||||
};
|
||||
|
||||
/* expectation flags */
|
||||
#define NF_CT_EXPECT_PERMANENT 0x1
|
||||
#define NF_CT_EXPECT_INACTIVE 0x2
|
||||
#define NF_CT_EXPECT_USERSPACE 0x4
|
||||
|
||||
|
||||
#endif /* _NF_CONNTRACK_COMMON_H */
|
44
src/basic/linux/netfilter/nf_conntrack_tuple_common.h
Normal file
44
src/basic/linux/netfilter/nf_conntrack_tuple_common.h
Normal file
@ -0,0 +1,44 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef _NF_CONNTRACK_TUPLE_COMMON_H
|
||||
#define _NF_CONNTRACK_TUPLE_COMMON_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/netfilter.h>
|
||||
#include <linux/netfilter/nf_conntrack_common.h> /* IP_CT_IS_REPLY */
|
||||
|
||||
enum ip_conntrack_dir {
|
||||
IP_CT_DIR_ORIGINAL,
|
||||
IP_CT_DIR_REPLY,
|
||||
IP_CT_DIR_MAX
|
||||
};
|
||||
|
||||
/* The protocol-specific manipulable parts of the tuple: always in
|
||||
* network order
|
||||
*/
|
||||
union nf_conntrack_man_proto {
|
||||
/* Add other protocols here. */
|
||||
__be16 all;
|
||||
|
||||
struct {
|
||||
__be16 port;
|
||||
} tcp;
|
||||
struct {
|
||||
__be16 port;
|
||||
} udp;
|
||||
struct {
|
||||
__be16 id;
|
||||
} icmp;
|
||||
struct {
|
||||
__be16 port;
|
||||
} dccp;
|
||||
struct {
|
||||
__be16 port;
|
||||
} sctp;
|
||||
struct {
|
||||
__be16 key; /* GRE key is 32bit, PPtP only uses 16bit */
|
||||
} gre;
|
||||
};
|
||||
|
||||
#define CTINFO2DIR(ctinfo) ((ctinfo) >= IP_CT_IS_REPLY ? IP_CT_DIR_REPLY : IP_CT_DIR_ORIGINAL)
|
||||
|
||||
#endif /* _NF_CONNTRACK_TUPLE_COMMON_H */
|
55
src/basic/linux/netfilter/nf_nat.h
Normal file
55
src/basic/linux/netfilter/nf_nat.h
Normal file
@ -0,0 +1,55 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef _NETFILTER_NF_NAT_H
|
||||
#define _NETFILTER_NF_NAT_H
|
||||
|
||||
#include <linux/netfilter.h>
|
||||
#include <linux/netfilter/nf_conntrack_tuple_common.h>
|
||||
|
||||
#define NF_NAT_RANGE_MAP_IPS (1 << 0)
|
||||
#define NF_NAT_RANGE_PROTO_SPECIFIED (1 << 1)
|
||||
#define NF_NAT_RANGE_PROTO_RANDOM (1 << 2)
|
||||
#define NF_NAT_RANGE_PERSISTENT (1 << 3)
|
||||
#define NF_NAT_RANGE_PROTO_RANDOM_FULLY (1 << 4)
|
||||
#define NF_NAT_RANGE_PROTO_OFFSET (1 << 5)
|
||||
#define NF_NAT_RANGE_NETMAP (1 << 6)
|
||||
|
||||
#define NF_NAT_RANGE_PROTO_RANDOM_ALL \
|
||||
(NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PROTO_RANDOM_FULLY)
|
||||
|
||||
#define NF_NAT_RANGE_MASK \
|
||||
(NF_NAT_RANGE_MAP_IPS | NF_NAT_RANGE_PROTO_SPECIFIED | \
|
||||
NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PERSISTENT | \
|
||||
NF_NAT_RANGE_PROTO_RANDOM_FULLY | NF_NAT_RANGE_PROTO_OFFSET | \
|
||||
NF_NAT_RANGE_NETMAP)
|
||||
|
||||
struct nf_nat_ipv4_range {
|
||||
unsigned int flags;
|
||||
__be32 min_ip;
|
||||
__be32 max_ip;
|
||||
union nf_conntrack_man_proto min;
|
||||
union nf_conntrack_man_proto max;
|
||||
};
|
||||
|
||||
struct nf_nat_ipv4_multi_range_compat {
|
||||
unsigned int rangesize;
|
||||
struct nf_nat_ipv4_range range[1];
|
||||
};
|
||||
|
||||
struct nf_nat_range {
|
||||
unsigned int flags;
|
||||
union nf_inet_addr min_addr;
|
||||
union nf_inet_addr max_addr;
|
||||
union nf_conntrack_man_proto min_proto;
|
||||
union nf_conntrack_man_proto max_proto;
|
||||
};
|
||||
|
||||
struct nf_nat_range2 {
|
||||
unsigned int flags;
|
||||
union nf_inet_addr min_addr;
|
||||
union nf_inet_addr max_addr;
|
||||
union nf_conntrack_man_proto min_proto;
|
||||
union nf_conntrack_man_proto max_proto;
|
||||
union nf_conntrack_man_proto base_proto;
|
||||
};
|
||||
|
||||
#endif /* _NETFILTER_NF_NAT_H */
|
62
src/basic/linux/netfilter/nfnetlink_compat.h
Normal file
62
src/basic/linux/netfilter/nfnetlink_compat.h
Normal file
@ -0,0 +1,62 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef _NFNETLINK_COMPAT_H
|
||||
#define _NFNETLINK_COMPAT_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* Old nfnetlink macros for userspace */
|
||||
|
||||
/* nfnetlink groups: Up to 32 maximum */
|
||||
#define NF_NETLINK_CONNTRACK_NEW 0x00000001
|
||||
#define NF_NETLINK_CONNTRACK_UPDATE 0x00000002
|
||||
#define NF_NETLINK_CONNTRACK_DESTROY 0x00000004
|
||||
#define NF_NETLINK_CONNTRACK_EXP_NEW 0x00000008
|
||||
#define NF_NETLINK_CONNTRACK_EXP_UPDATE 0x00000010
|
||||
#define NF_NETLINK_CONNTRACK_EXP_DESTROY 0x00000020
|
||||
|
||||
/* Generic structure for encapsulation optional netfilter information.
|
||||
* It is reminiscent of sockaddr, but with sa_family replaced
|
||||
* with attribute type.
|
||||
* ! This should someday be put somewhere generic as now rtnetlink and
|
||||
* ! nfnetlink use the same attributes methods. - J. Schulist.
|
||||
*/
|
||||
|
||||
struct nfattr {
|
||||
__u16 nfa_len;
|
||||
__u16 nfa_type; /* we use 15 bits for the type, and the highest
|
||||
* bit to indicate whether the payload is nested */
|
||||
};
|
||||
|
||||
/* FIXME: Apart from NFNL_NFA_NESTED shamelessly copy and pasted from
|
||||
* rtnetlink.h, it's time to put this in a generic file */
|
||||
|
||||
#define NFNL_NFA_NEST 0x8000
|
||||
#define NFA_TYPE(attr) ((attr)->nfa_type & 0x7fff)
|
||||
|
||||
#define NFA_ALIGNTO 4
|
||||
#define NFA_ALIGN(len) (((len) + NFA_ALIGNTO - 1) & ~(NFA_ALIGNTO - 1))
|
||||
#define NFA_OK(nfa,len) ((len) > 0 && (nfa)->nfa_len >= sizeof(struct nfattr) \
|
||||
&& (nfa)->nfa_len <= (len))
|
||||
#define NFA_NEXT(nfa,attrlen) ((attrlen) -= NFA_ALIGN((nfa)->nfa_len), \
|
||||
(struct nfattr *)(((char *)(nfa)) + NFA_ALIGN((nfa)->nfa_len)))
|
||||
#define NFA_LENGTH(len) (NFA_ALIGN(sizeof(struct nfattr)) + (len))
|
||||
#define NFA_SPACE(len) NFA_ALIGN(NFA_LENGTH(len))
|
||||
#define NFA_DATA(nfa) ((void *)(((char *)(nfa)) + NFA_LENGTH(0)))
|
||||
#define NFA_PAYLOAD(nfa) ((int)((nfa)->nfa_len) - NFA_LENGTH(0))
|
||||
#define NFA_NEST(skb, type) \
|
||||
({ struct nfattr *__start = (struct nfattr *)skb_tail_pointer(skb); \
|
||||
NFA_PUT(skb, (NFNL_NFA_NEST | type), 0, NULL); \
|
||||
__start; })
|
||||
#define NFA_NEST_END(skb, start) \
|
||||
({ (start)->nfa_len = skb_tail_pointer(skb) - (unsigned char *)(start); \
|
||||
(skb)->len; })
|
||||
#define NFA_NEST_CANCEL(skb, start) \
|
||||
({ if (start) \
|
||||
skb_trim(skb, (unsigned char *) (start) - (skb)->data); \
|
||||
-1; })
|
||||
|
||||
#define NFM_NFA(n) ((struct nfattr *)(((char *)(n)) \
|
||||
+ NLMSG_ALIGN(sizeof(struct nfgenmsg))))
|
||||
#define NFM_PAYLOAD(n) NLMSG_PAYLOAD(n, sizeof(struct nfgenmsg))
|
||||
|
||||
#endif /* _NFNETLINK_COMPAT_H */
|
186
src/basic/linux/netfilter/x_tables.h
Normal file
186
src/basic/linux/netfilter/x_tables.h
Normal file
@ -0,0 +1,186 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef _X_TABLES_H
|
||||
#define _X_TABLES_H
|
||||
#include <linux/const.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#define XT_FUNCTION_MAXNAMELEN 30
|
||||
#define XT_EXTENSION_MAXNAMELEN 29
|
||||
#define XT_TABLE_MAXNAMELEN 32
|
||||
|
||||
struct xt_entry_match {
|
||||
union {
|
||||
struct {
|
||||
__u16 match_size;
|
||||
|
||||
/* Used by userspace */
|
||||
char name[XT_EXTENSION_MAXNAMELEN];
|
||||
__u8 revision;
|
||||
} user;
|
||||
struct {
|
||||
__u16 match_size;
|
||||
|
||||
/* Used inside the kernel */
|
||||
struct xt_match *match;
|
||||
} kernel;
|
||||
|
||||
/* Total length */
|
||||
__u16 match_size;
|
||||
} u;
|
||||
|
||||
unsigned char data[];
|
||||
};
|
||||
|
||||
struct xt_entry_target {
|
||||
union {
|
||||
struct {
|
||||
__u16 target_size;
|
||||
|
||||
/* Used by userspace */
|
||||
char name[XT_EXTENSION_MAXNAMELEN];
|
||||
__u8 revision;
|
||||
} user;
|
||||
struct {
|
||||
__u16 target_size;
|
||||
|
||||
/* Used inside the kernel */
|
||||
struct xt_target *target;
|
||||
} kernel;
|
||||
|
||||
/* Total length */
|
||||
__u16 target_size;
|
||||
} u;
|
||||
|
||||
unsigned char data[0];
|
||||
};
|
||||
|
||||
#define XT_TARGET_INIT(__name, __size) \
|
||||
{ \
|
||||
.target.u.user = { \
|
||||
.target_size = XT_ALIGN(__size), \
|
||||
.name = __name, \
|
||||
}, \
|
||||
}
|
||||
|
||||
struct xt_standard_target {
|
||||
struct xt_entry_target target;
|
||||
int verdict;
|
||||
};
|
||||
|
||||
struct xt_error_target {
|
||||
struct xt_entry_target target;
|
||||
char errorname[XT_FUNCTION_MAXNAMELEN];
|
||||
};
|
||||
|
||||
/* The argument to IPT_SO_GET_REVISION_*. Returns highest revision
|
||||
* kernel supports, if >= revision. */
|
||||
struct xt_get_revision {
|
||||
char name[XT_EXTENSION_MAXNAMELEN];
|
||||
__u8 revision;
|
||||
};
|
||||
|
||||
/* CONTINUE verdict for targets */
|
||||
#define XT_CONTINUE 0xFFFFFFFF
|
||||
|
||||
/* For standard target */
|
||||
#define XT_RETURN (-NF_REPEAT - 1)
|
||||
|
||||
/* this is a dummy structure to find out the alignment requirement for a struct
|
||||
* containing all the fundamental data types that are used in ipt_entry,
|
||||
* ip6t_entry and arpt_entry. This sucks, and it is a hack. It will be my
|
||||
* personal pleasure to remove it -HW
|
||||
*/
|
||||
struct _xt_align {
|
||||
__u8 u8;
|
||||
__u16 u16;
|
||||
__u32 u32;
|
||||
__u64 u64;
|
||||
};
|
||||
|
||||
#define XT_ALIGN(s) __ALIGN_KERNEL((s), __alignof__(struct _xt_align))
|
||||
|
||||
/* Standard return verdict, or do jump. */
|
||||
#define XT_STANDARD_TARGET ""
|
||||
/* Error verdict. */
|
||||
#define XT_ERROR_TARGET "ERROR"
|
||||
|
||||
#define SET_COUNTER(c,b,p) do { (c).bcnt = (b); (c).pcnt = (p); } while(0)
|
||||
#define ADD_COUNTER(c,b,p) do { (c).bcnt += (b); (c).pcnt += (p); } while(0)
|
||||
|
||||
struct xt_counters {
|
||||
__u64 pcnt, bcnt; /* Packet and byte counters */
|
||||
};
|
||||
|
||||
/* The argument to IPT_SO_ADD_COUNTERS. */
|
||||
struct xt_counters_info {
|
||||
/* Which table. */
|
||||
char name[XT_TABLE_MAXNAMELEN];
|
||||
|
||||
unsigned int num_counters;
|
||||
|
||||
/* The counters (actually `number' of these). */
|
||||
struct xt_counters counters[];
|
||||
};
|
||||
|
||||
#define XT_INV_PROTO 0x40 /* Invert the sense of PROTO. */
|
||||
|
||||
/* fn returns 0 to continue iteration */
|
||||
#define XT_MATCH_ITERATE(type, e, fn, args...) \
|
||||
({ \
|
||||
unsigned int __i; \
|
||||
int __ret = 0; \
|
||||
struct xt_entry_match *__m; \
|
||||
\
|
||||
for (__i = sizeof(type); \
|
||||
__i < (e)->target_offset; \
|
||||
__i += __m->u.match_size) { \
|
||||
__m = (void *)e + __i; \
|
||||
\
|
||||
__ret = fn(__m , ## args); \
|
||||
if (__ret != 0) \
|
||||
break; \
|
||||
} \
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* fn returns 0 to continue iteration */
|
||||
#define XT_ENTRY_ITERATE_CONTINUE(type, entries, size, n, fn, args...) \
|
||||
({ \
|
||||
unsigned int __i, __n; \
|
||||
int __ret = 0; \
|
||||
type *__entry; \
|
||||
\
|
||||
for (__i = 0, __n = 0; __i < (size); \
|
||||
__i += __entry->next_offset, __n++) { \
|
||||
__entry = (void *)(entries) + __i; \
|
||||
if (__n < n) \
|
||||
continue; \
|
||||
\
|
||||
__ret = fn(__entry , ## args); \
|
||||
if (__ret != 0) \
|
||||
break; \
|
||||
} \
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* fn returns 0 to continue iteration */
|
||||
#define XT_ENTRY_ITERATE(type, entries, size, fn, args...) \
|
||||
XT_ENTRY_ITERATE_CONTINUE(type, entries, size, 0, fn, args)
|
||||
|
||||
|
||||
/* pos is normally a struct ipt_entry/ip6t_entry/etc. */
|
||||
#define xt_entry_foreach(pos, ehead, esize) \
|
||||
for ((pos) = (typeof(pos))(ehead); \
|
||||
(pos) < (typeof(pos))((char *)(ehead) + (esize)); \
|
||||
(pos) = (typeof(pos))((char *)(pos) + (pos)->next_offset))
|
||||
|
||||
/* can only be xt_entry_match, so no use of typeof here */
|
||||
#define xt_ematch_foreach(pos, entry) \
|
||||
for ((pos) = (struct xt_entry_match *)entry->elems; \
|
||||
(pos) < (struct xt_entry_match *)((char *)(entry) + \
|
||||
(entry)->target_offset); \
|
||||
(pos) = (struct xt_entry_match *)((char *)(pos) + \
|
||||
(pos)->u.match_size))
|
||||
|
||||
|
||||
#endif /* _X_TABLES_H */
|
45
src/basic/linux/netfilter/xt_addrtype.h
Normal file
45
src/basic/linux/netfilter/xt_addrtype.h
Normal file
@ -0,0 +1,45 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef _XT_ADDRTYPE_H
|
||||
#define _XT_ADDRTYPE_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum {
|
||||
XT_ADDRTYPE_INVERT_SOURCE = 0x0001,
|
||||
XT_ADDRTYPE_INVERT_DEST = 0x0002,
|
||||
XT_ADDRTYPE_LIMIT_IFACE_IN = 0x0004,
|
||||
XT_ADDRTYPE_LIMIT_IFACE_OUT = 0x0008,
|
||||
};
|
||||
|
||||
|
||||
/* rtn_type enum values from rtnetlink.h, but shifted */
|
||||
enum {
|
||||
XT_ADDRTYPE_UNSPEC = 1 << 0,
|
||||
XT_ADDRTYPE_UNICAST = 1 << 1, /* 1 << RTN_UNICAST */
|
||||
XT_ADDRTYPE_LOCAL = 1 << 2, /* 1 << RTN_LOCAL, etc */
|
||||
XT_ADDRTYPE_BROADCAST = 1 << 3,
|
||||
XT_ADDRTYPE_ANYCAST = 1 << 4,
|
||||
XT_ADDRTYPE_MULTICAST = 1 << 5,
|
||||
XT_ADDRTYPE_BLACKHOLE = 1 << 6,
|
||||
XT_ADDRTYPE_UNREACHABLE = 1 << 7,
|
||||
XT_ADDRTYPE_PROHIBIT = 1 << 8,
|
||||
XT_ADDRTYPE_THROW = 1 << 9,
|
||||
XT_ADDRTYPE_NAT = 1 << 10,
|
||||
XT_ADDRTYPE_XRESOLVE = 1 << 11,
|
||||
};
|
||||
|
||||
struct xt_addrtype_info_v1 {
|
||||
__u16 source; /* source-type mask */
|
||||
__u16 dest; /* dest-type mask */
|
||||
__u32 flags;
|
||||
};
|
||||
|
||||
/* revision 0 */
|
||||
struct xt_addrtype_info {
|
||||
__u16 source; /* source-type mask */
|
||||
__u16 dest; /* dest-type mask */
|
||||
__u32 invert_source;
|
||||
__u32 invert_dest;
|
||||
};
|
||||
|
||||
#endif
|
37
src/basic/linux/netfilter/xt_tcpudp.h
Normal file
37
src/basic/linux/netfilter/xt_tcpudp.h
Normal file
@ -0,0 +1,37 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef _XT_TCPUDP_H
|
||||
#define _XT_TCPUDP_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* TCP matching stuff */
|
||||
struct xt_tcp {
|
||||
__u16 spts[2]; /* Source port range. */
|
||||
__u16 dpts[2]; /* Destination port range. */
|
||||
__u8 option; /* TCP Option iff non-zero*/
|
||||
__u8 flg_mask; /* TCP flags mask byte */
|
||||
__u8 flg_cmp; /* TCP flags compare byte */
|
||||
__u8 invflags; /* Inverse flags */
|
||||
};
|
||||
|
||||
/* Values for "inv" field in struct ipt_tcp. */
|
||||
#define XT_TCP_INV_SRCPT 0x01 /* Invert the sense of source ports. */
|
||||
#define XT_TCP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */
|
||||
#define XT_TCP_INV_FLAGS 0x04 /* Invert the sense of TCP flags. */
|
||||
#define XT_TCP_INV_OPTION 0x08 /* Invert the sense of option test. */
|
||||
#define XT_TCP_INV_MASK 0x0F /* All possible flags. */
|
||||
|
||||
/* UDP matching stuff */
|
||||
struct xt_udp {
|
||||
__u16 spts[2]; /* Source port range. */
|
||||
__u16 dpts[2]; /* Destination port range. */
|
||||
__u8 invflags; /* Inverse flags */
|
||||
};
|
||||
|
||||
/* Values for "invflags" field in struct ipt_udp. */
|
||||
#define XT_UDP_INV_SRCPT 0x01 /* Invert the sense of source ports. */
|
||||
#define XT_UDP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */
|
||||
#define XT_UDP_INV_MASK 0x03 /* All possible flags. */
|
||||
|
||||
|
||||
#endif
|
53
src/basic/linux/netfilter_ipv4.h
Normal file
53
src/basic/linux/netfilter_ipv4.h
Normal file
@ -0,0 +1,53 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
/* IPv4-specific defines for netfilter.
|
||||
* (C)1998 Rusty Russell -- This code is GPL.
|
||||
*/
|
||||
#ifndef __LINUX_IP_NETFILTER_H
|
||||
#define __LINUX_IP_NETFILTER_H
|
||||
|
||||
|
||||
#include <linux/netfilter.h>
|
||||
|
||||
/* only for userspace compatibility */
|
||||
|
||||
#include <limits.h> /* for INT_MIN, INT_MAX */
|
||||
|
||||
/* IP Hooks */
|
||||
/* After promisc drops, checksum checks. */
|
||||
#define NF_IP_PRE_ROUTING 0
|
||||
/* If the packet is destined for this box. */
|
||||
#define NF_IP_LOCAL_IN 1
|
||||
/* If the packet is destined for another interface. */
|
||||
#define NF_IP_FORWARD 2
|
||||
/* Packets coming from a local process. */
|
||||
#define NF_IP_LOCAL_OUT 3
|
||||
/* Packets about to hit the wire. */
|
||||
#define NF_IP_POST_ROUTING 4
|
||||
#define NF_IP_NUMHOOKS 5
|
||||
|
||||
enum nf_ip_hook_priorities {
|
||||
NF_IP_PRI_FIRST = INT_MIN,
|
||||
NF_IP_PRI_RAW_BEFORE_DEFRAG = -450,
|
||||
NF_IP_PRI_CONNTRACK_DEFRAG = -400,
|
||||
NF_IP_PRI_RAW = -300,
|
||||
NF_IP_PRI_SELINUX_FIRST = -225,
|
||||
NF_IP_PRI_CONNTRACK = -200,
|
||||
NF_IP_PRI_MANGLE = -150,
|
||||
NF_IP_PRI_NAT_DST = -100,
|
||||
NF_IP_PRI_FILTER = 0,
|
||||
NF_IP_PRI_SECURITY = 50,
|
||||
NF_IP_PRI_NAT_SRC = 100,
|
||||
NF_IP_PRI_SELINUX_LAST = 225,
|
||||
NF_IP_PRI_CONNTRACK_HELPER = 300,
|
||||
NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX,
|
||||
NF_IP_PRI_LAST = INT_MAX,
|
||||
};
|
||||
|
||||
/* Arguments for setsockopt SOL_IP: */
|
||||
/* 2.0 firewalling went from 64 through 71 (and +256, +512, etc). */
|
||||
/* 2.2 firewalling (+ masq) went from 64 through 76 */
|
||||
/* 2.4 firewalling went 64 through 67. */
|
||||
#define SO_ORIGINAL_DST 80
|
||||
|
||||
|
||||
#endif /* __LINUX_IP_NETFILTER_H */
|
229
src/basic/linux/netfilter_ipv4/ip_tables.h
Normal file
229
src/basic/linux/netfilter_ipv4/ip_tables.h
Normal file
@ -0,0 +1,229 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
/*
|
||||
* 25-Jul-1998 Major changes to allow for ip chain table
|
||||
*
|
||||
* 3-Jan-2000 Named tables to allow packet selection for different uses.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Format of an IP firewall descriptor
|
||||
*
|
||||
* src, dst, src_mask, dst_mask are always stored in network byte order.
|
||||
* flags are stored in host byte order (of course).
|
||||
* Port numbers are stored in HOST byte order.
|
||||
*/
|
||||
|
||||
#ifndef _IPTABLES_H
|
||||
#define _IPTABLES_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <linux/if.h>
|
||||
#include <linux/netfilter_ipv4.h>
|
||||
|
||||
#include <linux/netfilter/x_tables.h>
|
||||
|
||||
#define IPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
|
||||
#define IPT_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN
|
||||
#define ipt_match xt_match
|
||||
#define ipt_target xt_target
|
||||
#define ipt_table xt_table
|
||||
#define ipt_get_revision xt_get_revision
|
||||
#define ipt_entry_match xt_entry_match
|
||||
#define ipt_entry_target xt_entry_target
|
||||
#define ipt_standard_target xt_standard_target
|
||||
#define ipt_error_target xt_error_target
|
||||
#define ipt_counters xt_counters
|
||||
#define IPT_CONTINUE XT_CONTINUE
|
||||
#define IPT_RETURN XT_RETURN
|
||||
|
||||
/* This group is older than old (iptables < v1.4.0-rc1~89) */
|
||||
#include <linux/netfilter/xt_tcpudp.h>
|
||||
#define ipt_udp xt_udp
|
||||
#define ipt_tcp xt_tcp
|
||||
#define IPT_TCP_INV_SRCPT XT_TCP_INV_SRCPT
|
||||
#define IPT_TCP_INV_DSTPT XT_TCP_INV_DSTPT
|
||||
#define IPT_TCP_INV_FLAGS XT_TCP_INV_FLAGS
|
||||
#define IPT_TCP_INV_OPTION XT_TCP_INV_OPTION
|
||||
#define IPT_TCP_INV_MASK XT_TCP_INV_MASK
|
||||
#define IPT_UDP_INV_SRCPT XT_UDP_INV_SRCPT
|
||||
#define IPT_UDP_INV_DSTPT XT_UDP_INV_DSTPT
|
||||
#define IPT_UDP_INV_MASK XT_UDP_INV_MASK
|
||||
|
||||
/* The argument to IPT_SO_ADD_COUNTERS. */
|
||||
#define ipt_counters_info xt_counters_info
|
||||
/* Standard return verdict, or do jump. */
|
||||
#define IPT_STANDARD_TARGET XT_STANDARD_TARGET
|
||||
/* Error verdict. */
|
||||
#define IPT_ERROR_TARGET XT_ERROR_TARGET
|
||||
|
||||
/* fn returns 0 to continue iteration */
|
||||
#define IPT_MATCH_ITERATE(e, fn, args...) \
|
||||
XT_MATCH_ITERATE(struct ipt_entry, e, fn, ## args)
|
||||
|
||||
/* fn returns 0 to continue iteration */
|
||||
#define IPT_ENTRY_ITERATE(entries, size, fn, args...) \
|
||||
XT_ENTRY_ITERATE(struct ipt_entry, entries, size, fn, ## args)
|
||||
|
||||
/* Yes, Virginia, you have to zero the padding. */
|
||||
struct ipt_ip {
|
||||
/* Source and destination IP addr */
|
||||
struct in_addr src, dst;
|
||||
/* Mask for src and dest IP addr */
|
||||
struct in_addr smsk, dmsk;
|
||||
char iniface[IFNAMSIZ], outiface[IFNAMSIZ];
|
||||
unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
|
||||
|
||||
/* Protocol, 0 = ANY */
|
||||
__u16 proto;
|
||||
|
||||
/* Flags word */
|
||||
__u8 flags;
|
||||
/* Inverse flags */
|
||||
__u8 invflags;
|
||||
};
|
||||
|
||||
/* Values for "flag" field in struct ipt_ip (general ip structure). */
|
||||
#define IPT_F_FRAG 0x01 /* Set if rule is a fragment rule */
|
||||
#define IPT_F_GOTO 0x02 /* Set if jump is a goto */
|
||||
#define IPT_F_MASK 0x03 /* All possible flag bits mask. */
|
||||
|
||||
/* Values for "inv" field in struct ipt_ip. */
|
||||
#define IPT_INV_VIA_IN 0x01 /* Invert the sense of IN IFACE. */
|
||||
#define IPT_INV_VIA_OUT 0x02 /* Invert the sense of OUT IFACE */
|
||||
#define IPT_INV_TOS 0x04 /* Invert the sense of TOS. */
|
||||
#define IPT_INV_SRCIP 0x08 /* Invert the sense of SRC IP. */
|
||||
#define IPT_INV_DSTIP 0x10 /* Invert the sense of DST OP. */
|
||||
#define IPT_INV_FRAG 0x20 /* Invert the sense of FRAG. */
|
||||
#define IPT_INV_PROTO XT_INV_PROTO
|
||||
#define IPT_INV_MASK 0x7F /* All possible flag bits mask. */
|
||||
|
||||
/* This structure defines each of the firewall rules. Consists of 3
|
||||
parts which are 1) general IP header stuff 2) match specific
|
||||
stuff 3) the target to perform if the rule matches */
|
||||
struct ipt_entry {
|
||||
struct ipt_ip ip;
|
||||
|
||||
/* Mark with fields that we care about. */
|
||||
unsigned int nfcache;
|
||||
|
||||
/* Size of ipt_entry + matches */
|
||||
__u16 target_offset;
|
||||
/* Size of ipt_entry + matches + target */
|
||||
__u16 next_offset;
|
||||
|
||||
/* Back pointer */
|
||||
unsigned int comefrom;
|
||||
|
||||
/* Packet and byte counters. */
|
||||
struct xt_counters counters;
|
||||
|
||||
/* The matches (if any), then the target. */
|
||||
unsigned char elems[];
|
||||
};
|
||||
|
||||
/*
|
||||
* New IP firewall options for [gs]etsockopt at the RAW IP level.
|
||||
* Unlike BSD Linux inherits IP options so you don't have to use a raw
|
||||
* socket for this. Instead we check rights in the calls.
|
||||
*
|
||||
* ATTENTION: check linux/in.h before adding new number here.
|
||||
*/
|
||||
#define IPT_BASE_CTL 64
|
||||
|
||||
#define IPT_SO_SET_REPLACE (IPT_BASE_CTL)
|
||||
#define IPT_SO_SET_ADD_COUNTERS (IPT_BASE_CTL + 1)
|
||||
#define IPT_SO_SET_MAX IPT_SO_SET_ADD_COUNTERS
|
||||
|
||||
#define IPT_SO_GET_INFO (IPT_BASE_CTL)
|
||||
#define IPT_SO_GET_ENTRIES (IPT_BASE_CTL + 1)
|
||||
#define IPT_SO_GET_REVISION_MATCH (IPT_BASE_CTL + 2)
|
||||
#define IPT_SO_GET_REVISION_TARGET (IPT_BASE_CTL + 3)
|
||||
#define IPT_SO_GET_MAX IPT_SO_GET_REVISION_TARGET
|
||||
|
||||
/* ICMP matching stuff */
|
||||
struct ipt_icmp {
|
||||
__u8 type; /* type to match */
|
||||
__u8 code[2]; /* range of code */
|
||||
__u8 invflags; /* Inverse flags */
|
||||
};
|
||||
|
||||
/* Values for "inv" field for struct ipt_icmp. */
|
||||
#define IPT_ICMP_INV 0x01 /* Invert the sense of type/code test */
|
||||
|
||||
/* The argument to IPT_SO_GET_INFO */
|
||||
struct ipt_getinfo {
|
||||
/* Which table: caller fills this in. */
|
||||
char name[XT_TABLE_MAXNAMELEN];
|
||||
|
||||
/* Kernel fills these in. */
|
||||
/* Which hook entry points are valid: bitmask */
|
||||
unsigned int valid_hooks;
|
||||
|
||||
/* Hook entry points: one per netfilter hook. */
|
||||
unsigned int hook_entry[NF_INET_NUMHOOKS];
|
||||
|
||||
/* Underflow points. */
|
||||
unsigned int underflow[NF_INET_NUMHOOKS];
|
||||
|
||||
/* Number of entries */
|
||||
unsigned int num_entries;
|
||||
|
||||
/* Size of entries. */
|
||||
unsigned int size;
|
||||
};
|
||||
|
||||
/* The argument to IPT_SO_SET_REPLACE. */
|
||||
struct ipt_replace {
|
||||
/* Which table. */
|
||||
char name[XT_TABLE_MAXNAMELEN];
|
||||
|
||||
/* Which hook entry points are valid: bitmask. You can't
|
||||
change this. */
|
||||
unsigned int valid_hooks;
|
||||
|
||||
/* Number of entries */
|
||||
unsigned int num_entries;
|
||||
|
||||
/* Total size of new entries */
|
||||
unsigned int size;
|
||||
|
||||
/* Hook entry points. */
|
||||
unsigned int hook_entry[NF_INET_NUMHOOKS];
|
||||
|
||||
/* Underflow points. */
|
||||
unsigned int underflow[NF_INET_NUMHOOKS];
|
||||
|
||||
/* Information about old entries: */
|
||||
/* Number of counters (must be equal to current number of entries). */
|
||||
unsigned int num_counters;
|
||||
/* The old entries' counters. */
|
||||
struct xt_counters *counters;
|
||||
|
||||
/* The entries (hang off end: not really an array). */
|
||||
struct ipt_entry entries[];
|
||||
};
|
||||
|
||||
/* The argument to IPT_SO_GET_ENTRIES. */
|
||||
struct ipt_get_entries {
|
||||
/* Which table: user fills this in. */
|
||||
char name[XT_TABLE_MAXNAMELEN];
|
||||
|
||||
/* User fills this in: total entry size. */
|
||||
unsigned int size;
|
||||
|
||||
/* The entries. */
|
||||
struct ipt_entry entrytable[];
|
||||
};
|
||||
|
||||
/* Helper functions */
|
||||
static __inline__ struct xt_entry_target *
|
||||
ipt_get_target(struct ipt_entry *e)
|
||||
{
|
||||
return (struct xt_entry_target *)((char *)e + e->target_offset);
|
||||
}
|
||||
|
||||
/*
|
||||
* Main firewall chains definitions and global var's definitions.
|
||||
*/
|
||||
#endif /* _IPTABLES_H */
|
38
src/basic/linux/socket.h
Normal file
38
src/basic/linux/socket.h
Normal file
@ -0,0 +1,38 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef _LINUX_SOCKET_H
|
||||
#define _LINUX_SOCKET_H
|
||||
|
||||
/*
|
||||
* Desired design of maximum size and alignment (see RFC2553)
|
||||
*/
|
||||
#define _K_SS_MAXSIZE 128 /* Implementation specific max size */
|
||||
|
||||
typedef unsigned short __kernel_sa_family_t;
|
||||
|
||||
/*
|
||||
* The definition uses anonymous union and struct in order to control the
|
||||
* default alignment.
|
||||
*/
|
||||
struct __kernel_sockaddr_storage {
|
||||
union {
|
||||
struct {
|
||||
__kernel_sa_family_t ss_family; /* address family */
|
||||
/* Following field(s) are implementation specific */
|
||||
char __data[_K_SS_MAXSIZE - sizeof(unsigned short)];
|
||||
/* space to achieve desired size, */
|
||||
/* _SS_MAXSIZE value minus size of ss_family */
|
||||
};
|
||||
void *__align; /* implementation specific desired alignment */
|
||||
};
|
||||
};
|
||||
|
||||
#define SOCK_SNDBUF_LOCK 1
|
||||
#define SOCK_RCVBUF_LOCK 2
|
||||
|
||||
#define SOCK_BUF_LOCK_MASK (SOCK_SNDBUF_LOCK | SOCK_RCVBUF_LOCK)
|
||||
|
||||
#define SOCK_TXREHASH_DEFAULT 255
|
||||
#define SOCK_TXREHASH_DISABLED 0
|
||||
#define SOCK_TXREHASH_ENABLED 1
|
||||
|
||||
#endif /* _LINUX_SOCKET_H */
|
174
src/basic/linux/sockios.h
Normal file
174
src/basic/linux/sockios.h
Normal file
@ -0,0 +1,174 @@
|
||||
/* 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 of the socket-level I/O control calls.
|
||||
*
|
||||
* Version: @(#)sockios.h 1.0.2 03/09/93
|
||||
*
|
||||
* Authors: Ross Biro
|
||||
* 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 _LINUX_SOCKIOS_H
|
||||
#define _LINUX_SOCKIOS_H
|
||||
|
||||
#include <asm/bitsperlong.h>
|
||||
#include <asm/sockios.h>
|
||||
|
||||
/* Linux-specific socket ioctls */
|
||||
#define SIOCINQ FIONREAD
|
||||
#define SIOCOUTQ TIOCOUTQ /* output queue size (not sent + not acked) */
|
||||
|
||||
#define SOCK_IOC_TYPE 0x89
|
||||
|
||||
/*
|
||||
* the timeval/timespec data structure layout is defined by libc,
|
||||
* so we need to cover both possible versions on 32-bit.
|
||||
*/
|
||||
/* Get stamp (timeval) */
|
||||
#define SIOCGSTAMP_NEW _IOR(SOCK_IOC_TYPE, 0x06, long long[2])
|
||||
/* Get stamp (timespec) */
|
||||
#define SIOCGSTAMPNS_NEW _IOR(SOCK_IOC_TYPE, 0x07, long long[2])
|
||||
|
||||
#if __BITS_PER_LONG == 64 || (defined(__x86_64__) && defined(__ILP32__))
|
||||
/* on 64-bit and x32, avoid the ?: operator */
|
||||
#define SIOCGSTAMP SIOCGSTAMP_OLD
|
||||
#define SIOCGSTAMPNS SIOCGSTAMPNS_OLD
|
||||
#else
|
||||
#define SIOCGSTAMP ((sizeof(struct timeval)) == 8 ? \
|
||||
SIOCGSTAMP_OLD : SIOCGSTAMP_NEW)
|
||||
#define SIOCGSTAMPNS ((sizeof(struct timespec)) == 8 ? \
|
||||
SIOCGSTAMPNS_OLD : SIOCGSTAMPNS_NEW)
|
||||
#endif
|
||||
|
||||
/* Routing table calls. */
|
||||
#define SIOCADDRT 0x890B /* add routing table entry */
|
||||
#define SIOCDELRT 0x890C /* delete routing table entry */
|
||||
#define SIOCRTMSG 0x890D /* unused */
|
||||
|
||||
/* Socket configuration controls. */
|
||||
#define SIOCGIFNAME 0x8910 /* get iface name */
|
||||
#define SIOCSIFLINK 0x8911 /* set iface channel */
|
||||
#define SIOCGIFCONF 0x8912 /* get iface list */
|
||||
#define SIOCGIFFLAGS 0x8913 /* get flags */
|
||||
#define SIOCSIFFLAGS 0x8914 /* set flags */
|
||||
#define SIOCGIFADDR 0x8915 /* get PA address */
|
||||
#define SIOCSIFADDR 0x8916 /* set PA address */
|
||||
#define SIOCGIFDSTADDR 0x8917 /* get remote PA address */
|
||||
#define SIOCSIFDSTADDR 0x8918 /* set remote PA address */
|
||||
#define SIOCGIFBRDADDR 0x8919 /* get broadcast PA address */
|
||||
#define SIOCSIFBRDADDR 0x891a /* set broadcast PA address */
|
||||
#define SIOCGIFNETMASK 0x891b /* get network PA mask */
|
||||
#define SIOCSIFNETMASK 0x891c /* set network PA mask */
|
||||
#define SIOCGIFMETRIC 0x891d /* get metric */
|
||||
#define SIOCSIFMETRIC 0x891e /* set metric */
|
||||
#define SIOCGIFMEM 0x891f /* get memory address (BSD) */
|
||||
#define SIOCSIFMEM 0x8920 /* set memory address (BSD) */
|
||||
#define SIOCGIFMTU 0x8921 /* get MTU size */
|
||||
#define SIOCSIFMTU 0x8922 /* set MTU size */
|
||||
#define SIOCSIFNAME 0x8923 /* set interface name */
|
||||
#define SIOCSIFHWADDR 0x8924 /* set hardware address */
|
||||
#define SIOCGIFENCAP 0x8925 /* get/set encapsulations */
|
||||
#define SIOCSIFENCAP 0x8926
|
||||
#define SIOCGIFHWADDR 0x8927 /* Get hardware address */
|
||||
#define SIOCGIFSLAVE 0x8929 /* Driver slaving support */
|
||||
#define SIOCSIFSLAVE 0x8930
|
||||
#define SIOCADDMULTI 0x8931 /* Multicast address lists */
|
||||
#define SIOCDELMULTI 0x8932
|
||||
#define SIOCGIFINDEX 0x8933 /* name -> if_index mapping */
|
||||
#define SIOGIFINDEX SIOCGIFINDEX /* misprint compatibility :-) */
|
||||
#define SIOCSIFPFLAGS 0x8934 /* set/get extended flags set */
|
||||
#define SIOCGIFPFLAGS 0x8935
|
||||
#define SIOCDIFADDR 0x8936 /* delete PA address */
|
||||
#define SIOCSIFHWBROADCAST 0x8937 /* set hardware broadcast addr */
|
||||
#define SIOCGIFCOUNT 0x8938 /* get number of devices */
|
||||
|
||||
#define SIOCGIFBR 0x8940 /* Bridging support */
|
||||
#define SIOCSIFBR 0x8941 /* Set bridging options */
|
||||
|
||||
#define SIOCGIFTXQLEN 0x8942 /* Get the tx queue length */
|
||||
#define SIOCSIFTXQLEN 0x8943 /* Set the tx queue length */
|
||||
|
||||
/* SIOCGIFDIVERT was: 0x8944 Frame diversion support */
|
||||
/* SIOCSIFDIVERT was: 0x8945 Set frame diversion options */
|
||||
|
||||
#define SIOCETHTOOL 0x8946 /* Ethtool interface */
|
||||
|
||||
#define SIOCGMIIPHY 0x8947 /* Get address of MII PHY in use. */
|
||||
#define SIOCGMIIREG 0x8948 /* Read MII PHY register. */
|
||||
#define SIOCSMIIREG 0x8949 /* Write MII PHY register. */
|
||||
|
||||
#define SIOCWANDEV 0x894A /* get/set netdev parameters */
|
||||
|
||||
#define SIOCOUTQNSD 0x894B /* output queue size (not sent only) */
|
||||
#define SIOCGSKNS 0x894C /* get socket network namespace */
|
||||
|
||||
/* ARP cache control calls. */
|
||||
/* 0x8950 - 0x8952 * obsolete calls, don't re-use */
|
||||
#define SIOCDARP 0x8953 /* delete ARP table entry */
|
||||
#define SIOCGARP 0x8954 /* get ARP table entry */
|
||||
#define SIOCSARP 0x8955 /* set ARP table entry */
|
||||
|
||||
/* RARP cache control calls. */
|
||||
#define SIOCDRARP 0x8960 /* delete RARP table entry */
|
||||
#define SIOCGRARP 0x8961 /* get RARP table entry */
|
||||
#define SIOCSRARP 0x8962 /* set RARP table entry */
|
||||
|
||||
/* Driver configuration calls */
|
||||
|
||||
#define SIOCGIFMAP 0x8970 /* Get device parameters */
|
||||
#define SIOCSIFMAP 0x8971 /* Set device parameters */
|
||||
|
||||
/* DLCI configuration calls */
|
||||
|
||||
#define SIOCADDDLCI 0x8980 /* Create new DLCI device */
|
||||
#define SIOCDELDLCI 0x8981 /* Delete DLCI device */
|
||||
|
||||
#define SIOCGIFVLAN 0x8982 /* 802.1Q VLAN support */
|
||||
#define SIOCSIFVLAN 0x8983 /* Set 802.1Q VLAN options */
|
||||
|
||||
/* bonding calls */
|
||||
|
||||
#define SIOCBONDENSLAVE 0x8990 /* enslave a device to the bond */
|
||||
#define SIOCBONDRELEASE 0x8991 /* release a slave from the bond*/
|
||||
#define SIOCBONDSETHWADDR 0x8992 /* set the hw addr of the bond */
|
||||
#define SIOCBONDSLAVEINFOQUERY 0x8993 /* rtn info about slave state */
|
||||
#define SIOCBONDINFOQUERY 0x8994 /* rtn info about bond state */
|
||||
#define SIOCBONDCHANGEACTIVE 0x8995 /* update to a new active slave */
|
||||
|
||||
/* bridge calls */
|
||||
#define SIOCBRADDBR 0x89a0 /* create new bridge device */
|
||||
#define SIOCBRDELBR 0x89a1 /* remove bridge device */
|
||||
#define SIOCBRADDIF 0x89a2 /* add interface to bridge */
|
||||
#define SIOCBRDELIF 0x89a3 /* remove interface from bridge */
|
||||
|
||||
/* hardware time stamping: parameters in linux/net_tstamp.h */
|
||||
#define SIOCSHWTSTAMP 0x89b0 /* set and get config */
|
||||
#define SIOCGHWTSTAMP 0x89b1 /* get config */
|
||||
|
||||
/* Device private ioctl calls */
|
||||
|
||||
/*
|
||||
* These 16 ioctls are available to devices via the do_ioctl() device
|
||||
* vector. Each device should include this file and redefine these names
|
||||
* as their own. Because these are device dependent it is a good idea
|
||||
* _NOT_ to issue them to random objects and hope.
|
||||
*
|
||||
* THESE IOCTLS ARE _DEPRECATED_ AND WILL DISAPPEAR IN 2.5.X -DaveM
|
||||
*/
|
||||
|
||||
#define SIOCDEVPRIVATE 0x89F0 /* to 89FF */
|
||||
|
||||
/*
|
||||
* These 16 ioctl calls are protocol private
|
||||
*/
|
||||
|
||||
#define SIOCPROTOPRIVATE 0x89E0 /* to 89EF */
|
||||
#endif /* _LINUX_SOCKIOS_H */
|
13
src/basic/linux/veth.h
Normal file
13
src/basic/linux/veth.h
Normal file
@ -0,0 +1,13 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef __NET_VETH_H_
|
||||
#define __NET_VETH_H_
|
||||
|
||||
enum {
|
||||
VETH_INFO_UNSPEC,
|
||||
VETH_INFO_PEER,
|
||||
|
||||
__VETH_INFO_MAX
|
||||
#define VETH_INFO_MAX (__VETH_INFO_MAX - 1)
|
||||
};
|
||||
|
||||
#endif
|
209
src/basic/linux/vm_sockets.h
Normal file
209
src/basic/linux/vm_sockets.h
Normal file
@ -0,0 +1,209 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
/*
|
||||
* VMware vSockets Driver
|
||||
*
|
||||
* Copyright (C) 2007-2013 VMware, Inc. All rights reserved.
|
||||
*
|
||||
* 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 version 2 and no later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*/
|
||||
|
||||
#ifndef _VM_SOCKETS_H
|
||||
#define _VM_SOCKETS_H
|
||||
|
||||
#include <linux/socket.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
/* Option name for STREAM socket buffer size. Use as the option name in
|
||||
* setsockopt(3) or getsockopt(3) to set or get an unsigned long long that
|
||||
* specifies the size of the buffer underlying a vSockets STREAM socket.
|
||||
* Value is clamped to the MIN and MAX.
|
||||
*/
|
||||
|
||||
#define SO_VM_SOCKETS_BUFFER_SIZE 0
|
||||
|
||||
/* Option name for STREAM socket minimum buffer size. Use as the option name
|
||||
* in setsockopt(3) or getsockopt(3) to set or get an unsigned long long that
|
||||
* specifies the minimum size allowed for the buffer underlying a vSockets
|
||||
* STREAM socket.
|
||||
*/
|
||||
|
||||
#define SO_VM_SOCKETS_BUFFER_MIN_SIZE 1
|
||||
|
||||
/* Option name for STREAM socket maximum buffer size. Use as the option name
|
||||
* in setsockopt(3) or getsockopt(3) to set or get an unsigned long long
|
||||
* that specifies the maximum size allowed for the buffer underlying a
|
||||
* vSockets STREAM socket.
|
||||
*/
|
||||
|
||||
#define SO_VM_SOCKETS_BUFFER_MAX_SIZE 2
|
||||
|
||||
/* Option name for socket peer's host-specific VM ID. Use as the option name
|
||||
* in getsockopt(3) to get a host-specific identifier for the peer endpoint's
|
||||
* VM. The identifier is a signed integer.
|
||||
* Only available for hypervisor endpoints.
|
||||
*/
|
||||
|
||||
#define SO_VM_SOCKETS_PEER_HOST_VM_ID 3
|
||||
|
||||
/* Option name for determining if a socket is trusted. Use as the option name
|
||||
* in getsockopt(3) to determine if a socket is trusted. The value is a
|
||||
* signed integer.
|
||||
*/
|
||||
|
||||
#define SO_VM_SOCKETS_TRUSTED 5
|
||||
|
||||
/* Option name for STREAM socket connection timeout. Use as the option name
|
||||
* in setsockopt(3) or getsockopt(3) to set or get the connection
|
||||
* timeout for a STREAM socket.
|
||||
*/
|
||||
|
||||
#define SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD 6
|
||||
|
||||
/* Option name for using non-blocking send/receive. Use as the option name
|
||||
* for setsockopt(3) or getsockopt(3) to set or get the non-blocking
|
||||
* transmit/receive flag for a STREAM socket. This flag determines whether
|
||||
* send() and recv() can be called in non-blocking contexts for the given
|
||||
* socket. The value is a signed integer.
|
||||
*
|
||||
* This option is only relevant to kernel endpoints, where descheduling the
|
||||
* thread of execution is not allowed, for example, while holding a spinlock.
|
||||
* It is not to be confused with conventional non-blocking socket operations.
|
||||
*
|
||||
* Only available for hypervisor endpoints.
|
||||
*/
|
||||
|
||||
#define SO_VM_SOCKETS_NONBLOCK_TXRX 7
|
||||
|
||||
#define SO_VM_SOCKETS_CONNECT_TIMEOUT_NEW 8
|
||||
|
||||
#if __BITS_PER_LONG == 64 || (defined(__x86_64__) && defined(__ILP32__))
|
||||
#define SO_VM_SOCKETS_CONNECT_TIMEOUT SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD
|
||||
#else
|
||||
#define SO_VM_SOCKETS_CONNECT_TIMEOUT \
|
||||
(sizeof(time_t) == sizeof(__kernel_long_t) ? SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD : SO_VM_SOCKETS_CONNECT_TIMEOUT_NEW)
|
||||
#endif
|
||||
|
||||
/* The vSocket equivalent of INADDR_ANY. This works for the svm_cid field of
|
||||
* sockaddr_vm and indicates the context ID of the current endpoint.
|
||||
*/
|
||||
|
||||
#define VMADDR_CID_ANY -1U
|
||||
|
||||
/* Bind to any available port. Works for the svm_port field of
|
||||
* sockaddr_vm.
|
||||
*/
|
||||
|
||||
#define VMADDR_PORT_ANY -1U
|
||||
|
||||
/* Use this as the destination CID in an address when referring to the
|
||||
* hypervisor. VMCI relies on it being 0, but this would be useful for other
|
||||
* transports too.
|
||||
*/
|
||||
|
||||
#define VMADDR_CID_HYPERVISOR 0
|
||||
|
||||
/* Use this as the destination CID in an address when referring to the
|
||||
* local communication (loopback).
|
||||
* (This was VMADDR_CID_RESERVED, but even VMCI doesn't use it anymore,
|
||||
* it was a legacy value from an older release).
|
||||
*/
|
||||
|
||||
#define VMADDR_CID_LOCAL 1
|
||||
|
||||
/* Use this as the destination CID in an address when referring to the host
|
||||
* (any process other than the hypervisor). VMCI relies on it being 2, but
|
||||
* this would be useful for other transports too.
|
||||
*/
|
||||
|
||||
#define VMADDR_CID_HOST 2
|
||||
|
||||
/* The current default use case for the vsock channel is the following:
|
||||
* local vsock communication between guest and host and nested VMs setup.
|
||||
* In addition to this, implicitly, the vsock packets are forwarded to the host
|
||||
* if no host->guest vsock transport is set.
|
||||
*
|
||||
* Set this flag value in the sockaddr_vm corresponding field if the vsock
|
||||
* packets need to be always forwarded to the host. Using this behavior,
|
||||
* vsock communication between sibling VMs can be setup.
|
||||
*
|
||||
* This way can explicitly distinguish between vsock channels created for
|
||||
* different use cases, such as nested VMs (or local communication between
|
||||
* guest and host) and sibling VMs.
|
||||
*
|
||||
* The flag can be set in the connect logic in the user space application flow.
|
||||
* In the listen logic (from kernel space) the flag is set on the remote peer
|
||||
* address. This happens for an incoming connection when it is routed from the
|
||||
* host and comes from the guest (local CID and remote CID > VMADDR_CID_HOST).
|
||||
*/
|
||||
#define VMADDR_FLAG_TO_HOST 0x01
|
||||
|
||||
/* Invalid vSockets version. */
|
||||
|
||||
#define VM_SOCKETS_INVALID_VERSION -1U
|
||||
|
||||
/* The epoch (first) component of the vSockets version. A single byte
|
||||
* representing the epoch component of the vSockets version.
|
||||
*/
|
||||
|
||||
#define VM_SOCKETS_VERSION_EPOCH(_v) (((_v) & 0xFF000000) >> 24)
|
||||
|
||||
/* The major (second) component of the vSockets version. A single byte
|
||||
* representing the major component of the vSockets version. Typically
|
||||
* changes for every major release of a product.
|
||||
*/
|
||||
|
||||
#define VM_SOCKETS_VERSION_MAJOR(_v) (((_v) & 0x00FF0000) >> 16)
|
||||
|
||||
/* The minor (third) component of the vSockets version. Two bytes representing
|
||||
* the minor component of the vSockets version.
|
||||
*/
|
||||
|
||||
#define VM_SOCKETS_VERSION_MINOR(_v) (((_v) & 0x0000FFFF))
|
||||
|
||||
/* Address structure for vSockets. The address family should be set to
|
||||
* AF_VSOCK. The structure members should all align on their natural
|
||||
* boundaries without resorting to compiler packing directives. The total size
|
||||
* of this structure should be exactly the same as that of struct sockaddr.
|
||||
*/
|
||||
|
||||
struct sockaddr_vm {
|
||||
__kernel_sa_family_t svm_family;
|
||||
unsigned short svm_reserved1;
|
||||
unsigned int svm_port;
|
||||
unsigned int svm_cid;
|
||||
__u8 svm_flags;
|
||||
unsigned char svm_zero[sizeof(struct sockaddr) -
|
||||
sizeof(sa_family_t) -
|
||||
sizeof(unsigned short) -
|
||||
sizeof(unsigned int) -
|
||||
sizeof(unsigned int) -
|
||||
sizeof(__u8)];
|
||||
};
|
||||
|
||||
#define IOCTL_VM_SOCKETS_GET_LOCAL_CID _IO(7, 0xb9)
|
||||
|
||||
/* MSG_ZEROCOPY notifications are encoded in the standard error format,
|
||||
* sock_extended_err. See Documentation/networking/msg_zerocopy.rst in
|
||||
* kernel source tree for more details.
|
||||
*/
|
||||
|
||||
/* 'cmsg_level' field value of 'struct cmsghdr' for notification parsing
|
||||
* when MSG_ZEROCOPY flag is used on transmissions.
|
||||
*/
|
||||
|
||||
#define SOL_VSOCK 287
|
||||
|
||||
/* 'cmsg_type' field value of 'struct cmsghdr' for notification parsing
|
||||
* when MSG_ZEROCOPY flag is used on transmissions.
|
||||
*/
|
||||
|
||||
#define VSOCK_RECVERR 1
|
||||
|
||||
#endif /* _VM_SOCKETS_H */
|
Loading…
Reference in New Issue
Block a user