38#include <sys/counter.h>
39#include <sys/kernel.h>
41#include <sys/limits.h>
42#include <sys/malloc.h>
44#include <sys/syslog.h>
45#include <sys/socket.h>
50#include <net/ethernet.h>
51#include <netinet/in.h>
52#include <netinet/in_systm.h>
53#include <netinet/ip.h>
54#include <netinet/ip6.h>
55#include <netinet/tcp.h>
56#include <netinet/udp.h>
66MALLOC_DEFINE(M_NETFLOW_GENERAL,
"netflow_general",
"plog, V9 templates data");
128 uint16_t *p, *template_fields_cnt;
135 priv->v9_flowsets[0] = malloc(flowset_size, M_NETFLOW_GENERAL, M_WAITOK | M_ZERO);
137 if (flowset_size % 4)
138 flowset_size += 4 - (flowset_size % 4);
140 priv->flowsets_count = 1;
141 p = (uint16_t *)
priv->v9_flowsets[0];
143 *p++ = htons(flowset_size);
149 template_fields_cnt = p++;
154 *template_fields_cnt = htons(cnt);
160 template_fields_cnt = p++;
165 *template_fields_cnt = htons(cnt);
167 priv->flowset_records[0] = 2;
177 uint16_t *flowset_length, len;
181 flowset_length = (uint16_t *)(mtod(m_old,
char *) + offset);
186 if (m_append(m, 4 - (len % 4), (
void *)&zero) != 1)
187 panic(
"ng_netflow: m_append() failed!");
189 len += 4 - (len % 4);
192 *flowset_length = htons(len);
203 struct mbuf *m =
NGI_M(item);
211 CTR0(KTR_NET,
"export9_send(): V9 export packet without tag");
224 header->unix_secs = htonl(ts.tv_sec);
229 if (
priv->export9 != NULL)
234 free(t, M_NETFLOW_GENERAL);
246 struct mbuf *m =
NGI_M(item);
253 CTR0(KTR_NET,
"ng_netflow: V9 export packet without tag!");
274 rec->
i_ifx = htons(fed->fle_i_ifx);
285 rec->
prot = fed->
r.r_ip_p;
286 rec->
tos = fed->
r.r_tos;
305 rec->
i_ifx = htons(fed6->fle_i_ifx);
316 rec->
prot = fed6->
r.r_ip_p;
317 rec->
tos = fed6->
r.r_tos;
330 CTR1(KTR_NET,
"export9_add(): Don't know what to do with %d flow type!", flow_type);
349 if (m_append(m,
sizeof(fsh), (
void *)&fsh) != 1)
350 panic(
"ng_netflow: m_append() failed");
354 if (m_append(m, len, (
void *)&rg.
rec) != 1)
355 panic(
"ng_netflow: m_append() failed");
389 m = m_getm(NULL,
mtu, M_NOWAIT, MT_DATA);
401 free(t, M_NETFLOW_GENERAL);
426 fl =
priv->v9_flowsets[0];
427 m_append(m, ntohs(fl->
length), (
void *)fl);
478 for (i = 0; i <
priv->flowsets_count; i++)
479 free(
priv->v9_flowsets[i], M_NETFLOW_GENERAL);
#define NETFLOW_V9_FIELD_INPUT_SNMP
#define NETFLOW_V9_FIELD_IN_PKTS
#define NETFLOW_V9_FIELD_IPV4_DST_ADDR
#define NETFLOW_V9_FIELD_IPV4_NEXT_HOP
#define NETFLOW_V9_FIELD_OUT_BYTES
#define NETFLOW_V9_FIELD_DST_MASK
#define NETFLOW_V9_FIELD_IPV4_SRC_ADDR
#define NETFLOW_V9_FIELD_DST_AS
#define NETFLOW_V9_FIELD_L4_DST_PORT
#define NETFLOW_V9_MAX_RESERVED_FLOWSET
#define NETFLOW_V9_FIELD_IPV6_DST_ADDR
#define NETFLOW_V9_FIELD_TCP_FLAGS
#define NETFLOW_V9_FIELD_SRC_AS
#define NETFLOW_V9_FIELD_OUT_PKTS
#define NETFLOW_V9_FIELD_TOS
#define NETFLOW_V9_FIELD_L4_SRC_PORT
#define NETFLOW_V9_FIELD_SRC_MASK
#define NETFLOW_V9_FIELD_IN_BYTES
#define NETFLOW_V9_FIELD_PROTOCOL
#define NETFLOW_V9_FIELD_IPV6_NEXT_HOP
#define NETFLOW_V9_FIELD_OUTPUT_SNMP
#define NETFLOW_V9_FIELD_IPV6_SRC_ADDR
#define NETFLOW_V9_FIELD_LAST_SWITCHED
#define NETFLOW_V9_FIELD_FIRST_SWITCHED
static void close_flowset(struct mbuf *m, struct netflow_v9_packet_opt *t)
void ng_netflow_copyv9info(priv_p priv, struct ng_netflow_v9info *i)
struct netflow_v9_template _netflow_v9_record_ipv4_tcp[]
struct netflow_v9_template _netflow_v9_record_ipv6_tcp[]
void return_export9_dgram(priv_p priv, fib_export_p fe, item_p item, struct netflow_v9_packet_opt *t, int flags)
void ng_netflow_v9_cache_init(priv_p priv)
int export9_add(item_p item, struct netflow_v9_packet_opt *t, struct flow_entry *fle)
MALLOC_DECLARE(M_NETFLOW_GENERAL)
MALLOC_DEFINE(M_NETFLOW_GENERAL, "netflow_general", "plog, V9 templates data")
int export9_send(priv_p priv, fib_export_p fe, item_p item, struct netflow_v9_packet_opt *t, int flags)
void ng_netflow_v9_cache_flush(priv_p priv)
item_p get_export9_dgram(priv_p priv, fib_export_p fe, struct netflow_v9_packet_opt **tt)
static void generate_v9_templates(priv_p priv)
#define NETFLOW_V9_FLOW_V6_L4
#define NETFLOW_V9_MAX_TIME_TEMPL
#define _NETFLOW_V9_MAX_SIZE(x)
#define NETFLOW_V9_FLOW_V4_L4
#define _NETFLOW_V9_TEMPLATE_SIZE(x)
#define NETFLOW_V9_MAX_PACKETS_TEMPL
#define NG_FWD_ITEM_HOOK_FLAGS(error, item, hook, flags)
item_p ng_package_data(struct mbuf *m, int flags)
#define NG_FREE_ITEM(item)
struct ubt_hci_evhdr header
struct netflow_export_item exp
struct in6_addr next_hop6
union flow6_entry_data::@22 n
struct netflow_v9_packet_opt * item9_opt
struct netflow_v9_header header
union netflow_v9_record_general::@10 rec
struct netflow_v9_record_ipv6_tcp v6_tcp
struct netflow_v9_record_ipv4_tcp v4_tcp