Date: Fri, 25 Apr 97 10:56:00 PDT From: "Whitesel, Rick" <rwhitesel@xyplex.com> To: "'FreeBSD Hackers'" <freebsd-hackers@FreeBSD.ORG> Subject: ucd-snmp-3.1.3 patch Message-ID: <3360F09C@smtpgate.xyplex.com>
next in thread | raw e-mail | index | archive | help
Hi:
I am enclosing the full replacement patch file for the file
extensible.c. The file was missing an include of vm/vm_param.h. It
appears that this file is no longer automatically included in the
kernel.h(?) file. The file extensible.c is normally found in the
following directory:
/usr/ports/net/ucd-snmp/work/ucd-snmp-3.1.3/agent/extensible
This patch should work for version 2.2x and forward of FreeBSD.
Rick Whitesel
Principal Consulting Engineer
Xyplex Networks
Eml: rwhitesel@xyplex.com
Pho: 508-952-4786
Fax: 508-952-4887
Xyplex Networks
295 Foster Street
Littleton, Mass 01460
[[ EXTENS~1.PAT : 3594 in EXTENS~1.PAT ]]
*** extensible.c.orig Fri Apr 25 06:03:55 1997
--- extensible.c Fri Apr 25 07:33:29 1997
***************
*** 75,80 ****
--- 75,85 ----
#if STDC_HEADERS
#include <string.h>
#endif
+ #ifdef freebsd2
+ #include <sys/rlist.h>
+ #include <osreldate.h>
+ #include <vm/vm_param.h>
+ #endif
#include "mibincl.h"
#include "mibdefs.h"
***************
*** 101,107 ****
static int exceptions[] = SECURITYEXCEPTIONS;
#endif
! int checkmib(vp,name,length,exact,var_len,write_method,newname,max)
register struct variable *vp;
register oid *name;
register int *length;
--- 106,113 ----
static int exceptions[] = SECURITYEXCEPTIONS;
#endif
! int
! checkmib(vp, name, length, exact, var_len, write_method, newname, max)
register struct variable *vp;
register oid *name;
register int *length;
***************
*** 133,140 ****
memmove(newname, vp->name, (int)vp->namelen * sizeof (oid));
newname[vp->namelen] = 1;
*length = vp->namelen+1;
! }
! else {
*length = vp->namelen+1;
memmove(newname, name, (*length) * sizeof(oid));
if (!exact)
--- 139,145 ----
memmove(newname, vp->name, (int)vp->namelen * sizeof (oid));
newname[vp->namelen] = 1;
*length = vp->namelen+1;
! } else {
*length = vp->namelen+1;
memmove(newname, name, (*length) * sizeof(oid));
if (!exact)
***************
*** 171,176 ****
--- 176,208 ----
}
#define pagetok(size) ((size) << pageshift)
+ #define KNLookup(nl_which, buf, s) (klookup((int) nl[nl_which].n_value, buf, s))
+
+ #ifdef freebsd2
+
+ /*
+ * FreeBSD 2.x uses sysctl() for most of it's work, so we only need to
+ * find kernel objects for the swap statistics.
+ */
+
+ static struct nlist nl[] = {
+ #define NL_SWAPLIST 0
+ { "_swaplist" },
+ #define NL_SWDEVT 1
+ { "_swdevt" },
+ #define NL_NSWAP 2
+ { "_nswap" },
+ #define NL_NSWDEV 3
+ { "_nswdev" },
+ #define NL_DMMAX 4
+ { "_dmmax" },
+ #define NL_MAXMEM 5
+ { "_Maxmem"},
+ { 0 },
+ };
+
+ #else /* freebsd2 */
+
#define NL_AVENRUN 0
#define NL_TOTAL 1
#define NL_SWDEVT 2
***************
*** 178,185 ****
#define NL_NSWAPFS 4
#define NL_NSWAPDEV 5
#define NL_PHYSMEM 6
- #define KNLookup(nl_which, buf, s) (klookup((int) nl[nl_which].n_value, buf, s))
-
static struct nlist nl[] = {
#if !defined(hpux) && !defined(solaris2)
{ "_avenrun"},
--- 210,215 ----
***************
*** 201,206 ****
--- 231,238 ----
{ 0 }
};
+ #endif /* freebsd2 */
+
#define SWAPGETLEFT 0
#define SWAPGETTOTAL 1
***************
*** 209,215 ****
#ifdef USEMEMMIB
! int getswap(rettype)
int rettype;
{
int spaceleft=0, spacetotal=0, i, fd;
--- 241,384 ----
#ifdef USEMEMMIB
! #ifdef freebsd2
! /*
! * getswap is based on a program called swapinfo written
! * by Kevin Lahey <kml@rokkaku.atl.ga.us>.
! */
!
! #define KGET(idx, var) \
! KGET1(idx, &var, sizeof(var))
!
! #define KGET1(idx, p, s) \
! KGET2(nl[idx].n_value, p, s)
!
! #define KGET2(addr, p, s) \
! if (klookup((int) (addr), p, s) == NULL) \
! return(NULL);
!
! int
! getswap(rettype)
! int rettype;
! {
! char *header;
! int hlen, nswap, nswdev, dmmax;
! int i, div, avail, nfree, npfree, used;
! struct swdevt *sw;
! long blocksize, *perdev;
! struct rlist head;
! u_long ptr;
! #if __FreeBSD_version >= 220000
! struct rlisthdr swaplist;
! struct rlist *swapptr;
! #else
! struct rlist *swaplist;
! #endif
!
! KGET(NL_NSWAP, nswap);
! KGET(NL_NSWDEV, nswdev);
! KGET(NL_DMMAX, dmmax);
! KGET(NL_SWAPLIST, swaplist);
! if ((sw = malloc(nswdev * sizeof(*sw))) == NULL ||
! (perdev = malloc(nswdev * sizeof(*perdev))) == NULL)
! err(1, "malloc");
! KGET1(NL_SWDEVT, &ptr, sizeof ptr);
! KGET2(ptr, sw, nswdev * sizeof(*sw));
!
! /* Count up swap space. */
! nfree = 0;
! memset(perdev, 0, nswdev * sizeof(*perdev));
!
! #if __FreeBSD_version >= 220000
! swapptr = swaplist.rlh_list;
! while (swapptr) {
! #else
! while (swaplist) {
! #endif
! int top, bottom, next_block;
!
! #if __FreeBSD_version >= 220000
! KGET2(swapptr, &head, sizeof(struct rlist));
! #else
! KGET2(swaplist, &head, sizeof(struct rlist));
! #endif
!
! top = head.rl_end;
! bottom = head.rl_start;
!
! nfree += top - bottom + 1;
!
! /*
! * Swap space is split up among the configured disks.
! *
! * For interleaved swap devices, the first dmmax blocks
! * of swap space some from the first disk, the next dmmax
! * blocks from the next, and so on up to nswap blocks.
! *
! * The list of free space joins adjacent free blocks,
! * ignoring device boundries. If we want to keep track
! * of this information per device, we'll just have to
! * extract it ourselves.
! */
! while (top / dmmax != bottom / dmmax) {
! next_block = ((bottom + dmmax) / dmmax);
! perdev[(bottom / dmmax) % nswdev] +=
! next_block * dmmax - bottom;
! bottom = next_block * dmmax;
! }
! perdev[(bottom / dmmax) % nswdev] +=
! top - bottom + 1;
!
! #if __FreeBSD_version >= 220000
! swapptr = head.rl_next;
! #else
! swaplist = head.rl_next;
! #endif
! }
!
! header = getbsize(&hlen, &blocksize);
! div = blocksize / 512;
! avail = npfree = 0;
! for (i = 0; i < nswdev; i++) {
! int xsize, xfree;
!
! /*
! * Don't report statistics for partitions which have not
! * yet been activated via swapon(8).
! */
! if (!(sw[i].sw_flags & SW_FREED))
! continue;
!
! /* The first dmmax is never allocated to avoid trashing of
! * disklabels
! */
! xsize = sw[i].sw_nblks - dmmax;
! xfree = perdev[i];
! used = xsize - xfree;
! npfree++;
! avail += xsize;
! }
!
! /*
! * If only one partition has been set up via swapon(8), we don't
! * need to bother with totals.
! */
! used = avail - nfree;
!
! free(sw); free(perdev);
!
! switch (rettype) {
! case SWAPGETLEFT:
! return(nfree / div);
! case SWAPGETTOTAL:
! return(avail / div);
! }
! }
!
! #else /* freebsd2 */
!
! int
! getswap(rettype)
int rettype;
{
int spaceleft=0, spacetotal=0, i, fd;
***************
*** 230,244 ****
--- 399,416 ----
if (KNLookup(NL_SWDEVT,(int *) swdevt, sizeof(struct swdevt)*nswapdev)
== NULL)
return(0);
+
for (i=0; i < nswapdev; i++) {
if (swdevt[i].sw_enable) {
spacetotal += swdevt[i].sw_nblks;
spaceleft += (swdevt[i].sw_nfpgs * 4);
}
}
+
if (KNLookup(NL_FSWDEVT,(int *) fswdevt, sizeof(struct fswdevt)*nswapfs)
== NULL)
return(0);
+
for (i=0; i < nswapfs; i++) {
if (fswdevt[i].fsw_enable) {
spacetotal += (fswdevt[i].fsw_limit * 2048); /* 2048=bytes per page? */
***************
*** 247,252 ****
--- 419,425 ----
/* 37 = calculated value I know it makes no sense, nor is it accurate */
}
}
+
/* this is a real hack. I need to get the hold info from swapinfo, but
I can't figure out how to read it out of the kernel directly
-- Wes */
***************
*** 271,290 ****
return(spacetotal);
}
}
! unsigned char *var_extensible_mem(vp, name, length, exact, var_len, write_method)
! register struct variable *vp;
! /* IN - pointer to variable entry that points here */
! register oid *name;
! /* IN/OUT - input name requested, output name found */
! register int *length;
! /* IN/OUT - length of input and output oid's */
! int exact;
! /* IN - TRUE if an exact match was requested. */
! int *var_len;
! /* OUT - length of variable or 0 if function returned. */
! int (**write_method)();
! /* OUT - pointer to function to set variable, otherwise 0 */
{
oid newname[30];
--- 444,459 ----
return(spacetotal);
}
}
+ #endif /* freebsd2 */
! unsigned char *
! var_extensible_mem(vp, name, length, exact, var_len, write_method)
! register struct variable *vp; /* IN - pointer to variable entry that points here */
! register oid *name; /* IN/OUT - input name requested, output name found */
! register int *length; /* IN/OUT - length of input and output oid's */
! int exact; /* IN - TRUE if an exact match was requested. */
! int *var_len; /* OUT - length of variable or 0 if function returned. */
! int (**write_method)(); /* OUT - pointer to function to set variable, otherwise 0 */
{
oid newname[30];
***************
*** 298,308 ****
if (!checkmib(vp,name,length,exact,var_len,write_method,newname,1))
return(NULL);
! #ifdef bsdi2
/* sum memory statistics */
{
size_t size = sizeof(total);
static int mib[] = { CTL_VM, VM_TOTAL };
if (sysctl(mib, 2, &total, &size, NULL, 0) < 0) return (0);
}
#else
--- 467,482 ----
if (!checkmib(vp,name,length,exact,var_len,write_method,newname,1))
return(NULL);
!
! #if defined(bsdi2) || defined(freebsd2)
/* sum memory statistics */
{
size_t size = sizeof(total);
+ #ifdef freebsd2
+ static int mib[] = { CTL_VM, VM_METER };
+ #else
static int mib[] = { CTL_VM, VM_TOTAL };
+ #endif
if (sysctl(mib, 2, &total, &size, NULL, 0) < 0) return (0);
}
#else
***************
*** 328,334 ****
long_ret = minimumswap;
return((u_char *) (&long_ret));
case MEMTOTALREAL:
! #ifdef bsdi2
{
size_t size = sizeof(long_ret);
static int mib[] = { CTL_HW, HW_PHYSMEM };
--- 502,508 ----
long_ret = minimumswap;
return((u_char *) (&long_ret));
case MEMTOTALREAL:
! #if defined (bsdi2) || defined (freebsd2)
{
size_t size = sizeof(long_ret);
static int mib[] = { CTL_HW, HW_PHYSMEM };
***************
*** 345,352 ****
case MEMUSEDREAL:
long_ret = pagetok((int) total.t_arm);
return((u_char *) (&long_ret));
case MEMTOTALSWAPTXT:
! #ifndef bsdi2
long_ret = pagetok(total.t_vmtxt);
#endif
return((u_char *) (&long_ret));
--- 519,533 ----
case MEMUSEDREAL:
long_ret = pagetok((int) total.t_arm);
return((u_char *) (&long_ret));
+ #ifdef freebsd2
case MEMTOTALSWAPTXT:
! case MEMUSEDSWAPTXT:
! case MEMTOTALREALTXT:
! case MEMUSEDREALTXT:
! return(NULL);
! #else
! case MEMTOTALSWAPTXT:
! #ifndef bsdi2
long_ret = pagetok(total.t_vmtxt);
#endif
return((u_char *) (&long_ret));
***************
*** 365,370 ****
--- 546,552 ----
long_ret = pagetok(total.t_armtxt);
#endif
return((u_char *) (&long_ret));
+ #endif /* freebsd2 */
case MEMTOTALFREE:
long_ret = pagetok(total.t_free);
return((u_char *) (&long_ret));
***************
*** 382,396 ****
return((u_char *) (errmsg));
}
}
!
! #endif
static int numdisks;
struct diskpart disks[MAXDISKS];
#if defined(USEDISKMIB)
! unsigned char *var_extensible_disk(vp, name, length, exact, var_len, write_method)
register struct variable *vp;
/* IN - pointer to variable entry that points here */
register oid *name;
--- 564,578 ----
return((u_char *) (errmsg));
}
}
! #endif /* USEMEMMIB */
static int numdisks;
struct diskpart disks[MAXDISKS];
#if defined(USEDISKMIB)
! unsigned char *
! var_extensible_disk(vp, name, length, exact, var_len, write_method)
register struct variable *vp;
/* IN - pointer to variable entry that points here */
register oid *name;
***************
*** 415,430 ****
#if defined(HAVE_STATVFS) || defined(HAVE_STATFS)
struct statvfs vfs;
! #else
! #if HAVE_FSTAB_H
int file;
union {
struct fs iu_fs;
char dummy[SBSIZE];
} sb;
#define filesys sb.iu_fs
! #endif
! #endif
if (!checkmib(vp,name,length,exact,var_len,write_method,newname,numdisks))
return(NULL);
--- 597,612 ----
#if defined(HAVE_STATVFS) || defined(HAVE_STATFS)
struct statvfs vfs;
! #elif HAVE_SYS_MOUNT_H
! struct statfs vfs;
! #elif HAVE_FSTAB_H
int file;
union {
struct fs iu_fs;
char dummy[SBSIZE];
} sb;
#define filesys sb.iu_fs
! #endif /* HAVE_SYS_STATVFS_H */
if (!checkmib(vp,name,length,exact,var_len,write_method,newname,numdisks))
return(NULL);
***************
*** 481,488 ****
*var_len = strlen(errmsg);
return((u_char *) (errmsg));
}
! #else
! #if HAVE_FSTAB_H
/* read the disk information */
if ((file = open(disks[disknum].device,0)) < 0) {
fprintf(stderr,"Couldn't open device %s\n",disks[disknum].device);
--- 663,669 ----
*var_len = strlen(errmsg);
return((u_char *) (errmsg));
}
! #elif HAVE_FSTAB_H
/* read the disk information */
if ((file = open(disks[disknum].device,0)) < 0) {
fprintf(stderr,"Couldn't open device %s\n",disks[disknum].device);
***************
*** 536,549 ****
}
/*#endif*/
! #endif
#define NOERR 0
#define LOCKDBROKE 1
#define OPENERR 2
/*
! static int locktimeouttest;
int lockd_timeout()
{
--- 717,731 ----
}
/*#endif*/
! /*#endif*/
#define NOERR 0
#define LOCKDBROKE 1
#define OPENERR 2
/*
! static int
! locktimeouttest;
int lockd_timeout()
{
***************
*** 552,558 ****
*/
#ifdef USELOCKDMIB
! long lockd_test(msg)
char *msg;
{
--- 734,741 ----
*/
#ifdef USELOCKDMIB
! long
! lockd_test(msg)
char *msg;
{
***************
*** 590,596 ****
}
! unsigned char *var_extensible_lockd_test(vp, name, length, exact, var_len, write_method)
register struct variable *vp;
/* IN - pointer to variable entry that points here */
register oid *name;
--- 773,780 ----
}
! unsigned char *
! var_extensible_lockd_test(vp, name, length, exact, var_len, write_method)
register struct variable *vp;
/* IN - pointer to variable entry that points here */
register oid *name;
***************
*** 636,654 ****
#endif
#ifdef USELOADAVEMIB
! unsigned char *var_extensible_loadave(vp, name, length, exact, var_len, write_method)
! register struct variable *vp;
! /* IN - pointer to variable entry that points here */
! register oid *name;
! /* IN/OUT - input name requested, output name found */
! register int *length;
! /* IN/OUT - length of input and output oid's */
! int exact;
! /* IN - TRUE if an exact match was requested. */
! int *var_len;
! /* OUT - length of variable or 0 if function returned. */
! int (**write_method)();
! /* OUT - pointer to function to set variable, otherwise 0 */
{
oid newname[30];
--- 820,833 ----
#endif
#ifdef USELOADAVEMIB
! unsigned char *
! var_extensible_loadave(vp, name, length, exact, var_len, write_method)
! register struct variable *vp; /* IN - pointer to variable entry that points here */
! register oid *name; /* IN/OUT - input name requested, output name found */
! register int *length; /* IN/OUT - length of input and output oid's */
! int exact; /* IN - TRUE if an exact match was requested. */
! int *var_len; /* OUT - length of variable or 0 if function returned. */
! int (**write_method)(); /* OUT - pointer to function to set variable, otherwise 0 */
{
oid newname[30];
***************
*** 755,761 ****
#ifdef USEERRORMIB
! unsigned char *var_extensible_errors(vp, name, length, exact, var_len, write_method)
register struct variable *vp;
/* IN - pointer to variable entry that points here */
register oid *name;
--- 934,941 ----
#ifdef USEERRORMIB
! unsigned char *
! var_extensible_errors(vp, name, length, exact, var_len, write_method)
register struct variable *vp;
/* IN - pointer to variable entry that points here */
register oid *name;
***************
*** 885,891 ****
return compare((*ap)->miboid,(*ap)->miblen,(*bp)->miboid,(*bp)->miblen);
}
! RETSIGTYPE update_config(a)
int a;
{
extern struct subtree *subtrees;
--- 1065,1072 ----
return compare((*ap)->miboid,(*ap)->miblen,(*bp)->miboid,(*bp)->miblen);
}
! RETSIGTYPE
! update_config(a)
int a;
{
extern struct subtree *subtrees;
***************
*** 1013,1019 ****
}
#ifdef USEMEMMIB
! #ifndef bsdi2
if (KNLookup(NL_NSWAPDEV,(int *) &nswapdev, sizeof(nswapdev))
== NULL)
return;
--- 1194,1200 ----
}
#ifdef USEMEMMIB
! #if !defined(bsdi2) && !defined(freebsd2)
if (KNLookup(NL_NSWAPDEV,(int *) &nswapdev, sizeof(nswapdev))
== NULL)
return;
***************
*** 1021,1027 ****
--- 1202,1216 ----
== NULL)
return;
#endif
+ #ifdef freebsd2
+ #ifdef PAGE_SHIFT
+ pagesize = 1 << PAGE_SHIFT;
+ #else
pagesize = 1 << PGSHIFT;
+ #endif
+ #else
+ pagesize = 1 << PGSHIFT;
+ #endif
pageshift = 0;
while (pagesize > 1) {
pageshift++;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3360F09C>
