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