Advertisement
Guest User

private_mib.c

a guest
Apr 13th, 2012
515
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.08 KB | None | 0 0
  1. #include "main.h"
  2. #include "private_mib.h"
  3. #include "lwip/snmp.h"
  4. #include "lwip/snmp_msg.h"
  5. #include "lwip/snmp_asn1.h"
  6. #include "lwip/snmp_structs.h"
  7.  
  8. /**
  9.  * Initialises this private MIB before use.
  10.  *
  11.  */
  12. void lwip_privmib_init(void);
  13.  
  14. void ocstrncpy(u8_t *dst, u8_t *src, u8_t n);
  15. void objectidncpy(s32_t *dst, s32_t *src, u8_t n);
  16.  
  17.  
  18. static void moduleEntry_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
  19. {
  20.   u8_t id;
  21.  
  22.   /* return to object name, adding index depth (1) */
  23.   ident_len += 1;
  24.   ident -= 1;
  25.   if (ident_len == 2)
  26.   {
  27.     od->id_inst_len = ident_len;
  28.     od->id_inst_ptr = ident;
  29.  
  30.     id = ident[0];
  31.     LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def private moduleEntry.%"U16_F".0\n",(u16_t)id));
  32.     switch (id)
  33.     {
  34.       case 1:    /* moduleIndex  */
  35.         od->instance = MIB_OBJECT_TAB;
  36.         od->access = MIB_OBJECT_READ_ONLY;
  37.         od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
  38.         od->v_len = sizeof(u32_t);
  39.         break;
  40.       case 2:    /* moduleAddr  */
  41.         od->instance = MIB_OBJECT_TAB;
  42.         od->access = MIB_OBJECT_READ_ONLY;
  43.         od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
  44.         od->v_len = sizeof(u32_t);
  45.         break;
  46.       case 3:    /* moduleReset  */
  47.         od->instance = MIB_OBJECT_TAB;
  48.         od->access = MIB_OBJECT_READ_WRITE;
  49.         od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
  50.         od->v_len = sizeof(u32_t);
  51.         break;
  52.       case 4:    /* moduleActive  */
  53.         od->instance = MIB_OBJECT_TAB;
  54.         od->access = MIB_OBJECT_READ_WRITE;
  55.         od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
  56.         od->v_len = sizeof(u32_t);
  57.         break;
  58.       case 5:    /* moduleBusy  */
  59.         od->instance = MIB_OBJECT_TAB;
  60.         od->access = MIB_OBJECT_READ_ONLY;
  61.         od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
  62.         od->v_len = sizeof(u32_t);
  63.         break;
  64.       case 6:    /* moduleType  */
  65.         od->instance = MIB_OBJECT_TAB;
  66.         od->access = MIB_OBJECT_READ_WRITE;
  67.         od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
  68.         od->v_len = sizeof(u32_t);
  69.         break;
  70.       case 7:    /* moduleAsDestination  */
  71.         od->instance = MIB_OBJECT_TAB;
  72.         od->access = MIB_OBJECT_READ_WRITE;
  73.         od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
  74.         od->v_len = sizeof(u32_t);
  75.         break;
  76.       case 8:    /* moduleComment  */
  77.         od->instance = MIB_OBJECT_TAB;
  78.         od->access = MIB_OBJECT_READ_WRITE;
  79.         od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_OC_STR);
  80.         od->v_len = sizeof(u32_t);
  81.         break;
  82.       default:
  83.         LWIP_DEBUGF(SNMP_MIB_DEBUG,("moduleEntry_get_object_def: no such object\n"));
  84.         od->instance = MIB_OBJECT_NONE;
  85.         break;
  86.     };
  87.   }
  88.   else
  89.   {
  90.     LWIP_DEBUGF(SNMP_MIB_DEBUG,("private moduleEntry_get_object_def: no scalar\n"));
  91.     od->instance = MIB_OBJECT_NONE;
  92.   }
  93. }
  94.  
  95. static void moduleEntry_get_value(struct obj_def *od, u16_t len, void *value)
  96. {
  97.   u8_t id;
  98.  
  99.   /* the index value can be found in: od->id_inst_ptr[1] */
  100.   id = od->id_inst_ptr[0];
  101.   switch (id)
  102.   {
  103.     case 1:    /* moduleIndex  */
  104.       {
  105.         s32_t *sint_ptr = value;
  106.         *sint_ptr = 55;
  107.       }
  108.       break;
  109.     case 2:    /* moduleAddr  */
  110.       {
  111.         s32_t *sint_ptr = value;
  112.         *sint_ptr = 0xA;
  113.       }
  114.       break;
  115.     case 3:    /* moduleReset  */
  116.       {
  117.         s32_t *sint_ptr = value;
  118.         *sint_ptr = 0;
  119.       }
  120.       break;
  121.     case 4:    /* moduleActive  */
  122.       {
  123.         s32_t *sint_ptr = value;
  124.         *sint_ptr = 1;
  125.       }
  126.       break;
  127.     case 5:    /* moduleBusy  */
  128.       {
  129.         s32_t *sint_ptr = value;
  130.         *sint_ptr = 0;
  131.       }
  132.       break;
  133.     case 6:    /* moduleType  */
  134.       {
  135.         s32_t *sint_ptr = value;
  136.         *sint_ptr = 0;
  137.       }
  138.       break;
  139.     case 7:    /* moduleAsDestination  */
  140.       {
  141.         s32_t *sint_ptr = value;
  142.         *sint_ptr = 0;
  143.       }
  144.       break;
  145.     case 8:    /* moduleComment  */
  146.       ocstrncpy(value,(u8_t*)"hehe",len);
  147.       break;
  148.   };
  149. }
  150.  
  151. static u8_t moduleEntry_set_test(struct obj_def *od, u16_t len, void *value)
  152. {
  153.   u8_t id, set_ok;
  154.  
  155.   /* the index value can be found in: od->id_inst_ptr[1] */
  156.   set_ok = 0;
  157.   id = od->id_inst_ptr[0];
  158.   switch (id)
  159.   {
  160.     case 3:    /* moduleReset  */
  161.   /* validate the value argument and set ok  */
  162.       break;
  163.     case 4:    /* moduleActive  */
  164.   /* validate the value argument and set ok  */
  165.       break;
  166.     case 6:    /* moduleType  */
  167.   /* validate the value argument and set ok  */
  168.       break;
  169.     case 7:    /* moduleAsDestination  */
  170.   /* validate the value argument and set ok  */
  171.       break;
  172.     case 8:    /* moduleComment  */
  173.   /* validate the value argument and set ok  */
  174.       break;
  175.   };
  176.   return set_ok;
  177. }
  178.  
  179. static void moduleEntry_set_value(struct obj_def *od, u16_t len, void *value)
  180. {
  181.   u8_t id;
  182.  
  183.   /* the index value can be found in: od->id_inst_ptr[1] */
  184.   id = od->id_inst_ptr[0];
  185.   switch (id)
  186.   {
  187.     case 3:    /* moduleReset  */
  188.       {
  189.         s32_t *sint_ptr = value;
  190.          //= *sint_ptr;  /* do something with the value */
  191.       }
  192.       break;
  193.     case 4:    /* moduleActive  */
  194.       {
  195.         s32_t *sint_ptr = value;
  196.          //= *sint_ptr;  /* do something with the value */
  197.       }
  198.       break;
  199.     case 6:    /* moduleType  */
  200.       {
  201.         s32_t *sint_ptr = value;
  202.          //= *sint_ptr;  /* do something with the value */
  203.       }
  204.       break;
  205.     case 7:    /* moduleAsDestination  */
  206.       {
  207.         s32_t *sint_ptr = value;
  208.          //= *sint_ptr;  /* do something with the value */
  209.       }
  210.       break;
  211.     case 8:    /* moduleComment  */
  212.       //ocstrncpy((u8_t*)"hehe",value,len);
  213.       break;
  214.   };
  215. }
  216.  
  217. struct mib_list_rootnode moduleEntry_root = {
  218.   &moduleEntry_get_object_def,
  219.   &moduleEntry_get_value,
  220.   &moduleEntry_set_test,
  221.   &moduleEntry_set_value,
  222.   MIB_NODE_LR,
  223.   0,
  224.   NULL,
  225.   NULL,  0,
  226. };
  227.  
  228. /* moduleEntry  .1.3.6.1.4.1.26381.1.3.1    */
  229. const s32_t moduleEntry_ids[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
  230. struct mib_node* const moduleEntry_nodes[8] = {
  231.   (struct mib_node* const)&moduleEntry_root,
  232.   (struct mib_node* const)&moduleEntry_root,
  233.   (struct mib_node* const)&moduleEntry_root,
  234.   (struct mib_node* const)&moduleEntry_root,
  235.   (struct mib_node* const)&moduleEntry_root,
  236.   (struct mib_node* const)&moduleEntry_root,
  237.   (struct mib_node* const)&moduleEntry_root,
  238.   (struct mib_node* const)&moduleEntry_root
  239. };
  240.  
  241. const struct mib_array_node moduleEntry = {
  242.   &noleafs_get_object_def,
  243.   &noleafs_get_value,
  244.   &noleafs_set_test,
  245.   &noleafs_set_value,
  246.   MIB_NODE_AR,
  247.   8,
  248.   moduleEntry_ids,
  249.   moduleEntry_nodes
  250. };
  251.  
  252. /* modulesTable  .1.3.6.1.4.1.26381.1.3    */
  253. s32_t modulesTable_ids[1] = { 1 };
  254. struct mib_node* modulesTable_nodes[1] = {
  255.   (struct mib_node* const)&moduleEntry
  256. };
  257.  
  258. struct mib_ram_array_node modulesTable = {
  259.   &noleafs_get_object_def,
  260.   &noleafs_get_value,
  261.   &noleafs_set_test,
  262.   &noleafs_set_value,
  263.   MIB_NODE_RA,
  264.   0,
  265.   modulesTable_ids,
  266.   modulesTable_nodes
  267. };
  268.  
  269. static void emmp_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od)
  270. {
  271.   u8_t id;
  272.  
  273.   /* return to object name, adding index depth (1) */
  274.   ident_len += 1;
  275.   ident -= 1;
  276.   if (ident_len == 2)
  277.   {
  278.     od->id_inst_len = ident_len;
  279.     od->id_inst_ptr = ident;
  280.  
  281.     id = ident[0];
  282.     LWIP_DEBUGF(SNMP_MIB_DEBUG,("get_object_def private emmp.%"U16_F".0\n",(u16_t)id));
  283.     switch (id)
  284.     {
  285.       case 1:    /* restart  */
  286.         od->instance = MIB_OBJECT_SCALAR;
  287.         od->access = MIB_OBJECT_READ_WRITE;
  288.         od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
  289.         od->v_len = sizeof(u32_t);
  290.         break;
  291.       case 2:    /* reset  */
  292.         od->instance = MIB_OBJECT_SCALAR;
  293.         od->access = MIB_OBJECT_READ_WRITE;
  294.         od->asn_type = (SNMP_ASN1_UNIV | SNMP_ASN1_PRIMIT | SNMP_ASN1_INTEG);
  295.         od->v_len = sizeof(u32_t);
  296.         break;
  297.       default:
  298.         LWIP_DEBUGF(SNMP_MIB_DEBUG,("emmp_get_object_def: no such object\n"));
  299.         od->instance = MIB_OBJECT_NONE;
  300.         break;
  301.     };
  302.   }
  303.   else
  304.   {
  305.     LWIP_DEBUGF(SNMP_MIB_DEBUG,("private emmp_get_object_def: no scalar\n"));
  306.     od->instance = MIB_OBJECT_NONE;
  307.   }
  308. }
  309.  
  310. static void emmp_get_value(struct obj_def *od, u16_t len, void *value)
  311. {
  312.   u8_t id;
  313.  
  314.   id = od->id_inst_ptr[0];
  315.   switch (id)
  316.   {
  317.     case 1:    /* restart  */
  318.       {
  319.         s32_t *sint_ptr = value;
  320.         *sint_ptr = 42;
  321.       }
  322.       break;
  323.     case 2:    /* reset  */
  324.       {
  325.         s32_t *sint_ptr = value;
  326.         *sint_ptr = 43;
  327.       }
  328.       break;
  329.   };
  330. }
  331.  
  332. static u8_t emmp_set_test(struct obj_def *od, u16_t len, void *value)
  333. {
  334.   u8_t id, set_ok;
  335.  
  336.   set_ok = 0;
  337.   id = od->id_inst_ptr[0];
  338.   switch (id)
  339.   {
  340.     case 1:    /* restart  */
  341.   /* validate the value argument and set ok  */
  342.       break;
  343.     case 2:    /* reset  */
  344.   /* validate the value argument and set ok  */
  345.       break;
  346.   };
  347.   return set_ok;
  348. }
  349.  
  350. static void emmp_set_value(struct obj_def *od, u16_t len, void *value)
  351. {
  352.   u8_t id;
  353.  
  354.   id = od->id_inst_ptr[0];
  355.   switch (id)
  356.   {
  357.     case 1:    /* restart  */
  358.       {
  359.         s32_t *sint_ptr = value;
  360.          //= *sint_ptr;  /* do something with the value */
  361.       }
  362.       break;
  363.     case 2:    /* reset  */
  364.       {
  365.         s32_t *sint_ptr = value;
  366.          //= *sint_ptr;  /* do something with the value */
  367.       }
  368.       break;
  369.   };
  370. }
  371.  
  372. const mib_scalar_node emmp_scalar = {
  373.   &emmp_get_object_def,
  374.   &emmp_get_value,
  375.   &emmp_set_test,
  376.   &emmp_set_value,
  377.   MIB_NODE_SC,
  378.   0
  379. };
  380.  
  381. /* emmp  .1.3.6.1.4.1.26381.1    */
  382. const s32_t emmp_ids[3] = { 1, 2, 3 };
  383. struct mib_node* const emmp_nodes[3] = {
  384.   (struct mib_node* const)&emmp_scalar,
  385.   (struct mib_node* const)&emmp_scalar,
  386.   (struct mib_node* const)&modulesTable
  387. };
  388.  
  389. const struct mib_array_node emmp = {
  390.   &noleafs_get_object_def,
  391.   &noleafs_get_value,
  392.   &noleafs_set_test,
  393.   &noleafs_set_value,
  394.   MIB_NODE_AR,
  395.   3,
  396.   emmp_ids,
  397.   emmp_nodes
  398. };
  399.  
  400. /* lwip  .1.3.6.1.4.1.26381    */
  401. const s32_t lwip_ids[1] = { 1 };
  402. struct mib_node* const lwip_nodes[1] = {
  403.   (struct mib_node* const)&emmp
  404. };
  405.  
  406. const struct mib_array_node lwip = {
  407.   &noleafs_get_object_def,
  408.   &noleafs_get_value,
  409.   &noleafs_set_test,
  410.   &noleafs_set_value,
  411.   MIB_NODE_AR,
  412.   1,
  413.   lwip_ids,
  414.   lwip_nodes
  415. };
  416.  
  417. /* enterprises  .1.3.6.1.4.1    */
  418. const s32_t enterprises_ids[1] = { 26381 };
  419. struct mib_node* const enterprises_nodes[1] = {
  420.   (struct mib_node* const)&lwip
  421. };
  422.  
  423. const struct mib_array_node enterprises = {
  424.   &noleafs_get_object_def,
  425.   &noleafs_get_value,
  426.   &noleafs_set_test,
  427.   &noleafs_set_value,
  428.   MIB_NODE_AR,
  429.   1,
  430.   enterprises_ids,
  431.   enterprises_nodes
  432. };
  433.  
  434. /* private  .1.3.6.1.4    */
  435. const s32_t private_ids[1] = { 1 };
  436. struct mib_node* const private_nodes[1] = {
  437.   (struct mib_node* const)&enterprises
  438. };
  439.  
  440. const struct mib_array_node private = {
  441.   &noleafs_get_object_def,
  442.   &noleafs_get_value,
  443.   &noleafs_set_test,
  444.   &noleafs_set_value,
  445.   MIB_NODE_AR,
  446.   1,
  447.   private_ids,
  448.   private_nodes
  449. };
  450.  
  451.  
  452. void
  453. lwip_privmib_init(void)
  454. {
  455.     struct mib_list_rootnode *module_rn;
  456.     struct mib_list_node *module_node;
  457.  
  458.     module_node = NULL;
  459.     snmp_mib_node_insert(&moduleEntry_root, moduleEntry_root.count + 1,
  460.                          &module_node);
  461.  
  462.     if(module_node->nptr == NULL) {
  463.         module_rn = snmp_mib_lrn_alloc();
  464.         module_node->nptr = (struct mib_node*)module_rn;
  465.  
  466.         if (module_rn != NULL) {
  467.             module_rn->get_object_def = moduleEntry_get_object_def;
  468.             module_rn->get_value = moduleEntry_get_value;
  469.             module_rn->set_test = moduleEntry_set_test;
  470.             module_rn->set_value = moduleEntry_set_value;
  471.         } else {
  472.             LED(1); // Error allocation
  473.         }
  474.  
  475.     } else {
  476.         module_rn = (struct mib_list_rootnode*)module_node->nptr;
  477.     }
  478.  
  479.     modulesTable.maxlength = 1;
  480. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement