/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999-2004 Apple Computer, Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
#else
#include <vm/vm_param.h>
#endif /* __APPLE__ */
-#include <machine/cpu.h>
#include <errno.h>
#include <ctype.h>
{ kernname, KERN_MAXID }, /* CTL_KERN */
{ vmname, VM_MAXID }, /* CTL_VM */
{ 0, 0 }, /* CTL_VFS */
- { 0, 0 }, /* CTL_NET */
+ { 0, 0 }, /* CTL_NET */
{ 0, CTL_DEBUG_MAXID }, /* CTL_DEBUG */
{ hwname, HW_MAXID }, /* CTL_HW */
#ifdef CTL_MACHDEP_NAMES
static void parse(char *string, int flags);
static int oidfmt(int *, int, char *, u_int *);
-static int show_var(int *, int);
+static int show_var(int *, int, int);
static int sysctl_all (int *oid, int len);
static int name2oid(char *, int *);
}
if (argc == 0)
usage();
- for (; *argv != NULL; ++argv)
+ for (; *argv != NULL; ++argv)
parse(*argv, 1);
exit(0);
}
break;
case CTL_VM:
- if (mib[1] == VM_LOADAVG) {
+ switch (mib[1]) {
+ case VM_LOADAVG: { /* XXX this is bogus */
double loads[3];
getloadavg(loads, 3);
loads[0], loads[1], loads[2]);
return;
}
+ case VM_SWAPUSAGE: {
+ struct xsw_usage xsu;
+ int saved_errno;
+
+ size = sizeof (xsu);
+ if (sysctl(mib, 2, &xsu, &size, NULL, 0) != 0) {
+ if (flags == 0)
+ return;
+ saved_errno = errno;
+ if (!nflag)
+ fprintf(stderr, "%s: ", string);
+ fprintf(stderr, "sysctl(VM_SWAPUSAGE): %s\n",
+ strerror(saved_errno));
+ return;
+ }
+
+ if (!nflag)
+ fprintf(stdout, "%s: ", string);
+ fprintf(stdout,
+ "total = %.2fM used = %.2fM free = %.2fM %s\n",
+ ((double) xsu.xsu_total) / (1024.0 * 1024.0),
+ ((double) xsu.xsu_used) / (1024.0 * 1024.0),
+ ((double) xsu.xsu_avail) / (1024.0 * 1024.0),
+ xsu.xsu_encrypted ? "(encrypted)" : "");
+ return;
+ }
+ }
if (flags == 0)
return;
fprintf(stderr,
char *name;
int i;
+ /* Make 'sysctl kern.' style behave the same as 'sysctl kern' 3360872*/
+ if (bufp[0][strlen(*bufp)-1] == '.')
+ bufp[0][strlen(*bufp)-1]='\0';
if (namelist->list == 0 || (name = strsep(bufp, ".")) == NULL) {
fprintf(stderr, "%s: incomplete specification\n", string);
return (-1);
foundSome = 1;
old_parse (string, flags);
} else {
- i = show_var(mib, len);
+ i = show_var(mib, len, 1);
if (!i && !bflag)
putchar('\n');
}
case CTLTYPE_STRING:
break;
case CTLTYPE_QUAD:
- break;
- sscanf(newval, "%qd", &quadval);
+ quadval = strtoq(newval, NULL, 0);
newval = &quadval;
newsize = sizeof quadval;
break;
kind & CTLTYPE);
}
- i = show_var(mib, len);
+ i = show_var(mib, len, 1);
if (sysctl(mib, len, 0, 0, newval, newsize) == -1) {
if (!i && !bflag)
putchar('\n');
printf(" -> ");
i = nflag;
nflag = 1;
- j = show_var(mib, len);
+ j = show_var(mib, len, 1);
if (!j && !bflag)
putchar('\n');
nflag = i;
*/
static int
-show_var(int *oid, int nlen)
+show_var(int *oid, int nlen, int show_masked)
{
u_char buf[BUFSIZ], *val, *mval, *p;
char name[BUFSIZ], /* descr[BUFSIZ], */ *fmt;
err(1, "sysctl fmt %d %d %d", i, j, errno);
kind = *(u_int *)buf;
+ if (!show_masked && (kind & CTLFLAG_MASKED)) {
+ retval = 1;
+ goto RETURN;
+ }
fmt = (char *)(buf + sizeof(u_int));
p = val;
switch (*fmt) {
+ case '-':
+ /* deprecated, do not print */
+ retval = 0;
+ goto RETURN;
+
+
case 'A':
if (!nflag)
printf("%s: ", name);
retval = 0;
goto RETURN;
+ case 'Q':
+ if (!nflag)
+ printf("%s: ", name);
+ fmt++;
+ val = "";
+ while (len >= sizeof(long long)) {
+ if(*fmt == 'U')
+ printf("%s%llu", val, *(unsigned long long *)p);
+ else
+ printf("%s%lld", val, *(long long *)p);
+ val = " ";
+ len -= sizeof (long long);
+ p += sizeof (long long);
+ }
+ retval = 0;
+ goto RETURN;
+
+
case 'T':
case 'S':
i = 0;
if (name2[i] != oid[i])
return 0;
- i = show_var(name2, l2);
+ i = show_var(name2, l2, 0);
if (!i && !bflag)
putchar('\n');