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 42f92d9b1aSKristof Provost #define PFLOW_ID_LEN sizeof(u_int64_t) 43f92d9b1aSKristof Provost 44f92d9b1aSKristof Provost #define PFLOW_MAXFLOWS 30 45f92d9b1aSKristof Provost #define PFLOW_ENGINE_TYPE 42 46f92d9b1aSKristof Provost #define PFLOW_ENGINE_ID 42 47f92d9b1aSKristof Provost #define PFLOW_MAXBYTES 0xffffffff 48f92d9b1aSKristof Provost #define PFLOW_TIMEOUT 30 49f92d9b1aSKristof Provost #define PFLOW_TMPL_TIMEOUT 30 /* rfc 5101 10.3.6 (p.40) recommends 600 */ 50f92d9b1aSKristof Provost 51f92d9b1aSKristof Provost #define PFLOW_IPFIX_TMPL_SET_ID 2 52f92d9b1aSKristof Provost 53f92d9b1aSKristof Provost /* RFC 5102 Information Element Identifiers */ 54f92d9b1aSKristof Provost 55f92d9b1aSKristof Provost #define PFIX_IE_octetDeltaCount 1 56f92d9b1aSKristof Provost #define PFIX_IE_packetDeltaCount 2 57f92d9b1aSKristof Provost #define PFIX_IE_protocolIdentifier 4 58f92d9b1aSKristof Provost #define PFIX_IE_ipClassOfService 5 59f92d9b1aSKristof Provost #define PFIX_IE_sourceTransportPort 7 60f92d9b1aSKristof Provost #define PFIX_IE_sourceIPv4Address 8 61f92d9b1aSKristof Provost #define PFIX_IE_ingressInterface 10 62f92d9b1aSKristof Provost #define PFIX_IE_destinationTransportPort 11 63f92d9b1aSKristof Provost #define PFIX_IE_destinationIPv4Address 12 64f92d9b1aSKristof Provost #define PFIX_IE_egressInterface 14 65f92d9b1aSKristof Provost #define PFIX_IE_flowEndSysUpTime 21 66f92d9b1aSKristof Provost #define PFIX_IE_flowStartSysUpTime 22 67f92d9b1aSKristof Provost #define PFIX_IE_sourceIPv6Address 27 68f92d9b1aSKristof Provost #define PFIX_IE_destinationIPv6Address 28 69f92d9b1aSKristof Provost #define PFIX_IE_flowStartMilliseconds 152 70f92d9b1aSKristof Provost #define PFIX_IE_flowEndMilliseconds 153 71*fc6e5069SKristof Provost #define PFIX_IE_postNATSourceIPv4Address 225 72*fc6e5069SKristof Provost #define PFIX_IE_postNATDestinationIPv4Address 226 73*fc6e5069SKristof Provost #define PFIX_IE_postNAPTSourceTransportPort 227 74*fc6e5069SKristof Provost #define PFIX_IE_postNAPTDestinationTransportPort 228 75*fc6e5069SKristof Provost #define PFIX_IE_natEvent 230 76*fc6e5069SKristof Provost #define PFIX_NAT_EVENT_SESSION_CREATE 4 77*fc6e5069SKristof Provost #define PFIX_NAT_EVENT_SESSION_DELETE 5 78*fc6e5069SKristof Provost #define PFIX_IE_timeStamp 323 79f92d9b1aSKristof Provost 80f92d9b1aSKristof Provost struct pflow_flow { 81f92d9b1aSKristof Provost u_int32_t src_ip; 82f92d9b1aSKristof Provost u_int32_t dest_ip; 83f92d9b1aSKristof Provost u_int32_t nexthop_ip; 84f92d9b1aSKristof Provost u_int16_t if_index_in; 85f92d9b1aSKristof Provost u_int16_t if_index_out; 86f92d9b1aSKristof Provost u_int32_t flow_packets; 87f92d9b1aSKristof Provost u_int32_t flow_octets; 88f92d9b1aSKristof Provost u_int32_t flow_start; 89f92d9b1aSKristof Provost u_int32_t flow_finish; 90f92d9b1aSKristof Provost u_int16_t src_port; 91f92d9b1aSKristof Provost u_int16_t dest_port; 92f92d9b1aSKristof Provost u_int8_t pad1; 93f92d9b1aSKristof Provost u_int8_t tcp_flags; 94f92d9b1aSKristof Provost u_int8_t protocol; 95f92d9b1aSKristof Provost u_int8_t tos; 96f92d9b1aSKristof Provost u_int16_t src_as; 97f92d9b1aSKristof Provost u_int16_t dest_as; 98f92d9b1aSKristof Provost u_int8_t src_mask; 99f92d9b1aSKristof Provost u_int8_t dest_mask; 100f92d9b1aSKristof Provost u_int16_t pad2; 101f92d9b1aSKristof Provost } __packed; 102f92d9b1aSKristof Provost 103f92d9b1aSKristof Provost struct pflow_set_header { 104f92d9b1aSKristof Provost u_int16_t set_id; 105f92d9b1aSKristof Provost u_int16_t set_length; /* total length of the set, 106f92d9b1aSKristof Provost in octets, including the set header */ 107f92d9b1aSKristof Provost } __packed; 108f92d9b1aSKristof Provost 109f92d9b1aSKristof Provost #define PFLOW_SET_HDRLEN sizeof(struct pflow_set_header) 110f92d9b1aSKristof Provost 111f92d9b1aSKristof Provost struct pflow_tmpl_hdr { 112f92d9b1aSKristof Provost u_int16_t tmpl_id; 113f92d9b1aSKristof Provost u_int16_t field_count; 114f92d9b1aSKristof Provost } __packed; 115f92d9b1aSKristof Provost 116f92d9b1aSKristof Provost struct pflow_tmpl_fspec { 117f92d9b1aSKristof Provost u_int16_t field_id; 118f92d9b1aSKristof Provost u_int16_t len; 119f92d9b1aSKristof Provost } __packed; 120f92d9b1aSKristof Provost 121f92d9b1aSKristof Provost /* update pflow_clone_create() when changing pflow_ipfix_tmpl_ipv4 */ 122f92d9b1aSKristof Provost struct pflow_ipfix_tmpl_ipv4 { 123f92d9b1aSKristof Provost struct pflow_tmpl_hdr h; 124f92d9b1aSKristof Provost struct pflow_tmpl_fspec src_ip; 125f92d9b1aSKristof Provost struct pflow_tmpl_fspec dest_ip; 126f92d9b1aSKristof Provost struct pflow_tmpl_fspec if_index_in; 127f92d9b1aSKristof Provost struct pflow_tmpl_fspec if_index_out; 128f92d9b1aSKristof Provost struct pflow_tmpl_fspec packets; 129f92d9b1aSKristof Provost struct pflow_tmpl_fspec octets; 130f92d9b1aSKristof Provost struct pflow_tmpl_fspec start; 131f92d9b1aSKristof Provost struct pflow_tmpl_fspec finish; 132f92d9b1aSKristof Provost struct pflow_tmpl_fspec src_port; 133f92d9b1aSKristof Provost struct pflow_tmpl_fspec dest_port; 134f92d9b1aSKristof Provost struct pflow_tmpl_fspec tos; 135f92d9b1aSKristof Provost struct pflow_tmpl_fspec protocol; 136f92d9b1aSKristof Provost #define PFLOW_IPFIX_TMPL_IPV4_FIELD_COUNT 12 137f92d9b1aSKristof Provost #define PFLOW_IPFIX_TMPL_IPV4_ID 256 138f92d9b1aSKristof Provost } __packed; 139f92d9b1aSKristof Provost 140f92d9b1aSKristof Provost /* update pflow_clone_create() when changing pflow_ipfix_tmpl_v6 */ 141f92d9b1aSKristof Provost struct pflow_ipfix_tmpl_ipv6 { 142f92d9b1aSKristof Provost struct pflow_tmpl_hdr h; 143f92d9b1aSKristof Provost struct pflow_tmpl_fspec src_ip; 144f92d9b1aSKristof Provost struct pflow_tmpl_fspec dest_ip; 145f92d9b1aSKristof Provost struct pflow_tmpl_fspec if_index_in; 146f92d9b1aSKristof Provost struct pflow_tmpl_fspec if_index_out; 147f92d9b1aSKristof Provost struct pflow_tmpl_fspec packets; 148f92d9b1aSKristof Provost struct pflow_tmpl_fspec octets; 149f92d9b1aSKristof Provost struct pflow_tmpl_fspec start; 150f92d9b1aSKristof Provost struct pflow_tmpl_fspec finish; 151f92d9b1aSKristof Provost struct pflow_tmpl_fspec src_port; 152f92d9b1aSKristof Provost struct pflow_tmpl_fspec dest_port; 153f92d9b1aSKristof Provost struct pflow_tmpl_fspec tos; 154f92d9b1aSKristof Provost struct pflow_tmpl_fspec protocol; 155f92d9b1aSKristof Provost #define PFLOW_IPFIX_TMPL_IPV6_FIELD_COUNT 12 156f92d9b1aSKristof Provost #define PFLOW_IPFIX_TMPL_IPV6_ID 257 157f92d9b1aSKristof Provost } __packed; 158f92d9b1aSKristof Provost 159*fc6e5069SKristof Provost struct pflow_ipfix_tmpl_nat44 { 160*fc6e5069SKristof Provost struct pflow_tmpl_hdr h; 161*fc6e5069SKristof Provost struct pflow_tmpl_fspec timestamp; 162*fc6e5069SKristof Provost struct pflow_tmpl_fspec nat_event; 163*fc6e5069SKristof Provost struct pflow_tmpl_fspec protocol; 164*fc6e5069SKristof Provost struct pflow_tmpl_fspec src_ip; 165*fc6e5069SKristof Provost struct pflow_tmpl_fspec src_port; 166*fc6e5069SKristof Provost struct pflow_tmpl_fspec postnat_src_ip; 167*fc6e5069SKristof Provost struct pflow_tmpl_fspec postnat_src_port; 168*fc6e5069SKristof Provost struct pflow_tmpl_fspec dst_ip; 169*fc6e5069SKristof Provost struct pflow_tmpl_fspec dst_port; 170*fc6e5069SKristof Provost struct pflow_tmpl_fspec postnat_dst_ip; 171*fc6e5069SKristof Provost struct pflow_tmpl_fspec postnat_dst_port; 172*fc6e5069SKristof Provost #define PFLOW_IPFIX_TMPL_NAT44_FIELD_COUNT 11 173*fc6e5069SKristof Provost #define PFLOW_IPFIX_TMPL_NAT44_ID 258 174*fc6e5069SKristof Provost }; 175*fc6e5069SKristof Provost 176f92d9b1aSKristof Provost struct pflow_ipfix_tmpl { 177f92d9b1aSKristof Provost struct pflow_set_header set_header; 178f92d9b1aSKristof Provost struct pflow_ipfix_tmpl_ipv4 ipv4_tmpl; 179f92d9b1aSKristof Provost struct pflow_ipfix_tmpl_ipv6 ipv6_tmpl; 180*fc6e5069SKristof Provost struct pflow_ipfix_tmpl_nat44 nat44_tmpl; 181f92d9b1aSKristof Provost } __packed; 182f92d9b1aSKristof Provost 183f92d9b1aSKristof Provost struct pflow_ipfix_flow4 { 184f92d9b1aSKristof Provost u_int32_t src_ip; /* sourceIPv4Address*/ 185f92d9b1aSKristof Provost u_int32_t dest_ip; /* destinationIPv4Address */ 186f92d9b1aSKristof Provost u_int32_t if_index_in; /* ingressInterface */ 187f92d9b1aSKristof Provost u_int32_t if_index_out; /* egressInterface */ 188f92d9b1aSKristof Provost u_int64_t flow_packets; /* packetDeltaCount */ 189f92d9b1aSKristof Provost u_int64_t flow_octets; /* octetDeltaCount */ 190f92d9b1aSKristof Provost int64_t flow_start; /* flowStartMilliseconds */ 191f92d9b1aSKristof Provost int64_t flow_finish; /* flowEndMilliseconds */ 192f92d9b1aSKristof Provost u_int16_t src_port; /* sourceTransportPort */ 193f92d9b1aSKristof Provost u_int16_t dest_port; /* destinationTransportPort */ 194f92d9b1aSKristof Provost u_int8_t tos; /* ipClassOfService */ 195f92d9b1aSKristof Provost u_int8_t protocol; /* protocolIdentifier */ 196f92d9b1aSKristof Provost /* XXX padding needed? */ 197f92d9b1aSKristof Provost } __packed; 198f92d9b1aSKristof Provost 199f92d9b1aSKristof Provost struct pflow_ipfix_flow6 { 200f92d9b1aSKristof Provost struct in6_addr src_ip; /* sourceIPv6Address */ 201f92d9b1aSKristof Provost struct in6_addr dest_ip; /* destinationIPv6Address */ 202f92d9b1aSKristof Provost u_int32_t if_index_in; /* ingressInterface */ 203f92d9b1aSKristof Provost u_int32_t if_index_out; /* egressInterface */ 204f92d9b1aSKristof Provost u_int64_t flow_packets; /* packetDeltaCount */ 205f92d9b1aSKristof Provost u_int64_t flow_octets; /* octetDeltaCount */ 206f92d9b1aSKristof Provost int64_t flow_start; /* flowStartMilliseconds */ 207f92d9b1aSKristof Provost int64_t flow_finish; /* flowEndMilliseconds */ 208f92d9b1aSKristof Provost u_int16_t src_port; /* sourceTransportPort */ 209f92d9b1aSKristof Provost u_int16_t dest_port; /* destinationTransportPort */ 210f92d9b1aSKristof Provost u_int8_t tos; /* ipClassOfService */ 211f92d9b1aSKristof Provost u_int8_t protocol; /* protocolIdentifier */ 212f92d9b1aSKristof Provost /* XXX padding needed? */ 213f92d9b1aSKristof Provost } __packed; 214f92d9b1aSKristof Provost 215*fc6e5069SKristof Provost struct pflow_ipfix_nat4 { 216*fc6e5069SKristof Provost u_int64_t timestamp; /* timeStamp */ 217*fc6e5069SKristof Provost u_int8_t nat_event; /* natEvent */ 218*fc6e5069SKristof Provost u_int8_t protocol; /* protocolIdentifier */ 219*fc6e5069SKristof Provost u_int32_t src_ip; /* sourceIPv4Address */ 220*fc6e5069SKristof Provost u_int16_t src_port; /* sourceTransportPort */ 221*fc6e5069SKristof Provost u_int32_t postnat_src_ip; /* postNATSourceIPv4Address */ 222*fc6e5069SKristof Provost u_int16_t postnat_src_port;/* postNAPTSourceTransportPort */ 223*fc6e5069SKristof Provost u_int32_t dest_ip; /* destinationIPv4Address */ 224*fc6e5069SKristof Provost u_int16_t dest_port; /* destinationTransportPort */ 225*fc6e5069SKristof Provost u_int32_t postnat_dest_ip;/* postNATDestinationIPv4Address */ 226*fc6e5069SKristof Provost u_int16_t postnat_dest_port;/* postNAPTDestinationTransportPort */ 227*fc6e5069SKristof Provost } __packed; 228*fc6e5069SKristof Provost 229f92d9b1aSKristof Provost #ifdef _KERNEL 230f92d9b1aSKristof Provost 231f92d9b1aSKristof Provost struct pflow_softc { 232f92d9b1aSKristof Provost int sc_id; 233f92d9b1aSKristof Provost 234f92d9b1aSKristof Provost struct mtx sc_lock; 235f92d9b1aSKristof Provost 236f92d9b1aSKristof Provost int sc_dying; /* [N] */ 237f92d9b1aSKristof Provost struct vnet *sc_vnet; 238f92d9b1aSKristof Provost 239f92d9b1aSKristof Provost unsigned int sc_count; 240f92d9b1aSKristof Provost unsigned int sc_count4; 241f92d9b1aSKristof Provost unsigned int sc_count6; 242*fc6e5069SKristof Provost unsigned int sc_count_nat4; 243f92d9b1aSKristof Provost unsigned int sc_maxcount; 244f92d9b1aSKristof Provost unsigned int sc_maxcount4; 245f92d9b1aSKristof Provost unsigned int sc_maxcount6; 246*fc6e5069SKristof Provost unsigned int sc_maxcount_nat4; 247f92d9b1aSKristof Provost u_int64_t sc_gcounter; 248f92d9b1aSKristof Provost u_int32_t sc_sequence; 249f92d9b1aSKristof Provost struct callout sc_tmo; 250f92d9b1aSKristof Provost struct callout sc_tmo6; 251*fc6e5069SKristof Provost struct callout sc_tmo_nat4; 252f92d9b1aSKristof Provost struct callout sc_tmo_tmpl; 253f92d9b1aSKristof Provost struct intr_event *sc_swi_ie; 254f92d9b1aSKristof Provost void *sc_swi_cookie; 255f92d9b1aSKristof Provost struct mbufq sc_outputqueue; 256f92d9b1aSKristof Provost struct task sc_outputtask; 257f92d9b1aSKristof Provost struct socket *so; /* [p] */ 258f92d9b1aSKristof Provost struct sockaddr *sc_flowsrc; 259f92d9b1aSKristof Provost struct sockaddr *sc_flowdst; 260f92d9b1aSKristof Provost struct pflow_ipfix_tmpl sc_tmpl_ipfix; 261f92d9b1aSKristof Provost u_int8_t sc_version; 26285b71dcfSKristof Provost u_int32_t sc_observation_dom; 263f92d9b1aSKristof Provost struct mbuf *sc_mbuf; /* current cumulative mbuf */ 264f92d9b1aSKristof Provost struct mbuf *sc_mbuf6; /* current cumulative mbuf */ 265*fc6e5069SKristof Provost struct mbuf *sc_mbuf_nat4; 266f92d9b1aSKristof Provost CK_LIST_ENTRY(pflow_softc) sc_next; 267f92d9b1aSKristof Provost struct epoch_context sc_epoch_ctx; 268f92d9b1aSKristof Provost }; 269f92d9b1aSKristof Provost 270f92d9b1aSKristof Provost #endif /* _KERNEL */ 271f92d9b1aSKristof Provost 272f92d9b1aSKristof Provost struct pflow_header { 273f92d9b1aSKristof Provost u_int16_t version; 274f92d9b1aSKristof Provost u_int16_t count; 275f92d9b1aSKristof Provost u_int32_t uptime_ms; 276f92d9b1aSKristof Provost u_int32_t time_sec; 277f92d9b1aSKristof Provost u_int32_t time_nanosec; 278f92d9b1aSKristof Provost u_int32_t flow_sequence; 279f92d9b1aSKristof Provost u_int8_t engine_type; 280f92d9b1aSKristof Provost u_int8_t engine_id; 281f92d9b1aSKristof Provost u_int8_t reserved1; 282f92d9b1aSKristof Provost u_int8_t reserved2; 283f92d9b1aSKristof Provost } __packed; 284f92d9b1aSKristof Provost 285f92d9b1aSKristof Provost #define PFLOW_HDRLEN sizeof(struct pflow_header) 286f92d9b1aSKristof Provost 287f92d9b1aSKristof Provost struct pflow_v10_header { 288f92d9b1aSKristof Provost u_int16_t version; 289f92d9b1aSKristof Provost u_int16_t length; 290f92d9b1aSKristof Provost u_int32_t time_sec; 291f92d9b1aSKristof Provost u_int32_t flow_sequence; 292f92d9b1aSKristof Provost u_int32_t observation_dom; 293f92d9b1aSKristof Provost } __packed; 294f92d9b1aSKristof Provost 295f92d9b1aSKristof Provost #define PFLOW_IPFIX_HDRLEN sizeof(struct pflow_v10_header) 296f92d9b1aSKristof Provost 297f92d9b1aSKristof Provost struct pflowstats { 298f92d9b1aSKristof Provost u_int64_t pflow_flows; 299f92d9b1aSKristof Provost u_int64_t pflow_packets; 300f92d9b1aSKristof Provost u_int64_t pflow_onomem; 301f92d9b1aSKristof Provost u_int64_t pflow_oerrors; 302f92d9b1aSKristof Provost }; 303f92d9b1aSKristof Provost 304f92d9b1aSKristof Provost /* Supported flow protocols */ 305f92d9b1aSKristof Provost #define PFLOW_PROTO_5 5 /* original pflow */ 306f92d9b1aSKristof Provost #define PFLOW_PROTO_10 10 /* ipfix */ 307f92d9b1aSKristof Provost #define PFLOW_PROTO_MAX 11 308f92d9b1aSKristof Provost 309f92d9b1aSKristof Provost #define PFLOW_PROTO_DEFAULT PFLOW_PROTO_5 310f92d9b1aSKristof Provost 311f92d9b1aSKristof Provost struct pflow_protos { 312f92d9b1aSKristof Provost const char *ppr_name; 313f92d9b1aSKristof Provost u_int8_t ppr_proto; 314f92d9b1aSKristof Provost }; 315f92d9b1aSKristof Provost 316f92d9b1aSKristof Provost #define PFLOW_PROTOS { \ 317f92d9b1aSKristof Provost { "5", PFLOW_PROTO_5 }, \ 318f92d9b1aSKristof Provost { "10", PFLOW_PROTO_10 }, \ 319f92d9b1aSKristof Provost } 320f92d9b1aSKristof Provost 321f92d9b1aSKristof Provost #define PFLOWNL_FAMILY_NAME "pflow" 322f92d9b1aSKristof Provost 323f92d9b1aSKristof Provost enum { 324f92d9b1aSKristof Provost PFLOWNL_CMD_UNSPEC = 0, 325f92d9b1aSKristof Provost PFLOWNL_CMD_LIST = 1, 326f92d9b1aSKristof Provost PFLOWNL_CMD_CREATE = 2, 327f92d9b1aSKristof Provost PFLOWNL_CMD_DEL = 3, 328f92d9b1aSKristof Provost PFLOWNL_CMD_SET = 4, 329f92d9b1aSKristof Provost PFLOWNL_CMD_GET = 5, 330f92d9b1aSKristof Provost __PFLOWNL_CMD_MAX, 331f92d9b1aSKristof Provost }; 332f92d9b1aSKristof Provost #define PFLOWNL_CMD_MAX (__PFLOWNL_CMD_MAX - 1) 333f92d9b1aSKristof Provost 334f92d9b1aSKristof Provost enum pflow_list_type_t { 335f92d9b1aSKristof Provost PFLOWNL_L_UNSPEC, 336f92d9b1aSKristof Provost PFLOWNL_L_ID = 1, /* u32 */ 337f92d9b1aSKristof Provost }; 338f92d9b1aSKristof Provost 339f92d9b1aSKristof Provost enum pflow_create_type_t { 340f92d9b1aSKristof Provost PFLOWNL_CREATE_UNSPEC, 341f92d9b1aSKristof Provost PFLOWNL_CREATE_ID = 1, /* u32 */ 342f92d9b1aSKristof Provost }; 343f92d9b1aSKristof Provost 344f92d9b1aSKristof Provost enum pflow_del_type_t { 345f92d9b1aSKristof Provost PFLOWNL_DEL_UNSPEC, 346f92d9b1aSKristof Provost PFLOWNL_DEL_ID = 1, /* u32 */ 347f92d9b1aSKristof Provost }; 348f92d9b1aSKristof Provost 349f92d9b1aSKristof Provost enum pflow_addr_type_t { 350f92d9b1aSKristof Provost PFLOWNL_ADDR_UNSPEC, 351f92d9b1aSKristof Provost PFLOWNL_ADDR_FAMILY = 1, /* u8 */ 352f92d9b1aSKristof Provost PFLOWNL_ADDR_PORT = 2, /* u16 */ 353f92d9b1aSKristof Provost PFLOWNL_ADDR_IP = 3, /* struct in_addr */ 354f92d9b1aSKristof Provost PFLOWNL_ADDR_IP6 = 4, /* struct in6_addr */ 355f92d9b1aSKristof Provost }; 356f92d9b1aSKristof Provost 357f92d9b1aSKristof Provost enum pflow_get_type_t { 358f92d9b1aSKristof Provost PFLOWNL_GET_UNSPEC, 359f92d9b1aSKristof Provost PFLOWNL_GET_ID = 1, /* u32 */ 360f92d9b1aSKristof Provost PFLOWNL_GET_VERSION = 2, /* u16 */ 361f92d9b1aSKristof Provost PFLOWNL_GET_SRC = 3, /* struct sockaddr_storage */ 362f92d9b1aSKristof Provost PFLOWNL_GET_DST = 4, /* struct sockaddr_storage */ 36385b71dcfSKristof Provost PFLOWNL_GET_OBSERVATION_DOMAIN = 5, /* u32 */ 364f92d9b1aSKristof Provost }; 365f92d9b1aSKristof Provost 366f92d9b1aSKristof Provost enum pflow_set_type_t { 367f92d9b1aSKristof Provost PFLOWNL_SET_UNSPEC, 368f92d9b1aSKristof Provost PFLOWNL_SET_ID = 1, /* u32 */ 369f92d9b1aSKristof Provost PFLOWNL_SET_VERSION = 2, /* u16 */ 370f92d9b1aSKristof Provost PFLOWNL_SET_SRC = 3, /* struct sockaddr_storage */ 371f92d9b1aSKristof Provost PFLOWNL_SET_DST = 4, /* struct sockaddr_storage */ 37285b71dcfSKristof Provost PFLOWNL_SET_OBSERVATION_DOMAIN = 5, /* u32 */ 373f92d9b1aSKristof Provost }; 374f92d9b1aSKristof Provost 375f92d9b1aSKristof Provost #ifdef _KERNEL 376f92d9b1aSKristof Provost int pflow_sysctl(int *, u_int, void *, size_t *, void *, size_t); 377f92d9b1aSKristof Provost #endif /* _KERNEL */ 378f92d9b1aSKristof Provost 379f92d9b1aSKristof Provost #endif /* _NET_IF_PFLOW_H_ */ 380