1f92d9b1aSKristof Provost /* $OpenBSD: if_pflow.h,v 1.19 2022/11/23 15:12:27 mvs Exp $ */ 2f92d9b1aSKristof Provost 3f92d9b1aSKristof Provost /* 4f92d9b1aSKristof Provost * Copyright (c) 2008 Henning Brauer <henning@openbsd.org> 5f92d9b1aSKristof Provost * Copyright (c) 2008 Joerg Goltermann <jg@osn.de> 6f92d9b1aSKristof Provost * 7f92d9b1aSKristof Provost * Permission to use, copy, modify, and distribute this software for any 8f92d9b1aSKristof Provost * purpose with or without fee is hereby granted, provided that the above 9f92d9b1aSKristof Provost * copyright notice and this permission notice appear in all copies. 10f92d9b1aSKristof Provost * 11f92d9b1aSKristof Provost * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12f92d9b1aSKristof Provost * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13f92d9b1aSKristof Provost * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14f92d9b1aSKristof Provost * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15f92d9b1aSKristof Provost * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER IN 16f92d9b1aSKristof Provost * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT 17f92d9b1aSKristof Provost * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18f92d9b1aSKristof Provost */ 19f92d9b1aSKristof Provost 20f92d9b1aSKristof Provost #ifndef _NET_IF_PFLOW_H_ 21f92d9b1aSKristof Provost #define _NET_IF_PFLOW_H_ 22f92d9b1aSKristof Provost 23f92d9b1aSKristof Provost #include <sys/cdefs.h> 24f92d9b1aSKristof Provost #include <sys/types.h> 25f92d9b1aSKristof Provost #include <sys/socket.h> 26f92d9b1aSKristof Provost 27f92d9b1aSKristof Provost #include <netinet/in.h> 28f92d9b1aSKristof Provost 29f92d9b1aSKristof Provost #ifdef _KERNEL 30f92d9b1aSKristof Provost #include <sys/param.h> 31f92d9b1aSKristof Provost #include <sys/lock.h> 32f92d9b1aSKristof Provost #include <sys/rmlock.h> 33f92d9b1aSKristof Provost #include <sys/interrupt.h> 34f92d9b1aSKristof Provost #include <net/if.h> 35f92d9b1aSKristof Provost #include <net/if_var.h> 36f92d9b1aSKristof Provost #include <net/if_private.h> 37f92d9b1aSKristof Provost #include <net/pfvar.h> 38f92d9b1aSKristof Provost 39f92d9b1aSKristof Provost #include <netinet/ip.h> 40f92d9b1aSKristof Provost #endif 41f92d9b1aSKristof Provost 4263a5fe83SKristof Provost #define PFLOW_MAX_ENTRIES 128 4363a5fe83SKristof Provost 44f92d9b1aSKristof Provost #define PFLOW_ID_LEN sizeof(u_int64_t) 45f92d9b1aSKristof Provost 46f92d9b1aSKristof Provost #define PFLOW_MAXFLOWS 30 47f92d9b1aSKristof Provost #define PFLOW_ENGINE_TYPE 42 48f92d9b1aSKristof Provost #define PFLOW_ENGINE_ID 42 49f92d9b1aSKristof Provost #define PFLOW_MAXBYTES 0xffffffff 50f92d9b1aSKristof Provost #define PFLOW_TIMEOUT 30 51f92d9b1aSKristof Provost #define PFLOW_TMPL_TIMEOUT 30 /* rfc 5101 10.3.6 (p.40) recommends 600 */ 52f92d9b1aSKristof Provost 53f92d9b1aSKristof Provost #define PFLOW_IPFIX_TMPL_SET_ID 2 54f92d9b1aSKristof Provost 55f92d9b1aSKristof Provost /* RFC 5102 Information Element Identifiers */ 56f92d9b1aSKristof Provost 57f92d9b1aSKristof Provost #define PFIX_IE_octetDeltaCount 1 58f92d9b1aSKristof Provost #define PFIX_IE_packetDeltaCount 2 59f92d9b1aSKristof Provost #define PFIX_IE_protocolIdentifier 4 60f92d9b1aSKristof Provost #define PFIX_IE_ipClassOfService 5 61f92d9b1aSKristof Provost #define PFIX_IE_sourceTransportPort 7 62f92d9b1aSKristof Provost #define PFIX_IE_sourceIPv4Address 8 63f92d9b1aSKristof Provost #define PFIX_IE_ingressInterface 10 64f92d9b1aSKristof Provost #define PFIX_IE_destinationTransportPort 11 65f92d9b1aSKristof Provost #define PFIX_IE_destinationIPv4Address 12 66f92d9b1aSKristof Provost #define PFIX_IE_egressInterface 14 67f92d9b1aSKristof Provost #define PFIX_IE_flowEndSysUpTime 21 68f92d9b1aSKristof Provost #define PFIX_IE_flowStartSysUpTime 22 69f92d9b1aSKristof Provost #define PFIX_IE_sourceIPv6Address 27 70f92d9b1aSKristof Provost #define PFIX_IE_destinationIPv6Address 28 71f92d9b1aSKristof Provost #define PFIX_IE_flowStartMilliseconds 152 72f92d9b1aSKristof Provost #define PFIX_IE_flowEndMilliseconds 153 73fc6e5069SKristof Provost #define PFIX_IE_postNATSourceIPv4Address 225 74fc6e5069SKristof Provost #define PFIX_IE_postNATDestinationIPv4Address 226 75fc6e5069SKristof Provost #define PFIX_IE_postNAPTSourceTransportPort 227 76fc6e5069SKristof Provost #define PFIX_IE_postNAPTDestinationTransportPort 228 77fc6e5069SKristof Provost #define PFIX_IE_natEvent 230 78fc6e5069SKristof Provost #define PFIX_NAT_EVENT_SESSION_CREATE 4 79fc6e5069SKristof Provost #define PFIX_NAT_EVENT_SESSION_DELETE 5 80fc6e5069SKristof Provost #define PFIX_IE_timeStamp 323 81f92d9b1aSKristof Provost 82f92d9b1aSKristof Provost struct pflow_flow { 83f92d9b1aSKristof Provost u_int32_t src_ip; 84f92d9b1aSKristof Provost u_int32_t dest_ip; 85f92d9b1aSKristof Provost u_int32_t nexthop_ip; 86f92d9b1aSKristof Provost u_int16_t if_index_in; 87f92d9b1aSKristof Provost u_int16_t if_index_out; 88f92d9b1aSKristof Provost u_int32_t flow_packets; 89f92d9b1aSKristof Provost u_int32_t flow_octets; 90f92d9b1aSKristof Provost u_int32_t flow_start; 91f92d9b1aSKristof Provost u_int32_t flow_finish; 92f92d9b1aSKristof Provost u_int16_t src_port; 93f92d9b1aSKristof Provost u_int16_t dest_port; 94f92d9b1aSKristof Provost u_int8_t pad1; 95f92d9b1aSKristof Provost u_int8_t tcp_flags; 96f92d9b1aSKristof Provost u_int8_t protocol; 97f92d9b1aSKristof Provost u_int8_t tos; 98f92d9b1aSKristof Provost u_int16_t src_as; 99f92d9b1aSKristof Provost u_int16_t dest_as; 100f92d9b1aSKristof Provost u_int8_t src_mask; 101f92d9b1aSKristof Provost u_int8_t dest_mask; 102f92d9b1aSKristof Provost u_int16_t pad2; 103f92d9b1aSKristof Provost } __packed; 104f92d9b1aSKristof Provost 105f92d9b1aSKristof Provost struct pflow_set_header { 106f92d9b1aSKristof Provost u_int16_t set_id; 107f92d9b1aSKristof Provost u_int16_t set_length; /* total length of the set, 108f92d9b1aSKristof Provost in octets, including the set header */ 109f92d9b1aSKristof Provost } __packed; 110f92d9b1aSKristof Provost 111f92d9b1aSKristof Provost #define PFLOW_SET_HDRLEN sizeof(struct pflow_set_header) 112f92d9b1aSKristof Provost 113f92d9b1aSKristof Provost struct pflow_tmpl_hdr { 114f92d9b1aSKristof Provost u_int16_t tmpl_id; 115f92d9b1aSKristof Provost u_int16_t field_count; 116f92d9b1aSKristof Provost } __packed; 117f92d9b1aSKristof Provost 118f92d9b1aSKristof Provost struct pflow_tmpl_fspec { 119f92d9b1aSKristof Provost u_int16_t field_id; 120f92d9b1aSKristof Provost u_int16_t len; 121f92d9b1aSKristof Provost } __packed; 122f92d9b1aSKristof Provost 123f92d9b1aSKristof Provost /* update pflow_clone_create() when changing pflow_ipfix_tmpl_ipv4 */ 124f92d9b1aSKristof Provost struct pflow_ipfix_tmpl_ipv4 { 125f92d9b1aSKristof Provost struct pflow_tmpl_hdr h; 126f92d9b1aSKristof Provost struct pflow_tmpl_fspec src_ip; 127f92d9b1aSKristof Provost struct pflow_tmpl_fspec dest_ip; 128f92d9b1aSKristof Provost struct pflow_tmpl_fspec if_index_in; 129f92d9b1aSKristof Provost struct pflow_tmpl_fspec if_index_out; 130f92d9b1aSKristof Provost struct pflow_tmpl_fspec packets; 131f92d9b1aSKristof Provost struct pflow_tmpl_fspec octets; 132f92d9b1aSKristof Provost struct pflow_tmpl_fspec start; 133f92d9b1aSKristof Provost struct pflow_tmpl_fspec finish; 134f92d9b1aSKristof Provost struct pflow_tmpl_fspec src_port; 135f92d9b1aSKristof Provost struct pflow_tmpl_fspec dest_port; 136f92d9b1aSKristof Provost struct pflow_tmpl_fspec tos; 137f92d9b1aSKristof Provost struct pflow_tmpl_fspec protocol; 138f92d9b1aSKristof Provost #define PFLOW_IPFIX_TMPL_IPV4_FIELD_COUNT 12 139f92d9b1aSKristof Provost #define PFLOW_IPFIX_TMPL_IPV4_ID 256 140f92d9b1aSKristof Provost } __packed; 141f92d9b1aSKristof Provost 142f92d9b1aSKristof Provost /* update pflow_clone_create() when changing pflow_ipfix_tmpl_v6 */ 143f92d9b1aSKristof Provost struct pflow_ipfix_tmpl_ipv6 { 144f92d9b1aSKristof Provost struct pflow_tmpl_hdr h; 145f92d9b1aSKristof Provost struct pflow_tmpl_fspec src_ip; 146f92d9b1aSKristof Provost struct pflow_tmpl_fspec dest_ip; 147f92d9b1aSKristof Provost struct pflow_tmpl_fspec if_index_in; 148f92d9b1aSKristof Provost struct pflow_tmpl_fspec if_index_out; 149f92d9b1aSKristof Provost struct pflow_tmpl_fspec packets; 150f92d9b1aSKristof Provost struct pflow_tmpl_fspec octets; 151f92d9b1aSKristof Provost struct pflow_tmpl_fspec start; 152f92d9b1aSKristof Provost struct pflow_tmpl_fspec finish; 153f92d9b1aSKristof Provost struct pflow_tmpl_fspec src_port; 154f92d9b1aSKristof Provost struct pflow_tmpl_fspec dest_port; 155f92d9b1aSKristof Provost struct pflow_tmpl_fspec tos; 156f92d9b1aSKristof Provost struct pflow_tmpl_fspec protocol; 157f92d9b1aSKristof Provost #define PFLOW_IPFIX_TMPL_IPV6_FIELD_COUNT 12 158f92d9b1aSKristof Provost #define PFLOW_IPFIX_TMPL_IPV6_ID 257 159f92d9b1aSKristof Provost } __packed; 160f92d9b1aSKristof Provost 161fc6e5069SKristof Provost struct pflow_ipfix_tmpl_nat44 { 162fc6e5069SKristof Provost struct pflow_tmpl_hdr h; 163fc6e5069SKristof Provost struct pflow_tmpl_fspec timestamp; 164fc6e5069SKristof Provost struct pflow_tmpl_fspec nat_event; 165fc6e5069SKristof Provost struct pflow_tmpl_fspec protocol; 166fc6e5069SKristof Provost struct pflow_tmpl_fspec src_ip; 167fc6e5069SKristof Provost struct pflow_tmpl_fspec src_port; 168fc6e5069SKristof Provost struct pflow_tmpl_fspec postnat_src_ip; 169fc6e5069SKristof Provost struct pflow_tmpl_fspec postnat_src_port; 170fc6e5069SKristof Provost struct pflow_tmpl_fspec dst_ip; 171fc6e5069SKristof Provost struct pflow_tmpl_fspec dst_port; 172fc6e5069SKristof Provost struct pflow_tmpl_fspec postnat_dst_ip; 173fc6e5069SKristof Provost struct pflow_tmpl_fspec postnat_dst_port; 174fc6e5069SKristof Provost #define PFLOW_IPFIX_TMPL_NAT44_FIELD_COUNT 11 175fc6e5069SKristof Provost #define PFLOW_IPFIX_TMPL_NAT44_ID 258 176fc6e5069SKristof Provost }; 177fc6e5069SKristof Provost 178f92d9b1aSKristof Provost struct pflow_ipfix_tmpl { 179f92d9b1aSKristof Provost struct pflow_set_header set_header; 180f92d9b1aSKristof Provost struct pflow_ipfix_tmpl_ipv4 ipv4_tmpl; 181f92d9b1aSKristof Provost struct pflow_ipfix_tmpl_ipv6 ipv6_tmpl; 182fc6e5069SKristof Provost struct pflow_ipfix_tmpl_nat44 nat44_tmpl; 183f92d9b1aSKristof Provost } __packed; 184f92d9b1aSKristof Provost 185f92d9b1aSKristof Provost struct pflow_ipfix_flow4 { 186f92d9b1aSKristof Provost u_int32_t src_ip; /* sourceIPv4Address*/ 187f92d9b1aSKristof Provost u_int32_t dest_ip; /* destinationIPv4Address */ 188f92d9b1aSKristof Provost u_int32_t if_index_in; /* ingressInterface */ 189f92d9b1aSKristof Provost u_int32_t if_index_out; /* egressInterface */ 190f92d9b1aSKristof Provost u_int64_t flow_packets; /* packetDeltaCount */ 191f92d9b1aSKristof Provost u_int64_t flow_octets; /* octetDeltaCount */ 192f92d9b1aSKristof Provost int64_t flow_start; /* flowStartMilliseconds */ 193f92d9b1aSKristof Provost int64_t flow_finish; /* flowEndMilliseconds */ 194f92d9b1aSKristof Provost u_int16_t src_port; /* sourceTransportPort */ 195f92d9b1aSKristof Provost u_int16_t dest_port; /* destinationTransportPort */ 196f92d9b1aSKristof Provost u_int8_t tos; /* ipClassOfService */ 197f92d9b1aSKristof Provost u_int8_t protocol; /* protocolIdentifier */ 198f92d9b1aSKristof Provost /* XXX padding needed? */ 199f92d9b1aSKristof Provost } __packed; 200f92d9b1aSKristof Provost 201f92d9b1aSKristof Provost struct pflow_ipfix_flow6 { 202f92d9b1aSKristof Provost struct in6_addr src_ip; /* sourceIPv6Address */ 203f92d9b1aSKristof Provost struct in6_addr dest_ip; /* destinationIPv6Address */ 204f92d9b1aSKristof Provost u_int32_t if_index_in; /* ingressInterface */ 205f92d9b1aSKristof Provost u_int32_t if_index_out; /* egressInterface */ 206f92d9b1aSKristof Provost u_int64_t flow_packets; /* packetDeltaCount */ 207f92d9b1aSKristof Provost u_int64_t flow_octets; /* octetDeltaCount */ 208f92d9b1aSKristof Provost int64_t flow_start; /* flowStartMilliseconds */ 209f92d9b1aSKristof Provost int64_t flow_finish; /* flowEndMilliseconds */ 210f92d9b1aSKristof Provost u_int16_t src_port; /* sourceTransportPort */ 211f92d9b1aSKristof Provost u_int16_t dest_port; /* destinationTransportPort */ 212f92d9b1aSKristof Provost u_int8_t tos; /* ipClassOfService */ 213f92d9b1aSKristof Provost u_int8_t protocol; /* protocolIdentifier */ 214f92d9b1aSKristof Provost /* XXX padding needed? */ 215f92d9b1aSKristof Provost } __packed; 216f92d9b1aSKristof Provost 217fc6e5069SKristof Provost struct pflow_ipfix_nat4 { 218fc6e5069SKristof Provost u_int64_t timestamp; /* timeStamp */ 219fc6e5069SKristof Provost u_int8_t nat_event; /* natEvent */ 220fc6e5069SKristof Provost u_int8_t protocol; /* protocolIdentifier */ 221fc6e5069SKristof Provost u_int32_t src_ip; /* sourceIPv4Address */ 222fc6e5069SKristof Provost u_int16_t src_port; /* sourceTransportPort */ 223fc6e5069SKristof Provost u_int32_t postnat_src_ip; /* postNATSourceIPv4Address */ 224fc6e5069SKristof Provost u_int16_t postnat_src_port;/* postNAPTSourceTransportPort */ 225fc6e5069SKristof Provost u_int32_t dest_ip; /* destinationIPv4Address */ 226fc6e5069SKristof Provost u_int16_t dest_port; /* destinationTransportPort */ 227fc6e5069SKristof Provost u_int32_t postnat_dest_ip;/* postNATDestinationIPv4Address */ 228fc6e5069SKristof Provost u_int16_t postnat_dest_port;/* postNAPTDestinationTransportPort */ 229fc6e5069SKristof Provost } __packed; 230fc6e5069SKristof Provost 231f92d9b1aSKristof Provost #ifdef _KERNEL 232f92d9b1aSKristof Provost 233f92d9b1aSKristof Provost struct pflow_softc { 234f92d9b1aSKristof Provost int sc_id; 235f92d9b1aSKristof Provost 236f92d9b1aSKristof Provost struct mtx sc_lock; 237f92d9b1aSKristof Provost 238f92d9b1aSKristof Provost int sc_dying; /* [N] */ 239f92d9b1aSKristof Provost struct vnet *sc_vnet; 240f92d9b1aSKristof Provost 241f92d9b1aSKristof Provost unsigned int sc_count; 242f92d9b1aSKristof Provost unsigned int sc_count4; 243f92d9b1aSKristof Provost unsigned int sc_count6; 244fc6e5069SKristof Provost unsigned int sc_count_nat4; 245f92d9b1aSKristof Provost unsigned int sc_maxcount; 246f92d9b1aSKristof Provost unsigned int sc_maxcount4; 247f92d9b1aSKristof Provost unsigned int sc_maxcount6; 248fc6e5069SKristof Provost unsigned int sc_maxcount_nat4; 2492be6f757SKristof Provost u_int32_t sc_gcounter; 250f92d9b1aSKristof Provost u_int32_t sc_sequence; 251f92d9b1aSKristof Provost struct callout sc_tmo; 252f92d9b1aSKristof Provost struct callout sc_tmo6; 253fc6e5069SKristof Provost struct callout sc_tmo_nat4; 254f92d9b1aSKristof Provost struct callout sc_tmo_tmpl; 255f92d9b1aSKristof Provost struct intr_event *sc_swi_ie; 256f92d9b1aSKristof Provost void *sc_swi_cookie; 257f92d9b1aSKristof Provost struct mbufq sc_outputqueue; 258f92d9b1aSKristof Provost struct task sc_outputtask; 259f92d9b1aSKristof Provost struct socket *so; /* [p] */ 260f92d9b1aSKristof Provost struct sockaddr *sc_flowsrc; 261f92d9b1aSKristof Provost struct sockaddr *sc_flowdst; 262f92d9b1aSKristof Provost struct pflow_ipfix_tmpl sc_tmpl_ipfix; 263f92d9b1aSKristof Provost u_int8_t sc_version; 26485b71dcfSKristof Provost u_int32_t sc_observation_dom; 265f92d9b1aSKristof Provost struct mbuf *sc_mbuf; /* current cumulative mbuf */ 266f92d9b1aSKristof Provost struct mbuf *sc_mbuf6; /* current cumulative mbuf */ 267fc6e5069SKristof Provost struct mbuf *sc_mbuf_nat4; 268f92d9b1aSKristof Provost CK_LIST_ENTRY(pflow_softc) sc_next; 269f92d9b1aSKristof Provost struct epoch_context sc_epoch_ctx; 270f92d9b1aSKristof Provost }; 271f92d9b1aSKristof Provost 272f92d9b1aSKristof Provost #endif /* _KERNEL */ 273f92d9b1aSKristof Provost 274f92d9b1aSKristof Provost struct pflow_header { 275f92d9b1aSKristof Provost u_int16_t version; 276f92d9b1aSKristof Provost u_int16_t count; 277f92d9b1aSKristof Provost u_int32_t uptime_ms; 278f92d9b1aSKristof Provost u_int32_t time_sec; 279f92d9b1aSKristof Provost u_int32_t time_nanosec; 280f92d9b1aSKristof Provost u_int32_t flow_sequence; 281f92d9b1aSKristof Provost u_int8_t engine_type; 282f92d9b1aSKristof Provost u_int8_t engine_id; 283f92d9b1aSKristof Provost u_int8_t reserved1; 284f92d9b1aSKristof Provost u_int8_t reserved2; 285f92d9b1aSKristof Provost } __packed; 286f92d9b1aSKristof Provost 287f92d9b1aSKristof Provost #define PFLOW_HDRLEN sizeof(struct pflow_header) 288f92d9b1aSKristof Provost 289f92d9b1aSKristof Provost struct pflow_v10_header { 290f92d9b1aSKristof Provost u_int16_t version; 291f92d9b1aSKristof Provost u_int16_t length; 292f92d9b1aSKristof Provost u_int32_t time_sec; 293f92d9b1aSKristof Provost u_int32_t flow_sequence; 294f92d9b1aSKristof Provost u_int32_t observation_dom; 295f92d9b1aSKristof Provost } __packed; 296f92d9b1aSKristof Provost 297f92d9b1aSKristof Provost #define PFLOW_IPFIX_HDRLEN sizeof(struct pflow_v10_header) 298f92d9b1aSKristof Provost 299f92d9b1aSKristof Provost struct pflowstats { 300f92d9b1aSKristof Provost u_int64_t pflow_flows; 301f92d9b1aSKristof Provost u_int64_t pflow_packets; 302f92d9b1aSKristof Provost u_int64_t pflow_onomem; 303f92d9b1aSKristof Provost u_int64_t pflow_oerrors; 304f92d9b1aSKristof Provost }; 305f92d9b1aSKristof Provost 306f92d9b1aSKristof Provost /* Supported flow protocols */ 307f92d9b1aSKristof Provost #define PFLOW_PROTO_5 5 /* original pflow */ 308f92d9b1aSKristof Provost #define PFLOW_PROTO_10 10 /* ipfix */ 309f92d9b1aSKristof Provost #define PFLOW_PROTO_MAX 11 310f92d9b1aSKristof Provost 311f92d9b1aSKristof Provost #define PFLOW_PROTO_DEFAULT PFLOW_PROTO_5 312f92d9b1aSKristof Provost 313f92d9b1aSKristof Provost struct pflow_protos { 314f92d9b1aSKristof Provost const char *ppr_name; 315f92d9b1aSKristof Provost u_int8_t ppr_proto; 316f92d9b1aSKristof Provost }; 317f92d9b1aSKristof Provost 318f92d9b1aSKristof Provost #define PFLOW_PROTOS { \ 319f92d9b1aSKristof Provost { "5", PFLOW_PROTO_5 }, \ 320f92d9b1aSKristof Provost { "10", PFLOW_PROTO_10 }, \ 321f92d9b1aSKristof Provost } 322f92d9b1aSKristof Provost 323f92d9b1aSKristof Provost #define PFLOWNL_FAMILY_NAME "pflow" 324f92d9b1aSKristof Provost 325f92d9b1aSKristof Provost enum { 326f92d9b1aSKristof Provost PFLOWNL_CMD_UNSPEC = 0, 327f92d9b1aSKristof Provost PFLOWNL_CMD_LIST = 1, 328f92d9b1aSKristof Provost PFLOWNL_CMD_CREATE = 2, 329f92d9b1aSKristof Provost PFLOWNL_CMD_DEL = 3, 330f92d9b1aSKristof Provost PFLOWNL_CMD_SET = 4, 331f92d9b1aSKristof Provost PFLOWNL_CMD_GET = 5, 332f92d9b1aSKristof Provost __PFLOWNL_CMD_MAX, 333f92d9b1aSKristof Provost }; 334f92d9b1aSKristof Provost #define PFLOWNL_CMD_MAX (__PFLOWNL_CMD_MAX - 1) 335f92d9b1aSKristof Provost 336f92d9b1aSKristof Provost enum pflow_list_type_t { 337f92d9b1aSKristof Provost PFLOWNL_L_UNSPEC, 338f92d9b1aSKristof Provost PFLOWNL_L_ID = 1, /* u32 */ 339f92d9b1aSKristof Provost }; 340f92d9b1aSKristof Provost 341f92d9b1aSKristof Provost enum pflow_create_type_t { 342f92d9b1aSKristof Provost PFLOWNL_CREATE_UNSPEC, 343f92d9b1aSKristof Provost PFLOWNL_CREATE_ID = 1, /* u32 */ 344f92d9b1aSKristof Provost }; 345f92d9b1aSKristof Provost 346f92d9b1aSKristof Provost enum pflow_del_type_t { 347f92d9b1aSKristof Provost PFLOWNL_DEL_UNSPEC, 348f92d9b1aSKristof Provost PFLOWNL_DEL_ID = 1, /* u32 */ 349f92d9b1aSKristof Provost }; 350f92d9b1aSKristof Provost 351f92d9b1aSKristof Provost enum pflow_addr_type_t { 352f92d9b1aSKristof Provost PFLOWNL_ADDR_UNSPEC, 353f92d9b1aSKristof Provost PFLOWNL_ADDR_FAMILY = 1, /* u8 */ 354f92d9b1aSKristof Provost PFLOWNL_ADDR_PORT = 2, /* u16 */ 355f92d9b1aSKristof Provost PFLOWNL_ADDR_IP = 3, /* struct in_addr */ 356f92d9b1aSKristof Provost PFLOWNL_ADDR_IP6 = 4, /* struct in6_addr */ 357f92d9b1aSKristof Provost }; 358f92d9b1aSKristof Provost 359f92d9b1aSKristof Provost enum pflow_get_type_t { 360f92d9b1aSKristof Provost PFLOWNL_GET_UNSPEC, 361f92d9b1aSKristof Provost PFLOWNL_GET_ID = 1, /* u32 */ 362f92d9b1aSKristof Provost PFLOWNL_GET_VERSION = 2, /* u16 */ 363f92d9b1aSKristof Provost PFLOWNL_GET_SRC = 3, /* struct sockaddr_storage */ 364f92d9b1aSKristof Provost PFLOWNL_GET_DST = 4, /* struct sockaddr_storage */ 36585b71dcfSKristof Provost PFLOWNL_GET_OBSERVATION_DOMAIN = 5, /* u32 */ 366*e95025edSKristof Provost PFLOWNL_GET_SOCKET_STATUS = 6, /* u8 */ 367f92d9b1aSKristof Provost }; 368f92d9b1aSKristof Provost 369f92d9b1aSKristof Provost enum pflow_set_type_t { 370f92d9b1aSKristof Provost PFLOWNL_SET_UNSPEC, 371f92d9b1aSKristof Provost PFLOWNL_SET_ID = 1, /* u32 */ 372f92d9b1aSKristof Provost PFLOWNL_SET_VERSION = 2, /* u16 */ 373f92d9b1aSKristof Provost PFLOWNL_SET_SRC = 3, /* struct sockaddr_storage */ 374f92d9b1aSKristof Provost PFLOWNL_SET_DST = 4, /* struct sockaddr_storage */ 37585b71dcfSKristof Provost PFLOWNL_SET_OBSERVATION_DOMAIN = 5, /* u32 */ 376f92d9b1aSKristof Provost }; 377f92d9b1aSKristof Provost 378f92d9b1aSKristof Provost #ifdef _KERNEL 379f92d9b1aSKristof Provost int pflow_sysctl(int *, u_int, void *, size_t *, void *, size_t); 380f92d9b1aSKristof Provost #endif /* _KERNEL */ 381f92d9b1aSKristof Provost 382f92d9b1aSKristof Provost #endif /* _NET_IF_PFLOW_H_ */ 383