Date: Sat, 13 Aug 2005 22:44:59 GMT From: Victor Cruceru <soc-victor@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 81959 for review Message-ID: <200508132244.j7DMixP8083125@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=81959 Change 81959 by soc-victor@soc-victor_82.76.158.176 on 2005/08/13 22:44:57 The very first SNMP instrumentation for hrSWInstalledTable: for now only O/S is instrumented, need to analyze the installed packages. Also fixed a few things in other places. Affected files ... .. //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_hostres/Makefile#19 edit .. //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_fs_tbl.c#5 edit .. //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_network_tbl.c#3 edit .. //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_scalars.c#9 edit .. //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_snmp.c#18 edit .. //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_snmp.h#22 edit .. //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_swinstalled_tbl.c#1 add Differences ... ==== //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_hostres/Makefile#19 (text+ko) ==== @@ -36,7 +36,8 @@ hostres_processor_tbl.c \ hostres_diskstorage_tbl.c \ hostres_partition_tbl.c \ - hostres_network_tbl.c + hostres_network_tbl.c \ + hostres_swinstalled_tbl.c WARNS?= 6 #Not having NDEBUG defined will enable assertions and a lot of output on stderr ==== //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_fs_tbl.c#5 (text+ko) ==== @@ -60,7 +60,7 @@ strncpy(entry->mountPoint, name, sizeof(entry->mountPoint)-1); STAILQ_FOREACH(map, &hrState_g.fs_name_map, link) - if (strcmp(map->a_name, entry->mountPoint) == 0) { + if (strncmp(map->a_name, entry->mountPoint, sizeof(map->a_name) - 1) == 0) { entry->index = map->hrIndex; map->entry_p = entry; break; @@ -120,7 +120,7 @@ struct hrFSTblEntry *entry = NULL; TAILQ_FOREACH(entry, &hrState_g.hr_fs_tbl, link) - if (strncmp(entry->mountPoint, name, 255) == 0) + if (strncmp(entry->mountPoint, name, sizeof(entry->mountPoint) - 1) == 0) return (entry); return (NULL); } ==== //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_network_tbl.c#3 (text+ko) ==== @@ -273,6 +273,7 @@ if (ioctl(hrState_g.ifnet_sock, SIOCGIFCONF, (char *) &ifc) < 0) { syslog(LOG_ERR,"failed to SIOCGIFCONF: %m"); close(hrState_g.ifnet_sock); + hrState_g.ifnet_sock = -1; return; } @@ -374,7 +375,7 @@ } -void refresh_Network_tbl_v(void) { +void refresh_hrNetwork_tbl_v(void) { struct hrNetworkTblEntry *entry = NULL, *entry_tmp = NULL; if ( this_tick <= hrState_g.hr_network_tick) { @@ -436,7 +437,7 @@ if ( (time(NULL) - hrState_g.hrNetwork_tbl_age) > HR_NETWORK_TBL_REFRESH ) { HR_DPRINTF((stderr, "%s: need refresh\n ",__func__)); - refresh_Network_tbl_v(); + refresh_hrNetwork_tbl_v(); } ==== //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_scalars.c#9 (text+ko) ==== @@ -82,7 +82,7 @@ * Get kernel boot path. For FreeBSD it seems that no arguments are present. * Returns NULL if an error occured. The returned data is a pointer to a global strorage */ -static + u_char* OS_getSystemInitialLoadParameters(void); /* ==== //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_snmp.c#18 (text+ko) ==== @@ -207,7 +207,14 @@ /*data structures initialization for hrNetworkTable*/ TAILQ_INIT(&hrState_g.hr_network_tbl); - + /*data structures initialization for hrSWInstalledTable*/ + hrState_g.next_hrSWInstalled_index = 1; + STAILQ_INIT(&hrState_g.sw_installed_name_map); + TAILQ_INIT(&hrState_g.hr_sw_installed_tbl); + hrState_g.hr_sw_installed_tick = 0; + hrState_g.hr_sw_installed_change_tick = 0; + hrState_g.hrSWInstalled_tbl_age = 0; + hrState_g.hr_storage_tick = 0; hrState_g.hr_fs_tick = 0; hrState_g.hr_swrun_tick = 0; @@ -236,6 +243,8 @@ init_hrPartition_tbl_v(); init_hrNetwork_tbl_v(); + init_hrSWInstalled_tbl_v(); + if ((hrState_g.devd_sock = create_devd_socket()) < 0) { HR_DPRINTF((stderr, "Failed to create the socket to devd pipe.\n")); } @@ -308,6 +317,7 @@ fini_hrDevice_tbl_v(); fini_hrPartition_tbl_v(); fini_hrNetwork_tbl_v(); + fini_hrSWInstalled_tbl_v(); hrState_g.hr_storage_tick = 0; hrState_g.hr_fs_tick = 0; @@ -334,6 +344,11 @@ hrState_g.fscale = 0; hrState_g.ccpu = 0; + hrState_g.hr_sw_installed_tick = 0; + hrState_g.hr_sw_installed_change_tick = 0; + hrState_g.hrSWInstalled_tbl_age = 0; + + if (hrState_g.ata_fd > 0) { if (close(hrState_g.ata_fd) < 0) { syslog(LOG_ERR,"close (/dev/ata) failed: %m"); @@ -495,14 +510,6 @@ } -int op_hrSWInstalledTable(struct snmp_context *ctx __unused, - struct snmp_value *value __unused, - u_int sub __unused, - u_int iidx __unused, - enum snmp_op curr_op __unused) -{ - return (SNMP_ERR_NOSUCHNAME); -} ==== //depot/projects/soc2005/bsnmp/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_snmp.h#22 (text+ko) ==== @@ -118,7 +118,7 @@ */ struct hrFSTblEntry { int32_t index; - u_char mountPoint[128+11]; + u_char mountPoint[128+1]; u_char remoteMountPoint[128+1]; struct asn_oid type; int32_t access; /* enum hrFSAccess, see above */ @@ -142,7 +142,7 @@ */ struct FSNameMapEntry { int32_t hrIndex; /*used for hrFSTblEntry::index*/ - u_char a_name[128]; /*map key*/ + u_char a_name[128+1]; /*map key*/ /* * next may be NULL if the respective hrFSTblEntry @@ -366,6 +366,48 @@ STAILQ_HEAD(device_map_list, deviceNameMapEntry); +enum SWInstalledType { + SWI_UNKNOWN = 1, + SWI_OPERATING_SYSTEM = 2, + SWI_DEVICE_DRIVER = 3, + SWI_APPLICATION = 4 +}; + + +/* + * This structure is used to hold a SNMP table entry + * for HOST-RESOURCES-MIB's hrSWInstalledTable + */ +struct hrSWInstalledTblEntry { + int32_t index; + u_char name[64+1]; + struct asn_oid id; + int32_t type; /* one item from enum SWInstalledType, see above */ + u_char date[11]; +#define HR_SWINSTALLED_FOUND 0x001 + /*next items are not from the SNMP mib table, only to be used internally*/ + uint32_t flags; + TAILQ_ENTRY(hrSWInstalledTblEntry) link; +}; + +TAILQ_HEAD(sw_installed_tbl, hrSWInstalledTblEntry); + + +struct SWInstalledNameMapEntry { + int32_t hrIndex; /*used for hrSWInstalledTblEntry::index*/ + u_char name[64+1]; /*map key*/ + + /* + * next may be NULL if the respective hrSWInstalledTblEntry + * is (temporally) gone + */ + struct + hrSWInstalledTblEntry *entry_p; + STAILQ_ENTRY(SWInstalledNameMapEntry) link; +}; + +STAILQ_HEAD(sw_installed_map_list, SWInstalledNameMapEntry); + struct hostres_state { FILE *utmp_fp; /*file pointer to keep an open instance of utmp*/ kvm_t *kd; /*kernel descriptor*/ @@ -414,7 +456,7 @@ time_t hrSWRun_tbl_age; uint64_t hr_swrun_tick; /*last (agent) tick when hrSWRunTable and hrSWRunPerTable were updated */ - int32_t hrSWOSIndex; /* the value of the MIB objecy with the same name*/ + int32_t hrSWOSIndex; /* the value of the MIB object with the same name*/ /* * next items are used for hrDeviceTable @@ -480,8 +522,20 @@ network_tbl hr_network_tbl; /*the head of the list with hrNetworkTable's entries */ time_t hrNetwork_tbl_age; uint64_t hr_network_tick; /*last (agent) tick when hrDeviceTable was updated */ + + /* + * next items are used for hrSWInstalledTable + */ + struct + sw_installed_map_list sw_installed_name_map; /*for consistent table indexing*/ + struct + sw_installed_tbl hr_sw_installed_tbl; /*the head of the list with hrSWInstalledTable's entries */ + uint32_t next_hrSWInstalled_index; /*next int available for indexing the hrSWInstalledTable*/ + uint64_t hr_sw_installed_tick; /*last (agent) tick when hrSWInstalledTable was fully updated */ + uint64_t hr_sw_installed_change_tick; /*last (agent) tick when hrDeviceTable was last changed */ + time_t hrSWInstalled_tbl_age; }; @@ -704,7 +758,16 @@ #define HR_NETWORK_TBL_REFRESH 7 -void refresh_Network_tbl_v(void); +void refresh_hrNetwork_tbl_v(void); + + +void init_hrSWInstalled_tbl_v(void); + +void fini_hrSWInstalled_tbl_v(void); + +#define HR_SWINSTALLED_TBL_REFRESH 120 + +void refresh_hrSWInstalled_tbl_v(void); #endif /*__HOSTRES_SNMP_H_INCLUDED__ */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200508132244.j7DMixP8083125>