nfs-ganesha 1.4

register.c

Go to the documentation of this file.
00001 
00007 #ifdef HAVE_CONFIG_H
00008 #include "config.h"
00009 #endif
00010 
00011 #include "snmp_adm.h"
00012 
00013 #include "instance_handler.h"
00014 
00023 int register_ro_string(oid * myoid, int oid_len, char *string,
00024                        netsnmp_handler_registration ** phandler)
00025 {
00026   netsnmp_handler_registration *myreg;
00027 
00028   myreg =
00029       netsnmp_create_handler_registration("libdemon",
00030                                           instance_string_handler,
00031                                           myoid, oid_len, HANDLER_CAN_RONLY);
00032   myreg->handler->myvoid = (void *)string;
00033 
00034   *phandler = myreg;
00035   return netsnmp_register_handler(myreg);
00036 
00037 }
00038 
00050 int reg_scal(oid * myoid, size_t oid_len, void *value, unsigned char type, int access,
00051              netsnmp_handler_registration * phandler_tab[2])
00052 {
00053   netsnmp_handler_registration *myreg_type, *myreg_val;
00057   oid_len++;
00058   myoid[oid_len - 1] = TYPE_OID;
00059 
00060   /* register type */
00061   myreg_type = netsnmp_create_handler_registration("libdemon",
00062                                                    instance_string_handler,
00063                                                    myoid, oid_len, HANDLER_CAN_RONLY);
00064   /* register value and set type */
00065   switch (type)
00066     {
00067     case SNMP_ADM_STRING:
00068       myoid[oid_len - 1] = VAL_OID;
00069       myreg_val = netsnmp_create_handler_registration("libdemon", instance_string_handler,
00070                                                       myoid, oid_len, access);
00071       myreg_type->handler->myvoid = (void *)"STRING";
00072 
00073       break;
00074 
00075     case SNMP_ADM_INTEGER:
00076       myoid[oid_len - 1] = VAL_OID;
00077       myreg_val = netsnmp_create_handler_registration("libdemon", instance_int_handler,
00078                                                       myoid, oid_len, access);
00079       myreg_type->handler->myvoid = (void *)"INTEGER";
00080 
00081       break;
00082     case SNMP_ADM_REAL:
00083       myoid[oid_len - 1] = VAL_OID;
00084       myreg_val = netsnmp_create_handler_registration("libdemon", instance_real_handler,
00085                                                       myoid, oid_len, access);
00086       myreg_type->handler->myvoid = (void *)"REAL";
00087 
00088       break;
00089     case SNMP_ADM_BIGINT:
00090       myoid[oid_len - 1] = VAL_OID;
00091       myreg_val = netsnmp_create_handler_registration("libdemon", instance_bigint_handler,
00092                                                       myoid, oid_len, access);
00093       myreg_type->handler->myvoid = (void *)"BIGINT";
00094       break;
00095     case SNMP_ADM_TIMETICKS:
00096       myoid[oid_len - 1] = VAL_OID;
00097       myreg_val = netsnmp_create_handler_registration("libdemon", instance_time_handler,
00098                                                       myoid, oid_len, access);
00099       myreg_type->handler->myvoid = (void *)"TIMETICKS";
00100       break;
00101     case SNMP_ADM_IP:
00102       myoid[oid_len - 1] = VAL_OID;
00103       myreg_val = netsnmp_create_handler_registration("libdemon", instance_ip_handler,
00104                                                       myoid, oid_len, access);
00105       myreg_type->handler->myvoid = (void *)"IP";
00106       break;
00107 
00108     default:
00109       /* unknow type */
00110       return 1;
00111 
00112     }
00113   netsnmp_register_handler(myreg_type);
00114 
00115   /* set value */
00116   myreg_val->handler->myvoid = value;
00117   /* give netsnmp handlers to the calling function */
00118   phandler_tab[0] = myreg_val;
00119   phandler_tab[1] = myreg_type;
00120 
00121   return netsnmp_register_handler(myreg_val);
00122 }
00123 
00134 int reg_get_set(oid * myoid, size_t oid_len, unsigned char type, int access,
00135                 netsnmp_handler_registration * phandler_tab[2])
00136 {
00137   netsnmp_handler_registration *myreg_val, *myreg_type;
00138 
00139   oid_len++;
00140 
00141   myoid[oid_len - 1] = TYPE_OID;
00142 
00143   /* register type */
00144   myreg_type = netsnmp_create_handler_registration("libdemon",
00145                                                    instance_string_handler,
00146                                                    myoid, oid_len, HANDLER_CAN_RONLY);
00147   switch (type)
00148     {
00149     case SNMP_ADM_STRING:
00150       myreg_type->handler->myvoid = (void *)"STRING";
00151       break;
00152     case SNMP_ADM_INTEGER:
00153       myreg_type->handler->myvoid = (void *)"INTEGER";
00154       break;
00155     case SNMP_ADM_REAL:
00156       myreg_type->handler->myvoid = (void *)"REAL";
00157       break;
00158     case SNMP_ADM_BIGINT:
00159       myreg_type->handler->myvoid = (void *)"BIGINT";
00160       break;
00161     case SNMP_ADM_TIMETICKS:
00162       myreg_type->handler->myvoid = (void *)"TIMETICKS";
00163       break;
00164     case SNMP_ADM_IP:
00165       myreg_type->handler->myvoid = (void *)"IP";
00166       break;
00167     default:
00168       /* unknow type */
00169       return 1;
00170 
00171     }
00172   netsnmp_register_handler(myreg_type);
00173 
00174   /* register get/set, we do not use "myvoid", we will find the get/set in
00175      instance_get_set_handler */
00176   myoid[oid_len - 1] = VAL_OID;
00177   myreg_val = netsnmp_create_handler_registration("libdemon",
00178                                                   instance_get_set_handler,
00179                                                   myoid, oid_len, access);
00180 
00181   /* give netsnmp handlers to the calling function */
00182   phandler_tab[0] = myreg_type;
00183   phandler_tab[1] = myreg_val;
00184 
00185   return netsnmp_register_handler(myreg_val);
00186 }
00187 
00195 int reg_proc(oid * myoid, size_t oid_len, netsnmp_handler_registration ** phandler)
00196 {
00197   netsnmp_handler_registration *myreg;
00198 
00199   myreg = netsnmp_create_handler_registration("libdemon", instance_proc_handler,
00200                                               myoid, oid_len, SNMP_ADM_ACCESS_RW);
00201   *phandler = myreg;
00202   return netsnmp_register_handler(myreg);
00203 }
00204 
00205 int unreg_instance(netsnmp_handler_registration * myreg)
00206 {
00211   return netsnmp_unregister_handler(myreg);
00212 }