version 1.1, 2012/02/21 23:32:47
|
version 1.1.1.3, 2016/11/01 09:56:12
|
Line 44
|
Line 44
|
#endif |
#endif |
#ifdef USE_NG_NETFLOW |
#ifdef USE_NG_NETFLOW |
#include <netgraph/netflow/ng_netflow.h> |
#include <netgraph/netflow/ng_netflow.h> |
#if NGM_NETFLOW_COOKIE >= 1309868867 |
|
#include <netgraph/netflow/netflow.h> |
#include <netgraph/netflow/netflow.h> |
|
#if NGM_NETFLOW_COOKIE >= 1309868867 |
#include <netgraph/netflow/netflow_v9.h> |
#include <netgraph/netflow/netflow_v9.h> |
#endif |
#endif |
#endif |
#endif |
Line 460 NgFuncSendQuery(const char *path, int cookie, int cmd,
|
Line 460 NgFuncSendQuery(const char *path, int cookie, int cmd,
|
} |
} |
|
|
/* Send message */ |
/* Send message */ |
if (NgSendMsg(gNgStatSock, path, cookie, cmd, args, arglen) < 0) | if (NgSendMsg(gNgStatSock, path, cookie, cmd, args, arglen) < 0) { |
| Perror("NgFuncSendQuery: can't send message"); |
return (-1); |
return (-1); |
|
} |
|
|
/* Read message */ |
/* Read message */ |
if (NgRecvMsg(gNgStatSock, rbuf, replen, raddr) < 0) { |
if (NgRecvMsg(gNgStatSock, rbuf, replen, raddr) < 0) { |
Line 627 NgFuncWriteFrame(int dsock, const char *hookname, cons
|
Line 629 NgFuncWriteFrame(int dsock, const char *hookname, cons
|
/* ENOBUFS can be expected on some links, e.g., ng_pptpgre(4) */ |
/* ENOBUFS can be expected on some links, e.g., ng_pptpgre(4) */ |
if (rtn < 0 && errno != ENOBUFS) { |
if (rtn < 0 && errno != ENOBUFS) { |
Perror("[%s] error writing len %d frame to %s", |
Perror("[%s] error writing len %d frame to %s", |
label, MBLEN(bp), hookname); | label, (int)MBLEN(bp), hookname); |
} |
} |
mbfree(bp); |
mbfree(bp); |
return (rtn); |
return (rtn); |
Line 763 NetflowSetCommand(Context ctx, int ac, char *av[], voi
|
Line 765 NetflowSetCommand(Context ctx, int ac, char *av[], voi
|
gNetflowExport = *sin; |
gNetflowExport = *sin; |
break; |
break; |
case SET_SELF: |
case SET_SELF: |
|
if (ac != 1 && ac != 2) |
|
return (-1); |
if ((sin = ParseAddrPort(ac, av, ALLOW_IPV4|ALLOW_IPV6)) == NULL) |
if ((sin = ParseAddrPort(ac, av, ALLOW_IPV4|ALLOW_IPV6)) == NULL) |
return (-1); |
return (-1); |
gNetflowSource = *sin; |
gNetflowSource = *sin; |
Line 815 NetflowSetCommand(Context ctx, int ac, char *av[], voi
|
Line 819 NetflowSetCommand(Context ctx, int ac, char *av[], voi
|
case SET_HOOK: |
case SET_HOOK: |
if (ac != 1) |
if (ac != 1) |
return (-1); |
return (-1); |
if (atoi(av[0]) <= 0) | if (atoi(av[0]) <= 0 || atoi(av[0]) >= NG_NETFLOW_MAXIFACES) |
Error("Bad netflow hook number \"%s\"", av[0]); |
Error("Bad netflow hook number \"%s\"", av[0]); |
gNetflowIface = atoi(av[0])-1; |
gNetflowIface = atoi(av[0])-1; |
break; |
break; |
Line 825 NetflowSetCommand(Context ctx, int ac, char *av[], voi
|
Line 829 NetflowSetCommand(Context ctx, int ac, char *av[], voi
|
} |
} |
|
|
return (0); |
return (0); |
|
} |
|
|
|
/* |
|
* ShowNetflow() |
|
* |
|
* Show state of a Netflow |
|
*/ |
|
|
|
int |
|
ShowNetflow(Context ctx, int ac, char *av[], void *arg) |
|
{ |
|
struct u_addr addr; |
|
in_port_t port; |
|
char buf[64]; |
|
char path[NG_PATHSIZ]; |
|
union { |
|
u_char buf[sizeof(struct ng_mesg) + sizeof(struct ng_netflow_info)]; |
|
struct ng_mesg reply; |
|
} u; |
|
struct ng_netflow_info *const ni = \ |
|
(struct ng_netflow_info *)(void *)u.reply.data; |
|
#ifdef NGM_NETFLOW_V9_COOKIE |
|
union { |
|
u_char buf[sizeof(struct ng_mesg) + sizeof(struct ng_netflow_v9info)]; |
|
struct ng_mesg reply; |
|
} uv9; |
|
struct ng_netflow_v9info *const niv9 = \ |
|
(struct ng_netflow_v9info *)(void *)uv9.reply.data; |
|
#endif /* NGM_NETFLOW_V9_COOKIE */ |
|
|
|
if (gNetflowNodeID>0) { |
|
snprintf(path, sizeof(path), "[%x]:", gNetflowNodeID); |
|
if (NgFuncSendQuery(path, NGM_NETFLOW_COOKIE, NGM_NETFLOW_INFO, |
|
NULL, 0, &u.reply, sizeof(u), NULL) < 0) |
|
return(-7); |
|
#ifdef NGM_NETFLOW_V9_COOKIE |
|
if (NgFuncSendQuery(path, NGM_NETFLOW_COOKIE, NGM_NETFLOW_V9INFO, |
|
NULL, 0, &uv9.reply, sizeof(uv9), NULL) < 0) |
|
return(-7); |
|
#endif /* NGM_NETFLOW_V9_COOKIE */ |
|
} |
|
|
|
Printf("Netflow status:\r\n"); |
|
Printf("\tNode created : %s\r\n", gNetflowNodeID ? "Yes" : "No"); |
|
Printf("Netflow settings:\r\n"); |
|
Printf("\tNode name : %s\r\n", gNetflowNodeName); |
|
Printf("\tInitial hook : %d\r\n", gNetflowIface); |
|
Printf("\tTimeouts, sec:\r\n"); |
|
Printf("\t Active : %u\r\n", |
|
(gNetflowNodeID>0) ? ni->nfinfo_act_t : |
|
(gNetflowActive ? gNetflowActive : ACTIVE_TIMEOUT)); |
|
Printf("\t Inactive : %u\r\n", |
|
(gNetflowNodeID>0) ? ni->nfinfo_inact_t : |
|
(gNetflowInactive ? gNetflowInactive : INACTIVE_TIMEOUT)); |
|
sockaddrtou_addr(&gNetflowExport, &addr, &port); |
|
Printf("\tExport address : %s port %d\r\n", |
|
u_addrtoa(&addr, buf, sizeof(buf)), (int)port); |
|
sockaddrtou_addr(&gNetflowSource, &addr, &port); |
|
Printf("\tSource address : %s port %d\r\n", |
|
u_addrtoa(&addr, buf, sizeof(buf)), (int)port); |
|
#if NGM_NETFLOW_COOKIE >= 1309868867 |
|
Printf("\tExport version : v%d\r\n", gNetflowVer); |
|
Printf("Netflow v9 configuration:\r\n"); |
|
Printf("\tTemplate:\r\n"); |
|
#ifdef NGM_NETFLOW_V9_COOKIE |
|
Printf("\t Time : %d\r\n", |
|
(gNetflowNodeID>0) ? niv9->templ_time : |
|
(gNetflowTime ? gNetflowTime : NETFLOW_V9_MAX_TIME_TEMPL)); |
|
Printf("\t Packets : %d\r\n", |
|
(gNetflowNodeID>0) ? niv9->templ_packets : |
|
(gNetflowPackets ? gNetflowPackets : NETFLOW_V9_MAX_PACKETS_TEMPL)); |
|
Printf("\tNetflow v9 MTU : %d\r\n", |
|
(gNetflowNodeID>0) ? niv9->mtu : |
|
(gNetflowMTU ? gNetflowMTU : BASE_MTU)); |
|
#else |
|
Printf("\t Time : %d\r\n", |
|
gNetflowTime ? gNetflowTime : NETFLOW_V9_MAX_TIME_TEMPL); |
|
Printf("\t Packets : %d\r\n", |
|
gNetflowPackets ? gNetflowPackets : NETFLOW_V9_MAX_PACKETS_TEMPL); |
|
Printf("\tNetflow v9 MTU : %d\r\n", |
|
gNetflowMTU ? gNetflowMTU : BASE_MTU); |
|
#endif /* NGM_NETFLOW_V9_COOKIE */ |
|
#endif |
|
if (gNetflowNodeID>0) { |
|
Printf("Traffic stats:\r\n"); |
|
#if NGM_NETFLOW_COOKIE >= 1365756954 |
|
Printf("\tAccounted IPv4 octets : %llu\r\n", (unsigned long long)ni->nfinfo_bytes); |
|
Printf("\tAccounted IPv4 packets : %llu\r\n", (unsigned long long)ni->nfinfo_packets); |
|
Printf("\tAccounted IPv6 octets : %llu\r\n", (unsigned long long)ni->nfinfo_bytes6); |
|
Printf("\tAccounted IPv6 packets : %llu\r\n", (unsigned long long)ni->nfinfo_packets6); |
|
Printf("\tSkipped IPv4 octets : %llu\r\n", (unsigned long long)ni->nfinfo_sbytes); |
|
Printf("\tSkipped IPv4 packets : %llu\r\n", (unsigned long long)ni->nfinfo_spackets); |
|
Printf("\tSkipped IPv6 octets : %llu\r\n", (unsigned long long)ni->nfinfo_sbytes6); |
|
Printf("\tSkipped IPv6 packets : %llu\r\n", (unsigned long long)ni->nfinfo_spackets6); |
|
Printf("\tActive expiries : %llu\r\n", (unsigned long long)ni->nfinfo_act_exp); |
|
Printf("\tInactive expiries : %llu\r\n", (unsigned long long)ni->nfinfo_inact_exp); |
|
Printf("\tUsed IPv4 cache records: %u\r\n", ni->nfinfo_used); |
|
Printf("\tUsed IPv6 cache records: %u\r\n", ni->nfinfo_used6); |
|
Printf("\tFailed allocations : %u\r\n", ni->nfinfo_alloc_failed); |
|
Printf("\tFailed v5 export : %u\r\n", ni->nfinfo_export_failed); |
|
Printf("\tFailed v9 export : %u\r\n", ni->nfinfo_export9_failed); |
|
Printf("\tRallocated mbufs : %u\r\n", ni->nfinfo_realloc_mbuf); |
|
Printf("\tFibs allocated : %u\r\n", ni->nfinfo_alloc_fibs); |
|
#else /* NGM_NETFLOW_COOKIE >= 1365756954 */ |
|
Printf("\tAccounted IPv4 octets : %llu\r\n", (unsigned long long)ni->nfinfo_bytes); |
|
Printf("\tAccounted IPv4 packets : %u\r\n", ni->nfinfo_packets); |
|
#if NGM_NETFLOW_COOKIE >= 1309868867 |
|
Printf("\tAccounted IPv6 octets : %llu\r\n", (unsigned long long)ni->nfinfo_bytes6); |
|
Printf("\tAccounted IPv6 packets : %u\r\n", ni->nfinfo_packets6); |
|
Printf("\tSkipped IPv4 octets : %llu\r\n", (unsigned long long)ni->nfinfo_sbytes); |
|
Printf("\tSkipped IPv4 packets : %u\r\n", ni->nfinfo_spackets); |
|
Printf("\tSkipped IPv6 octets : %llu\r\n", (unsigned long long)ni->nfinfo_sbytes6); |
|
Printf("\tSkipped IPv6 packets : %u\r\n", ni->nfinfo_spackets6); |
|
#endif |
|
Printf("\tUsed IPv4 cache records: %u\r\n", ni->nfinfo_used); |
|
#if NGM_NETFLOW_COOKIE >= 1309868867 |
|
Printf("\tUsed IPv6 cache records: %u\r\n", ni->nfinfo_used6); |
|
#endif |
|
Printf("\tFailed allocations : %u\r\n", ni->nfinfo_alloc_failed); |
|
Printf("\tFailed v5 export : %u\r\n", ni->nfinfo_export_failed); |
|
#if NGM_NETFLOW_COOKIE >= 1309868867 |
|
Printf("\tFailed v9 export : %u\r\n", ni->nfinfo_export9_failed); |
|
Printf("\tRallocated mbufs : %u\r\n", ni->nfinfo_realloc_mbuf); |
|
Printf("\tFibs allocated : %u\r\n", ni->nfinfo_alloc_fibs); |
|
#endif |
|
Printf("\tActive expiries : %u\r\n", ni->nfinfo_act_exp); |
|
Printf("\tInactive expiries : %u\r\n", ni->nfinfo_inact_exp); |
|
#endif /* NGM_NETFLOW_COOKIE >= 1365756954 */ |
|
} |
|
return(0); |
} |
} |
#endif /* USE_NG_NETFLOW */ |
#endif /* USE_NG_NETFLOW */ |
|
|