implement sigar_net_connection_walk for hpux
This commit is contained in:
parent
525c16a5f9
commit
8115fc3f9e
@ -788,10 +788,10 @@ int sigar_net_interface_stat_get(sigar_t *sigar, const char *name,
|
|||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int net_conn_get_udp_listen(sigar_t *sigar,
|
static int net_conn_get_udp_listen(sigar_net_connection_walker_t *walker)
|
||||||
sigar_net_connection_list_t *connlist,
|
|
||||||
int flags)
|
|
||||||
{
|
{
|
||||||
|
sigar_t *sigar = walker->sigar;
|
||||||
|
int flags = walker->flags;
|
||||||
int status, count, i;
|
int status, count, i;
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
mib_udpLsnEnt *entries;
|
mib_udpLsnEnt *entries;
|
||||||
@ -822,37 +822,38 @@ static int net_conn_get_udp_listen(sigar_t *sigar,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<count; i++) {
|
for (i=0; i<count; i++) {
|
||||||
sigar_net_connection_t *conn;
|
sigar_net_connection_t conn;
|
||||||
mib_udpLsnEnt *entry = &entries[i];
|
mib_udpLsnEnt *entry = &entries[i];
|
||||||
|
|
||||||
SIGAR_NET_CONNLIST_GROW(connlist);
|
SIGAR_ZERO(&conn);
|
||||||
conn = &connlist->data[connlist->number++];
|
|
||||||
|
|
||||||
conn->type = SIGAR_NETCONN_UDP;
|
conn.type = SIGAR_NETCONN_UDP;
|
||||||
|
|
||||||
conn->local_port = (unsigned short)entry->LocalPort;
|
conn.local_port = (unsigned short)entry->LocalPort;
|
||||||
conn->remote_port = 0;
|
conn.remote_port = 0;
|
||||||
|
|
||||||
sigar_inet_ntoa(sigar, entry->LocalAddress,
|
sigar_inet_ntoa(sigar, entry->LocalAddress,
|
||||||
conn->local_address);
|
conn.local_address);
|
||||||
|
|
||||||
SIGAR_SSTRCPY(conn->remote_address, "0.0.0.0");
|
SIGAR_SSTRCPY(conn.remote_address, "0.0.0.0");
|
||||||
|
|
||||||
conn->send_queue = conn->receive_queue = SIGAR_FIELD_NOTIMPL;
|
conn.send_queue = conn.receive_queue = SIGAR_FIELD_NOTIMPL;
|
||||||
|
|
||||||
|
if (walker->add_connection(walker, &conn) != SIGAR_OK) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free(entries);
|
free(entries);
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int net_conn_get_udp(sigar_t *sigar,
|
static int net_conn_get_udp(sigar_net_connection_walker_t *walker)
|
||||||
sigar_net_connection_list_t *connlist,
|
|
||||||
int flags)
|
|
||||||
{
|
{
|
||||||
int status = SIGAR_OK;
|
int status = SIGAR_OK;
|
||||||
|
|
||||||
if (flags & SIGAR_NETCONN_SERVER) {
|
if (walker->flags & SIGAR_NETCONN_SERVER) {
|
||||||
status = net_conn_get_udp_listen(sigar, connlist, flags);
|
status = net_conn_get_udp_listen(walker);
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
@ -864,10 +865,10 @@ static int net_conn_get_udp(sigar_t *sigar,
|
|||||||
#define IS_TCP_CLIENT(state, flags) \
|
#define IS_TCP_CLIENT(state, flags) \
|
||||||
((flags & SIGAR_NETCONN_CLIENT) && (state != TCLISTEN))
|
((flags & SIGAR_NETCONN_CLIENT) && (state != TCLISTEN))
|
||||||
|
|
||||||
static int net_conn_get_tcp(sigar_t *sigar,
|
static int net_conn_get_tcp(sigar_net_connection_walker_t *walker)
|
||||||
sigar_net_connection_list_t *connlist,
|
|
||||||
int flags)
|
|
||||||
{
|
{
|
||||||
|
sigar_t *sigar = walker->sigar;
|
||||||
|
int flags = walker->flags;
|
||||||
int status, count, i;
|
int status, count, i;
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
mib_tcpConnEnt *entries;
|
mib_tcpConnEnt *entries;
|
||||||
@ -898,7 +899,7 @@ static int net_conn_get_tcp(sigar_t *sigar,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<count; i++) {
|
for (i=0; i<count; i++) {
|
||||||
sigar_net_connection_t *conn;
|
sigar_net_connection_t conn;
|
||||||
mib_tcpConnEnt *entry = &entries[i];
|
mib_tcpConnEnt *entry = &entries[i];
|
||||||
int state = entry->State;
|
int state = entry->State;
|
||||||
|
|
||||||
@ -908,60 +909,63 @@ static int net_conn_get_tcp(sigar_t *sigar,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
SIGAR_NET_CONNLIST_GROW(connlist);
|
SIGAR_ZERO(&conn);
|
||||||
conn = &connlist->data[connlist->number++];
|
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case TCCLOSED:
|
case TCCLOSED:
|
||||||
conn->state = SIGAR_TCP_CLOSE;
|
conn.state = SIGAR_TCP_CLOSE;
|
||||||
break;
|
break;
|
||||||
case TCLISTEN:
|
case TCLISTEN:
|
||||||
conn->state = SIGAR_TCP_LISTEN;
|
conn.state = SIGAR_TCP_LISTEN;
|
||||||
break;
|
break;
|
||||||
case TCSYNSENT:
|
case TCSYNSENT:
|
||||||
conn->state = SIGAR_TCP_SYN_SENT;
|
conn.state = SIGAR_TCP_SYN_SENT;
|
||||||
break;
|
break;
|
||||||
case TCSYNRECEIVE:
|
case TCSYNRECEIVE:
|
||||||
conn->state = SIGAR_TCP_SYN_RECV;
|
conn.state = SIGAR_TCP_SYN_RECV;
|
||||||
break;
|
break;
|
||||||
case TCESTABLISED:
|
case TCESTABLISED:
|
||||||
conn->state = SIGAR_TCP_ESTABLISHED;
|
conn.state = SIGAR_TCP_ESTABLISHED;
|
||||||
break;
|
break;
|
||||||
case TCFINWAIT1:
|
case TCFINWAIT1:
|
||||||
conn->state = SIGAR_TCP_FIN_WAIT1;
|
conn.state = SIGAR_TCP_FIN_WAIT1;
|
||||||
break;
|
break;
|
||||||
case TCFINWAIT2:
|
case TCFINWAIT2:
|
||||||
conn->state = SIGAR_TCP_FIN_WAIT2;
|
conn.state = SIGAR_TCP_FIN_WAIT2;
|
||||||
break;
|
break;
|
||||||
case TCCLOSEWAIT:
|
case TCCLOSEWAIT:
|
||||||
conn->state = SIGAR_TCP_CLOSE_WAIT;
|
conn.state = SIGAR_TCP_CLOSE_WAIT;
|
||||||
break;
|
break;
|
||||||
case TCCLOSING:
|
case TCCLOSING:
|
||||||
conn->state = SIGAR_TCP_CLOSING;
|
conn.state = SIGAR_TCP_CLOSING;
|
||||||
break;
|
break;
|
||||||
case TCLASTACK:
|
case TCLASTACK:
|
||||||
conn->state = SIGAR_TCP_LAST_ACK;
|
conn.state = SIGAR_TCP_LAST_ACK;
|
||||||
break;
|
break;
|
||||||
case TCTIMEWAIT:
|
case TCTIMEWAIT:
|
||||||
conn->state = SIGAR_TCP_TIME_WAIT;
|
conn.state = SIGAR_TCP_TIME_WAIT;
|
||||||
break;
|
break;
|
||||||
case TCDELETETCB:
|
case TCDELETETCB:
|
||||||
default:
|
default:
|
||||||
conn->state = SIGAR_TCP_UNKNOWN;
|
conn.state = SIGAR_TCP_UNKNOWN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->local_port = (unsigned short)entry->LocalPort;
|
conn.local_port = (unsigned short)entry->LocalPort;
|
||||||
conn->remote_port = (unsigned short)entry->RemPort;
|
conn.remote_port = (unsigned short)entry->RemPort;
|
||||||
conn->type = SIGAR_NETCONN_TCP;
|
conn.type = SIGAR_NETCONN_TCP;
|
||||||
|
|
||||||
sigar_inet_ntoa(sigar, entry->LocalAddress,
|
sigar_inet_ntoa(sigar, entry->LocalAddress,
|
||||||
conn->local_address);
|
conn.local_address);
|
||||||
|
|
||||||
sigar_inet_ntoa(sigar, entry->RemAddress,
|
sigar_inet_ntoa(sigar, entry->RemAddress,
|
||||||
conn->remote_address);
|
conn.remote_address);
|
||||||
|
|
||||||
conn->send_queue = conn->receive_queue = SIGAR_FIELD_NOTIMPL;
|
conn.send_queue = conn.receive_queue = SIGAR_FIELD_NOTIMPL;
|
||||||
|
|
||||||
|
if (walker->add_connection(walker, &conn) != SIGAR_OK) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free(entries);
|
free(entries);
|
||||||
@ -969,16 +973,14 @@ static int net_conn_get_tcp(sigar_t *sigar,
|
|||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sigar_net_connection_list_get(sigar_t *sigar,
|
int sigar_net_connection_walk(sigar_net_connection_walker_t *walker)
|
||||||
sigar_net_connection_list_t *connlist,
|
|
||||||
int flags)
|
|
||||||
{
|
{
|
||||||
|
sigar_t *sigar = walker->sigar;
|
||||||
|
int flags = walker->flags;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
sigar_net_connection_list_create(connlist);
|
|
||||||
|
|
||||||
if (flags & SIGAR_NETCONN_TCP) {
|
if (flags & SIGAR_NETCONN_TCP) {
|
||||||
status = net_conn_get_tcp(sigar, connlist, flags);
|
status = net_conn_get_tcp(walker);
|
||||||
|
|
||||||
if (status != SIGAR_OK) {
|
if (status != SIGAR_OK) {
|
||||||
return status;
|
return status;
|
||||||
@ -986,7 +988,7 @@ int sigar_net_connection_list_get(sigar_t *sigar,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (flags & SIGAR_NETCONN_UDP) {
|
if (flags & SIGAR_NETCONN_UDP) {
|
||||||
status = net_conn_get_udp(sigar, connlist, flags);
|
status = net_conn_get_udp(walker);
|
||||||
|
|
||||||
if (status != SIGAR_OK) {
|
if (status != SIGAR_OK) {
|
||||||
return status;
|
return status;
|
||||||
|
@ -19,4 +19,6 @@ struct sigar_t {
|
|||||||
|
|
||||||
int hpux_get_mib_ifentry(int ppa, mib_ifEntry *mib);
|
int hpux_get_mib_ifentry(int ppa, mib_ifEntry *mib);
|
||||||
|
|
||||||
|
#define SIGAR_USE_NET_CONNECTION_LIST_WALKER
|
||||||
|
|
||||||
#endif /* SIGAR_OS_H */
|
#endif /* SIGAR_OS_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user