|
version 1.1.1.2, 2013/07/22 08:44:29
|
version 1.1.1.4, 2021/03/17 00:39:23
|
|
Line 82
|
Line 82
|
| */ |
*/ |
| |
|
| #ifdef USE_NG_NETFLOW |
#ifdef USE_NG_NETFLOW |
| static int NetflowSetCommand(Context ctx, int ac, char *av[], void *arg); | static int NetflowSetCommand(Context ctx, int ac, const char *const av[], const void *arg); |
| #endif |
#endif |
| |
|
| /* |
/* |
|
Line 109
|
Line 109
|
| NetflowSetCommand, NULL, 2, (void *) SET_NODE }, |
NetflowSetCommand, NULL, 2, (void *) SET_NODE }, |
| { "hook {number}", "Set initial hook number" , |
{ "hook {number}", "Set initial hook number" , |
| NetflowSetCommand, NULL, 2, (void *) SET_HOOK }, |
NetflowSetCommand, NULL, 2, (void *) SET_HOOK }, |
| { NULL }, | { NULL, NULL, NULL, NULL, 0, NULL }, |
| }; |
}; |
| #endif |
#endif |
| |
|
|
Line 131
|
Line 131
|
| uint32_t gNetflowInactive = 0; |
uint32_t gNetflowInactive = 0; |
| uint32_t gNetflowActive = 0; |
uint32_t gNetflowActive = 0; |
| #if NGM_NETFLOW_COOKIE >= 1309868867 |
#if NGM_NETFLOW_COOKIE >= 1309868867 |
| uint16_t gNetflowTime = 0; | static uint16_t gNetflowTime = 0; |
| uint16_t gNetflowPackets = 0; | static uint16_t gNetflowPackets = 0; |
| uint16_t gNetflowMTU = 0; | static uint16_t gNetflowMTU = 0; |
| u_int gNetflowVer = 5; | static u_int gNetflowVer = 5; |
| #endif |
#endif |
| #endif |
#endif |
| |
|
|
Line 160 NgFuncInitGlobalNetflow(void)
|
Line 160 NgFuncInitGlobalNetflow(void)
|
| /* If node exist just get it's ID. */ |
/* If node exist just get it's ID. */ |
| if (gNetflowNode) { |
if (gNetflowNode) { |
| snprintf(path, sizeof(path), "%s:", gNetflowNodeName); |
snprintf(path, sizeof(path), "%s:", gNetflowNodeName); |
| gNetflowNodeID = NgGetNodeID(csock, path); | if ((gNetflowNodeID = NgGetNodeID(csock, path)) == 0) { |
| | Perror("NETFLOW: Cannot get %s node id", NG_NETFLOW_NODE_TYPE); |
| | goto fail; |
| | } |
| close(csock); |
close(csock); |
| return (0); |
return (0); |
| } |
} |
|
Line 179 NgFuncInitGlobalNetflow(void)
|
Line 182 NgFuncInitGlobalNetflow(void)
|
| } |
} |
| |
|
| /* Get new node ID. */ |
/* Get new node ID. */ |
| gNetflowNodeID = NgGetNodeID(csock, TEMPHOOK); | if ((gNetflowNodeID = NgGetNodeID(csock, TEMPHOOK)) == 0) { |
| | Perror("NETFLOW: Cannot get %s node id", NG_NETFLOW_NODE_TYPE); |
| | goto fail; |
| | } |
| |
|
| /* Set the new node's name. */ |
/* Set the new node's name. */ |
| strcpy(nm.name, gNetflowNodeName); |
strcpy(nm.name, gNetflowNodeName); |
|
Line 629 NgFuncWriteFrame(int dsock, const char *hookname, cons
|
Line 635 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 656 NgFuncClrStats(Bund b, u_int16_t linkNum)
|
Line 662 NgFuncClrStats(Bund b, u_int16_t linkNum)
|
| return(0); |
return(0); |
| } |
} |
| |
|
| |
#ifndef NG_PPP_STATS64 |
| |
|
| /* |
/* |
| * NgFuncGetStats() |
* NgFuncGetStats() |
| * |
* |
|
Line 684 NgFuncGetStats(Bund b, u_int16_t linkNum, struct ng_pp
|
Line 692 NgFuncGetStats(Bund b, u_int16_t linkNum, struct ng_pp
|
| return(0); |
return(0); |
| } |
} |
| |
|
| #ifdef NG_PPP_STATS64 | #else |
| /* |
/* |
| * NgFuncGetStats64() |
* NgFuncGetStats64() |
| * |
* |
|
Line 752 NgFuncErr(const char *fmt, ...)
|
Line 760 NgFuncErr(const char *fmt, ...)
|
| */ |
*/ |
| |
|
| static int |
static int |
| NetflowSetCommand(Context ctx, int ac, char *av[], void *arg) | NetflowSetCommand(Context ctx, int ac, const char *const av[], const void *arg) |
| { |
{ |
| struct sockaddr_storage *sin; |
struct sockaddr_storage *sin; |
| |
|
|
Line 765 NetflowSetCommand(Context ctx, int ac, char *av[], voi
|
Line 773 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 793 NetflowSetCommand(Context ctx, int ac, char *av[], voi
|
Line 803 NetflowSetCommand(Context ctx, int ac, char *av[], voi
|
| case SET_MTU: |
case SET_MTU: |
| if (ac != 1) |
if (ac != 1) |
| return (-1); |
return (-1); |
| if (atoi(av[0]) < MIN_MTU || atoi(av[0]) > MAX_MTU) | if (atoi(av[0]) < (int)MIN_MTU || atoi(av[0]) > (int)MAX_MTU) |
| Error("Bad netflow v9 MTU \"%s\"", av[0]); |
Error("Bad netflow v9 MTU \"%s\"", av[0]); |
| gNetflowMTU = atoi(av[0]); /* Default 1500 */ |
gNetflowMTU = atoi(av[0]); /* Default 1500 */ |
| break; |
break; |
|
Line 817 NetflowSetCommand(Context ctx, int ac, char *av[], voi
|
Line 827 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 836 NetflowSetCommand(Context ctx, int ac, char *av[], voi
|
Line 846 NetflowSetCommand(Context ctx, int ac, char *av[], voi
|
| */ |
*/ |
| |
|
| int |
int |
| ShowNetflow(Context ctx, int ac, char *av[], void *arg) | ShowNetflow(Context ctx, int ac, const char *const av[], const void *arg) |
| { |
{ |
| struct u_addr addr; |
struct u_addr addr; |
| in_port_t port; |
in_port_t port; |
|
Line 857 ShowNetflow(Context ctx, int ac, char *av[], void *arg
|
Line 867 ShowNetflow(Context ctx, int ac, char *av[], void *arg
|
| (struct ng_netflow_v9info *)(void *)uv9.reply.data; |
(struct ng_netflow_v9info *)(void *)uv9.reply.data; |
| #endif /* NGM_NETFLOW_V9_COOKIE */ |
#endif /* NGM_NETFLOW_V9_COOKIE */ |
| |
|
| |
(void)ac; |
| |
(void)av; |
| |
(void)arg; |
| |
|
| if (gNetflowNodeID>0) { |
if (gNetflowNodeID>0) { |
| snprintf(path, sizeof(path), "[%x]:", gNetflowNodeID); |
snprintf(path, sizeof(path), "[%x]:", gNetflowNodeID); |
| if (NgFuncSendQuery(path, NGM_NETFLOW_COOKIE, NGM_NETFLOW_INFO, |
if (NgFuncSendQuery(path, NGM_NETFLOW_COOKIE, NGM_NETFLOW_INFO, |
|
Line 875 ShowNetflow(Context ctx, int ac, char *av[], void *arg
|
Line 889 ShowNetflow(Context ctx, int ac, char *av[], void *arg
|
| Printf("\tNode name : %s\r\n", gNetflowNodeName); |
Printf("\tNode name : %s\r\n", gNetflowNodeName); |
| Printf("\tInitial hook : %d\r\n", gNetflowIface); |
Printf("\tInitial hook : %d\r\n", gNetflowIface); |
| Printf("\tTimeouts, sec:\r\n"); |
Printf("\tTimeouts, sec:\r\n"); |
| Printf("\t Active : %d\r\n", | Printf("\t Active : %u\r\n", |
| (gNetflowNodeID>0) ? ni->nfinfo_act_t : |
(gNetflowNodeID>0) ? ni->nfinfo_act_t : |
| (gNetflowActive ? gNetflowActive : ACTIVE_TIMEOUT)); |
(gNetflowActive ? gNetflowActive : ACTIVE_TIMEOUT)); |
| Printf("\t Inactive : %d\r\n", | Printf("\t Inactive : %u\r\n", |
| (gNetflowNodeID>0) ? ni->nfinfo_inact_t : |
(gNetflowNodeID>0) ? ni->nfinfo_inact_t : |
| (gNetflowInactive ? gNetflowInactive : INACTIVE_TIMEOUT)); |
(gNetflowInactive ? gNetflowInactive : INACTIVE_TIMEOUT)); |
| sockaddrtou_addr(&gNetflowExport, &addr, &port); |
sockaddrtou_addr(&gNetflowExport, &addr, &port); |
|
Line 912 ShowNetflow(Context ctx, int ac, char *av[], void *arg
|
Line 926 ShowNetflow(Context ctx, int ac, char *av[], void *arg
|
| #endif |
#endif |
| if (gNetflowNodeID>0) { |
if (gNetflowNodeID>0) { |
| Printf("Traffic stats:\r\n"); |
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 octets : %llu\r\n", (unsigned long long)ni->nfinfo_bytes); |
| Printf("\tAccounted IPv4 packets : %d\r\n", ni->nfinfo_packets); | 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 |
#if NGM_NETFLOW_COOKIE >= 1309868867 |
| Printf("\tAccounted IPv6 octets : %llu\r\n", (unsigned long long)ni->nfinfo_bytes6); |
Printf("\tAccounted IPv6 octets : %llu\r\n", (unsigned long long)ni->nfinfo_bytes6); |
| Printf("\tAccounted IPv6 packets : %d\r\n", ni->nfinfo_packets6); | 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 octets : %llu\r\n", (unsigned long long)ni->nfinfo_sbytes); |
| Printf("\tSkipped IPv4 packets : %d\r\n", ni->nfinfo_spackets); | 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 octets : %llu\r\n", (unsigned long long)ni->nfinfo_sbytes6); |
| Printf("\tSkipped IPv6 packets : %d\r\n", ni->nfinfo_spackets6); | Printf("\tSkipped IPv6 packets : %u\r\n", ni->nfinfo_spackets6); |
| #endif |
#endif |
| Printf("\tUsed IPv4 cache records: %d\r\n", ni->nfinfo_used); | Printf("\tUsed IPv4 cache records: %u\r\n", ni->nfinfo_used); |
| #if NGM_NETFLOW_COOKIE >= 1309868867 |
#if NGM_NETFLOW_COOKIE >= 1309868867 |
| Printf("\tUsed IPv6 cache records: %d\r\n", ni->nfinfo_used6); | Printf("\tUsed IPv6 cache records: %u\r\n", ni->nfinfo_used6); |
| #endif |
#endif |
| Printf("\tFailed allocations : %d\r\n", ni->nfinfo_alloc_failed); | Printf("\tFailed allocations : %u\r\n", ni->nfinfo_alloc_failed); |
| Printf("\tFailed v5 export : %d\r\n", ni->nfinfo_export_failed); | Printf("\tFailed v5 export : %u\r\n", ni->nfinfo_export_failed); |
| #if NGM_NETFLOW_COOKIE >= 1309868867 |
#if NGM_NETFLOW_COOKIE >= 1309868867 |
| Printf("\tFailed v9 export : %d\r\n", ni->nfinfo_export9_failed); | Printf("\tFailed v9 export : %u\r\n", ni->nfinfo_export9_failed); |
| Printf("\tRallocated mbufs : %d\r\n", ni->nfinfo_realloc_mbuf); | Printf("\tRallocated mbufs : %u\r\n", ni->nfinfo_realloc_mbuf); |
| Printf("\tFibs allocated : %d\r\n", ni->nfinfo_alloc_fibs); | Printf("\tFibs allocated : %u\r\n", ni->nfinfo_alloc_fibs); |
| #endif |
#endif |
| Printf("\tActive expiries : %d\r\n", ni->nfinfo_act_exp); | Printf("\tActive expiries : %u\r\n", ni->nfinfo_act_exp); |
| Printf("\tInactive expiries : %d\r\n", ni->nfinfo_inact_exp); | Printf("\tInactive expiries : %u\r\n", ni->nfinfo_inact_exp); |
| | #endif /* NGM_NETFLOW_COOKIE >= 1365756954 */ |
| } |
} |
| return(0); |
return(0); |
| } |
} |
|
Line 956 NgGetNodeID(int csock, const char *path)
|
Line 990 NgGetNodeID(int csock, const char *path)
|
| /* Create a netgraph socket node */ |
/* Create a netgraph socket node */ |
| snprintf(name, sizeof(name), "mpd%d-stats", gPid); |
snprintf(name, sizeof(name), "mpd%d-stats", gPid); |
| if (NgMkSockNode(name, &gNgStatSock, NULL) < 0) { |
if (NgMkSockNode(name, &gNgStatSock, NULL) < 0) { |
| Perror("NgFuncSendQuery: can't create %s node", NG_SOCKET_NODE_TYPE); | Perror("NgMkSockNode: can't create %s node", |
| return(-1); | NG_SOCKET_NODE_TYPE); |
| | return (0); |
| } |
} |
| (void) fcntl(gNgStatSock, F_SETFD, 1); |
(void) fcntl(gNgStatSock, F_SETFD, 1); |
| } |
} |
|
Line 965 NgGetNodeID(int csock, const char *path)
|
Line 1000 NgGetNodeID(int csock, const char *path)
|
| } |
} |
| |
|
| if (NgSendMsg(csock, path, |
if (NgSendMsg(csock, path, |
| NGM_GENERIC_COOKIE, NGM_NODEINFO, NULL, 0) < 0) | NGM_GENERIC_COOKIE, NGM_NODEINFO, NULL, 0) < 0) { |
| return (0); | Perror("NgSendMsg to %s", path); |
| if (NgRecvMsg(csock, &u.reply, sizeof(u), NULL) < 0) | |
| return (0); |
return (0); |
| | } |
| | if (NgRecvMsg(csock, &u.reply, sizeof(u), NULL) < 0) { |
| | Perror("NgRecvMsg from %s", path); |
| | return (0); |
| | } |
| | |
| return (ni->id); |
return (ni->id); |
| } |
} |
| |
|