diff --git a/include/sigar_private.h b/include/sigar_private.h index 7b27e148..347f6ca1 100644 --- a/include/sigar_private.h +++ b/include/sigar_private.h @@ -276,6 +276,8 @@ int sigar_net_connection_list_grow(sigar_net_connection_list_t *connlist); SIGAR_ZERO(&ifconfig->hwaddr.addr.mac); \ ifconfig->hwaddr.family = SIGAR_AF_LINK +int sigar_tcp_stat_curr_estab(sigar_t *sigar, sigar_tcp_stat_t *tcpstat); + int sigar_who_list_create(sigar_who_list_t *wholist); int sigar_who_list_grow(sigar_who_list_t *wholist); diff --git a/src/sigar.c b/src/sigar.c index cff3455e..b82d2e32 100644 --- a/src/sigar.c +++ b/src/sigar.c @@ -870,6 +870,33 @@ sigar_net_stat_port_get(sigar_t *sigar, return sigar_net_connection_walk(&walker); } +static int tcp_curr_estab_count(sigar_net_connection_walker_t *walker, + sigar_net_connection_t *conn) +{ + if ((conn->state == SIGAR_TCP_ESTABLISHED) || + (conn->state == SIGAR_TCP_CLOSE_WAIT)) + { + ((sigar_tcp_stat_t *)walker->data)->curr_estab++; + } + + return SIGAR_OK; +} + +/* TCP-MIB::tcpCurrEstab */ +int sigar_tcp_stat_curr_estab(sigar_t *sigar, sigar_tcp_stat_t *tcpstat) +{ + sigar_net_connection_walker_t walker; + + walker.sigar = sigar; + walker.data = tcpstat; + walker.add_connection = tcp_curr_estab_count; + walker.flags = SIGAR_NETCONN_CLIENT|SIGAR_NETCONN_TCP; + + tcpstat->curr_estab = 0; + + return sigar_net_connection_walk(&walker); +} + int sigar_who_list_create(sigar_who_list_t *wholist) { wholist->number = 0;