PERFORCE change 165604 for review
Gabor Pali
pgj at FreeBSD.org
Sat Jul 4 18:36:09 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=165604
Change 165604 by pgj at petymeg-current on 2009/07/04 18:35:38
- Fix KVM extraction
- Rename kread() to kread_data() to avoid confusions with
kread() in netstat when debugging
Affected files ...
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.c#38 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#22 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#24 edit
Differences ...
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.c#38 (text+ko) ====
@@ -286,7 +286,7 @@
}
#define KREAD(off, buf, len) do { \
- if (kread(kvm, (uintptr_t)(off), (buf), (len)) != 0) { \
+ if (kread_data(kvm, (uintptr_t)(off), (buf), (len)) != 0) { \
return (-1); \
} \
} while (0);
@@ -557,13 +557,22 @@
{
kvm_t *kvm;
int result, i;
- struct nlist nls[MAX(nlUNP_MAX, nlINP_MAX) + 1];
+ struct nlist nls[nlUNP_MAX + 1 + nlINP_MAX + 1];
- nls[0].n_name = NULL;
+ bzero(nls, sizeof(nls));
if (flags & NETSTAT_SOCKET_KVM) {
/* Use KVM to retrieve data. */
kvm = (kvm_t *)kvm_handle;
switch (domain) {
+ case PF_UNSPEC:
+ for (i = 0; i < nlUNP_MAX; i++)
+ nls[i].n_name = strdup(unp_symbol[i]);
+ nls[nlUNP_MAX].n_name = NULL;
+ for (i = nlUNP_MAX + 1;
+ i < (nlUNP_MAX + 1 + nlINP_MAX + 1); i++)
+ nls[i].n_name = strdup(inp_symbol[i]);
+ nls[nlUNP_MAX + 1 + nlINP_MAX].n_name = NULL;
+ break;
case PF_LOCAL:
for (i = 0; i < nlUNP_MAX; i++)
nls[i].n_name = strdup(unp_symbol[i]);
@@ -590,12 +599,12 @@
result = netstat_local_sockets(0, list, kvm, nls, flags);
if (result < 0)
goto end;
- result = netstat_inet_sockets(PF_INET, 0, list, kvm, nls,
- flags);
+ result = netstat_inet_sockets(PF_INET, 0, list, kvm,
+ &nls[nlUNP_MAX + 1], flags);
if (result < 0)
goto end;
- result = netstat_inet_sockets(PF_INET6, 0, list, kvm, nls,
- flags);
+ result = netstat_inet_sockets(PF_INET6, 0, list, kvm,
+ &nls[nlUNP_MAX + 1], flags);
if (result < 0)
goto end;
break;
@@ -605,8 +614,8 @@
break;
case PF_INET:
case PF_INET6:
- result = (netstat_inet_sockets(domain, protocol, list, kvm, nls,
- flags));
+ result = (netstat_inet_sockets(domain, protocol, list, kvm,
+ nls, flags));
goto end;
break;
default:
@@ -616,7 +625,8 @@
}
end:
- for (i = 0; nls[i].n_name != NULL && i < MAX(nlUNP_MAX, nlINP_MAX); i++)
+ for (i = 0; nls[i].n_name != NULL && i < nlUNP_MAX + nlINP_MAX + 2;
+ i++)
free(nls[i].n_name);
return (result);
}
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#22 (text+ko) ====
@@ -132,7 +132,7 @@
struct socket_type *sti_next;
};
-int kread(kvm_t *kvm, u_long kvm_pointer, void *address, size_t size);
+int kread_data(kvm_t *kvm, u_long kvm_pointer, void *address, size_t size);
int kread_string(kvm_t *kvm, u_long kvm_pointer, char *buffer, int buflen);
void _netstat_stl_empty(struct socket_type_list *list);
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#24 (text+ko) ====
@@ -39,7 +39,7 @@
#include "netstat_internal.h"
int
-kread(kvm_t *kvm, u_long kvm_pointer, void *address, size_t size)
+kread_data(kvm_t *kvm, u_long kvm_pointer, void *address, size_t size)
{
ssize_t ret;
@@ -103,10 +103,11 @@
xso->so_linger = so->so_linger;
xso->so_state = so->so_state;
xso->so_pcb = so->so_pcb;
- if (kread(kvm, (uintptr_t)so->so_proto, &proto, sizeof(proto)) != 0)
+ if (kread_data(kvm, (uintptr_t)so->so_proto, &proto, sizeof(proto))
+ != 0)
return (-1);
xso->xso_protocol = proto.pr_protocol;
- if (kread(kvm, (uintptr_t)proto.pr_domain, &domain,
+ if (kread_data(kvm, (uintptr_t)proto.pr_domain, &domain,
sizeof(domain)) != 0)
return (-1);
xso->xso_family = domain.dom_family;
More information about the p4-projects
mailing list