/*
 * This file is auto-generated. Modifications will be lost.
 *
 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
 * for more information.
 */
#ifndef _UAPI_LINUX_IP_H
#define _UAPI_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
#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
#define IPOPT_TS_TSANDADDR 1
#define IPOPT_TS_PRESPEC 3
#define IPV4_BEET_PHMAXLEN 8
struct iphdr {
#ifdef __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(, addrs,, __be32 saddr;
  __be32 daddr;
 );
};
struct ip_auth_hdr {
  __u8 nexthdr;
  __u8 hdrlen;
  __be16 reserved;
  __be32 spi;
  __be32 seq_no;
  __u8 auth_data[];
};
struct ip_esp_hdr {
  __be32 spi;
  __be32 seq_no;
  __u8 enc_data[];
};
struct ip_comp_hdr {
  __u8 nexthdr;
  __u8 flags;
  __be16 cpi;
};
struct ip_beet_phdr {
  __u8 nexthdr;
  __u8 hdrlen;
  __u8 padlen;
  __u8 reserved;
};
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
