/****************************************************************************
 ****************************************************************************
 ***
 ***   This header was automatically generated from a Linux kernel header
 ***   of the same name, to make information necessary for userspace to
 ***   call into the kernel available to libc.  It contains only constants,
 ***   structures, and macros generated from the original header, and thus,
 ***   contains no copyrightable information.
 ***
 ***   To edit the content of this header, modify the corresponding
 ***   source file (e.g. under external/kernel-headers/original/) then
 ***   run bionic/libc/kernel/tools/update_all.py
 ***
 ***   Any manual change here will be lost the next time this script will
 ***   be run. You've been warned!
 ***
 ****************************************************************************
 ****************************************************************************/
#ifndef _UAPI__LINUX_RTNETLINK_H
#define _UAPI__LINUX_RTNETLINK_H
#include <linux/types.h>
#include <linux/netlink.h>
#include <linux/if_link.h>
#include <linux/if_addr.h>
#include <linux/neighbour.h>
#define RTNL_FAMILY_IPMR 128
#define RTNL_FAMILY_IP6MR 129
#define RTNL_FAMILY_MAX 129
enum {
  RTM_BASE = 16,
#define RTM_BASE RTM_BASE
  RTM_NEWLINK = 16,
#define RTM_NEWLINK RTM_NEWLINK
  RTM_DELLINK,
#define RTM_DELLINK RTM_DELLINK
  RTM_GETLINK,
#define RTM_GETLINK RTM_GETLINK
  RTM_SETLINK,
#define RTM_SETLINK RTM_SETLINK
  RTM_NEWADDR = 20,
#define RTM_NEWADDR RTM_NEWADDR
  RTM_DELADDR,
#define RTM_DELADDR RTM_DELADDR
  RTM_GETADDR,
#define RTM_GETADDR RTM_GETADDR
  RTM_NEWROUTE = 24,
#define RTM_NEWROUTE RTM_NEWROUTE
  RTM_DELROUTE,
#define RTM_DELROUTE RTM_DELROUTE
  RTM_GETROUTE,
#define RTM_GETROUTE RTM_GETROUTE
  RTM_NEWNEIGH = 28,
#define RTM_NEWNEIGH RTM_NEWNEIGH
  RTM_DELNEIGH,
#define RTM_DELNEIGH RTM_DELNEIGH
  RTM_GETNEIGH,
#define RTM_GETNEIGH RTM_GETNEIGH
  RTM_NEWRULE = 32,
#define RTM_NEWRULE RTM_NEWRULE
  RTM_DELRULE,
#define RTM_DELRULE RTM_DELRULE
  RTM_GETRULE,
#define RTM_GETRULE RTM_GETRULE
  RTM_NEWQDISC = 36,
#define RTM_NEWQDISC RTM_NEWQDISC
  RTM_DELQDISC,
#define RTM_DELQDISC RTM_DELQDISC
  RTM_GETQDISC,
#define RTM_GETQDISC RTM_GETQDISC
  RTM_NEWTCLASS = 40,
#define RTM_NEWTCLASS RTM_NEWTCLASS
  RTM_DELTCLASS,
#define RTM_DELTCLASS RTM_DELTCLASS
  RTM_GETTCLASS,
#define RTM_GETTCLASS RTM_GETTCLASS
  RTM_NEWTFILTER = 44,
#define RTM_NEWTFILTER RTM_NEWTFILTER
  RTM_DELTFILTER,
#define RTM_DELTFILTER RTM_DELTFILTER
  RTM_GETTFILTER,
#define RTM_GETTFILTER RTM_GETTFILTER
  RTM_NEWACTION = 48,
#define RTM_NEWACTION RTM_NEWACTION
  RTM_DELACTION,
#define RTM_DELACTION RTM_DELACTION
  RTM_GETACTION,
#define RTM_GETACTION RTM_GETACTION
  RTM_NEWPREFIX = 52,
#define RTM_NEWPREFIX RTM_NEWPREFIX
  RTM_GETMULTICAST = 58,
#define RTM_GETMULTICAST RTM_GETMULTICAST
  RTM_GETANYCAST = 62,
#define RTM_GETANYCAST RTM_GETANYCAST
  RTM_NEWNEIGHTBL = 64,
#define RTM_NEWNEIGHTBL RTM_NEWNEIGHTBL
  RTM_GETNEIGHTBL = 66,
#define RTM_GETNEIGHTBL RTM_GETNEIGHTBL
  RTM_SETNEIGHTBL,
#define RTM_SETNEIGHTBL RTM_SETNEIGHTBL
  RTM_NEWNDUSEROPT = 68,
#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT
  RTM_NEWADDRLABEL = 72,
#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL
  RTM_DELADDRLABEL,
#define RTM_DELADDRLABEL RTM_DELADDRLABEL
  RTM_GETADDRLABEL,
#define RTM_GETADDRLABEL RTM_GETADDRLABEL
  RTM_GETDCB = 78,
#define RTM_GETDCB RTM_GETDCB
  RTM_SETDCB,
#define RTM_SETDCB RTM_SETDCB
  RTM_NEWNETCONF = 80,
#define RTM_NEWNETCONF RTM_NEWNETCONF
  RTM_DELNETCONF,
#define RTM_DELNETCONF RTM_DELNETCONF
  RTM_GETNETCONF = 82,
#define RTM_GETNETCONF RTM_GETNETCONF
  RTM_NEWMDB = 84,
#define RTM_NEWMDB RTM_NEWMDB
  RTM_DELMDB = 85,
#define RTM_DELMDB RTM_DELMDB
  RTM_GETMDB = 86,
#define RTM_GETMDB RTM_GETMDB
  RTM_NEWNSID = 88,
#define RTM_NEWNSID RTM_NEWNSID
  RTM_DELNSID = 89,
#define RTM_DELNSID RTM_DELNSID
  RTM_GETNSID = 90,
#define RTM_GETNSID RTM_GETNSID
  RTM_NEWSTATS = 92,
#define RTM_NEWSTATS RTM_NEWSTATS
  RTM_GETSTATS = 94,
#define RTM_GETSTATS RTM_GETSTATS
  RTM_NEWCACHEREPORT = 96,
#define RTM_NEWCACHEREPORT RTM_NEWCACHEREPORT
  RTM_NEWCHAIN = 100,
#define RTM_NEWCHAIN RTM_NEWCHAIN
  RTM_DELCHAIN,
#define RTM_DELCHAIN RTM_DELCHAIN
  RTM_GETCHAIN,
#define RTM_GETCHAIN RTM_GETCHAIN
  __RTM_MAX,
#define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1)
};
#define RTM_NR_MSGTYPES (RTM_MAX + 1 - RTM_BASE)
#define RTM_NR_FAMILIES (RTM_NR_MSGTYPES >> 2)
#define RTM_FAM(cmd) (((cmd) - RTM_BASE) >> 2)
struct rtattr {
  unsigned short rta_len;
  unsigned short rta_type;
};
#define RTA_ALIGNTO 4U
#define RTA_ALIGN(len) (((len) + RTA_ALIGNTO - 1) & ~(RTA_ALIGNTO - 1))
#define RTA_OK(rta,len) ((len) >= (int) sizeof(struct rtattr) && (rta)->rta_len >= sizeof(struct rtattr) && (rta)->rta_len <= (len))
#define RTA_NEXT(rta,attrlen) ((attrlen) -= RTA_ALIGN((rta)->rta_len), (struct rtattr *) (((char *) (rta)) + RTA_ALIGN((rta)->rta_len)))
#define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len))
#define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len))
#define RTA_DATA(rta) ((void *) (((char *) (rta)) + RTA_LENGTH(0)))
#define RTA_PAYLOAD(rta) ((int) ((rta)->rta_len) - RTA_LENGTH(0))
struct rtmsg {
  unsigned char rtm_family;
  unsigned char rtm_dst_len;
  unsigned char rtm_src_len;
  unsigned char rtm_tos;
  unsigned char rtm_table;
  unsigned char rtm_protocol;
  unsigned char rtm_scope;
  unsigned char rtm_type;
  unsigned rtm_flags;
};
enum {
  RTN_UNSPEC,
  RTN_UNICAST,
  RTN_LOCAL,
  RTN_BROADCAST,
  RTN_ANYCAST,
  RTN_MULTICAST,
  RTN_BLACKHOLE,
  RTN_UNREACHABLE,
  RTN_PROHIBIT,
  RTN_THROW,
  RTN_NAT,
  RTN_XRESOLVE,
  __RTN_MAX
};
#define RTN_MAX (__RTN_MAX - 1)
#define RTPROT_UNSPEC 0
#define RTPROT_REDIRECT 1
#define RTPROT_KERNEL 2
#define RTPROT_BOOT 3
#define RTPROT_STATIC 4
#define RTPROT_GATED 8
#define RTPROT_RA 9
#define RTPROT_MRT 10
#define RTPROT_ZEBRA 11
#define RTPROT_BIRD 12
#define RTPROT_DNROUTED 13
#define RTPROT_XORP 14
#define RTPROT_NTK 15
#define RTPROT_DHCP 16
#define RTPROT_MROUTED 17
#define RTPROT_BABEL 42
#define RTPROT_BGP 186
#define RTPROT_ISIS 187
#define RTPROT_OSPF 188
#define RTPROT_RIP 189
#define RTPROT_EIGRP 192
enum rt_scope_t {
  RT_SCOPE_UNIVERSE = 0,
  RT_SCOPE_SITE = 200,
  RT_SCOPE_LINK = 253,
  RT_SCOPE_HOST = 254,
  RT_SCOPE_NOWHERE = 255
};
#define RTM_F_NOTIFY 0x100
#define RTM_F_CLONED 0x200
#define RTM_F_EQUALIZE 0x400
#define RTM_F_PREFIX 0x800
#define RTM_F_LOOKUP_TABLE 0x1000
#define RTM_F_FIB_MATCH 0x2000
enum rt_class_t {
  RT_TABLE_UNSPEC = 0,
  RT_TABLE_COMPAT = 252,
  RT_TABLE_DEFAULT = 253,
  RT_TABLE_MAIN = 254,
  RT_TABLE_LOCAL = 255,
  RT_TABLE_MAX = 0xFFFFFFFF
};
enum rtattr_type_t {
  RTA_UNSPEC,
  RTA_DST,
  RTA_SRC,
  RTA_IIF,
  RTA_OIF,
  RTA_GATEWAY,
  RTA_PRIORITY,
  RTA_PREFSRC,
  RTA_METRICS,
  RTA_MULTIPATH,
  RTA_PROTOINFO,
  RTA_FLOW,
  RTA_CACHEINFO,
  RTA_SESSION,
  RTA_MP_ALGO,
  RTA_TABLE,
  RTA_MARK,
  RTA_MFC_STATS,
  RTA_VIA,
  RTA_NEWDST,
  RTA_PREF,
  RTA_ENCAP_TYPE,
  RTA_ENCAP,
  RTA_EXPIRES,
  RTA_PAD,
  RTA_UID,
  RTA_TTL_PROPAGATE,
  RTA_IP_PROTO,
  RTA_SPORT,
  RTA_DPORT,
  __RTA_MAX
};
#define RTA_MAX (__RTA_MAX - 1)
#define RTM_RTA(r) ((struct rtattr *) (((char *) (r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n, sizeof(struct rtmsg))
struct rtnexthop {
  unsigned short rtnh_len;
  unsigned char rtnh_flags;
  unsigned char rtnh_hops;
  int rtnh_ifindex;
};
#define RTNH_F_DEAD 1
#define RTNH_F_PERVASIVE 2
#define RTNH_F_ONLINK 4
#define RTNH_F_OFFLOAD 8
#define RTNH_F_LINKDOWN 16
#define RTNH_F_UNRESOLVED 32
#define RTNH_COMPARE_MASK (RTNH_F_DEAD | RTNH_F_LINKDOWN | RTNH_F_OFFLOAD)
#define RTNH_ALIGNTO 4
#define RTNH_ALIGN(len) (((len) + RTNH_ALIGNTO - 1) & ~(RTNH_ALIGNTO - 1))
#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && ((int) (rtnh)->rtnh_len) <= (len))
#define RTNH_NEXT(rtnh) ((struct rtnexthop *) (((char *) (rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
#define RTNH_SPACE(len) RTNH_ALIGN(RTNH_LENGTH(len))
#define RTNH_DATA(rtnh) ((struct rtattr *) (((char *) (rtnh)) + RTNH_LENGTH(0)))
struct rtvia {
  __kernel_sa_family_t rtvia_family;
  __u8 rtvia_addr[0];
};
struct rta_cacheinfo {
  __u32 rta_clntref;
  __u32 rta_lastuse;
  __s32 rta_expires;
  __u32 rta_error;
  __u32 rta_used;
#define RTNETLINK_HAVE_PEERINFO 1
  __u32 rta_id;
  __u32 rta_ts;
  __u32 rta_tsage;
};
enum {
  RTAX_UNSPEC,
#define RTAX_UNSPEC RTAX_UNSPEC
  RTAX_LOCK,
#define RTAX_LOCK RTAX_LOCK
  RTAX_MTU,
#define RTAX_MTU RTAX_MTU
  RTAX_WINDOW,
#define RTAX_WINDOW RTAX_WINDOW
  RTAX_RTT,
#define RTAX_RTT RTAX_RTT
  RTAX_RTTVAR,
#define RTAX_RTTVAR RTAX_RTTVAR
  RTAX_SSTHRESH,
#define RTAX_SSTHRESH RTAX_SSTHRESH
  RTAX_CWND,
#define RTAX_CWND RTAX_CWND
  RTAX_ADVMSS,
#define RTAX_ADVMSS RTAX_ADVMSS
  RTAX_REORDERING,
#define RTAX_REORDERING RTAX_REORDERING
  RTAX_HOPLIMIT,
#define RTAX_HOPLIMIT RTAX_HOPLIMIT
  RTAX_INITCWND,
#define RTAX_INITCWND RTAX_INITCWND
  RTAX_FEATURES,
#define RTAX_FEATURES RTAX_FEATURES
  RTAX_RTO_MIN,
#define RTAX_RTO_MIN RTAX_RTO_MIN
  RTAX_INITRWND,
#define RTAX_INITRWND RTAX_INITRWND
  RTAX_QUICKACK,
#define RTAX_QUICKACK RTAX_QUICKACK
  RTAX_CC_ALGO,
#define RTAX_CC_ALGO RTAX_CC_ALGO
  RTAX_FASTOPEN_NO_COOKIE,
#define RTAX_FASTOPEN_NO_COOKIE RTAX_FASTOPEN_NO_COOKIE
  __RTAX_MAX
};
#define RTAX_MAX (__RTAX_MAX - 1)
#define RTAX_FEATURE_ECN (1 << 0)
#define RTAX_FEATURE_SACK (1 << 1)
#define RTAX_FEATURE_TIMESTAMP (1 << 2)
#define RTAX_FEATURE_ALLFRAG (1 << 3)
#define RTAX_FEATURE_MASK (RTAX_FEATURE_ECN | RTAX_FEATURE_SACK | RTAX_FEATURE_TIMESTAMP | RTAX_FEATURE_ALLFRAG)
struct rta_session {
  __u8 proto;
  __u8 pad1;
  __u16 pad2;
  union {
    struct {
      __u16 sport;
      __u16 dport;
    } ports;
    struct {
      __u8 type;
      __u8 code;
      __u16 ident;
    } icmpt;
    __u32 spi;
  } u;
};
struct rta_mfc_stats {
  __u64 mfcs_packets;
  __u64 mfcs_bytes;
  __u64 mfcs_wrong_if;
};
struct rtgenmsg {
  unsigned char rtgen_family;
};
struct ifinfomsg {
  unsigned char ifi_family;
  unsigned char __ifi_pad;
  unsigned short ifi_type;
  int ifi_index;
  unsigned ifi_flags;
  unsigned ifi_change;
};
struct prefixmsg {
  unsigned char prefix_family;
  unsigned char prefix_pad1;
  unsigned short prefix_pad2;
  int prefix_ifindex;
  unsigned char prefix_type;
  unsigned char prefix_len;
  unsigned char prefix_flags;
  unsigned char prefix_pad3;
};
enum {
  PREFIX_UNSPEC,
  PREFIX_ADDRESS,
  PREFIX_CACHEINFO,
  __PREFIX_MAX
};
#define PREFIX_MAX (__PREFIX_MAX - 1)
struct prefix_cacheinfo {
  __u32 preferred_time;
  __u32 valid_time;
};
struct tcmsg {
  unsigned char tcm_family;
  unsigned char tcm__pad1;
  unsigned short tcm__pad2;
  int tcm_ifindex;
  __u32 tcm_handle;
  __u32 tcm_parent;
#define tcm_block_index tcm_parent
  __u32 tcm_info;
};
#define TCM_IFINDEX_MAGIC_BLOCK (0xFFFFFFFFU)
enum {
  TCA_UNSPEC,
  TCA_KIND,
  TCA_OPTIONS,
  TCA_STATS,
  TCA_XSTATS,
  TCA_RATE,
  TCA_FCNT,
  TCA_STATS2,
  TCA_STAB,
  TCA_PAD,
  TCA_DUMP_INVISIBLE,
  TCA_CHAIN,
  TCA_HW_OFFLOAD,
  TCA_INGRESS_BLOCK,
  TCA_EGRESS_BLOCK,
  __TCA_MAX
};
#define TCA_MAX (__TCA_MAX - 1)
#define TCA_RTA(r) ((struct rtattr *) (((char *) (r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n, sizeof(struct tcmsg))
struct nduseroptmsg {
  unsigned char nduseropt_family;
  unsigned char nduseropt_pad1;
  unsigned short nduseropt_opts_len;
  int nduseropt_ifindex;
  __u8 nduseropt_icmp_type;
  __u8 nduseropt_icmp_code;
  unsigned short nduseropt_pad2;
  unsigned int nduseropt_pad3;
};
enum {
  NDUSEROPT_UNSPEC,
  NDUSEROPT_SRCADDR,
  __NDUSEROPT_MAX
};
#define NDUSEROPT_MAX (__NDUSEROPT_MAX - 1)
#define RTMGRP_LINK 1
#define RTMGRP_NOTIFY 2
#define RTMGRP_NEIGH 4
#define RTMGRP_TC 8
#define RTMGRP_IPV4_IFADDR 0x10
#define RTMGRP_IPV4_MROUTE 0x20
#define RTMGRP_IPV4_ROUTE 0x40
#define RTMGRP_IPV4_RULE 0x80
#define RTMGRP_IPV6_IFADDR 0x100
#define RTMGRP_IPV6_MROUTE 0x200
#define RTMGRP_IPV6_ROUTE 0x400
#define RTMGRP_IPV6_IFINFO 0x800
#define RTMGRP_DECnet_IFADDR 0x1000
#define RTMGRP_DECnet_ROUTE 0x4000
#define RTMGRP_IPV6_PREFIX 0x20000
enum rtnetlink_groups {
  RTNLGRP_NONE,
#define RTNLGRP_NONE RTNLGRP_NONE
  RTNLGRP_LINK,
#define RTNLGRP_LINK RTNLGRP_LINK
  RTNLGRP_NOTIFY,
#define RTNLGRP_NOTIFY RTNLGRP_NOTIFY
  RTNLGRP_NEIGH,
#define RTNLGRP_NEIGH RTNLGRP_NEIGH
  RTNLGRP_TC,
#define RTNLGRP_TC RTNLGRP_TC
  RTNLGRP_IPV4_IFADDR,
#define RTNLGRP_IPV4_IFADDR RTNLGRP_IPV4_IFADDR
  RTNLGRP_IPV4_MROUTE,
#define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE
  RTNLGRP_IPV4_ROUTE,
#define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE
  RTNLGRP_IPV4_RULE,
#define RTNLGRP_IPV4_RULE RTNLGRP_IPV4_RULE
  RTNLGRP_IPV6_IFADDR,
#define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR
  RTNLGRP_IPV6_MROUTE,
#define RTNLGRP_IPV6_MROUTE RTNLGRP_IPV6_MROUTE
  RTNLGRP_IPV6_ROUTE,
#define RTNLGRP_IPV6_ROUTE RTNLGRP_IPV6_ROUTE
  RTNLGRP_IPV6_IFINFO,
#define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO
  RTNLGRP_DECnet_IFADDR,
#define RTNLGRP_DECnet_IFADDR RTNLGRP_DECnet_IFADDR
  RTNLGRP_NOP2,
  RTNLGRP_DECnet_ROUTE,
#define RTNLGRP_DECnet_ROUTE RTNLGRP_DECnet_ROUTE
  RTNLGRP_DECnet_RULE,
#define RTNLGRP_DECnet_RULE RTNLGRP_DECnet_RULE
  RTNLGRP_NOP4,
  RTNLGRP_IPV6_PREFIX,
#define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX
  RTNLGRP_IPV6_RULE,
#define RTNLGRP_IPV6_RULE RTNLGRP_IPV6_RULE
  RTNLGRP_ND_USEROPT,
#define RTNLGRP_ND_USEROPT RTNLGRP_ND_USEROPT
  RTNLGRP_PHONET_IFADDR,
#define RTNLGRP_PHONET_IFADDR RTNLGRP_PHONET_IFADDR
  RTNLGRP_PHONET_ROUTE,
#define RTNLGRP_PHONET_ROUTE RTNLGRP_PHONET_ROUTE
  RTNLGRP_DCB,
#define RTNLGRP_DCB RTNLGRP_DCB
  RTNLGRP_IPV4_NETCONF,
#define RTNLGRP_IPV4_NETCONF RTNLGRP_IPV4_NETCONF
  RTNLGRP_IPV6_NETCONF,
#define RTNLGRP_IPV6_NETCONF RTNLGRP_IPV6_NETCONF
  RTNLGRP_MDB,
#define RTNLGRP_MDB RTNLGRP_MDB
  RTNLGRP_MPLS_ROUTE,
#define RTNLGRP_MPLS_ROUTE RTNLGRP_MPLS_ROUTE
  RTNLGRP_NSID,
#define RTNLGRP_NSID RTNLGRP_NSID
  RTNLGRP_MPLS_NETCONF,
#define RTNLGRP_MPLS_NETCONF RTNLGRP_MPLS_NETCONF
  RTNLGRP_IPV4_MROUTE_R,
#define RTNLGRP_IPV4_MROUTE_R RTNLGRP_IPV4_MROUTE_R
  RTNLGRP_IPV6_MROUTE_R,
#define RTNLGRP_IPV6_MROUTE_R RTNLGRP_IPV6_MROUTE_R
  __RTNLGRP_MAX
};
#define RTNLGRP_MAX (__RTNLGRP_MAX - 1)
struct tcamsg {
  unsigned char tca_family;
  unsigned char tca__pad1;
  unsigned short tca__pad2;
};
enum {
  TCA_ROOT_UNSPEC,
  TCA_ROOT_TAB,
#define TCA_ACT_TAB TCA_ROOT_TAB
#define TCAA_MAX TCA_ROOT_TAB
  TCA_ROOT_FLAGS,
  TCA_ROOT_COUNT,
  TCA_ROOT_TIME_DELTA,
  __TCA_ROOT_MAX,
#define TCA_ROOT_MAX (__TCA_ROOT_MAX - 1)
};
#define TA_RTA(r) ((struct rtattr *) (((char *) (r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n, sizeof(struct tcamsg))
#define TCA_FLAG_LARGE_DUMP_ON (1 << 0)
#define RTEXT_FILTER_VF (1 << 0)
#define RTEXT_FILTER_BRVLAN (1 << 1)
#define RTEXT_FILTER_BRVLAN_COMPRESSED (1 << 2)
#define RTEXT_FILTER_SKIP_STATS (1 << 3)
#endif
