X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=snmp%2Flustre-snmp.c;h=41070e07f23be55c1f4d0f11d2e7c430b2802998;hp=3a8709bbd053664a6b81bea3cd6f95d601e75522;hb=c944e6eaa7f8b98230701266641bfd9dfcb56da8;hpb=e6dbaee6acd3e7265c41cc603a34678dc8376363 diff --git a/snmp/lustre-snmp.c b/snmp/lustre-snmp.c index 3a8709b..41070e0 100644 --- a/snmp/lustre-snmp.c +++ b/snmp/lustre-snmp.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -16,8 +14,8 @@ * in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see [sun.com URL with a - * copy of GPLv2]. + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or @@ -26,8 +24,10 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -45,6 +45,8 @@ #include #include "lustre-snmp.h" +#define LNET_CHECK_INTERVAL 500 + /* * clusterFileSystems_variables_oid: * this is the top level oid that we want to register under. This @@ -135,7 +137,7 @@ struct variable7 clusterFileSystems_variables[] = { /* logicalObjectVolume 2.1.7 */ { LOVNUMBER , ASN_UNSIGNED , RONLY , var_clusterFileSystems, 4, { 2,1,7,1 } }, - /* logicalObjectVolume.osdTable.lovTable 2.1.2.2.1 */ + /* logicalObjectVolume.osdTable.lovTable 2.1.7.2.1 */ { LOVUUID , ASN_OCTET_STR , RONLY , var_lovTable, 6, { 2,1,7,2,1,2 } }, { LOVCOMMONNAME , ASN_OCTET_STR , RONLY , var_lovTable, 6, { 2,1,7,2,1,3 } }, { LOVNUMOBD , ASN_UNSIGNED , RONLY , var_lovTable, 6, { 2,1,7,2,1,4 } }, @@ -158,6 +160,18 @@ struct variable7 clusterFileSystems_variables[] = { { LDLMUNUSEDLOCKCOUNT , ASN_UNSIGNED , RONLY , var_ldlmTable, 6, { 2,1,8,2,1,4 } }, { LDLMRESOURCECOUNT , ASN_UNSIGNED , RONLY , var_ldlmTable, 6, { 2,1,8,2,1,5 } }, + /* lnetInformation 2.1.9 */ + { LNETMSGSALLOC, ASN_UNSIGNED, RONLY, var_lnetInformation, 4, { 2,1,9,1 } }, + { LNETMSGSMAX, ASN_UNSIGNED, RONLY, var_lnetInformation, 4, { 2,1,9,2 } }, + { LNETERRORS, ASN_UNSIGNED, RONLY, var_lnetInformation, 4, { 2,1,9,3 } }, + { LNETSENDCOUNT, ASN_UNSIGNED, RONLY, var_lnetInformation, 4, { 2,1,9,4 } }, + { LNETRECVCOUNT, ASN_UNSIGNED, RONLY, var_lnetInformation, 4, { 2,1,9,5 } }, + { LNETROUTECOUNT, ASN_UNSIGNED, RONLY, var_lnetInformation, 4, { 2,1,9,6 } }, + { LNETDROPCOUNT, ASN_UNSIGNED, RONLY, var_lnetInformation, 4, { 2,1,9,7 } }, + { LNETSENDBYTES, ASN_COUNTER64, RONLY, var_lnetInformation, 4, { 2,1,9,8 } }, + { LNETRECVBYTES, ASN_COUNTER64, RONLY, var_lnetInformation, 4, { 2,1,9,9 } }, + { LNETROUTEBYTES, ASN_COUNTER64, RONLY, var_lnetInformation, 4, { 2,1,9,10 } }, + { LNETDROPBYTES, ASN_COUNTER64, RONLY, var_lnetInformation, 4, { 2,1,9,11 } }, }; /***************************************************************************** @@ -238,23 +252,23 @@ var_clusterFileSystems(struct variable *vp, case SYSVERSION: sprintf(file_path, "%s%s", LUSTRE_PATH,"version"); - if( SUCCESS != read_string(file_path, string,sizeof(string))) + if( SUCCESS != read_string(file_path, (char *)string,sizeof(string))) return NULL; - *var_len = strlen(string); + *var_len = strlen((char *)string); return (unsigned char *) string; case SYSKERNELVERSION: sprintf(file_path, "%s%s", LUSTRE_PATH,"kernel_version"); - if( SUCCESS != read_string(file_path, string,sizeof(string))) + if( SUCCESS != read_string(file_path, (char *)string,sizeof(string))) return NULL; - *var_len = strlen(string); + *var_len = strlen((char *)string); return (unsigned char *) string; case SYSHEALTHCHECK: sprintf(file_path, "%s%s", LUSTRE_PATH,FILENAME_SYSHEALTHCHECK); - if( SUCCESS != read_string(file_path, string,sizeof(string))) + if( SUCCESS != read_string(file_path, (char *)string,sizeof(string))) return NULL; - *var_len = strlen(string); + *var_len = strlen((char*)string); return (unsigned char *) string; case SYSSTATUS: @@ -528,6 +542,95 @@ var_ldlmTable(struct variable *vp, LDLM_PATH,ldlm_table); } +/***************************************************************************** + * Function: var_lnetInformation + * + ****************************************************************************/ +unsigned char * +var_lnetInformation(struct variable *vp, + oid *name, + size_t *length, + int exact, + size_t *var_len, + WriteMethod **write_method) +{ + /* variables we may use later */ + static unsigned char string[SPRINT_MAX_LEN]; + static unsigned int i[7]; + static unsigned long long ull[4]; + static unsigned long next_update; + static counter64 c64; + static unsigned int c32; + struct timeval current_tv; + unsigned long current; + char file_path[MAX_PATH_SIZE]; + + /* Update at most every LNET_STATS_INTERVAL milliseconds */ + gettimeofday(¤t_tv, NULL); + current = current_tv.tv_sec * 1000000 + current_tv.tv_usec; + if (current >= next_update) { + sprintf(file_path, "%s%s", LNET_PATH, "stats"); + if (read_string(file_path, (char *) string, sizeof(string)) + != SUCCESS) + return NULL; + + sscanf((char *) string, + "%u %u %u %u %u %u %u %llu %llu %llu %llu", + &i[0], &i[1], &i[2], &i[3], &i[4], &i[5], &i[6], + &ull[0], &ull[1], &ull[2], &ull[3]); + + next_update = current + (LNET_CHECK_INTERVAL * 1000); + } + + if (header_generic(vp, name, length, exact, var_len, write_method) + == MATCH_FAILED) + return NULL; + + switch (vp->magic) { + case LNETMSGSALLOC: + *var_len = sizeof(c32); + c32 = i[0]; + return (unsigned char *) &c32; + case LNETMSGSMAX: + *var_len = sizeof(c32); + c32 = i[1]; + return (unsigned char *) &c32; + case LNETERRORS: + *var_len = sizeof(c32); + c32 = i[2]; + return (unsigned char *) &c32; + case LNETSENDCOUNT: + *var_len = sizeof(c32); + c32 = i[3]; + return (unsigned char *) &c32; + case LNETRECVCOUNT: + *var_len = sizeof(c32); + c32 = i[4]; + return (unsigned char *) &c32; + case LNETROUTECOUNT: + *var_len = sizeof(c32); + c32 = i[5]; + return (unsigned char *) &c32; + case LNETDROPCOUNT: + *var_len = sizeof(c32); + c32 = i[6]; + return (unsigned char *) &c32; + case LNETSENDBYTES: + convert_ull(&c64, ull[0], var_len); + return (unsigned char *) &c64; + case LNETRECVBYTES: + convert_ull(&c64, ull[1], var_len); + return (unsigned char *) &c64; + case LNETROUTEBYTES: + convert_ull(&c64, ull[2], var_len); + return (unsigned char *) &c64; + case LNETDROPBYTES: + convert_ull(&c64, ull[3], var_len); + return (unsigned char *) &c64; + default: + return NULL; + } +} /***************************************************************************** * Function: var_mdsNbSampledReq @@ -573,8 +676,7 @@ write_sysStatus(int action, size_t name_len) { static long *long_ret; - int size; - int pid, new_value; + int new_value; @@ -599,7 +701,6 @@ write_sysStatus(int action, case RESERVE2: - size = var_val_len; long_ret = (long *) var_val;