[prev in list] [next in list] [prev in thread] [next in thread]
List: net-snmp-bugs
Subject: [ net-snmp-Bugs-539003 ] ucd-snmp Compile on AIX4.3.3
From: noreply () sourceforge ! net
Date: 2002-05-16 7:34:16
[Download RAW message or body]
Bugs item #539003, was opened at 2002-04-03 15:46
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=112694&aid=539003&group_id=12694
Category: agent
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Nobody/Anonymous (nobody)
Assigned to: John Naylon (jbpn)
Summary: ucd-snmp Compile on AIX4.3.3
Initial Comment:
I have downloaded the Source Code for ucd-snmp V4.2.3
onto an RS/6000 running AIX4.3.3. I have gcc-v3.0.4
and openssl-0.9.6.3 installed.
I have tried to compile the ucd-snmp agent with the
following process:
./configure --with-mib-modules=host
make
The make returns the following errors:
scapi.c: In function `sc_hash':
scapi.c:354: warning: passing arg 3 of
`EVP_DigestFinal' from incompatible point
er type
host/hr_storage.c: In function `var_hrstore':
host/hr_storage.c:372: storage size of `memory_totals'
isn't known
host/hr_storage.c:412: sizeof applied to an incomplete
type
make[2]: *** [host/hr_storage.lo] Error 1
mibgroup/host/hr_storage.c: In function `var_hrstore':
mibgroup/host/hr_storage.c:372: storage size of
`memory_totals' isn't known
mibgroup/host/hr_storage.c:412: sizeof applied to an
incomplete type
make[1]: *** [mibgroup/host/hr_storage.lo] Error
1
Does anyone have any suggestions on how to resolve
the errors relating to the hr_storage.c compile
messages??
Thanks in advance.
Grant
----------------------------------------------------------------------
Comment By: Nobody/Anonymous (nobody)
Date: 2002-05-16 00:34
Message:
Logged In: NO
I changed hr_filesys.c to use mntcntl and statvfs together
in order to extract the data required the compilation worked
and a standalone program using this also work
unfortunately when i run the agent, it gives me a part of
the host ressources mib then it hangs
Here is the small program for testing the changed I made
#include<sys/types.h>
#include<sys/mntctl.h>
#include<sys/vmount.h>
#include<sys/statvfs.h>
#include<malloc.h>
#include<string.h>
#define MAXPATHLEN 255
struct struct_HRFS_entry {
struct vmount* current_mount ;
char mount_point[MAXPATHLEN] ;
char device[MAXPATHLEN] ;
struct statvfs fsstat ;
} ;
static struct struct_HRFS_entry HRFS_entry_struct ;
static struct struct_HRFS_entry* HRFS_entry =
&HRFS_entry_struct ;
static int HRFS_index;
struct vmount* allmount = NULL ;
#define HRFS_type fsstat.f_basetype
#define HRFS_mount mount_point
#define HRFS_name device
static int fscount=0;
void init(void)
{
int vmountsize ;
HRFS_index = 0 ;
fscount = 0 ;
if( allmount )
{
free( allmount ) ;
allmount=NULL;
}
if( mntctl(MCTL_QUERY,4,&vmountsize) >=0 )
{
allmount = (struct vmount*) malloc ( vmountsize ) ;
fscount = mntctl(MCTL_QUERY,vmountsize,allmount) ;
if( fscount <= 0)
{
free( allmount ) ;
allmount=NULL;
fscount = 0 ;
}
}
HRFS_entry->current_mount = allmount ;
}
int getNext(void)
{
if (HRFS_index >= fscount)
return -1;
strcpy(HRFS_entry->device,
(char*)HRFS_entry->current_mount +
HRFS_entry->current_mount[0].vmt_dat
a[VMT_OBJECT].vmt_off ) ;
strcpy(HRFS_entry->mount_point,
(char*)HRFS_entry->current_mount +
HRFS_entry->current_mount[0].vmt_dat
a[VMT_STUB].vmt_off ) ;
statvfs( HRFS_entry->mount_point, &(HRFS_entry->fsstat) ) ;
HRFS_entry->current_mount=(char*)HRFS_entry->current_mount
+ HRFS_entry->curre
nt_mount[0].vmt_length ;
return ++HRFS_index;
}
main()
{
init() ;
while( getNext() >=0 )
{
printf("%s %s %s\n",HRFS_entry->HRFS_mount,
HRFS_entry->HRFS_name,HRFS_entry->HRFS_type ) ;
}
}
Here is the modified version of hr_filesys.c
/*
* Host Resources MIB - File System device group
implementation - hr_filesys.c
*
*/
#include <net-snmp/net-snmp-config.h>
#include "host_res.h"
#include "hr_filesys.h"
#include <net-snmp/utilities.h>
#if HAVE_MNTENT_H
#include <mntent.h>
#endif
#if HAVE_SYS_MNTENT_H
#include <sys/mntent.h>
#endif
#if HAVE_SYS_MNTTAB_H
#include <sys/mnttab.h>
#endif
#if HAVE_SYS_STATVFS_H
#include <sys/statvfs.h>
#endif
#if HAVE_SYS_VFS_H
#include <sys/vfs.h>
#endif
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_MOUNT_H
#include <sys/mount.h>
#endif
#include <ctype.h>
#if HAVE_STRING_H
#include <string.h>
#endif
#if HAVE_STDLIB_H
#include <stdlib.h>
#endif
#if defined(bsdi4) || defined(freebsd3) || defined(freebsd4)
|| defined(freebsd5)
#if HAVE_GETFSSTAT
#if defined(MFSNAMELEN)
#define MOUNT_NFS "nfs"
#define MNTTYPE_UFS "ufs"
#define BerkelyFS
#define MNTTYPE_FFS "ffs"
#define MNTTYPE_NFS "nfs"
#define MNTTYPE_NFS3 "nfs"
#define MNTTYPE_MFS "mfs"
#define MNTTYPE_MSDOS "msdos"
#define MNTTYPE_LFS "lfs"
#define MNTTYPE_FDESC "fdesc"
#define MNTTYPE_PORTAL "portal"
#define MNTTYPE_NULL "null"
#define MNTTYPE_UMAP "umap"
#define MNTTYPE_KERNFS "kernfs"
#define MNTTYPE_PROCFS "procfs"
#define MNTTYPE_AFS "afs"
#define MNTTYPE_CD9660 "cd9660"
#define MNTTYPE_UNION "union"
#define MNTTYPE_ADOSFS "adosfs"
#define MNTTYPE_EXT2FS "ext2fs"
#define MNTTYPE_CFS "coda"
#define MNTTYPE_NTFS "ntfs"
#endif
#endif
#endif /* freebsd3 */
#define HRFS_MONOTONICALLY_INCREASING
/*********************
*
* Kernel & interface information,
* and internal forward declarations
*
*********************/
#ifdef solaris2
struct mnttab HRFS_entry_struct;
struct mnttab *HRFS_entry = &HRFS_entry_struct;
#define HRFS_name mnt_special
#define HRFS_mount mnt_mountp
#define HRFS_type mnt_fstype
#define HRFS_statfs statvfs
#elif defined(aix)
#include <sys/statvfs.h>
#include <sys/mntctl.h>
#include <sys/vmount.h>
struct struct_HRFS_entry
{
struct vmount* current_mount ;
char mount_point[MAXPATHLEN] ;
char device[MAXPATHLEN] ;
struct statvfs fsstat ;
} ;
struct struct_HRFS_entry HRFS_entry_struct ;
struct struct_HRFS_entry* HRFS_entry = &HRFS_entry_struct ;
struct vmount* allmount=0 ;
static int fscount;
#define HRFS_statfs statvfs
#define HRFS_type fsstat.f_basetype
#define HRFS_mount mount_point
#define HRFS_name device
#elif defined(HAVE_GETFSSTAT)
static struct statfs *fsstats = 0;
static int fscount;
struct statfs *HRFS_entry;
#define HRFS_statfs statfs
#ifdef MFSNAMELEN
#define HRFS_type f_fstypename
#else
#define HRFS_type f_type
#endif
#define HRFS_mount f_mntonname
#define HRFS_name f_mntfromname
#elif defined(dynix)
struct mntent *HRFS_entry;
#define HRFS_name mnt_fsname
#define HRFS_mount mnt_dir
#define HRFS_type mnt_type
#define HRFS_statfs statvfs
#else
struct mntent *HRFS_entry;
#define HRFS_name mnt_fsname
#define HRFS_mount mnt_dir
#define HRFS_type mnt_type
#define HRFS_statfs statfs
#endif
#define FULL_DUMP 0
#define PART_DUMP 1
extern void Init_HR_FileSys(void);
extern int Get_Next_HR_FileSys(void);
char *cook_device(char *);
static u_char *when_dumped(char *filesys, int level, size_t
* length);
int header_hrfilesys(struct variable *, oid *,
size_t *, int,
size_t *, WriteMethod **);
/*********************
*
* Initialisation & common implementation functions
*
*********************/
#define HRFSYS_INDEX 1
#define HRFSYS_MOUNT 2
#define HRFSYS_RMOUNT 3
#define HRFSYS_TYPE 4
#define HRFSYS_ACCESS 5
#define HRFSYS_BOOT 6
#define HRFSYS_STOREIDX 7
#define HRFSYS_FULLDUMP 8
#define HRFSYS_PARTDUMP 9
struct variable4 hrfsys_variables[] = {
{HRFSYS_INDEX, ASN_INTEGER, RONLY, var_hrfilesys, 2, {1,
1}},
{HRFSYS_MOUNT, ASN_OCTET_STR, RONLY, var_hrfilesys, 2,
{1, 2}},
{HRFSYS_RMOUNT, ASN_OCTET_STR, RONLY, var_hrfilesys, 2,
{1, 3}},
{HRFSYS_TYPE, ASN_OBJECT_ID, RONLY, var_hrfilesys, 2,
{1, 4}},
{HRFSYS_ACCESS, ASN_INTEGER, RONLY, var_hrfilesys, 2,
{1, 5}},
{HRFSYS_BOOT, ASN_INTEGER, RONLY, var_hrfilesys, 2, {1, 6}},
{HRFSYS_STOREIDX, ASN_INTEGER, RONLY, var_hrfilesys, 2,
{1, 7}},
{HRFSYS_FULLDUMP, ASN_OCTET_STR, RONLY, var_hrfilesys,
2, {1, 8}},
{HRFSYS_PARTDUMP, ASN_OCTET_STR, RONLY, var_hrfilesys,
2, {1, 9}},
};
oid hrfsys_variables_oid[] = { 1, 3, 6, 1, 2, 1,
25, 3, 8 };
void
init_hr_filesys(void)
{
REGISTER_MIB("host/hr_filesys", hrfsys_variables, variable4,
hrfsys_variables_oid);
}
/*
* header_hrfilesys(...
* Arguments:
* vp IN - pointer to variable entry that points here
* name IN/OUT - IN/name requested, OUT/name found
* length IN/OUT - length of IN/OUT oid's
* exact IN - TRUE if an exact match was requested
* var_len OUT - length of variable or 0 if function
returned
* write_method
*
*/
int
header_hrfilesys(struct variable *vp,
oid * name,
size_t * length,
int exact, size_t * var_len, WriteMethod **
write_method)
{
#define HRFSYS_ENTRY_NAME_LENGTH 11
oid newname[MAX_OID_LEN];
int fsys_idx, LowIndex = -1;
int result;
DEBUGMSGTL(("host/hr_filesys", "var_hrfilesys: "));
DEBUGMSGOID(("host/hr_filesys", name, *length));
DEBUGMSG(("host/hr_filesys", " %d\n", exact));
memcpy((char *) newname, (char *) vp->name, vp->namelen
* sizeof(oid));
/*
* Find "next" file system entry
*/
Init_HR_FileSys();
for (;;) {
fsys_idx = Get_Next_HR_FileSys();
if (fsys_idx == -1)
break;
newname[HRFSYS_ENTRY_NAME_LENGTH] = fsys_idx;
result = snmp_oid_compare(name, *length, newname,
vp->namelen + 1);
if (exact && (result == 0)) {
LowIndex = fsys_idx;
break;
}
if ((!exact && (result < 0)) &&
(LowIndex == -1 || fsys_idx < LowIndex)) {
LowIndex = fsys_idx;
#ifdef HRFS_MONOTONICALLY_INCREASING
break;
#endif
}
}
if (LowIndex == -1) {
DEBUGMSGTL(("host/hr_filesys", "... index out of
range\n"));
return (MATCH_FAILED);
}
memcpy((char *) name, (char *) newname,
(vp->namelen + 1) * sizeof(oid));
*length = vp->namelen + 1;
*write_method = 0;
*var_len = sizeof(long); /* default to 'long' results */
DEBUGMSGTL(("host/hr_filesys", "... get filesys stats "));
DEBUGMSGOID(("host/hr_filesys", name, *length));
DEBUGMSG(("host/hr_filesys", "\n"));
return LowIndex;
}
oid fsys_type_id[] = { 1, 3, 6, 1, 2, 1, 25, 3,
9, 1 }; /* hrFSOther */
int fsys_type_len =
sizeof(fsys_type_id) / sizeof(fsys_type_id[0]);
/*********************
*
* System specific implementation functions
*
*********************/
u_char *
var_hrfilesys(struct variable *vp,
oid * name,
size_t * length,
int exact, size_t * var_len, WriteMethod **
write_method)
{
int fsys_idx;
static char string[100];
char *mnt_type;
fsys_idx =
header_hrfilesys(vp, name, length, exact, var_len,
write_method);
if (fsys_idx == MATCH_FAILED)
return NULL;
switch (vp->magic) {
case HRFSYS_INDEX:
long_return = fsys_idx;
return (u_char *) & long_return;
case HRFSYS_MOUNT:
sprintf(string, HRFS_entry->HRFS_mount);
*var_len = strlen(string);
return (u_char *) string;
case HRFSYS_RMOUNT:
#if HAVE_GETFSSTAT
#if defined(MFSNAMELEN)
if (!strcmp(HRFS_entry->HRFS_type, MOUNT_NFS))
#else
if (HRFS_entry->HRFS_type == MOUNT_NFS)
#endif
#elif defined(MNTTYPE_NFS)
if (!strcmp(HRFS_entry->HRFS_type, MNTTYPE_NFS))
#else
if (0)
#endif
sprintf(string, HRFS_entry->HRFS_name);
else
string[0] = '\0';
*var_len = strlen(string);
return (u_char *) string;
case HRFSYS_TYPE:
/*
* Not sufficient to identity the file
* type precisely, but it's a start.
*/
#if HAVE_GETFSSTAT && !defined(MFSNAMELEN)
switch (HRFS_entry->HRFS_type) {
case MOUNT_UFS:
fsys_type_id[fsys_type_len - 1] = 3;
break;
case MOUNT_NFS:
fsys_type_id[fsys_type_len - 1] = 14;
break;
case MOUNT_MFS:
fsys_type_id[fsys_type_len - 1] = 8;
break;
case MOUNT_MSDOS:
fsys_type_id[fsys_type_len - 1] = 5;
break;
case MOUNT_LFS:
fsys_type_id[fsys_type_len - 1] = 1;
break;
case MOUNT_LOFS:
fsys_type_id[fsys_type_len - 1] = 1;
break;
case MOUNT_FDESC:
fsys_type_id[fsys_type_len - 1] = 1;
break;
case MOUNT_PORTAL:
fsys_type_id[fsys_type_len - 1] = 1;
break;
case MOUNT_NULL:
fsys_type_id[fsys_type_len - 1] = 1;
break;
case MOUNT_UMAP:
fsys_type_id[fsys_type_len - 1] = 1;
break;
case MOUNT_KERNFS:
fsys_type_id[fsys_type_len - 1] = 1;
break;
case MOUNT_PROCFS:
fsys_type_id[fsys_type_len - 1] = 1;
break;
case MOUNT_AFS:
fsys_type_id[fsys_type_len - 1] = 16;
break;
case MOUNT_CD9660:
fsys_type_id[fsys_type_len - 1] = 12;
break;
case MOUNT_UNION:
fsys_type_id[fsys_type_len - 1] = 1;
break;
case MOUNT_DEVFS:
fsys_type_id[fsys_type_len - 1] = 1;
break;
#ifdef MOUNT_EXT2FS
case MOUNT_EXT2FS:
fsys_type_id[fsys_type_len - 1] = 23;
break;
#endif
#ifdef MOUNT_TFS
case MOUNT_TFS:
fsys_type_id[fsys_type_len - 1] = 15;
break;
#endif
}
#else
sprintf(mnt_type, "%d", HRFS_entry->HRFS_type ) ;
if (mnt_type == NULL)
fsys_type_id[fsys_type_len - 1] = 2; /*
unknown */
#ifdef MNTTYPE_HFS
else if (!strcmp(mnt_type, MNTTYPE_HFS))
#ifdef BerkelyFS
fsys_type_id[fsys_type_len - 1] = 3;
#else /* SysV */
fsys_type_id[fsys_type_len - 1] = 4;
#endif
#endif
#ifdef MNTTYPE_UFS
else if (!strcmp(mnt_type, MNTTYPE_UFS))
#if defined(BerkelyFS) && !defined(MNTTYPE_HFS)
fsys_type_id[fsys_type_len - 1] = 3;
#else /* SysV */
fsys_type_id[fsys_type_len - 1] = 4; /*
or 3? XXX */
#endif
#endif
#ifdef MNTTYPE_SYSV
else if (!strcmp(mnt_type, MNTTYPE_SYSV))
fsys_type_id[fsys_type_len - 1] = 4;
#endif
#ifdef MNTTYPE_PC
else if (!strcmp(mnt_type, MNTTYPE_PC))
fsys_type_id[fsys_type_len - 1] = 5;
#endif
#ifdef MNTTYPE_MSDOS
else if (!strcmp(mnt_type, MNTTYPE_MSDOS))
fsys_type_id[fsys_type_len - 1] = 5;
#endif
#ifdef MNTTYPE_CDFS
else if (!strcmp(mnt_type, MNTTYPE_CDFS))
#ifdef RockRidge
fsys_type_id[fsys_type_len - 1] = 13;
#else /* ISO 9660 */
fsys_type_id[fsys_type_len - 1] = 12;
#endif
#endif
#ifdef MNTTYPE_ISO9660
else if (!strcmp(mnt_type, MNTTYPE_ISO9660))
fsys_type_id[fsys_type_len - 1] = 12;
#endif
#ifdef MNTTYPE_NFS
else if (!strcmp(mnt_type, MNTTYPE_NFS))
fsys_type_id[fsys_type_len - 1] = 14;
#endif
#ifdef MNTTYPE_NFS3
else if (!strcmp(mnt_type, MNTTYPE_NFS3))
fsys_type_id[fsys_type_len - 1] = 14;
#endif
#ifdef MNTTYPE_MFS
else if (!strcmp(mnt_type, MNTTYPE_MFS))
fsys_type_id[fsys_type_len - 1] = 8;
#endif
#ifdef MNTTYPE_EXT2FS
else if (!strcmp(mnt_type, MNTTYPE_EXT2FS))
fsys_type_id[fsys_type_len - 1] = 23;
#endif
#ifdef MNTTYPE_NTFS
else if (!strcmp(mnt_type, MNTTYPE_NTFS))
fsys_type_id[fsys_type_len - 1] = 9;
#endif
#ifdef MNTTYPE_EXT2FS
else if (!strcmp(mnt_type, MNTTYPE_EXT2FS))
fsys_type_id[fsys_type_len - 1] = 23;
#endif
#ifdef MNTTYPE_NTFS
else if (!strcmp(mnt_type, MNTTYPE_NTFS))
fsys_type_id[fsys_type_len - 1] = 9;
#endif
else
fsys_type_id[fsys_type_len - 1] = 1; /*
Other */
#endif /* HAVE_GETFSSTAT */
*var_len = sizeof(fsys_type_id);
return (u_char *) fsys_type_id;
case HRFSYS_ACCESS:
#if HAVE_GETFSSTAT
long_return = HRFS_entry->f_flags & MNT_RDONLY ? 2 : 1;
#elif defined(cygwin)
long_return = 1;
#elif defined(aix)
long_return = HRFS_entry->fsstat.f_flag & ST_RDONLY
? 2 : 1;
#else
if (hasmntopt(HRFS_entry, "ro") != NULL)
long_return = 2; /* Read Only */
else
long_return = 1; /* Read-Write */
#endif
return (u_char *) & long_return;
case HRFSYS_BOOT:
if (HRFS_entry->HRFS_mount[0] == '/' &&
HRFS_entry->HRFS_mount[1] == 0)
long_return = 1; /* root is probably bootable! */
else
long_return = 2; /* others probably aren't */
return (u_char *) & long_return;
case HRFSYS_STOREIDX:
long_return = fsys_idx; /* Use the same indices */
return (u_char *) & long_return;
case HRFSYS_FULLDUMP:
return when_dumped(HRFS_entry->HRFS_name, FULL_DUMP,
var_len);
case HRFSYS_PARTDUMP:
return when_dumped(HRFS_entry->HRFS_name, PART_DUMP,
var_len);
default:
DEBUGMSGTL(("snmpd", "unknown sub-id %d in
var_hrfilesys\n",
vp->magic));
}
return NULL;
}
/*********************
*
* Internal implementation functions
*
*********************/
static int HRFS_index;
#ifndef HAVE_GETFSSTAT
static FILE *fp;
#endif
void
Init_HR_FileSys(void)
{
#if HAVE_GETFSSTAT
fscount = getfsstat(NULL, 0, MNT_NOWAIT);
if (fsstats)
free((char *) fsstats);
fsstats = NULL;
fsstats = malloc(fscount * sizeof(*fsstats));
getfsstat(fsstats, fscount * sizeof(*fsstats), MNT_NOWAIT);
HRFS_index = 0;
#elif defined(aix)
int vmountsize ;
HRFS_index = 0 ;
fscount = 0 ;
if( allmount )
{
free( allmount ) ;
allmount=NULL;
}
if( mntctl(MCTL_QUERY,4,&vmountsize) >=0 )
{
allmount = (struct vmount*) malloc ( vmountsize ) ;
fscount = mntctl(MCTL_QUERY,vmountsize,allmount) ;
if( fscount <= 0)
{
free( allmount ) ;
allmount=NULL;
fscount = 0 ;
}
}
HRFS_entry->current_mount = allmount ;
#else
HRFS_index = 1;
if (fp != NULL)
fclose(fp);
fp = fopen(ETC_MNTTAB, "r");
#endif
}
const char *HRFS_ignores[] = {
#ifdef MNTTYPE_IGNORE
MNTTYPE_IGNORE,
#endif
#ifdef MNTTYPE_SWAP
MNTTYPE_SWAP,
#endif
#ifdef MNTTYPE_PROC
MNTTYPE_PROC,
#endif
"autofs",
"nfsv3",
"cachefs",
0
};
int
Get_Next_HR_FileSys(void)
{
char fstype[256] ;
#if HAVE_GETFSSTAT
if (HRFS_index >= fscount)
return -1;
HRFS_entry = fsstats + HRFS_index;
return ++HRFS_index;
#elif defined(aix)
const char **cpp;
if (HRFS_index >= fscount)
return -1;
strcpy(HRFS_entry->device,
(char*)HRFS_entry->current_mount +
HRFS_entry->current_mount[0].vmt_data[VMT_OBJECT].vmt_off ) ;
strcpy(HRFS_entry->mount_point,
(char*)HRFS_entry->current_mount +
HRFS_entry->current_mount[0].vmt_data[VMT_STUB].vmt_off ) ;
statvfs( HRFS_entry->mount_point, &(HRFS_entry->fsstat) ) ;
HRFS_entry->current_mount=(struct
vmount*)((char*)HRFS_entry->current_mount +
HRFS_entry->current_mount[0].vmt_length) ;
for (cpp = HRFS_ignores; *cpp != NULL; ++cpp)
if (!strcmp(HRFS_entry->HRFS_type, *cpp))
return Get_Next_HR_FileSys();
return ++HRFS_index;
#else
const char **cpp;
/*
* XXX - According to RFC 1514, hrFSIndex must
* "remain constant at least from one re-initialization
* of the agent to the next re-initialization."
*
* This simple-minded counter doesn't handle filesystems
* being un-mounted and re-mounted.
* Options for fixing this include:
* - keeping a history of previous indices used
* - calculating the index from filesystem
* specific information
*
* Note: this index is also used as hrStorageIndex
* which is assumed to be less than HRS_TYPE_FS_MAX
* This assumption may well be broken if the second
* option above is followed. Consider indexing the
* non-filesystem-based storage entries first in this
* case, and assume hrStorageIndex > HRS_TYPE_FS_MIN
* (for file-system based storage entries)
*
* But at least this gets us started.
*/
if (fp == NULL)
return -1;
#ifdef solaris2
if (getmntent(fp, HRFS_entry) != 0)
return -1;
#else
HRFS_entry = getmntent(fp);
if (HRFS_entry == NULL)
return -1;
#endif /* solaris2 */
for (cpp = HRFS_ignores; *cpp != NULL; ++cpp)
if (!strcmp(HRFS_entry->HRFS_type, *cpp))
return Get_Next_HR_FileSys();
return HRFS_index++;
#endif /* HAVE_GETFSSTAT */
}
void
End_HR_FileSys(void)
{
#ifdef HAVE_GETFSSTAT
if (fsstats)
free((char *) fsstats);
fsstats = NULL;
#elif defined(aix)
if( allmount )
{
free( allmount ) ;
allmount=NULL;
}
#else
if (fp != NULL)
fclose(fp);
fp = NULL;
#endif
}
static u_char *
when_dumped(char *filesys, int level, size_t * length)
{
time_t dumpdate = 0, tmp;
FILE *dump_fp;
char line[100];
char *cp1, *cp2, *cp3;
/*
* Look for the relevent entries in /etc/dumpdates
*
* This is complicated by the fact that disks are
* mounted using block devices, but dumps are
* done via the raw character devices.
* Thus the device names in /etc/dumpdates and
* /etc/mnttab don't match.
* These comparisons are therefore made using the
* final portion of the device name only.
*/
if (*filesys == '\0') /* No filesystem name? */
return date_n_time(NULL, length);
cp1 = strrchr(filesys, '/'); /* Find the last
element of the current FS */
if (cp1 == NULL)
cp1 = filesys;
if ((dump_fp = fopen("/etc/dumpdates", "r")) == NULL)
return date_n_time(NULL, length);
while (fgets(line, sizeof(line), dump_fp) != NULL) {
cp2 = strchr(line, ' '); /* Start by looking
at the device name only */
if (cp2 != NULL) {
*cp2 = '\0';
cp3 = strrchr(line, '/'); /* and find the last
element */
if (cp3 == NULL)
cp3 = line;
if (strcmp(cp1, cp3) != 0) /* Wrong FS */
continue;
++cp2;
while (isspace(*cp2))
++cp2; /* Now find the dump level */
if (level == FULL_DUMP) {
if (*(cp2++) != '0')
continue; /* Not interested in partial
dumps */
while (isspace(*cp2))
++cp2;
dumpdate = ctime_to_timet(cp2);
fclose(dump_fp);
return date_n_time(&dumpdate, length);
} else { /* Partial Dump */
if (*(cp2++) == '0')
continue; /* Not interested in full
dumps */
while (isspace(*cp2))
++cp2;
tmp = ctime_to_timet(cp2);
if (tmp > dumpdate)
dumpdate = tmp; /* Remember the
'latest' partial dump */
}
}
}
fclose(dump_fp);
return date_n_time(&dumpdate, length);
}
#define RAW_DEVICE_PREFIX "/dev/rdsk"
#define COOKED_DEVICE_PREFIX "/dev/dsk"
char *
cook_device(char *dev)
{
static char cooked_dev[MAXPATHLEN];
if (!strncmp(dev, RAW_DEVICE_PREFIX,
strlen(RAW_DEVICE_PREFIX))) {
strcpy(cooked_dev, COOKED_DEVICE_PREFIX);
strcat(cooked_dev, dev + strlen(RAW_DEVICE_PREFIX));
} else
strcpy(cooked_dev, dev);
return (cooked_dev);
}
int
Get_FSIndex(char *dev)
{
int iindex;
Init_HR_FileSys();
while ((iindex = Get_Next_HR_FileSys()) != -1)
if (!strcmp(HRFS_entry->HRFS_name, cook_device(dev))) {
End_HR_FileSys();
return iindex;
}
End_HR_FileSys();
return 0;
}
int
Get_FSSize(char *dev)
{
struct HRFS_statfs statfs_buf;
Init_HR_FileSys();
while (Get_Next_HR_FileSys() != -1)
if (!strcmp(HRFS_entry->HRFS_name, cook_device(dev))) {
End_HR_FileSys();
#ifdef aix
return (HRFS_entry->fsstat.f_blocks *
HRFS_entry->fsstat.f_bsize) / 1024;
#else
if (HRFS_statfs(HRFS_entry->HRFS_mount,
&statfs_buf) != -1)
return (statfs_buf.f_blocks *
statfs_buf.f_bsize) / 1024;
else
return -1;
#endif
}
End_HR_FileSys();
return 0;
}
----------------------------------------------------------------------
Comment By: John Naylon (jbpn)
Date: 2002-05-15 02:13
Message:
Logged In: YES
user_id=93926
Could you let us know the results of your tests please?
Also, could you verify that this patch works with version
4.2.5? If so, we will commit your changes for the next release.
----------------------------------------------------------------------
Comment By: Nobody/Anonymous (nobody)
Date: 2002-05-12 23:02
Message:
Logged In: NO
I changed a little bit hr_storage.c in agent/mibgroup/host
here is the diff between my version and the original version
148,155d147
< #elif defined(aix)
< #include <sys/statfs.h>
< extern struct statfs *HRFS_entry;
< extern int fscount;
< #define HRFS_statfs statvfs
< #define HRFS_mount f_fname
<
<
with this modification hr_storage compiled. I have not
tested this modification yet (it should work)
I have the same kind of problem with the file hr_filesys.c
I will Modified it a let you know the status.
----------------------------------------------------------------------
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=112694&aid=539003&group_id=12694
_______________________________________________________________
Have big pipes? SourceForge.net is looking for download mirrors. We supply
the hardware. You get the recognition. Email Us: bandwidth@sourceforge.net
_______________________________________________
Net-snmp-bugs mailing list
Net-snmp-bugs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-bugs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic