Whamcloud - gitweb
LU-7521 ldlm: LDLM_DEBUG() shouldn't be passed \n
[fs/lustre-release.git] / snmp / lustre-snmp.c
index 0de2c4d..10d841d 100644 (file)
@@ -1,23 +1,41 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
+/*
+ * GPL HEADER START
  *
- *  Copyright (c) 2005 Cluster File Systems, Inc.
- *   Author: PJ Kirner <pjkirner@clusterfs.com>
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
- *   This file is part of Lustre, http://www.lustre.org.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 only,
+ * as published by the Free Software Foundation.
  *
- *   Lustre is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License version 2 for more details (a copy is included
+ * in the LICENSE file that accompanied this code).
  *
- *   Lustre is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; If not, see
+ * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
  *
- *   You should have received a copy of the GNU General Public License
- *   along with Lustre; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ * GPL HEADER END
+ */
+/*
+ * 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/
+ * Lustre is a trademark of Sun Microsystems, Inc.
+ *
+ * snmp/lustre-snmp.c
+ *
+ * Author: PJ Kirner <pjkirner@clusterfs.com>
  */
  
 #include <net-snmp/net-snmp-config.h>
 #include <pthread.h>
 #include "lustre-snmp.h"
 
+#include <libcfs/util/param.h>
+
+#define LNET_CHECK_INTERVAL 500
+
 /* 
  * clusterFileSystems_variables_oid:
  *   this is the top level oid that we want to register under.  This
@@ -88,6 +110,7 @@ struct variable7 clusterFileSystems_variables[] = {
   { MDDFREECAPACITY     , ASN_COUNTER64 , RONLY , var_mdsTable, 6, { 2,1,4,2,1,5 } },
   { MDDFILES            , ASN_COUNTER64 , RONLY , var_mdsTable, 6, { 2,1,4,2,1,6 } },
   { MDDFREEFILES        , ASN_COUNTER64 , RONLY , var_mdsTable, 6, { 2,1,4,2,1,7 } },
+  { MDSNBSAMPLEDREQ     , ASN_COUNTER64 , RONLY , var_mdsNbSampledReq, 4, { 2,1,4,3 } },
 
   /* metaDataClients 2.1.5 */
   { MDCNUMBER           , ASN_UNSIGNED  , RONLY , var_clusterFileSystems, 4, { 2,1,5,1 } },
@@ -116,7 +139,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 } },
@@ -139,6 +162,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 } },
 };
 
 /*****************************************************************************
@@ -154,13 +189,14 @@ struct variable7 clusterFileSystems_variables[] = {
  
 void init_lustresnmp(void) {
 
-  /* register ourselves with the agent to handle our mib tree */
-  REGISTER_MIB("clusterFileSystems", clusterFileSystems_variables, variable7,
-               clusterFileSystems_variables_oid);
-               
-   initilize_trap_handler();
+       /* register ourselves with the agent to handle our mib tree */
+       REGISTER_MIB("clusterFileSystems",
+                    clusterFileSystems_variables, variable7,
+                    clusterFileSystems_variables_oid);
+
+       initialize_trap_handler();
 
-  DEBUGMSGTL(("lsnmpd", "%s %s \n", __FUNCTION__, "Initialization Done"));
+       DEBUGMSGTL(("lsnmpd", "%s %s\n", __func__, "Initialization Done"));
 }
 
 /*****************************************************************************
@@ -176,13 +212,14 @@ void init_lustresnmp(void) {
 
 void deinit_lustresnmp(void) {
 
-  /* deregister ourselves with the agent */
-  unregister_mib(clusterFileSystems_variables_oid,
-    sizeof(clusterFileSystems_variables_oid)/sizeof(clusterFileSystems_variables_oid));
-  
-  terminate_trap_handler();
-  
-  DEBUGMSGTL(("lsnmpd", "%s %s \n", __FUNCTION__, "Termination Done"));
+       /* deregister ourselves with the agent */
+       unregister_mib(clusterFileSystems_variables_oid,
+                      sizeof(clusterFileSystems_variables_oid)/
+                      sizeof(clusterFileSystems_variables_oid));
+
+       terminate_trap_handler();
+
+       DEBUGMSGTL(("lsnmpd", "%s %s\n", __func__, "Termination Done"));
 }
 
 /*****************************************************************************
@@ -203,7 +240,7 @@ var_clusterFileSystems(struct variable *vp,
   static long long_ret;
   static u_long ulong_ret;
   static unsigned char string[SPRINT_MAX_LEN];
-  char file_path[MAX_PATH_SIZE];
+  glob_t path;
   uint32_t num;
   char *dir_list;
 
@@ -218,24 +255,36 @@ var_clusterFileSystems(struct variable *vp,
   switch(vp->magic) {
 
     case SYSVERSION:
-        sprintf(file_path, "%s%s", LUSTRE_PATH,"version");
-        if( SUCCESS != read_string(file_path, string,sizeof(string)))
+        if (cfs_get_param_paths(&path, "version") != 0)
             return NULL;
-        *var_len = strlen(string);
+        if( SUCCESS != read_string(path.gl_pathv[0], (char *)string,sizeof(string))){
+            cfs_free_param_data(&path);
+            return NULL;
+        }
+        cfs_free_param_data(&path);
+        *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 (cfs_get_param_paths(&path, "kernel_version") != 0)
+            return NULL;
+        if( SUCCESS != read_string(path.gl_pathv[0], (char *)string,sizeof(string))){
+            cfs_free_param_data(&path);
             return NULL;
-        *var_len = strlen(string);
+        }
+        cfs_free_param_data(&path);
+        *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 (cfs_get_param_paths(&path, "health_check") != 0)
             return NULL;
-        *var_len = strlen(string);
+        if( SUCCESS != read_string(path.gl_pathv[0], (char *)string,sizeof(string))){
+            cfs_free_param_data(&path);
+            return NULL;
+        }
+        cfs_free_param_data(&path);
+        *var_len = strlen((char*)string);
         return (unsigned char *) string;
 
     case SYSSTATUS:
@@ -246,57 +295,92 @@ var_clusterFileSystems(struct variable *vp,
         return NULL;
                       
     case OSDNUMBER:
-        if( 0 == (dir_list = get_file_list(OSD_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "obdfilter") != 0)
+            return NULL;
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",OSD_PATH,num));  
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
 
     case OSCNUMBER:
-        if( 0 == (dir_list = get_file_list(OSC_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "osc") != 0)
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",OSC_PATH,num));  
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
+            return NULL;
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
 
     case MDDNUMBER:
-        if( 0 == (dir_list = get_file_list(MDS_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "mds") != 0)
+            return NULL;
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",MDS_PATH,num));  
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
 
     case MDCNUMBER:
-        if( 0 == (dir_list = get_file_list(MDC_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "mdc") != 0)
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",MDC_PATH,num));  
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
+            return NULL;
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
 
     case CLIMOUNTNUMBER:
-        if( 0 == (dir_list = get_file_list(CLIENT_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "llite") != 0)
+            return NULL;
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",CLIENT_PATH,num));  
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
 
     case LOVNUMBER:
-        if( 0 == (dir_list = get_file_list(LOV_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "lov") != 0)
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",LOV_PATH,num));  
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
+            return NULL;
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
 
     case LDLMNUMBER:
-        if( 0 == (dir_list = get_file_list(LDLM_PATH, DIR_TYPE, &num)))
+        if (cfs_get_param_paths(&path, "ldlm/namespaces") != 0)
+            return NULL;
+        if( 0 == (dir_list = get_file_list(path.gl_pathv[0], DIR_TYPE, &num))){
+            cfs_free_param_data(&path);
             return NULL;
-        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",LDLM_PATH,num));  
+        }
+        DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",path.gl_pathv[0],num));
+        cfs_free_param_data(&path);
         ulong_ret =  num;
         free(dir_list);
         return (unsigned char *) &ulong_ret;
@@ -331,8 +415,16 @@ var_osdTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        OSD_PATH,osd_table);
+    unsigned char *table;
+    glob_t path;
+
+    if (cfs_get_param_paths(&path, "obdfilter") != 0)
+        return NULL;
+
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return table;
 }
 
 struct oid_table osc_table[] =
@@ -359,8 +451,16 @@ var_oscTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        OSC_PATH,osc_table);
+    unsigned char *table;
+    glob_t path;
+
+    if (cfs_get_param_paths(&path, "osc") != 0)
+        return NULL;
+
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return table;
 }
 
 struct oid_table mds_table[] =
@@ -386,8 +486,16 @@ var_mdsTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        MDS_PATH,mds_table);
+    unsigned char *table;
+    glob_t path;
+
+    if (cfs_get_param_paths(&path, "mds") != 0)
+        return NULL;
+
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return table;
 }
 
 struct oid_table mdc_table[] =
@@ -415,10 +523,17 @@ var_mdcTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        MDC_PATH,mdc_table);
-}
+    unsigned char *table;
+    glob_t path;
+
+    if (cfs_get_param_paths(&path, "mdc") != 0)
+        return NULL;
 
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return table;
+}
 
 struct oid_table cli_table[] =
 { 
@@ -444,10 +559,17 @@ var_cliTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        CLIENT_PATH,cli_table);
-}
+    unsigned char *table;
+    glob_t path;
 
+    if (cfs_get_param_paths(&path, "llite") != 0)
+        return NULL;
+
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return table;
+}
 
 struct oid_table lov_table[] =
 { 
@@ -479,8 +601,16 @@ var_lovTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        LOV_PATH,lov_table);
+    unsigned char *table;
+    glob_t path;
+
+    if (cfs_get_param_paths(&path, "lov") != 0)
+        return NULL;
+
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return table;
 }
 
 struct oid_table ldlm_table[] =
@@ -505,8 +635,139 @@ var_ldlmTable(struct variable *vp,
            size_t  *var_len,
            WriteMethod **write_method)
 {
-    return var_genericTable(vp,name,length,exact,var_len,write_method,
-        LDLM_PATH,ldlm_table);
+    unsigned char *table;
+    glob_t path;
+
+    if (cfs_get_param_paths(&path, "ldlm/namespaces") != 0)
+        return NULL;
+
+    table = var_genericTable(vp,name,length,exact,var_len,write_method,
+                             path.gl_pathv[0],osd_table);
+    cfs_free_param_data(&path);
+    return 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;
+        glob_t                    file_path;
+
+        /* Update at most every LNET_STATS_INTERVAL milliseconds */
+        gettimeofday(&current_tv, NULL);
+        current = current_tv.tv_sec * 1000000 + current_tv.tv_usec;
+        if (current >= next_update) {
+                if (cfs_get_param_paths(&file_path, "stats") != 0)
+                        return NULL;
+                if (read_string(file_path.gl_pathv[0], (char *) string, sizeof(string))
+                    != SUCCESS) {
+                        cfs_free_param_data(&file_path);
+                        return NULL;
+                }
+                cfs_free_param_data(&file_path);
+
+                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
+ *
+ ****************************************************************************/
+unsigned char *
+var_mdsNbSampledReq(struct variable *vp,
+            oid     *name,
+            size_t  *length,
+            int     exact,
+            size_t  *var_len,
+            WriteMethod **write_method)
+{
+  unsigned long long nb_sample=0,min=0,max=0,sum=0,sum_square=0;
+  static counter64 c64;
+
+  if (header_generic(vp,name,length,exact,var_len,write_method)
+                                  == MATCH_FAILED )
+    return NULL;
+
+  if( mds_stats_values(STR_REQ_WAITIME,&nb_sample,&min,&max,&sum,&sum_square) == ERROR) return NULL;
+
+  c64.low = (u_long) (0x0FFFFFFFF & nb_sample);
+  nb_sample >>= 32;
+  c64.high = (u_long) (0x0FFFFFFFF & nb_sample);
+
+  *var_len = sizeof(c64);
+  return (unsigned char *) &c64;
 }
 
 
@@ -524,8 +785,7 @@ write_sysStatus(int      action,
             size_t   name_len)
 {
   static long *long_ret;
-  int size;
-  int pid, new_value;
+  int new_value;
 
 
 
@@ -550,7 +810,6 @@ write_sysStatus(int      action,
 
 
         case RESERVE2:
-          size = var_val_len;
           long_ret = (long *) var_val;
 
 
@@ -598,4 +857,3 @@ write_sysStatus(int      action,
   }
   return SNMP_ERR_NOERROR;
 }
-