Acked-by: Paul-Daniel Boca <pb...@cloudbasesolutions.com>
> -----Original Message----- > From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Sairam > Venugopal > Sent: Tuesday, June 21, 2016 4:23 AM > To: dev@openvswitch.org > Subject: [ovs-dev] [PATCH 1/9] Windows: Add netfilter-conntrack header files > to Include folder > > Include netfilter-conntrack header files in user-space. This will be used > by Windows userspace for adding debugging support in Conntrack. Some of > these files > are intentionally left blank and will be updated once relevant support is > added in Windows datapath. > > Signed-off-by: Sairam Venugopal <vsai...@vmware.com> > --- > include/windows/automake.mk | 6 + > .../windows/linux/netfilter/nf_conntrack_common.h | 113 ++++++++++ > include/windows/linux/netfilter/nf_conntrack_ftp.h | 0 > .../windows/linux/netfilter/nf_conntrack_sctp.h | 0 > include/windows/linux/netfilter/nf_conntrack_tcp.h | 49 ++++ > include/windows/linux/netfilter/nfnetlink.h | 63 ++++++ > .../windows/linux/netfilter/nfnetlink_conntrack.h | 249 > +++++++++++++++++++++ > 7 files changed, 480 insertions(+) > create mode 100644 > include/windows/linux/netfilter/nf_conntrack_common.h > create mode 100644 include/windows/linux/netfilter/nf_conntrack_ftp.h > create mode 100644 include/windows/linux/netfilter/nf_conntrack_sctp.h > create mode 100644 include/windows/linux/netfilter/nf_conntrack_tcp.h > create mode 100644 include/windows/linux/netfilter/nfnetlink.h > create mode 100644 include/windows/linux/netfilter/nfnetlink_conntrack.h > > diff --git a/include/windows/automake.mk > b/include/windows/automake.mk > index 58b52f1..382627b 100644 > --- a/include/windows/automake.mk > +++ b/include/windows/automake.mk > @@ -9,6 +9,12 @@ noinst_HEADERS += \ > include/windows/arpa/inet.h \ > include/windows/dirent.h \ > include/windows/getopt.h \ > + include/windows/linux/netfilter/nf_conntrack_common.h \ > + include/windows/linux/netfilter/nf_conntrack_ftp.h \ > + include/windows/linux/netfilter/nf_conntrack_sctp.h \ > + include/windows/linux/netfilter/nf_conntrack_tcp.h \ > + include/windows/linux/netfilter/nfnetlink.h \ > + include/windows/linux/netfilter/nfnetlink_conntrack.h \ > include/windows/linux/pkt_sched.h \ > include/windows/linux/types.h \ > include/windows/net/if.h \ > diff --git a/include/windows/linux/netfilter/nf_conntrack_common.h > b/include/windows/linux/netfilter/nf_conntrack_common.h > new file mode 100644 > index 0000000..9904003 > --- /dev/null > +++ b/include/windows/linux/netfilter/nf_conntrack_common.h > @@ -0,0 +1,113 @@ > +#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, > + IP_CT_NEW_REPLY = IP_CT_NEW + IP_CT_IS_REPLY, > + /* Number of distinct IP_CT types (no NEW in reply dirn). */ > + IP_CT_NUMBER = IP_CT_IS_REPLY * 2 - 1 > +}; > + > +/* 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 */ > + IPS_UNTRACKED_BIT = 12, > + IPS_UNTRACKED = (1 << IPS_UNTRACKED_BIT), > +}; > + > +/* 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_NATSEQADJ, /* NAT is doing sequence adjustment */ > + IPCT_SECMARK, /* new security mark 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 */ > diff --git a/include/windows/linux/netfilter/nf_conntrack_ftp.h > b/include/windows/linux/netfilter/nf_conntrack_ftp.h > new file mode 100644 > index 0000000..e69de29 > diff --git a/include/windows/linux/netfilter/nf_conntrack_sctp.h > b/include/windows/linux/netfilter/nf_conntrack_sctp.h > new file mode 100644 > index 0000000..e69de29 > diff --git a/include/windows/linux/netfilter/nf_conntrack_tcp.h > b/include/windows/linux/netfilter/nf_conntrack_tcp.h > new file mode 100644 > index 0000000..9ed9471 > --- /dev/null > +++ b/include/windows/linux/netfilter/nf_conntrack_tcp.h > @@ -0,0 +1,49 @@ > +#ifndef _UAPI_NF_CONNTRACK_TCP_H > +#define _UAPI_NF_CONNTRACK_TCP_H > +/* TCP tracking. */ > + > +/* This is exposed to userspace (ctnetlink) */ > +enum tcp_conntrack { > + TCP_CONNTRACK_NONE, > + TCP_CONNTRACK_SYN_SENT, > + TCP_CONNTRACK_SYN_RECV, > + TCP_CONNTRACK_ESTABLISHED, > + TCP_CONNTRACK_FIN_WAIT, > + TCP_CONNTRACK_CLOSE_WAIT, > + TCP_CONNTRACK_LAST_ACK, > + TCP_CONNTRACK_TIME_WAIT, > + TCP_CONNTRACK_CLOSE, > + TCP_CONNTRACK_LISTEN, /* obsolete */ > +#define TCP_CONNTRACK_SYN_SENT2 TCP_CONNTRACK_LISTEN > + TCP_CONNTRACK_MAX, > + TCP_CONNTRACK_IGNORE, > + TCP_CONNTRACK_RETRANS, > + TCP_CONNTRACK_UNACK, > + TCP_CONNTRACK_TIMEOUT_MAX > +}; > + > +/* Window scaling is advertised by the sender */ > +#define IP_CT_TCP_FLAG_WINDOW_SCALE 0x01 > + > +/* SACK is permitted by the sender */ > +#define IP_CT_TCP_FLAG_SACK_PERM 0x02 > + > +/* This sender sent FIN first */ > +#define IP_CT_TCP_FLAG_CLOSE_INIT 0x04 > + > +/* Be liberal in window checking */ > +#define IP_CT_TCP_FLAG_BE_LIBERAL 0x08 > + > +/* Has unacknowledged data */ > +#define IP_CT_TCP_FLAG_DATA_UNACKNOWLEDGED 0x10 > + > +/* The field td_maxack has been set */ > +#define IP_CT_TCP_FLAG_MAXACK_SET 0x20 > + > +struct nf_ct_tcp_flags { > + u_int8_t flags; > + u_int8_t mask; > +}; > + > + > +#endif /* _UAPI_NF_CONNTRACK_TCP_H */ > diff --git a/include/windows/linux/netfilter/nfnetlink.h > b/include/windows/linux/netfilter/nfnetlink.h > new file mode 100644 > index 0000000..c76a47c > --- /dev/null > +++ b/include/windows/linux/netfilter/nfnetlink.h > @@ -0,0 +1,63 @@ > +#ifndef _NFNETLINK_H > +#define _NFNETLINK_H > + > +enum nfnetlink_groups { > + NFNLGRP_NONE, > +#define NFNLGRP_NONE NFNLGRP_NONE > + NFNLGRP_CONNTRACK_NEW, > +#define NFNLGRP_CONNTRACK_NEW NFNLGRP_CONNTRACK_NEW > + NFNLGRP_CONNTRACK_UPDATE, > +#define NFNLGRP_CONNTRACK_UPDATE NFNLGRP_CONNTRACK_UPDATE > + NFNLGRP_CONNTRACK_DESTROY, > +#define NFNLGRP_CONNTRACK_DESTROY > NFNLGRP_CONNTRACK_DESTROY > + NFNLGRP_CONNTRACK_EXP_NEW, > +#define NFNLGRP_CONNTRACK_EXP_NEW > NFNLGRP_CONNTRACK_EXP_NEW > + NFNLGRP_CONNTRACK_EXP_UPDATE, > +#define NFNLGRP_CONNTRACK_EXP_UPDATE > NFNLGRP_CONNTRACK_EXP_UPDATE > + NFNLGRP_CONNTRACK_EXP_DESTROY, > +#define NFNLGRP_CONNTRACK_EXP_DESTROY > NFNLGRP_CONNTRACK_EXP_DESTROY > + NFNLGRP_NFTABLES, > +#define NFNLGRP_NFTABLES NFNLGRP_NFTABLES > + __NFNLGRP_MAX, > +}; > +#define NFNLGRP_MAX (__NFNLGRP_MAX - 1) > + > +/* General form of address family dependent message. > + */ > +struct nfgenmsg { > + UINT8 nfgen_family; /* AF_xxx */ > + UINT8 version; /* nfnetlink version */ > + UINT16 res_id; /* resource id */ > + struct ovs_header ovsHdr; /* Pad this for Windows */ > +}; > + > +#define NFNETLINK_V0 0 > + > +/* netfilter netlink message types are split in two pieces: > + * 8 bit subsystem, 8bit operation. > + */ > + > +#define NFNL_SUBSYS_ID(x) ((x & 0xff00) >> 8) > +#define NFNL_MSG_TYPE(x) (x & 0x00ff) > + > +/* No enum here, otherwise __stringify() trick of > MODULE_ALIAS_NFNL_SUBSYS() > + * won't work anymore */ > +#define NFNL_SUBSYS_NONE 0 > +#define NFNL_SUBSYS_CTNETLINK 1 > +#define NFNL_SUBSYS_CTNETLINK_EXP 2 > +#define NFNL_SUBSYS_QUEUE 3 > +#define NFNL_SUBSYS_ULOG 4 > +#define NFNL_SUBSYS_OSF 5 > +#define NFNL_SUBSYS_IPSET 6 > +#define NFNL_SUBSYS_ACCT 7 > +#define NFNL_SUBSYS_CTNETLINK_TIMEOUT 8 > +#define NFNL_SUBSYS_CTHELPER 9 > +#define NFNL_SUBSYS_NFTABLES 10 > +#define NFNL_SUBSYS_NFT_COMPAT 11 > +#define NFNL_SUBSYS_COUNT 12 > + > +/* Reserved control nfnetlink messages */ > +#define NFNL_MSG_BATCH_BEGIN NLMSG_MIN_TYPE > +#define NFNL_MSG_BATCH_END NLMSG_MIN_TYPE+1 > + > +#endif /* _NFNETLINK_H */ > diff --git a/include/windows/linux/netfilter/nfnetlink_conntrack.h > b/include/windows/linux/netfilter/nfnetlink_conntrack.h > new file mode 100644 > index 0000000..d30eba9 > --- /dev/null > +++ b/include/windows/linux/netfilter/nfnetlink_conntrack.h > @@ -0,0 +1,249 @@ > +#ifndef _IPCONNTRACK_NETLINK_H > +#define _IPCONNTRACK_NETLINK_H > + > +enum cntl_msg_types { > + IPCTNL_MSG_CT_NEW, > + IPCTNL_MSG_CT_GET, > + IPCTNL_MSG_CT_DELETE, > + IPCTNL_MSG_CT_GET_CTRZERO, > + IPCTNL_MSG_CT_GET_STATS_CPU, > + IPCTNL_MSG_CT_GET_STATS, > + IPCTNL_MSG_CT_GET_DYING, > + IPCTNL_MSG_CT_GET_UNCONFIRMED, > + IPCTNL_MSG_MAX > +}; > + > +enum ctnl_exp_msg_types { > + IPCTNL_MSG_EXP_NEW, > + IPCTNL_MSG_EXP_GET, > + IPCTNL_MSG_EXP_DELETE, > + IPCTNL_MSG_EXP_GET_STATS_CPU, > + > + IPCTNL_MSG_EXP_MAX > +}; > + > +enum ctattr_type { > + CTA_UNSPEC, > + CTA_TUPLE_ORIG, > + CTA_TUPLE_REPLY, > + CTA_STATUS, > + CTA_PROTOINFO, > + CTA_HELP, > + CTA_NAT_SRC, > +#define CTA_NAT CTA_NAT_SRC /* backwards compatibility */ > + CTA_TIMEOUT, > + CTA_MARK, > + CTA_COUNTERS_ORIG, > + CTA_COUNTERS_REPLY, > + CTA_USE, > + CTA_ID, > + CTA_NAT_DST, > + CTA_TUPLE_MASTER, > + CTA_NAT_SEQ_ADJ_ORIG, > + CTA_NAT_SEQ_ADJ_REPLY, > + CTA_SECMARK, /* obsolete */ > + CTA_ZONE, > + CTA_SECCTX, > + CTA_TIMESTAMP, > + CTA_MARK_MASK, > + CTA_LABELS, > + CTA_LABELS_MASK, > + __CTA_MAX > +}; > +#define CTA_MAX (__CTA_MAX - 1) > + > +enum ctattr_tuple { > + CTA_TUPLE_UNSPEC, > + CTA_TUPLE_IP, > + CTA_TUPLE_PROTO, > + __CTA_TUPLE_MAX > +}; > +#define CTA_TUPLE_MAX (__CTA_TUPLE_MAX - 1) > + > +enum ctattr_ip { > + CTA_IP_UNSPEC, > + CTA_IP_V4_SRC, > + CTA_IP_V4_DST, > + CTA_IP_V6_SRC, > + CTA_IP_V6_DST, > + __CTA_IP_MAX > +}; > +#define CTA_IP_MAX (__CTA_IP_MAX - 1) > + > +enum ctattr_l4proto { > + CTA_PROTO_UNSPEC, > + CTA_PROTO_NUM, > + CTA_PROTO_SRC_PORT, > + CTA_PROTO_DST_PORT, > + CTA_PROTO_ICMP_ID, > + CTA_PROTO_ICMP_TYPE, > + CTA_PROTO_ICMP_CODE, > + CTA_PROTO_ICMPV6_ID, > + CTA_PROTO_ICMPV6_TYPE, > + CTA_PROTO_ICMPV6_CODE, > + __CTA_PROTO_MAX > +}; > +#define CTA_PROTO_MAX (__CTA_PROTO_MAX - 1) > + > +enum ctattr_protoinfo { > + CTA_PROTOINFO_UNSPEC, > + CTA_PROTOINFO_TCP, > + CTA_PROTOINFO_DCCP, > + CTA_PROTOINFO_SCTP, > + __CTA_PROTOINFO_MAX > +}; > +#define CTA_PROTOINFO_MAX (__CTA_PROTOINFO_MAX - 1) > + > +enum ctattr_protoinfo_tcp { > + CTA_PROTOINFO_TCP_UNSPEC, > + CTA_PROTOINFO_TCP_STATE, > + CTA_PROTOINFO_TCP_WSCALE_ORIGINAL, > + CTA_PROTOINFO_TCP_WSCALE_REPLY, > + CTA_PROTOINFO_TCP_FLAGS_ORIGINAL, > + CTA_PROTOINFO_TCP_FLAGS_REPLY, > + __CTA_PROTOINFO_TCP_MAX > +}; > +#define CTA_PROTOINFO_TCP_MAX (__CTA_PROTOINFO_TCP_MAX - 1) > + > +enum ctattr_protoinfo_dccp { > + CTA_PROTOINFO_DCCP_UNSPEC, > + CTA_PROTOINFO_DCCP_STATE, > + CTA_PROTOINFO_DCCP_ROLE, > + CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ, > + __CTA_PROTOINFO_DCCP_MAX, > +}; > +#define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1) > + > +enum ctattr_protoinfo_sctp { > + CTA_PROTOINFO_SCTP_UNSPEC, > + CTA_PROTOINFO_SCTP_STATE, > + CTA_PROTOINFO_SCTP_VTAG_ORIGINAL, > + CTA_PROTOINFO_SCTP_VTAG_REPLY, > + __CTA_PROTOINFO_SCTP_MAX > +}; > +#define CTA_PROTOINFO_SCTP_MAX (__CTA_PROTOINFO_SCTP_MAX - 1) > + > +enum ctattr_counters { > + CTA_COUNTERS_UNSPEC, > + CTA_COUNTERS_PACKETS, /* 64bit counters */ > + CTA_COUNTERS_BYTES, /* 64bit counters */ > + CTA_COUNTERS32_PACKETS, /* old 32bit counters, unused */ > + CTA_COUNTERS32_BYTES, /* old 32bit counters, unused */ > + __CTA_COUNTERS_MAX > +}; > +#define CTA_COUNTERS_MAX (__CTA_COUNTERS_MAX - 1) > + > +enum ctattr_tstamp { > + CTA_TIMESTAMP_UNSPEC, > + CTA_TIMESTAMP_START, > + CTA_TIMESTAMP_STOP, > + __CTA_TIMESTAMP_MAX > +}; > +#define CTA_TIMESTAMP_MAX (__CTA_TIMESTAMP_MAX - 1) > + > +enum ctattr_nat { > + CTA_NAT_UNSPEC, > + CTA_NAT_V4_MINIP, > +#define CTA_NAT_MINIP CTA_NAT_V4_MINIP > + CTA_NAT_V4_MAXIP, > +#define CTA_NAT_MAXIP CTA_NAT_V4_MAXIP > + CTA_NAT_PROTO, > + CTA_NAT_V6_MINIP, > + CTA_NAT_V6_MAXIP, > + __CTA_NAT_MAX > +}; > +#define CTA_NAT_MAX (__CTA_NAT_MAX - 1) > + > +enum ctattr_protonat { > + CTA_PROTONAT_UNSPEC, > + CTA_PROTONAT_PORT_MIN, > + CTA_PROTONAT_PORT_MAX, > + __CTA_PROTONAT_MAX > +}; > +#define CTA_PROTONAT_MAX (__CTA_PROTONAT_MAX - 1) > + > +enum ctattr_natseq { > + CTA_NAT_SEQ_UNSPEC, > + CTA_NAT_SEQ_CORRECTION_POS, > + CTA_NAT_SEQ_OFFSET_BEFORE, > + CTA_NAT_SEQ_OFFSET_AFTER, > + __CTA_NAT_SEQ_MAX > +}; > +#define CTA_NAT_SEQ_MAX (__CTA_NAT_SEQ_MAX - 1) > + > +enum ctattr_expect { > + CTA_EXPECT_UNSPEC, > + CTA_EXPECT_MASTER, > + CTA_EXPECT_TUPLE, > + CTA_EXPECT_MASK, > + CTA_EXPECT_TIMEOUT, > + CTA_EXPECT_ID, > + CTA_EXPECT_HELP_NAME, > + CTA_EXPECT_ZONE, > + CTA_EXPECT_FLAGS, > + CTA_EXPECT_CLASS, > + CTA_EXPECT_NAT, > + CTA_EXPECT_FN, > + __CTA_EXPECT_MAX > +}; > +#define CTA_EXPECT_MAX (__CTA_EXPECT_MAX - 1) > + > +enum ctattr_expect_nat { > + CTA_EXPECT_NAT_UNSPEC, > + CTA_EXPECT_NAT_DIR, > + CTA_EXPECT_NAT_TUPLE, > + __CTA_EXPECT_NAT_MAX > +}; > +#define CTA_EXPECT_NAT_MAX (__CTA_EXPECT_NAT_MAX - 1) > + > +enum ctattr_help { > + CTA_HELP_UNSPEC, > + CTA_HELP_NAME, > + CTA_HELP_INFO, > + __CTA_HELP_MAX > +}; > +#define CTA_HELP_MAX (__CTA_HELP_MAX - 1) > + > +enum ctattr_secctx { > + CTA_SECCTX_UNSPEC, > + CTA_SECCTX_NAME, > + __CTA_SECCTX_MAX > +}; > +#define CTA_SECCTX_MAX (__CTA_SECCTX_MAX - 1) > + > +enum ctattr_stats_cpu { > + CTA_STATS_UNSPEC, > + CTA_STATS_SEARCHED, > + CTA_STATS_FOUND, > + CTA_STATS_NEW, > + CTA_STATS_INVALID, > + CTA_STATS_IGNORE, > + CTA_STATS_DELETE, > + CTA_STATS_DELETE_LIST, > + CTA_STATS_INSERT, > + CTA_STATS_INSERT_FAILED, > + CTA_STATS_DROP, > + CTA_STATS_EARLY_DROP, > + CTA_STATS_ERROR, > + CTA_STATS_SEARCH_RESTART, > + __CTA_STATS_MAX, > +}; > +#define CTA_STATS_MAX (__CTA_STATS_MAX - 1) > + > +enum ctattr_stats_global { > + CTA_STATS_GLOBAL_UNSPEC, > + CTA_STATS_GLOBAL_ENTRIES, > + __CTA_STATS_GLOBAL_MAX, > +}; > +#define CTA_STATS_GLOBAL_MAX (__CTA_STATS_GLOBAL_MAX - 1) > + > +enum ctattr_expect_stats { > + CTA_STATS_EXP_UNSPEC, > + CTA_STATS_EXP_NEW, > + CTA_STATS_EXP_CREATE, > + CTA_STATS_EXP_DELETE, > + __CTA_STATS_EXP_MAX, > +}; > +#define CTA_STATS_EXP_MAX (__CTA_STATS_EXP_MAX - 1) > + > +#endif /* _IPCONNTRACK_NETLINK_H */ > -- > 2.5.0.windows.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev