1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2 * vim:expandtab:shiftwidth=8:tabstop=8:
6 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 only,
10 * as published by the Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License version 2 for more details (a copy is included
16 * in the LICENSE file that accompanied this code).
18 * You should have received a copy of the GNU General Public License
19 * version 2 along with this program; If not, see
20 * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
22 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
23 * CA 95054 USA or visit www.sun.com if you need additional information or
29 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
30 * Use is subject to license terms.
33 * This file is part of Lustre, http://www.lustre.org/
34 * Lustre is a trademark of Sun Microsystems, Inc.
38 * Author: PJ Kirner <pjkirner@clusterfs.com>
41 #include <net-snmp/net-snmp-config.h>
42 #include <net-snmp/net-snmp-includes.h>
43 #include <net-snmp/agent/net-snmp-agent-includes.h>
44 #include <net-snmp/utilities.h>
46 #include "lustre-snmp.h"
49 * clusterFileSystems_variables_oid:
50 * this is the top level oid that we want to register under. This
51 * is essentially a prefix, with the suffix appearing in the
56 oid clusterFileSystems_variables_oid[] = { 1,3,6,1,4,1,13140 };
60 * variable7 clusterFileSystems_variables:
61 * this variable defines function callbacks and type return information
62 * for the clusterFileSystems mib section
66 struct variable7 clusterFileSystems_variables[] = {
67 /* magic number , variable type , ro/rw , callback fn , L, oidsuffix */
69 /* sytemInformation 2.1.1. */
70 { SYSVERSION , ASN_OCTET_STR , RONLY , var_clusterFileSystems, 4, { 2,1,1,1 } },
71 { SYSKERNELVERSION , ASN_OCTET_STR , RONLY , var_clusterFileSystems, 4, { 2,1,1,2 } },
72 { SYSHEALTHCHECK , ASN_OCTET_STR , RONLY , var_clusterFileSystems, 4, { 2,1,1,3 } },
73 { SYSSTATUS , ASN_INTEGER , RWRITE, var_clusterFileSystems, 4, { 2,1,1,4 } },
75 /* objectStorageTargets 2.1.2 */
76 { OSDNUMBER , ASN_UNSIGNED , RONLY , var_clusterFileSystems, 4, { 2,1,2,1 } },
78 /* objectStorageTargets.osdTable.osdEntry 2.1.2.2.1 */
79 { OSDUUID , ASN_OCTET_STR , RONLY , var_osdTable, 6, { 2,1,2,2,1,2 } },
80 { OSDCOMMONNAME , ASN_OCTET_STR , RONLY , var_osdTable, 6, { 2,1,2,2,1,3 } },
81 { OSDCAPACITY , ASN_COUNTER64 , RONLY , var_osdTable, 6, { 2,1,2,2,1,4 } },
82 { OSDFREECAPACITY , ASN_COUNTER64 , RONLY , var_osdTable, 6, { 2,1,2,2,1,5 } },
83 { OSDOBJECTS , ASN_COUNTER64 , RONLY , var_osdTable, 6, { 2,1,2,2,1,6 } },
84 { OSDFREEOBJECTS , ASN_COUNTER64 , RONLY , var_osdTable, 6, { 2,1,2,2,1,7 } },
86 /* objectStorageClients 2.1.3 */
87 { OSCNUMBER , ASN_UNSIGNED , RONLY , var_clusterFileSystems, 4, { 2,1,3,1 } },
89 /* objectStorageClients.oscTable.oscEntry 2.1.3.2.1 */
90 { OSCUUID , ASN_OCTET_STR , RONLY , var_oscTable, 6, { 2,1,3,2,1,2 } },
91 { OSCCOMMONNAME , ASN_OCTET_STR , RONLY , var_oscTable, 6, { 2,1,3,2,1,3 } },
92 { OSCOSTSERVERUUID , ASN_OCTET_STR , RONLY , var_oscTable, 6, { 2,1,3,2,1,4 } },
93 { OSCCAPACITY , ASN_COUNTER64 , RONLY , var_oscTable, 6, { 2,1,3,2,1,5 } },
94 { OSCFREECAPACITY , ASN_COUNTER64 , RONLY , var_oscTable, 6, { 2,1,3,2,1,6 } },
95 { OSCOBJECTS , ASN_COUNTER64 , RONLY , var_oscTable, 6, { 2,1,3,2,1,7 } },
96 { OSCFREEOBJECTS , ASN_COUNTER64 , RONLY , var_oscTable, 6, { 2,1,3,2,1,8 } },
99 /* metaDataServers 2.1.4 */
100 { MDDNUMBER , ASN_UNSIGNED , RONLY , var_clusterFileSystems, 4, { 2,1,4,1 } },
102 /* metaDataServers.mddTable.mddEntry 2.1.4.2.1 */
103 { MDDUUID , ASN_OCTET_STR , RONLY , var_mdsTable, 6, { 2,1,4,2,1,2 } },
104 { MDDCOMMONNAME , ASN_OCTET_STR , RONLY , var_mdsTable, 6, { 2,1,4,2,1,3 } },
105 { MDDCAPACITY , ASN_COUNTER64 , RONLY , var_mdsTable, 6, { 2,1,4,2,1,4 } },
106 { MDDFREECAPACITY , ASN_COUNTER64 , RONLY , var_mdsTable, 6, { 2,1,4,2,1,5 } },
107 { MDDFILES , ASN_COUNTER64 , RONLY , var_mdsTable, 6, { 2,1,4,2,1,6 } },
108 { MDDFREEFILES , ASN_COUNTER64 , RONLY , var_mdsTable, 6, { 2,1,4,2,1,7 } },
109 { MDSNBSAMPLEDREQ , ASN_COUNTER64 , RONLY , var_mdsNbSampledReq, 4, { 2,1,4,3 } },
111 /* metaDataClients 2.1.5 */
112 { MDCNUMBER , ASN_UNSIGNED , RONLY , var_clusterFileSystems, 4, { 2,1,5,1 } },
114 /* metaDataClients.mdcTable.mdcEntry 2.1.5.2.1 */
115 { MDCUUID , ASN_OCTET_STR , RONLY , var_mdcTable, 6, { 2,1,5,2,1,2 } },
116 { MDCCOMMONNAME , ASN_OCTET_STR , RONLY , var_mdcTable, 6, { 2,1,5,2,1,3 } },
117 { MDCMDSSERVERUUID , ASN_OCTET_STR , RONLY , var_mdcTable, 6, { 2,1,5,2,1,4 } },
118 { MDCCAPACITY , ASN_COUNTER64 , RONLY , var_mdcTable, 6, { 2,1,5,2,1,5 } },
119 { MDCFREECAPACITY , ASN_COUNTER64 , RONLY , var_mdcTable, 6, { 2,1,5,2,1,6 } },
120 { MDCOBJECTS , ASN_COUNTER64 , RONLY , var_mdcTable, 6, { 2,1,5,2,1,7 } },
121 { MDCFREEOBJECTS , ASN_COUNTER64 , RONLY , var_mdcTable, 6, { 2,1,5,2,1,8 } },
123 /* lustreClients 2.1.6 */
124 { CLIMOUNTNUMBER , ASN_UNSIGNED , RONLY , var_clusterFileSystems, 4, { 2,1,6,1 } },
126 /* lustreClients.cliMountTable.cliMountEntry 2.1.6.2.1 */
127 { CLIUUID , ASN_OCTET_STR , RONLY , var_cliTable, 6, { 2,1,6,2,1,2 } },
128 { CLICOMMONNAME , ASN_OCTET_STR , RONLY , var_cliTable, 6, { 2,1,6,2,1,3 } },
129 { CLIMDCUUID , ASN_OCTET_STR , RONLY , var_cliTable, 6, { 2,1,6,2,1,4 } },
130 { CLIMDCCOMMONNAME , ASN_OCTET_STR , RONLY , var_cliTable, 6, { 2,1,6,2,1,5 } },
131 { CLIUSESLOV , ASN_INTEGER , RONLY , var_cliTable, 6, { 2,1,6,2,1,6 } },
132 { CLILOVUUID , ASN_OCTET_STR , RONLY , var_cliTable, 6, { 2,1,6,2,1,7 } },
133 { CLILOVCOMMONNAME , ASN_OCTET_STR , RONLY , var_cliTable, 6, { 2,1,6,2,1,8 } },
135 /* logicalObjectVolume 2.1.7 */
136 { LOVNUMBER , ASN_UNSIGNED , RONLY , var_clusterFileSystems, 4, { 2,1,7,1 } },
138 /* logicalObjectVolume.osdTable.lovTable 2.1.2.2.1 */
139 { LOVUUID , ASN_OCTET_STR , RONLY , var_lovTable, 6, { 2,1,7,2,1,2 } },
140 { LOVCOMMONNAME , ASN_OCTET_STR , RONLY , var_lovTable, 6, { 2,1,7,2,1,3 } },
141 { LOVNUMOBD , ASN_UNSIGNED , RONLY , var_lovTable, 6, { 2,1,7,2,1,4 } },
142 { LOVNUMACTIVEOBD , ASN_UNSIGNED , RONLY , var_lovTable, 6, { 2,1,7,2,1,5 } },
143 { LOVCAPACITY , ASN_COUNTER64 , RONLY , var_lovTable, 6, { 2,1,7,2,1,6 } },
144 { LOVFREECAPACITY , ASN_COUNTER64 , RONLY , var_lovTable, 6, { 2,1,7,2,1,7 } },
145 { LOVFILES , ASN_COUNTER64 , RONLY , var_lovTable, 6, { 2,1,7,2,1,8 } },
146 { LOVFREEFILES , ASN_COUNTER64 , RONLY , var_lovTable, 6, { 2,1,7,2,1,9 } },
147 { LOVSTRIPECOUNT , ASN_UNSIGNED , RONLY , var_lovTable, 6, { 2,1,7,2,1,10} },
148 { LOVSTRIPEOFFSET , ASN_UNSIGNED , RONLY , var_lovTable, 6, { 2,1,7,2,1,11} },
149 { LOVSTRIPESIZE , ASN_UNSIGNED , RONLY , var_lovTable, 6, { 2,1,7,2,1,12} },
150 { LOVSTRIPETYPE , ASN_UNSIGNED , RONLY , var_lovTable, 6, { 2,1,7,2,1,13} },
152 /* lustreLDLM 2.1.8 */
153 { LDLMNUMBER , ASN_UNSIGNED , RONLY , var_clusterFileSystems, 4, { 2,1,8,1 } },
155 /* lustreLDLM.ldlmTable.ldlmEntry 2.1.8.2.1 */
156 { LDLMNAMESPACE , ASN_OCTET_STR , RONLY , var_ldlmTable, 6, { 2,1,8,2,1,2 } },
157 { LDLMLOCKCOUNT , ASN_UNSIGNED , RONLY , var_ldlmTable, 6, { 2,1,8,2,1,3 } },
158 { LDLMUNUSEDLOCKCOUNT , ASN_UNSIGNED , RONLY , var_ldlmTable, 6, { 2,1,8,2,1,4 } },
159 { LDLMRESOURCECOUNT , ASN_UNSIGNED , RONLY , var_ldlmTable, 6, { 2,1,8,2,1,5 } },
163 /*****************************************************************************
164 * Function: init_cfsNetSNMPPlugin
166 * Description: Called when the agent starts up
172 ****************************************************************************/
174 void init_lustresnmp(void) {
176 /* register ourselves with the agent to handle our mib tree */
177 REGISTER_MIB("clusterFileSystems", clusterFileSystems_variables, variable7,
178 clusterFileSystems_variables_oid);
180 initilize_trap_handler();
182 DEBUGMSGTL(("lsnmpd", "%s %s \n", __FUNCTION__, "Initialization Done"));
185 /*****************************************************************************
186 * Function: deinit_cfsNetSNMPPlugin
188 * Description: Called when the agent terminates up
194 ****************************************************************************/
196 void deinit_lustresnmp(void) {
198 /* deregister ourselves with the agent */
199 unregister_mib(clusterFileSystems_variables_oid,
200 sizeof(clusterFileSystems_variables_oid)/sizeof(clusterFileSystems_variables_oid));
202 terminate_trap_handler();
204 DEBUGMSGTL(("lsnmpd", "%s %s \n", __FUNCTION__, "Termination Done"));
207 /*****************************************************************************
208 * Function: var_clusterFileSystems
210 ****************************************************************************/
212 var_clusterFileSystems(struct variable *vp,
217 WriteMethod **write_method)
221 /* variables we may use later */
222 static long long_ret;
223 static u_long ulong_ret;
224 static unsigned char string[SPRINT_MAX_LEN];
225 char file_path[MAX_PATH_SIZE];
229 if (header_generic(vp,name,length,exact,var_len,write_method)
235 * this is where we do the value assignments for the mib results.
240 sprintf(file_path, "%s%s", LUSTRE_PATH,"version");
241 if( SUCCESS != read_string(file_path, (char *)string,sizeof(string)))
243 *var_len = strlen((char *)string);
244 return (unsigned char *) string;
246 case SYSKERNELVERSION:
247 sprintf(file_path, "%s%s", LUSTRE_PATH,"kernel_version");
248 if( SUCCESS != read_string(file_path, (char *)string,sizeof(string)))
250 *var_len = strlen((char *)string);
251 return (unsigned char *) string;
254 sprintf(file_path, "%s%s", LUSTRE_PATH,FILENAME_SYSHEALTHCHECK);
255 if( SUCCESS != read_string(file_path, (char *)string,sizeof(string)))
257 *var_len = strlen((char*)string);
258 return (unsigned char *) string;
261 *write_method = write_sysStatus;
262 long_ret = (long) get_sysstatus();
263 if (long_ret != ERROR)
264 return (unsigned char *) &long_ret;
268 if( 0 == (dir_list = get_file_list(OSD_PATH, DIR_TYPE, &num)))
270 DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",OSD_PATH,num));
273 return (unsigned char *) &ulong_ret;
276 if( 0 == (dir_list = get_file_list(OSC_PATH, DIR_TYPE, &num)))
278 DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",OSC_PATH,num));
281 return (unsigned char *) &ulong_ret;
284 if( 0 == (dir_list = get_file_list(MDS_PATH, DIR_TYPE, &num)))
286 DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",MDS_PATH,num));
289 return (unsigned char *) &ulong_ret;
292 if( 0 == (dir_list = get_file_list(MDC_PATH, DIR_TYPE, &num)))
294 DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",MDC_PATH,num));
297 return (unsigned char *) &ulong_ret;
300 if( 0 == (dir_list = get_file_list(CLIENT_PATH, DIR_TYPE, &num)))
302 DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",CLIENT_PATH,num));
305 return (unsigned char *) &ulong_ret;
308 if( 0 == (dir_list = get_file_list(LOV_PATH, DIR_TYPE, &num)))
310 DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",LOV_PATH,num));
313 return (unsigned char *) &ulong_ret;
316 if( 0 == (dir_list = get_file_list(LDLM_PATH, DIR_TYPE, &num)))
318 DEBUGMSGTL(("lsnmpd","num(%s)=%d\n",LDLM_PATH,num));
321 return (unsigned char *) &ulong_ret;
329 struct oid_table osd_table[] =
331 { OSDUUID,FILENAME_UUID,oid_table_string_handler},
332 { OSDCOMMONNAME,0,oid_table_obj_name_handler},
333 { OSDCAPACITY,FILENAME_KBYTES_TOTAL, oid_table_c64_kb_handler},
334 { OSDFREECAPACITY,FILENAME_KBYTES_FREE, oid_table_c64_kb_handler},
335 { OSDOBJECTS,FILENAME_FILES_TOTAL, oid_table_c64_kb_handler},
336 { OSDFREEOBJECTS,FILENAME_FILES_FREE, oid_table_c64_kb_handler},
337 { 0,0,0 } /*End of table*/
341 /*****************************************************************************
342 * Function: var_osdTable
344 ****************************************************************************/
346 var_osdTable(struct variable *vp,
351 WriteMethod **write_method)
353 return var_genericTable(vp,name,length,exact,var_len,write_method,
357 struct oid_table osc_table[] =
359 { OSCUUID,FILENAME_UUID,oid_table_string_handler},
360 { OSCCOMMONNAME,0,oid_table_obj_name_handler},
361 { OSCOSTSERVERUUID,"ost_server_uuid",oid_table_string_handler},
362 { OSCCAPACITY,FILENAME_KBYTES_TOTAL, oid_table_c64_kb_handler},
363 { OSCFREECAPACITY,FILENAME_KBYTES_FREE, oid_table_c64_kb_handler},
364 { OSCOBJECTS,FILENAME_FILES_TOTAL, oid_table_c64_kb_handler},
365 { OSCFREEOBJECTS,FILENAME_FILES_FREE, oid_table_c64_kb_handler},
366 { 0,0,0 } /*End of table*/
369 /*****************************************************************************
370 * Function: var_oscTable
372 ****************************************************************************/
374 var_oscTable(struct variable *vp,
379 WriteMethod **write_method)
381 return var_genericTable(vp,name,length,exact,var_len,write_method,
385 struct oid_table mds_table[] =
387 { MDDUUID,FILENAME_UUID,oid_table_string_handler},
388 { MDDCOMMONNAME,0,oid_table_obj_name_handler},
389 { MDDCAPACITY,FILENAME_KBYTES_TOTAL, oid_table_c64_kb_handler},
390 { MDDFREECAPACITY,FILENAME_KBYTES_FREE, oid_table_c64_kb_handler},
391 { MDDFILES,FILENAME_FILES_TOTAL, oid_table_c64_kb_handler},
392 { MDDFREEFILES,FILENAME_FILES_FREE, oid_table_c64_kb_handler},
393 { 0,0,0 } /*End of table*/
396 /*****************************************************************************
397 * Function: var_mdsTable
399 ****************************************************************************/
401 var_mdsTable(struct variable *vp,
406 WriteMethod **write_method)
408 return var_genericTable(vp,name,length,exact,var_len,write_method,
412 struct oid_table mdc_table[] =
414 { MDCUUID,FILENAME_UUID,oid_table_string_handler},
415 { MDCCOMMONNAME,0,oid_table_obj_name_handler},
416 { MDCMDSSERVERUUID,"mds_server_uuid",oid_table_string_handler},
417 { MDCCAPACITY,FILENAME_KBYTES_TOTAL, oid_table_c64_kb_handler},
418 { MDCFREECAPACITY,FILENAME_KBYTES_FREE, oid_table_c64_kb_handler},
419 { MDCOBJECTS,FILENAME_FILES_TOTAL, oid_table_c64_kb_handler},
420 { MDCFREEOBJECTS,FILENAME_FILES_FREE, oid_table_c64_kb_handler},
421 { 0,0,0 } /*End of table*/
425 /*****************************************************************************
426 * Function: var_mdcTable
428 ****************************************************************************/
430 var_mdcTable(struct variable *vp,
435 WriteMethod **write_method)
437 return var_genericTable(vp,name,length,exact,var_len,write_method,
442 struct oid_table cli_table[] =
444 { CLIUUID,FILENAME_UUID,oid_table_string_handler},
445 { CLICOMMONNAME,0,oid_table_obj_name_handler},
446 { CLIMDCUUID,"mdc/" FILENAME_UUID,oid_table_string_handler},
447 { CLIMDCCOMMONNAME,"mdc/" FILENAME_COMMON_NAME,oid_table_string_handler},
448 { CLIUSESLOV,"lov/",oid_table_is_directory_handler},
449 { CLILOVUUID,"lov/" FILENAME_UUID,oid_table_string_handler},
450 { CLILOVCOMMONNAME,"lov/" FILENAME_COMMON_NAME,oid_table_string_handler},
451 { 0,0,0 } /*End of table*/
454 /*****************************************************************************
455 * Function: var_cliTable
457 ****************************************************************************/
459 var_cliTable(struct variable *vp,
464 WriteMethod **write_method)
466 return var_genericTable(vp,name,length,exact,var_len,write_method,
467 CLIENT_PATH,cli_table);
471 struct oid_table lov_table[] =
473 { LOVUUID,FILENAME_UUID,oid_table_string_handler},
474 { LOVCOMMONNAME,0,oid_table_obj_name_handler},
475 { LOVNUMOBD,"numobd", oid_table_ulong_handler},
476 { LOVNUMACTIVEOBD,"activeobd", oid_table_ulong_handler},
477 { LOVCAPACITY,FILENAME_KBYTES_TOTAL, oid_table_c64_kb_handler},
478 { LOVFREECAPACITY,FILENAME_KBYTES_FREE, oid_table_c64_kb_handler},
479 { LOVFILES,FILENAME_FILES_TOTAL, oid_table_c64_kb_handler},
480 { LOVFREEFILES,FILENAME_FILES_FREE, oid_table_c64_kb_handler},
481 { LOVSTRIPECOUNT,"stripecount", oid_table_ulong_handler},
482 { LOVSTRIPEOFFSET,"stripeoffset", oid_table_ulong_handler},
483 { LOVSTRIPESIZE,"stripesize", oid_table_ulong_handler},
484 { LOVSTRIPETYPE,"stripetype", oid_table_ulong_handler},
485 { 0,0,0 } /*End of table*/
489 /*****************************************************************************
490 * Function: var_lovTable
492 ****************************************************************************/
494 var_lovTable(struct variable *vp,
499 WriteMethod **write_method)
501 return var_genericTable(vp,name,length,exact,var_len,write_method,
505 struct oid_table ldlm_table[] =
507 { LDLMNAMESPACE,0,oid_table_obj_name_handler},
508 { LDLMLOCKCOUNT,"lock_count", oid_table_ulong_handler},
509 { LDLMUNUSEDLOCKCOUNT,"lock_unused_count", oid_table_ulong_handler},
510 { LDLMRESOURCECOUNT,"resource_count", oid_table_ulong_handler},
511 { 0,0,0 } /*End of table*/
515 /*****************************************************************************
516 * Function: var_ldlmTable
518 ****************************************************************************/
520 var_ldlmTable(struct variable *vp,
525 WriteMethod **write_method)
527 return var_genericTable(vp,name,length,exact,var_len,write_method,
528 LDLM_PATH,ldlm_table);
532 /*****************************************************************************
533 * Function: var_mdsNbSampledReq
535 ****************************************************************************/
537 var_mdsNbSampledReq(struct variable *vp,
542 WriteMethod **write_method)
544 unsigned long long nb_sample=0,min=0,max=0,sum=0,sum_square=0;
545 static counter64 c64;
547 if (header_generic(vp,name,length,exact,var_len,write_method)
551 if( mds_stats_values(STR_REQ_WAITIME,&nb_sample,&min,&max,&sum,&sum_square) == ERROR) return NULL;
553 c64.low = (u_long) (0x0FFFFFFFF & nb_sample);
555 c64.high = (u_long) (0x0FFFFFFFF & nb_sample);
557 *var_len = sizeof(c64);
558 return (unsigned char *) &c64;
562 /*****************************************************************************
563 * Function: write_sysStatus
565 ****************************************************************************/
567 write_sysStatus(int action,
575 static long *long_ret;
583 if (var_val_type != ASN_INTEGER){
584 fprintf(stderr, "write to sysStatus not ASN_INTEGER\n");
585 return SNMP_ERR_WRONGTYPE;
587 if (var_val_len > sizeof(long_ret)){
588 fprintf(stderr,"write to sysStatus: bad length\n");
589 return SNMP_ERR_WRONGLENGTH;
591 if ((*var_val != ONLINE) &&
592 (*var_val != OFFLINE) &&
593 (*var_val != RESTART)){
594 report("%s %s:line %d %s", __FILE__, __FUNCTION__, __LINE__,
595 "sysStatus value is invalid.");
596 return SNMP_ERR_WRONGVALUE;
603 long_ret = (long *) var_val;
610 /* Release any resources that have been allocated */
615 /* The variable has been stored in long_ret for
616 you to use, and you have just been asked to do something with
617 it. Note that anything done here must be reversable in the UNDO case */
618 new_value = *(int *) var_val;
621 lustrefs_ctrl(ONLINE);
625 lustrefs_ctrl(OFFLINE);
629 lustrefs_ctrl(RESTART);
639 /* Back out any changes made in the ACTION case */
644 /* Things are working well, so it's now safe to make the change
645 permanently. Make sure that anything done here can't fail! */
648 return SNMP_ERR_NOERROR;