ipCidrRouteTable.c
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:112k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. /*
  2.  * Note: this file originally auto-generated by mib2c using
  3.  *       version : 1.32 $ of : mfd-top.m2c,v $ 
  4.  *
  5.  * $Id: ipCidrRouteTable.c,v 1.7 2004/10/16 00:15:47 rstory Exp $
  6.  */
  7. /** mainpage MFD helper for ipCidrRouteTable
  8.  *
  9.  * section intro Introduction
  10.  * Introductory text.
  11.  *
  12.  */
  13. /*
  14.  * standard Net-SNMP includes 
  15.  */
  16. #include <net-snmp/net-snmp-config.h>
  17. #include <net-snmp/net-snmp-includes.h>
  18. #include <net-snmp/agent/net-snmp-agent-includes.h>
  19. /*
  20.  * include our parent header 
  21.  */
  22. #include "ipCidrRouteTable.h"
  23. #include <net-snmp/agent/mib_modules.h>
  24. #include "ipCidrRouteTable_interface.h"
  25. oid             ipCidrRouteTable_oid[] = { IPCIDRROUTETABLE_OID };
  26. int             ipCidrRouteTable_oid_size =
  27. OID_LENGTH(ipCidrRouteTable_oid);
  28. void            initialize_table_ipCidrRouteTable(void);
  29. /**
  30.  * Initializes the ipCidrRouteTable module
  31.  */
  32. void
  33. init_ipCidrRouteTable(void)
  34. {
  35.     DEBUGMSGTL(("verbose:ipCidrRouteTable:init_ipCidrRouteTable",
  36.                 "calledn"));
  37.     /*
  38.      * TODO:300:o: Perform ipCidrRouteTable one-time module initialization.
  39.      */
  40.     /*
  41.      * here we initialize all the tables we're planning on supporting
  42.      */
  43.     if (should_init("ipCidrRouteTable"))
  44.         initialize_table_ipCidrRouteTable();
  45. }                               /* init_ipCidrRouteTable */
  46. /**
  47.  * Initialize the table ipCidrRouteTable 
  48.  *    (Define its contents and how it's structured)
  49.  */
  50. void
  51. initialize_table_ipCidrRouteTable(void)
  52. {
  53.     ipCidrRouteTable_registration_ptr user_context;
  54.     u_long          flags;
  55.     DEBUGMSGTL(("verbose:ipCidrRouteTable:initialize_table_ipCidrRouteTable", "calledn"));
  56.     /*
  57.      * TODO:301:o: Perform ipCidrRouteTable one-time table initialization.
  58.      */
  59.     /*
  60.      * TODO:302:o: |->Initialize ipCidrRouteTable user context
  61.      * if you'd like to pass in a pointer to some data for this
  62.      * table, allocate or set it up here.
  63.      */
  64.     /*
  65.      * a netsnmp_data_list is a simple way to store void pointers. A simple
  66.      * string token is used to add, find or remove pointers.
  67.      */
  68.     user_context =
  69.         netsnmp_create_data_list("ipCidrRouteTable", NULL, NULL);
  70.     /*
  71.      * No support for any flags yet, but in the future you would
  72.      * set any flags here.
  73.      */
  74.     flags = 0;
  75.     /*
  76.      * call interface initialization code
  77.      */
  78.     _ipCidrRouteTable_initialize_interface(user_context, flags);
  79. }                               /* initialize_table_ipCidrRouteTable */
  80. /**
  81.  * pre-request callback
  82.  *
  83.  *
  84.  * @retval MFD_SUCCESS              : success.
  85.  * @retval MFD_ERROR                : other error
  86.  */
  87. int
  88. ipCidrRouteTable_pre_request(ipCidrRouteTable_registration_ptr
  89.                              user_context)
  90. {
  91.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_pre_request",
  92.                 "calledn"));
  93.     /*
  94.      * TODO:510:o: Perform ipCidrRouteTable pre-request actions.
  95.      */
  96.     return MFD_SUCCESS;
  97. }                               /* ipCidrRouteTable_pre_request */
  98. /**
  99.  * post-request callback
  100.  *
  101.  *
  102.  * @retval MFD_SUCCESS : success.
  103.  * @retval MFD_ERROR   : other error (ignored)
  104.  */
  105. int
  106. ipCidrRouteTable_post_request(ipCidrRouteTable_registration_ptr
  107.                               user_context)
  108. {
  109.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_post_request",
  110.                 "calledn"));
  111.     /*
  112.      * TODO:511:o: Perform ipCidrRouteTable pos-request actions.
  113.      */
  114.     return MFD_SUCCESS;
  115. }                               /* ipCidrRouteTable_post_request */
  116. /**********************************************************************
  117.  **********************************************************************
  118.  ***
  119.  *** Table ipCidrRouteTable
  120.  ***
  121.  **********************************************************************
  122.  **********************************************************************/
  123. /*
  124.  * ipCidrRouteTable is subid 4 of ipForward.
  125.  * Its status is Deprecated.
  126.  * OID: .1.3.6.1.2.1.4.24.4, length: 9
  127.  */
  128. /*
  129.  * ---------------------------------------------------------------------
  130.  * * TODO:200:r: Implement ipCidrRouteTable data context functions.
  131.  */
  132. /*
  133.  * ipCidrRouteTable_allocate_data
  134.  *
  135.  * Purpose: create new ipCidrRouteTable_data.
  136.  */
  137. ipCidrRouteTable_data *
  138. ipCidrRouteTable_allocate_data(void)
  139. {
  140.     /*
  141.      * TODO:201:r: |-> allocate memory for the ipCidrRouteTable data context.
  142.      */
  143.     ipCidrRouteTable_data *rtn = netsnmp_access_route_entry_create();
  144.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_allocate_data",
  145.                 "calledn"));
  146.     if (NULL == rtn) {
  147.         snmp_log(LOG_ERR, "unable to malloc memory for new "
  148.                  "ipCidrRouteTable_data.n");
  149.     }
  150.     return rtn;
  151. }                               /* ipCidrRouteTable_allocate_data */
  152. /*
  153.  * ipCidrRouteTable_release_data
  154.  *
  155.  * Purpose: release ipCidrRouteTable data.
  156.  */
  157. void
  158. ipCidrRouteTable_release_data(ipCidrRouteTable_data * data)
  159. {
  160.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_release_data",
  161.                 "calledn"));
  162.     /*
  163.      * TODO:202:r: |-> release memory for the ipCidrRouteTable data context.
  164.      */
  165.     netsnmp_access_route_entry_free(data);
  166. }                               /* ipCidrRouteTable_release_data */
  167. /**
  168.  * set mib index(es)
  169.  *
  170.  * @param tbl_idx mib index structure
  171.  *
  172.  * @retval MFD_SUCCESS     : success.
  173.  * @retval MFD_ERROR       : other error.
  174.  *
  175.  * @remark
  176.  *  This convenience function is useful for setting all the MIB index
  177.  *  components with a single function call. It is assume that the C values
  178.  *  have already been mapped from their native/rawformat to the MIB format.
  179.  */
  180. int
  181. ipCidrRouteTable_indexes_set_tbl_idx(ipCidrRouteTable_mib_index * tbl_idx,
  182.                                      u_long ipCidrRouteDest_val,
  183.                                      u_long ipCidrRouteMask_val,
  184.                                      long ipCidrRouteTos_val,
  185.                                      u_long ipCidrRouteNextHop_val)
  186. {
  187.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_indexes_set_tbl_idx", "calledn"));
  188.     /*
  189.      * ipCidrRouteDest(1)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h 
  190.      */
  191.     tbl_idx->ipCidrRouteDest = ipCidrRouteDest_val;
  192.     /*
  193.      * ipCidrRouteMask(2)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h 
  194.      */
  195.     tbl_idx->ipCidrRouteMask = ipCidrRouteMask_val;
  196.     /*
  197.      * ipCidrRouteTos(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h 
  198.      */
  199.     tbl_idx->ipCidrRouteTos = ipCidrRouteTos_val;
  200.     /*
  201.      * ipCidrRouteNextHop(4)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h 
  202.      */
  203.     tbl_idx->ipCidrRouteNextHop = ipCidrRouteNextHop_val;
  204.     return MFD_SUCCESS;
  205. }                               /* ipCidrRouteTable_indexes_set_tbl_idx */
  206. /**
  207.  * @internal
  208.  * set row context indexes
  209.  *
  210.  * @param reqreq_ctx the row context that needs updated indexes
  211.  *
  212.  * @retval MFD_SUCCESS     : success.
  213.  * @retval MFD_ERROR       : other error.
  214.  *
  215.  * @remark
  216.  *  This function sets the mib indexs, then updates the oid indexs
  217.  *  from the mib index.
  218.  */
  219. int
  220. ipCidrRouteTable_indexes_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  221.                              u_long ipCidrRouteDest_val,
  222.                              u_long ipCidrRouteMask_val,
  223.                              long ipCidrRouteTos_val,
  224.                              u_long ipCidrRouteNextHop_val)
  225. {
  226.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_indexes_set",
  227.                 "calledn"));
  228.     if (MFD_SUCCESS !=
  229.         ipCidrRouteTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
  230.                                              ipCidrRouteDest_val,
  231.                                              ipCidrRouteMask_val,
  232.                                              ipCidrRouteTos_val,
  233.                                              ipCidrRouteNextHop_val))
  234.         return MFD_ERROR;
  235.     /*
  236.      * convert mib index to oid index
  237.      */
  238.     rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
  239.     if (0 != ipCidrRouteTable_index_to_oid(&rowreq_ctx->oid_idx,
  240.                                            &rowreq_ctx->tbl_idx)) {
  241.         return MFD_ERROR;
  242.     }
  243.     return MFD_SUCCESS;
  244. }                               /* ipCidrRouteTable_indexes_set */
  245. /*---------------------------------------------------------------------
  246.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteIfIndex
  247.  * ipCidrRouteIfIndex is subid 5 of ipCidrRouteEntry.
  248.  * Its status is Deprecated, and its access level is Create.
  249.  * OID: .1.3.6.1.2.1.4.24.4.1.5
  250.  * Description:
  251. The ifIndex value which identifies  the local interface 
  252.                 through which the next hop of this route should be  
  253.                 reached.
  254.  *
  255.  * Attributes:
  256.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  257.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  258.  *   settable   1
  259.  *   defval: 0
  260.  *
  261.  *
  262.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  263.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  264.  */
  265. /**
  266.  * Extract the current value of the ipCidrRouteIfIndex data.
  267.  *
  268.  * Set a value using the data context for the row.
  269.  *
  270.  * @param rowreq_ctx
  271.  *        Pointer to the row request context.
  272.  * @param ipCidrRouteIfIndex_val_ptr
  273.  *        Pointer to storage for a long variable
  274.  *
  275.  * @retval MFD_SUCCESS         : success
  276.  * @retval MFD_SKIP            : skip this node (no value for now)
  277.  * @retval MFD_ERROR           : Any other error
  278.  */
  279. int
  280. ipCidrRouteIfIndex_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  281.                        long *ipCidrRouteIfIndex_val_ptr)
  282. {
  283.    /** we should have a non-NULL pointer */
  284.     netsnmp_assert(NULL != ipCidrRouteIfIndex_val_ptr);
  285.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_get",
  286.                 "calledn"));
  287.     netsnmp_assert(NULL != rowreq_ctx);
  288.     /*
  289.      * TODO:231:o: |-> Extract the current value of the ipCidrRouteIfIndex data.
  290.      * set (* ipCidrRouteIfIndex_val_ptr ) from rowreq_ctx->data
  291.      */
  292.     (*ipCidrRouteIfIndex_val_ptr) = rowreq_ctx->data->if_index;
  293.     return MFD_SUCCESS;
  294. }                               /* ipCidrRouteIfIndex_get */
  295. /*---------------------------------------------------------------------
  296.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteType
  297.  * ipCidrRouteType is subid 6 of ipCidrRouteEntry.
  298.  * Its status is Deprecated, and its access level is Create.
  299.  * OID: .1.3.6.1.2.1.4.24.4.1.6
  300.  * Description:
  301. The type of route.  Note that local(3) refers to a  
  302.                 route for which the next hop is the final destination;   
  303.                 remote(4) refers to a route for which the next hop is  
  304.                 not the final destination. 
  305.                 Routes which do not result in traffic forwarding or 
  306.                 rejection should not be displayed even if the  
  307.                 implementation keeps them stored internally. 
  308.                 reject (2) refers to a route which, if matched,  
  309.                 discards the message as unreachable. This is used in  
  310.                 some protocols as a means of correctly aggregating  
  311.                 routes.
  312.  *
  313.  * Attributes:
  314.  *   accessible 1     isscalar 0     enums  1      hasdefval 0
  315.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  316.  *   settable   1
  317.  *
  318.  * Enum range: 3/8. Values:  other(1), reject(2), local(3), remote(4)
  319.  *
  320.  * Its syntax is INTEGER (based on perltype INTEGER)
  321.  * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
  322.  */
  323. /**
  324.  * Extract the current value of the ipCidrRouteType data.
  325.  *
  326.  * Set a value using the data context for the row.
  327.  *
  328.  * @param rowreq_ctx
  329.  *        Pointer to the row request context.
  330.  * @param ipCidrRouteType_val_ptr
  331.  *        Pointer to storage for a long variable
  332.  *
  333.  * @retval MFD_SUCCESS         : success
  334.  * @retval MFD_SKIP            : skip this node (no value for now)
  335.  * @retval MFD_ERROR           : Any other error
  336.  */
  337. int
  338. ipCidrRouteType_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  339.                     u_long * ipCidrRouteType_val_ptr)
  340. {
  341.    /** we should have a non-NULL pointer */
  342.     netsnmp_assert(NULL != ipCidrRouteType_val_ptr);
  343.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_get",
  344.                 "calledn"));
  345.     netsnmp_assert(NULL != rowreq_ctx);
  346.     /*
  347.      * TODO:231:o: |-> Extract the current value of the ipCidrRouteType data.
  348.      * set (* ipCidrRouteType_val_ptr ) from rowreq_ctx->data
  349.      */
  350.     (*ipCidrRouteType_val_ptr) = rowreq_ctx->data->rt_type;
  351.     return MFD_SUCCESS;
  352. }                               /* ipCidrRouteType_get */
  353. /*---------------------------------------------------------------------
  354.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteProto
  355.  * ipCidrRouteProto is subid 7 of ipCidrRouteEntry.
  356.  * Its status is Deprecated, and its access level is ReadOnly.
  357.  * OID: .1.3.6.1.2.1.4.24.4.1.7
  358.  * Description:
  359. The routing mechanism via which this route was learned. 
  360.                 Inclusion of values for gateway routing protocols is  
  361.                 not intended to imply that hosts should support those 
  362.                 protocols.
  363.  *
  364.  * Attributes:
  365.  *   accessible 1     isscalar 0     enums  1      hasdefval 0
  366.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  367.  *   settable   0
  368.  *
  369.  * Enum range: 11/16. Values:  other(1), local(2), netmgmt(3), icmp(4), egp(5), ggp(6), hello(7), rip(8), isIs(9), esIs(10), ciscoIgrp(11), bbnSpfIgp(12), ospf(13), bgp(14), idpr(15), ciscoEigrp(16)
  370.  *
  371.  * Its syntax is INTEGER (based on perltype INTEGER)
  372.  * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
  373.  */
  374. /**
  375.  * Extract the current value of the ipCidrRouteProto data.
  376.  *
  377.  * Set a value using the data context for the row.
  378.  *
  379.  * @param rowreq_ctx
  380.  *        Pointer to the row request context.
  381.  * @param ipCidrRouteProto_val_ptr
  382.  *        Pointer to storage for a long variable
  383.  *
  384.  * @retval MFD_SUCCESS         : success
  385.  * @retval MFD_SKIP            : skip this node (no value for now)
  386.  * @retval MFD_ERROR           : Any other error
  387.  */
  388. int
  389. ipCidrRouteProto_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  390.                      u_long * ipCidrRouteProto_val_ptr)
  391. {
  392.    /** we should have a non-NULL pointer */
  393.     netsnmp_assert(NULL != ipCidrRouteProto_val_ptr);
  394.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteProto_get",
  395.                 "calledn"));
  396.     netsnmp_assert(NULL != rowreq_ctx);
  397.     /*
  398.      * TODO:231:o: |-> Extract the current value of the ipCidrRouteProto data.
  399.      * set (* ipCidrRouteProto_val_ptr ) from rowreq_ctx->data
  400.      */
  401.     (*ipCidrRouteProto_val_ptr) = rowreq_ctx->data->rt_proto;
  402.     return MFD_SUCCESS;
  403. }                               /* ipCidrRouteProto_get */
  404. /*---------------------------------------------------------------------
  405.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteAge
  406.  * ipCidrRouteAge is subid 8 of ipCidrRouteEntry.
  407.  * Its status is Deprecated, and its access level is ReadOnly.
  408.  * OID: .1.3.6.1.2.1.4.24.4.1.8
  409.  * Description:
  410. The number of seconds since this route was last updated  
  411.                 or otherwise determined to be correct.  Note that no  
  412.                 semantics of `too old' can be implied except through  
  413.                 knowledge of the routing protocol by which the route  
  414.                 was learned.
  415.  *
  416.  * Attributes:
  417.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  418.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  419.  *   settable   0
  420.  *   defval: 0
  421.  *
  422.  *
  423.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  424.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  425.  */
  426. /**
  427.  * Extract the current value of the ipCidrRouteAge data.
  428.  *
  429.  * Set a value using the data context for the row.
  430.  *
  431.  * @param rowreq_ctx
  432.  *        Pointer to the row request context.
  433.  * @param ipCidrRouteAge_val_ptr
  434.  *        Pointer to storage for a long variable
  435.  *
  436.  * @retval MFD_SUCCESS         : success
  437.  * @retval MFD_SKIP            : skip this node (no value for now)
  438.  * @retval MFD_ERROR           : Any other error
  439.  */
  440. int
  441. ipCidrRouteAge_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  442.                    long *ipCidrRouteAge_val_ptr)
  443. {
  444.    /** we should have a non-NULL pointer */
  445.     netsnmp_assert(NULL != ipCidrRouteAge_val_ptr);
  446.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteAge_get",
  447.                 "calledn"));
  448.     netsnmp_assert(NULL != rowreq_ctx);
  449.     /*
  450.      * TODO:231:o: |-> Extract the current value of the ipCidrRouteAge data.
  451.      * set (* ipCidrRouteAge_val_ptr ) from rowreq_ctx->data
  452.      */
  453.     return MFD_SKIP;            /* TODO:235:M: |-> Remove SKIP once you've set ipCidrRouteAge data */
  454.     return MFD_SUCCESS;
  455. }                               /* ipCidrRouteAge_get */
  456. /*---------------------------------------------------------------------
  457.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteInfo
  458.  * ipCidrRouteInfo is subid 9 of ipCidrRouteEntry.
  459.  * Its status is Deprecated, and its access level is Create.
  460.  * OID: .1.3.6.1.2.1.4.24.4.1.9
  461.  * Description:
  462. A reference to MIB definitions specific to the  
  463.                 particular routing protocol which is responsible for  
  464.                 this route, as determined by the value specified in the  
  465.                 route's ipCidrRouteProto value.  If this information is  
  466.                 not present, its value should be set to the OBJECT  
  467.                 IDENTIFIER { 0 0 }, which is a syntactically valid  
  468.                 object identifier, and any implementation conforming to  
  469.                 ASN.1 and the Basic Encoding Rules must be able to  
  470.                 generate and recognize this value.
  471.  *
  472.  * Attributes:
  473.  *   accessible 1     isscalar 0     enums  0      hasdefval 0
  474.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  475.  *   settable   1
  476.  *
  477.  *
  478.  * Its syntax is OBJECTID (based on perltype OBJECTID)
  479.  * The net-snmp type is ASN_OBJECT_ID. The C type decl is oid (oid)
  480.  * This data type requires a length.  (Max )
  481.  */
  482. /**
  483.  * Extract the current value of the ipCidrRouteInfo data.
  484.  *
  485.  * Set a value using the data context for the row.
  486.  *
  487.  * @param rowreq_ctx
  488.  *        Pointer to the row request context.
  489.  * @param ipCidrRouteInfo_val_ptr_ptr
  490.  *        Pointer to storage for a oid variable
  491.  * @param ipCidrRouteInfo_val_ptr_len_ptr
  492.  *        Pointer to a size_t. On entry, it will contain the size (in bytes)
  493.  *        pointed to by ipCidrRouteInfo.
  494.  *        On exit, this value should contain the data size (in bytes).
  495.  *
  496.  * @retval MFD_SUCCESS         : success
  497.  * @retval MFD_SKIP            : skip this node (no value for now)
  498.  * @retval MFD_ERROR           : Any other error
  499. *
  500.  * @note If you need more than (*ipCidrRouteInfo_val_ptr_len_ptr) bytes of memory,
  501.  *       allocate it using malloc() and update ipCidrRouteInfo_val_ptr_ptr.
  502.  *       <b>DO NOT</b> free the previous pointer.
  503.  *       The MFD helper will release the memory you allocate.
  504.  *
  505.  * @remark If you call this function yourself, you are responsible
  506.  *         for checking if the pointer changed, and freeing any
  507.  *         previously allocated memory. (Not necessary if you pass
  508.  *         in a pointer to static memory, obviously.)
  509.  */
  510. int
  511. ipCidrRouteInfo_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  512.                     oid ** ipCidrRouteInfo_val_ptr_ptr,
  513.                     size_t *ipCidrRouteInfo_val_ptr_len_ptr)
  514. {
  515.    /** we should have a non-NULL pointer and enough storage */
  516.     netsnmp_assert((NULL != ipCidrRouteInfo_val_ptr_ptr)
  517.                    && (NULL != *ipCidrRouteInfo_val_ptr_ptr));
  518.     netsnmp_assert(NULL != ipCidrRouteInfo_val_ptr_len_ptr);
  519.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_get",
  520.                 "calledn"));
  521.     netsnmp_assert(NULL != rowreq_ctx);
  522.     /*
  523.      * TODO:231:o: |-> Extract the current value of the ipCidrRouteInfo data.
  524.      * set (* ipCidrRouteInfo_val_ptr_ptr ) and (* ipCidrRouteInfo_val_ptr_len_ptr ) from rowreq_ctx->data
  525.      */
  526.     if ((*ipCidrRouteInfo_val_ptr_len_ptr) < nullOidLen) {
  527.         (*ipCidrRouteInfo_val_ptr_ptr) = malloc(nullOidLen);
  528.         if (NULL == (*ipCidrRouteInfo_val_ptr_ptr))
  529.             return MFD_ERROR;
  530.     }
  531.     (*ipCidrRouteInfo_val_ptr_len_ptr) = nullOidLen;
  532.     memcpy((*ipCidrRouteInfo_val_ptr_ptr), nullOid, nullOidLen);
  533.     return MFD_SUCCESS;
  534. }                               /* ipCidrRouteInfo_get */
  535. /*---------------------------------------------------------------------
  536.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteNextHopAS
  537.  * ipCidrRouteNextHopAS is subid 10 of ipCidrRouteEntry.
  538.  * Its status is Deprecated, and its access level is Create.
  539.  * OID: .1.3.6.1.2.1.4.24.4.1.10
  540.  * Description:
  541. The Autonomous System Number of the Next Hop.  The  
  542.                 semantics of this object are determined by the routing- 
  543.                 protocol specified in the route's ipCidrRouteProto  
  544.                 value. When this object is unknown or not relevant its  
  545.                 value should be set to zero.
  546.  *
  547.  * Attributes:
  548.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  549.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  550.  *   settable   1
  551.  *   defval: 0
  552.  *
  553.  *
  554.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  555.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  556.  */
  557. /**
  558.  * Extract the current value of the ipCidrRouteNextHopAS data.
  559.  *
  560.  * Set a value using the data context for the row.
  561.  *
  562.  * @param rowreq_ctx
  563.  *        Pointer to the row request context.
  564.  * @param ipCidrRouteNextHopAS_val_ptr
  565.  *        Pointer to storage for a long variable
  566.  *
  567.  * @retval MFD_SUCCESS         : success
  568.  * @retval MFD_SKIP            : skip this node (no value for now)
  569.  * @retval MFD_ERROR           : Any other error
  570.  */
  571. int
  572. ipCidrRouteNextHopAS_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  573.                          long *ipCidrRouteNextHopAS_val_ptr)
  574. {
  575.    /** we should have a non-NULL pointer */
  576.     netsnmp_assert(NULL != ipCidrRouteNextHopAS_val_ptr);
  577.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_get",
  578.                 "calledn"));
  579.     netsnmp_assert(NULL != rowreq_ctx);
  580.     /*
  581.      * TODO:231:o: |-> Extract the current value of the ipCidrRouteNextHopAS data.
  582.      * set (* ipCidrRouteNextHopAS_val_ptr ) from rowreq_ctx->data
  583.      */
  584.     (*ipCidrRouteNextHopAS_val_ptr) = rowreq_ctx->data->rt_nexthop_as;
  585.     return MFD_SUCCESS;
  586. }                               /* ipCidrRouteNextHopAS_get */
  587. /*---------------------------------------------------------------------
  588.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric1
  589.  * ipCidrRouteMetric1 is subid 11 of ipCidrRouteEntry.
  590.  * Its status is Deprecated, and its access level is Create.
  591.  * OID: .1.3.6.1.2.1.4.24.4.1.11
  592.  * Description:
  593. The primary routing metric for this route.  The  
  594.                 semantics of this metric are determined by the routing- 
  595.                 protocol specified in the route's ipCidrRouteProto  
  596.                 value.  If this metric is not used, its value should be  
  597.                 set to -1.
  598.  *
  599.  * Attributes:
  600.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  601.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  602.  *   settable   1
  603.  *   defval: -1
  604.  *
  605.  *
  606.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  607.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  608.  */
  609. /**
  610.  * Extract the current value of the ipCidrRouteMetric1 data.
  611.  *
  612.  * Set a value using the data context for the row.
  613.  *
  614.  * @param rowreq_ctx
  615.  *        Pointer to the row request context.
  616.  * @param ipCidrRouteMetric1_val_ptr
  617.  *        Pointer to storage for a long variable
  618.  *
  619.  * @retval MFD_SUCCESS         : success
  620.  * @retval MFD_SKIP            : skip this node (no value for now)
  621.  * @retval MFD_ERROR           : Any other error
  622.  */
  623. int
  624. ipCidrRouteMetric1_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  625.                        long *ipCidrRouteMetric1_val_ptr)
  626. {
  627.    /** we should have a non-NULL pointer */
  628.     netsnmp_assert(NULL != ipCidrRouteMetric1_val_ptr);
  629.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_get",
  630.                 "calledn"));
  631.     netsnmp_assert(NULL != rowreq_ctx);
  632.     /*
  633.      * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric1 data.
  634.      * set (* ipCidrRouteMetric1_val_ptr ) from rowreq_ctx->data
  635.      */
  636.     (*ipCidrRouteMetric1_val_ptr) = rowreq_ctx->data->rt_metric1;
  637.     return MFD_SUCCESS;
  638. }                               /* ipCidrRouteMetric1_get */
  639. /*---------------------------------------------------------------------
  640.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric2
  641.  * ipCidrRouteMetric2 is subid 12 of ipCidrRouteEntry.
  642.  * Its status is Deprecated, and its access level is Create.
  643.  * OID: .1.3.6.1.2.1.4.24.4.1.12
  644.  * Description:
  645. An alternate routing metric for this route.  The  
  646.                 semantics of this metric are determined by the routing- 
  647.                 protocol specified in the route's ipCidrRouteProto  
  648.                 value.  If this metric is not used, its value should be  
  649.                 set to -1.
  650.  *
  651.  * Attributes:
  652.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  653.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  654.  *   settable   1
  655.  *   defval: -1
  656.  *
  657.  *
  658.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  659.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  660.  */
  661. /**
  662.  * Extract the current value of the ipCidrRouteMetric2 data.
  663.  *
  664.  * Set a value using the data context for the row.
  665.  *
  666.  * @param rowreq_ctx
  667.  *        Pointer to the row request context.
  668.  * @param ipCidrRouteMetric2_val_ptr
  669.  *        Pointer to storage for a long variable
  670.  *
  671.  * @retval MFD_SUCCESS         : success
  672.  * @retval MFD_SKIP            : skip this node (no value for now)
  673.  * @retval MFD_ERROR           : Any other error
  674.  */
  675. int
  676. ipCidrRouteMetric2_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  677.                        long *ipCidrRouteMetric2_val_ptr)
  678. {
  679.    /** we should have a non-NULL pointer */
  680.     netsnmp_assert(NULL != ipCidrRouteMetric2_val_ptr);
  681.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_get",
  682.                 "calledn"));
  683.     netsnmp_assert(NULL != rowreq_ctx);
  684.     /*
  685.      * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric2 data.
  686.      * set (* ipCidrRouteMetric2_val_ptr ) from rowreq_ctx->data
  687.      */
  688.     (*ipCidrRouteMetric2_val_ptr) = rowreq_ctx->data->rt_metric2;
  689.     return MFD_SUCCESS;
  690. }                               /* ipCidrRouteMetric2_get */
  691. /*---------------------------------------------------------------------
  692.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric3
  693.  * ipCidrRouteMetric3 is subid 13 of ipCidrRouteEntry.
  694.  * Its status is Deprecated, and its access level is Create.
  695.  * OID: .1.3.6.1.2.1.4.24.4.1.13
  696.  * Description:
  697. An alternate routing metric for this route.  The  
  698.                 semantics of this metric are determined by the routing- 
  699.                 protocol specified in the route's ipCidrRouteProto  
  700.                 value.  If this metric is not used, its value should be  
  701.                 set to -1.
  702.  *
  703.  * Attributes:
  704.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  705.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  706.  *   settable   1
  707.  *   defval: -1
  708.  *
  709.  *
  710.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  711.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  712.  */
  713. /**
  714.  * Extract the current value of the ipCidrRouteMetric3 data.
  715.  *
  716.  * Set a value using the data context for the row.
  717.  *
  718.  * @param rowreq_ctx
  719.  *        Pointer to the row request context.
  720.  * @param ipCidrRouteMetric3_val_ptr
  721.  *        Pointer to storage for a long variable
  722.  *
  723.  * @retval MFD_SUCCESS         : success
  724.  * @retval MFD_SKIP            : skip this node (no value for now)
  725.  * @retval MFD_ERROR           : Any other error
  726.  */
  727. int
  728. ipCidrRouteMetric3_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  729.                        long *ipCidrRouteMetric3_val_ptr)
  730. {
  731.    /** we should have a non-NULL pointer */
  732.     netsnmp_assert(NULL != ipCidrRouteMetric3_val_ptr);
  733.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_get",
  734.                 "calledn"));
  735.     netsnmp_assert(NULL != rowreq_ctx);
  736.     /*
  737.      * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric3 data.
  738.      * set (* ipCidrRouteMetric3_val_ptr ) from rowreq_ctx->data
  739.      */
  740.     (*ipCidrRouteMetric3_val_ptr) = rowreq_ctx->data->rt_metric3;
  741.     return MFD_SUCCESS;
  742. }                               /* ipCidrRouteMetric3_get */
  743. /*---------------------------------------------------------------------
  744.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric4
  745.  * ipCidrRouteMetric4 is subid 14 of ipCidrRouteEntry.
  746.  * Its status is Deprecated, and its access level is Create.
  747.  * OID: .1.3.6.1.2.1.4.24.4.1.14
  748.  * Description:
  749. An alternate routing metric for this route.  The  
  750.                 semantics of this metric are determined by the routing- 
  751.                 protocol specified in the route's ipCidrRouteProto  
  752.                 value.  If this metric is not used, its value should be  
  753.                 set to -1.
  754.  *
  755.  * Attributes:
  756.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  757.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  758.  *   settable   1
  759.  *   defval: -1
  760.  *
  761.  *
  762.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  763.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  764.  */
  765. /**
  766.  * Extract the current value of the ipCidrRouteMetric4 data.
  767.  *
  768.  * Set a value using the data context for the row.
  769.  *
  770.  * @param rowreq_ctx
  771.  *        Pointer to the row request context.
  772.  * @param ipCidrRouteMetric4_val_ptr
  773.  *        Pointer to storage for a long variable
  774.  *
  775.  * @retval MFD_SUCCESS         : success
  776.  * @retval MFD_SKIP            : skip this node (no value for now)
  777.  * @retval MFD_ERROR           : Any other error
  778.  */
  779. int
  780. ipCidrRouteMetric4_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  781.                        long *ipCidrRouteMetric4_val_ptr)
  782. {
  783.    /** we should have a non-NULL pointer */
  784.     netsnmp_assert(NULL != ipCidrRouteMetric4_val_ptr);
  785.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_get",
  786.                 "calledn"));
  787.     netsnmp_assert(NULL != rowreq_ctx);
  788.     /*
  789.      * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric4 data.
  790.      * set (* ipCidrRouteMetric4_val_ptr ) from rowreq_ctx->data
  791.      */
  792.     (*ipCidrRouteMetric4_val_ptr) = rowreq_ctx->data->rt_metric4;
  793.     return MFD_SUCCESS;
  794. }                               /* ipCidrRouteMetric4_get */
  795. /*---------------------------------------------------------------------
  796.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric5
  797.  * ipCidrRouteMetric5 is subid 15 of ipCidrRouteEntry.
  798.  * Its status is Deprecated, and its access level is Create.
  799.  * OID: .1.3.6.1.2.1.4.24.4.1.15
  800.  * Description:
  801. An alternate routing metric for this route.  The  
  802.                 semantics of this metric are determined by the routing- 
  803.                 protocol specified in the route's ipCidrRouteProto  
  804.                 value.  If this metric is not used, its value should be  
  805.                 set to -1.
  806.  *
  807.  * Attributes:
  808.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  809.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  810.  *   settable   1
  811.  *   defval: -1
  812.  *
  813.  *
  814.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  815.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  816.  */
  817. /**
  818.  * Extract the current value of the ipCidrRouteMetric5 data.
  819.  *
  820.  * Set a value using the data context for the row.
  821.  *
  822.  * @param rowreq_ctx
  823.  *        Pointer to the row request context.
  824.  * @param ipCidrRouteMetric5_val_ptr
  825.  *        Pointer to storage for a long variable
  826.  *
  827.  * @retval MFD_SUCCESS         : success
  828.  * @retval MFD_SKIP            : skip this node (no value for now)
  829.  * @retval MFD_ERROR           : Any other error
  830.  */
  831. int
  832. ipCidrRouteMetric5_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  833.                        long *ipCidrRouteMetric5_val_ptr)
  834. {
  835.    /** we should have a non-NULL pointer */
  836.     netsnmp_assert(NULL != ipCidrRouteMetric5_val_ptr);
  837.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_get",
  838.                 "calledn"));
  839.     netsnmp_assert(NULL != rowreq_ctx);
  840.     /*
  841.      * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric5 data.
  842.      * set (* ipCidrRouteMetric5_val_ptr ) from rowreq_ctx->data
  843.      */
  844.     (*ipCidrRouteMetric5_val_ptr) = rowreq_ctx->data->rt_metric5;
  845.     return MFD_SUCCESS;
  846. }                               /* ipCidrRouteMetric5_get */
  847. /*---------------------------------------------------------------------
  848.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteStatus
  849.  * ipCidrRouteStatus is subid 16 of ipCidrRouteEntry.
  850.  * Its status is Deprecated, and its access level is Create.
  851.  * OID: .1.3.6.1.2.1.4.24.4.1.16
  852.  * Description:
  853. The row status variable, used according to row  
  854.                 installation and removal conventions.
  855.  *
  856.  * Attributes:
  857.  *   accessible 1     isscalar 0     enums  1      hasdefval 0
  858.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  859.  *   settable   1
  860.  *
  861.  * Enum range: 3/8. Values:  active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
  862.  *
  863.  * Its syntax is RowStatus (based on perltype INTEGER)
  864.  * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
  865.  */
  866. /**
  867.  * Extract the current value of the ipCidrRouteStatus data.
  868.  *
  869.  * Set a value using the data context for the row.
  870.  *
  871.  * @param rowreq_ctx
  872.  *        Pointer to the row request context.
  873.  * @param ipCidrRouteStatus_val_ptr
  874.  *        Pointer to storage for a long variable
  875.  *
  876.  * @retval MFD_SUCCESS         : success
  877.  * @retval MFD_SKIP            : skip this node (no value for now)
  878.  * @retval MFD_ERROR           : Any other error
  879.  */
  880. int
  881. ipCidrRouteStatus_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  882.                       u_long * ipCidrRouteStatus_val_ptr)
  883. {
  884.    /** we should have a non-NULL pointer */
  885.     netsnmp_assert(NULL != ipCidrRouteStatus_val_ptr);
  886.     (*ipCidrRouteStatus_val_ptr) = rowreq_ctx->ipCidrRouteStatus;
  887.     return MFD_SUCCESS;
  888. }                               /* ipCidrRouteStatus_get */
  889. /** @} */
  890. /**********************************************************************
  891.  **********************************************************************
  892.  ***
  893.  *** Table ipCidrRouteTable
  894.  ***
  895.  **********************************************************************
  896.  **********************************************************************/
  897. /*
  898.  * ipCidrRouteTable is subid 4 of ipForward.
  899.  * Its status is Deprecated.
  900.  * OID: .1.3.6.1.2.1.4.24.4, length: 9
  901.  */
  902.     /*
  903.      * NOTE: if you update this chart, please update the versions in
  904.      *       local/mib2c-conf.d/parent-set.m2i
  905.      *       agent/mibgroup/helpers/baby_steps.c
  906.      * while you're at it.
  907.      */
  908.     /*
  909.      ***********************************************************************
  910.      * Baby Steps Flow Chart (2004.06.05)                                  *
  911.      *                                                                     *
  912.      * +--------------+    +================+    U = unconditional path    *
  913.      * |optional state|    ||required state||    S = path for success      *
  914.      * +--------------+    +================+    E = path for error        *
  915.      ***********************************************************************
  916.      *
  917.      *                        +--------------+
  918.      *                        |     pre      |
  919.      *                        |   request    |
  920.      *                        +--------------+
  921.      *                               | U
  922.      * +-------------+        +==============+
  923.      * |    row    |f|<-------||  object    ||
  924.      * |  create   |1|      E ||  lookup    ||
  925.      * +-------------+        +==============+
  926.      *     E |   | S                 | S
  927.      *       |   +------------------>|
  928.      *       |                +==============+
  929.      *       |              E ||   check    ||
  930.      *       |<---------------||   values   ||
  931.      *       |                +==============+
  932.      *       |                       | S
  933.      *       |                +==============+
  934.      *       |       +<-------||   undo     ||
  935.      *       |       |      E ||   setup    ||
  936.      *       |       |        +==============+
  937.      *       |       |               | S
  938.      *       |       |        +==============+
  939.      *       |       |        ||    set     ||-------------------------->+
  940.      *       |       |        ||   value    || E                         |
  941.      *       |       |        +==============+                           |
  942.      *       |       |               | S                                 |
  943.      *       |       |        +--------------+                           |
  944.      *       |       |        |    check     |-------------------------->|
  945.      *       |       |        |  consistency | E                         |
  946.      *       |       |        +--------------+                           |
  947.      *       |       |               | S                                 |
  948.      *       |       |        +==============+         +==============+  |
  949.      *       |       |        ||   commit   ||-------->||     undo   ||  |
  950.      *       |       |        ||            || E       ||    commit  ||  |
  951.      *       |       |        +==============+         +==============+  |
  952.      *       |       |               | S                     U |<--------+
  953.      *       |       |        +--------------+         +==============+
  954.      *       |       |        | irreversible |         ||    undo    ||
  955.      *       |       |        |    commit    |         ||     set    ||
  956.      *       |       |        +--------------+         +==============+
  957.      *       |       |               | U                     U |
  958.      *       |       +-------------->|<------------------------+
  959.      *       |                +==============+
  960.      *       |                ||   undo     ||
  961.      *       |                ||  cleanup   ||
  962.      *       |                +==============+
  963.      *       +---------------------->| U
  964.      *                               |
  965.      *                          (err && f1)------------------->+
  966.      *                               |                         |
  967.      *                        +--------------+         +--------------+
  968.      *                        |    post      |<--------|      row     |
  969.      *                        |   request    |       U |    release   |
  970.      *                        +--------------+         +--------------+
  971.      *
  972.      */
  973. /**
  974.  * verify specified index is valid.
  975.  *
  976.  * This check is independent of whether or not the values specified for
  977.  * the columns of the new row are valid. Column values and row consistency
  978.  * will be checked later. At this point, only the index values should be
  979.  * checked.
  980.  *
  981.  * All of the individual index validation functions have been called, so this
  982.  * is the place to make sure they are valid as a whole when combined. If
  983.  * you only have one index, 
  984.  * 
  985.  *
  986.  *
  987.  * @param ipCidrRouteTable_reg
  988.  *        Pointer to the user registration data
  989.  * @param ipCidrRouteTable_rowreq_ctx
  990.  *        Pointer to the users context.
  991.  * @retval MFD_SUCCESS            : success
  992.  * @retval MFD_CANNOT_CREATE_NOW  : index not valid right now
  993.  * @retval MFD_CANNOT_CREATE_EVER : index never valid
  994.  */
  995. int
  996. ipCidrRouteTable_validate_index(ipCidrRouteTable_registration_ptr
  997.                                 ipCidrRouteTable_reg,
  998.                                 ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  999. {
  1000.     int             rc = MFD_SUCCESS;
  1001.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_validate_index",
  1002.                 "calledn"));
  1003.     /** we should have a non-NULL pointer */
  1004.     netsnmp_assert(NULL != rowreq_ctx);
  1005.     /*
  1006.      * TODO:430:M: |-> Validate potential ipCidrRouteTable index.
  1007.      */
  1008.     if (1) {
  1009.         snmp_log(LOG_WARNING, "invalid index for a new row in the "
  1010.                  "ipCidrRouteTable table.n");
  1011.         /*
  1012.          * determine failure type.
  1013.          *
  1014.          * If the index could not ever be created, return MFD_NOT_EVER
  1015.          * If the index can not be created under the present circumstances
  1016.          * (even though it could be created under other circumstances),
  1017.          * return MFD_NOT_NOW.
  1018.          */
  1019.         if (0) {
  1020.             return MFD_CANNOT_CREATE_EVER;
  1021.         } else {
  1022.             return MFD_CANNOT_CREATE_NOW;
  1023.         }
  1024.     }
  1025.     return rc;
  1026. }                               /* ipCidrRouteTable_validate_index */
  1027. /**
  1028.  * Setup up context with information needed to undo a set request.
  1029.  *
  1030.  * This function will be called before the individual node undo setup
  1031.  * functions are called. If you need to do any undo setup that is not
  1032.  * related to a specific column, you can do it here.
  1033.  *
  1034.  * Note that an individual node's undo_setup function will only be called
  1035.  * if that node is being set to a new value.
  1036.  *
  1037.  * If there is any setup specific to a particular column (e.g. allocating
  1038.  * memory for a string), you should do that setup in the node's undo_setup
  1039.  * function, so it won't be done unless it is necessary.
  1040.  *
  1041.  * @param rowreq_ctx
  1042.  *        Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
  1043.  *
  1044.  * @retval MFD_SUCCESS : success
  1045.  * @retval MFD_ERROR   : error. set will fail.
  1046.  */
  1047. int
  1048. ipCidrRouteTable_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1049. {
  1050.     int             rc = MFD_SUCCESS;
  1051.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_undo_setup",
  1052.                 "calledn"));
  1053.     /** we should have a non-NULL pointer */
  1054.     netsnmp_assert(NULL != rowreq_ctx);
  1055.     /*
  1056.      * TODO:451:M: |-> Setup ipCidrRouteTable undo.
  1057.      * set up ipCidrRouteTable undo information, in preparation for a set.
  1058.      */
  1059.     return rc;
  1060. }                               /* ipCidrRouteTable_undo_setup */
  1061. /**
  1062.  * Cleanup up context undo information.
  1063.  *
  1064.  * This function will be called after set/commit processing. If you
  1065.  * allocated any resources in undo_setup, this is the place to release
  1066.  * those resources.
  1067.  *
  1068.  * This function is called regardless of the success or failure of the set
  1069.  * request. If you need to perform different steps for cleanup depending
  1070.  * on success or failure, you can add a flag to the rowreq_ctx.
  1071.  *
  1072.  * @param rowreq_ctx
  1073.  *        Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
  1074.  *
  1075.  * @retval MFD_SUCCESS : success
  1076.  * @retval MFD_ERROR   : error
  1077.  */
  1078. int
  1079. ipCidrRouteTable_undo_cleanup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1080. {
  1081.     int             rc = MFD_SUCCESS;
  1082.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_undo_cleanup",
  1083.                 "calledn"));
  1084.     /** we should have a non-NULL pointer */
  1085.     netsnmp_assert(NULL != rowreq_ctx);
  1086.     /*
  1087.      * TODO:452:M: |-> Cleanup ipCidrRouteTable undo.
  1088.      */
  1089.     return rc;
  1090. }                               /* ipCidrRouteTable_undo_cleanup */
  1091. /**
  1092.  * commit new values.
  1093.  *
  1094.  * At this point, you should have done everything you can to ensure that
  1095.  * this commit will not fail.
  1096.  *
  1097.  * Should you need different behavior depending on which columns were
  1098.  * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
  1099.  * set. The definitions for the FLAG_* bits can be found in
  1100.  * ipCidrRouteTable.h.
  1101.  * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
  1102.  *
  1103.  * @param ipCidrRouteTable_rowreq_ctx
  1104.  *        Pointer to the users context.
  1105.  *
  1106.  * @retval MFD_SUCCESS : success
  1107.  * @retval MFD_ERROR   : error
  1108.  */
  1109. int
  1110. ipCidrRouteTable_commit(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1111. {
  1112.     int             rc = MFD_SUCCESS;
  1113.     int             save_flags;
  1114.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_commit",
  1115.                 "calledn"));
  1116.     /** we should have a non-NULL pointer */
  1117.     netsnmp_assert(NULL != rowreq_ctx);
  1118.     /*
  1119.      * save flags, then clear until we actually do something
  1120.      */
  1121.     save_flags = rowreq_ctx->column_set_flags;
  1122.     rowreq_ctx->column_set_flags = 0;
  1123.     /*
  1124.      * commit ipCidrRouteTable data
  1125.      * 1) check the column's flag in save_flags to see if it was set.
  1126.      * 2) clear the flag when you handle that column
  1127.      * 3) set the column's flag in column_set_flags if it needs undo
  1128.      *    processing in case of a failure.
  1129.      */
  1130.     if (save_flags & FLAG_IPCIDRROUTEIFINDEX) {
  1131.         save_flags &= ~FLAG_IPCIDRROUTEIFINDEX; /* clear ipCidrRouteIfIndex */
  1132.         /*
  1133.          * TODO:482:o: |-> commit column ipCidrRouteIfIndex.
  1134.          */
  1135.         rc = -1;
  1136.         if (-1 == rc) {
  1137.             snmp_log(LOG_ERR,
  1138.                      "ipCidrRouteTable column ipCidrRouteIfIndex commit failedn");
  1139.         } else {
  1140.             /*
  1141.              * set flag, in case we need to undo ipCidrRouteIfIndex
  1142.              */
  1143.             rowreq_ctx->column_set_flags |= FLAG_IPCIDRROUTEIFINDEX;
  1144.         }
  1145.     }
  1146.     if (save_flags & FLAG_IPCIDRROUTETYPE) {
  1147.         save_flags &= ~FLAG_IPCIDRROUTETYPE;    /* clear ipCidrRouteType */
  1148.         /*
  1149.          * TODO:482:o: |-> commit column ipCidrRouteType.
  1150.          */
  1151.         rc = -1;
  1152.         if (-1 == rc) {
  1153.             snmp_log(LOG_ERR,
  1154.                      "ipCidrRouteTable column ipCidrRouteType commit failedn");
  1155.         } else {
  1156.             /*
  1157.              * set flag, in case we need to undo ipCidrRouteType
  1158.              */
  1159.             rowreq_ctx->column_set_flags |= FLAG_IPCIDRROUTETYPE;
  1160.         }
  1161.     }
  1162.     if (save_flags & FLAG_IPCIDRROUTEINFO) {
  1163.         save_flags &= ~FLAG_IPCIDRROUTEINFO;    /* clear ipCidrRouteInfo */
  1164.         /*
  1165.          * TODO:482:o: |-> commit column ipCidrRouteInfo.
  1166.          */
  1167.         rc = -1;
  1168.         if (-1 == rc) {
  1169.             snmp_log(LOG_ERR,
  1170.                      "ipCidrRouteTable column ipCidrRouteInfo commit failedn");
  1171.         } else {
  1172.             /*
  1173.              * set flag, in case we need to undo ipCidrRouteInfo
  1174.              */
  1175.             rowreq_ctx->column_set_flags |= FLAG_IPCIDRROUTEINFO;
  1176.         }
  1177.     }
  1178.     if (save_flags & FLAG_IPCIDRROUTENEXTHOPAS) {
  1179.         save_flags &= ~FLAG_IPCIDRROUTENEXTHOPAS;       /* clear ipCidrRouteNextHopAS */
  1180.         /*
  1181.          * TODO:482:o: |-> commit column ipCidrRouteNextHopAS.
  1182.          */
  1183.         rc = -1;
  1184.         if (-1 == rc) {
  1185.             snmp_log(LOG_ERR,
  1186.                      "ipCidrRouteTable column ipCidrRouteNextHopAS commit failedn");
  1187.         } else {
  1188.             /*
  1189.              * set flag, in case we need to undo ipCidrRouteNextHopAS
  1190.              */
  1191.             rowreq_ctx->column_set_flags |= FLAG_IPCIDRROUTENEXTHOPAS;
  1192.         }
  1193.     }
  1194.     if (save_flags & FLAG_IPCIDRROUTEMETRIC1) {
  1195.         save_flags &= ~FLAG_IPCIDRROUTEMETRIC1; /* clear ipCidrRouteMetric1 */
  1196.         /*
  1197.          * TODO:482:o: |-> commit column ipCidrRouteMetric1.
  1198.          */
  1199.         rc = -1;
  1200.         if (-1 == rc) {
  1201.             snmp_log(LOG_ERR,
  1202.                      "ipCidrRouteTable column ipCidrRouteMetric1 commit failedn");
  1203.         } else {
  1204.             /*
  1205.              * set flag, in case we need to undo ipCidrRouteMetric1
  1206.              */
  1207.             rowreq_ctx->column_set_flags |= FLAG_IPCIDRROUTEMETRIC1;
  1208.         }
  1209.     }
  1210.     if (save_flags & FLAG_IPCIDRROUTEMETRIC2) {
  1211.         save_flags &= ~FLAG_IPCIDRROUTEMETRIC2; /* clear ipCidrRouteMetric2 */
  1212.         /*
  1213.          * TODO:482:o: |-> commit column ipCidrRouteMetric2.
  1214.          */
  1215.         rc = -1;
  1216.         if (-1 == rc) {
  1217.             snmp_log(LOG_ERR,
  1218.                      "ipCidrRouteTable column ipCidrRouteMetric2 commit failedn");
  1219.         } else {
  1220.             /*
  1221.              * set flag, in case we need to undo ipCidrRouteMetric2
  1222.              */
  1223.             rowreq_ctx->column_set_flags |= FLAG_IPCIDRROUTEMETRIC2;
  1224.         }
  1225.     }
  1226.     if (save_flags & FLAG_IPCIDRROUTEMETRIC3) {
  1227.         save_flags &= ~FLAG_IPCIDRROUTEMETRIC3; /* clear ipCidrRouteMetric3 */
  1228.         /*
  1229.          * TODO:482:o: |-> commit column ipCidrRouteMetric3.
  1230.          */
  1231.         rc = -1;
  1232.         if (-1 == rc) {
  1233.             snmp_log(LOG_ERR,
  1234.                      "ipCidrRouteTable column ipCidrRouteMetric3 commit failedn");
  1235.         } else {
  1236.             /*
  1237.              * set flag, in case we need to undo ipCidrRouteMetric3
  1238.              */
  1239.             rowreq_ctx->column_set_flags |= FLAG_IPCIDRROUTEMETRIC3;
  1240.         }
  1241.     }
  1242.     if (save_flags & FLAG_IPCIDRROUTEMETRIC4) {
  1243.         save_flags &= ~FLAG_IPCIDRROUTEMETRIC4; /* clear ipCidrRouteMetric4 */
  1244.         /*
  1245.          * TODO:482:o: |-> commit column ipCidrRouteMetric4.
  1246.          */
  1247.         rc = -1;
  1248.         if (-1 == rc) {
  1249.             snmp_log(LOG_ERR,
  1250.                      "ipCidrRouteTable column ipCidrRouteMetric4 commit failedn");
  1251.         } else {
  1252.             /*
  1253.              * set flag, in case we need to undo ipCidrRouteMetric4
  1254.              */
  1255.             rowreq_ctx->column_set_flags |= FLAG_IPCIDRROUTEMETRIC4;
  1256.         }
  1257.     }
  1258.     if (save_flags & FLAG_IPCIDRROUTEMETRIC5) {
  1259.         save_flags &= ~FLAG_IPCIDRROUTEMETRIC5; /* clear ipCidrRouteMetric5 */
  1260.         /*
  1261.          * TODO:482:o: |-> commit column ipCidrRouteMetric5.
  1262.          */
  1263.         rc = -1;
  1264.         if (-1 == rc) {
  1265.             snmp_log(LOG_ERR,
  1266.                      "ipCidrRouteTable column ipCidrRouteMetric5 commit failedn");
  1267.         } else {
  1268.             /*
  1269.              * set flag, in case we need to undo ipCidrRouteMetric5
  1270.              */
  1271.             rowreq_ctx->column_set_flags |= FLAG_IPCIDRROUTEMETRIC5;
  1272.         }
  1273.     }
  1274.     if (save_flags & FLAG_IPCIDRROUTESTATUS) {
  1275.         save_flags &= ~FLAG_IPCIDRROUTESTATUS;  /* clear ipCidrRouteStatus */
  1276.         /*
  1277.          * TODO:482:o: |-> commit column ipCidrRouteStatus.
  1278.          */
  1279.         rc = -1;
  1280.         if (-1 == rc) {
  1281.             snmp_log(LOG_ERR,
  1282.                      "ipCidrRouteTable column ipCidrRouteStatus commit failedn");
  1283.         } else {
  1284.             /*
  1285.              * set flag, in case we need to undo ipCidrRouteStatus
  1286.              */
  1287.             rowreq_ctx->column_set_flags |= FLAG_IPCIDRROUTESTATUS;
  1288.         }
  1289.     }
  1290.     if (save_flags) {
  1291.         snmp_log(LOG_ERR, "unhandled columns (0x%x) in commitn",
  1292.                  save_flags);
  1293.         return MFD_ERROR;
  1294.     }
  1295.     return rc;
  1296. }                               /* ipCidrRouteTable_commit */
  1297. /**
  1298.  * undo commit new values.
  1299.  *
  1300.  * Should you need different behavior depending on which columns were
  1301.  * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
  1302.  * set. The definitions for the FLAG_* bits can be found in
  1303.  * ipCidrRouteTable.h.
  1304.  * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
  1305.  *
  1306.  * @param ipCidrRouteTable_rowreq_ctx
  1307.  *        Pointer to the users context.
  1308.  *
  1309.  * @retval MFD_SUCCESS : success
  1310.  * @retval MFD_ERROR   : error
  1311.  */
  1312. int
  1313. ipCidrRouteTable_undo_commit(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1314. {
  1315.     int             rc = MFD_SUCCESS;
  1316.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_undo_commit",
  1317.                 "calledn"));
  1318.     /** we should have a non-NULL pointer */
  1319.     netsnmp_assert(NULL != rowreq_ctx);
  1320.     /*
  1321.      * TODO:485:M: |-> Undo ipCidrRouteTable commit.
  1322.      * check the column's flag in rowreq_ctx->column_set_flags to see
  1323.      * if it was set during commit, then undo it.
  1324.      *
  1325.      * eg: if (rowreq_ctx->column_set_flags & FLAG_) {}
  1326.      */
  1327.     return rc;
  1328. }                               /* ipCidrRouteTable_undo_commit */
  1329. /*
  1330.  * TODO:420:r: Implement ipCidrRouteTable index validation.
  1331.  */
  1332. /*---------------------------------------------------------------------
  1333.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteDest
  1334.  * ipCidrRouteDest is subid 1 of ipCidrRouteEntry.
  1335.  * Its status is Deprecated, and its access level is ReadOnly.
  1336.  * OID: .1.3.6.1.2.1.4.24.4.1.1
  1337.  * Description:
  1338. The destination IP address of this route. 
  1339.                 This object may not take a Multicast (Class D) address 
  1340.                 value. 
  1341.                 Any assignment (implicit or otherwise) of an instance  
  1342.                 of this object to a value x must be rejected if the  
  1343.                 bitwise logical-AND of x with the value of the  
  1344.                 corresponding instance of the ipCidrRouteMask object is  
  1345.                 not equal to x.
  1346.  *
  1347.  * Attributes:
  1348.  *   accessible 1     isscalar 0     enums  0      hasdefval 0
  1349.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  1350.  *   settable   0
  1351.  *
  1352.  *
  1353.  * Its syntax is IPADDR (based on perltype IPADDR)
  1354.  * The net-snmp type is ASN_IPADDRESS. The C type decl is u_long (u_long)
  1355.  */
  1356. /**
  1357.  * check validity of ipCidrRouteDest index portion
  1358.  *
  1359.  * @retval MFD_SUCCESS   : the incoming value is legal
  1360.  * @retval MFD_BAD_VALUE : the incoming value is NOT legal
  1361.  *
  1362.  * @note this is not the place to do any checks for the sanity
  1363.  *       of multiple indexes. Those types of checks should be done in the
  1364.  *       ipCidrRouteTable_validate_index() function.
  1365.  */
  1366. int
  1367. ipCidrRouteDest_check_index(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1368. {
  1369.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteDest_check_index",
  1370.                 "calledn"));
  1371.     netsnmp_assert(NULL != rowreq_ctx);
  1372.     /*
  1373.      * TODO:426:M: |-> Check ipCidrRouteTable index ipCidrRouteDest.
  1374.      * check that index value in the table context (rowreq_ctx)
  1375.      * for ipCidrRouteDest is legal.
  1376.      */
  1377.     return MFD_SUCCESS;         /* ipCidrRouteDest index ok */
  1378. }                               /* ipCidrRouteDest_check_index */
  1379. /*---------------------------------------------------------------------
  1380.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMask
  1381.  * ipCidrRouteMask is subid 2 of ipCidrRouteEntry.
  1382.  * Its status is Deprecated, and its access level is ReadOnly.
  1383.  * OID: .1.3.6.1.2.1.4.24.4.1.2
  1384.  * Description:
  1385. Indicate the mask to be logical-ANDed with the  
  1386.                 destination address before being compared to the value  
  1387.                 in the ipCidrRouteDest field.  For those systems that  
  1388.                 do not support arbitrary subnet masks, an agent  
  1389.                 constructs the value of the ipCidrRouteMask by  
  1390.                 reference to the IP Address Class. 
  1391.                 Any assignment (implicit or otherwise) of an instance  
  1392.                 of this object to a value x must be rejected if the  
  1393.                 bitwise logical-AND of x with the value of the  
  1394.                 corresponding instance of the ipCidrRouteDest object is  
  1395.                 not equal to ipCidrRouteDest.
  1396.  *
  1397.  * Attributes:
  1398.  *   accessible 1     isscalar 0     enums  0      hasdefval 0
  1399.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  1400.  *   settable   0
  1401.  *
  1402.  *
  1403.  * Its syntax is IPADDR (based on perltype IPADDR)
  1404.  * The net-snmp type is ASN_IPADDRESS. The C type decl is u_long (u_long)
  1405.  */
  1406. /**
  1407.  * check validity of ipCidrRouteMask index portion
  1408.  *
  1409.  * @retval MFD_SUCCESS   : the incoming value is legal
  1410.  * @retval MFD_BAD_VALUE : the incoming value is NOT legal
  1411.  *
  1412.  * @note this is not the place to do any checks for the sanity
  1413.  *       of multiple indexes. Those types of checks should be done in the
  1414.  *       ipCidrRouteTable_validate_index() function.
  1415.  */
  1416. int
  1417. ipCidrRouteMask_check_index(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1418. {
  1419.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMask_check_index",
  1420.                 "calledn"));
  1421.     netsnmp_assert(NULL != rowreq_ctx);
  1422.     /*
  1423.      * TODO:426:M: |-> Check ipCidrRouteTable index ipCidrRouteMask.
  1424.      * check that index value in the table context (rowreq_ctx)
  1425.      * for ipCidrRouteMask is legal.
  1426.      */
  1427.     return MFD_SUCCESS;         /* ipCidrRouteMask index ok */
  1428. }                               /* ipCidrRouteMask_check_index */
  1429. /*---------------------------------------------------------------------
  1430.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteTos
  1431.  * ipCidrRouteTos is subid 3 of ipCidrRouteEntry.
  1432.  * Its status is Deprecated, and its access level is ReadOnly.
  1433.  * OID: .1.3.6.1.2.1.4.24.4.1.3
  1434.  * Description:
  1435. The policy specifier is the IP TOS Field.  The encoding 
  1436.                 of IP TOS is as specified by the following convention. 
  1437.                 Zero indicates the default path if no more specific 
  1438.                 policy applies. 
  1439.                 +-----+-----+-----+-----+-----+-----+-----+-----+ 
  1440.                 |                 |                       |     | 
  1441.                 |   PRECEDENCE    |    TYPE OF SERVICE    |  0  | 
  1442.                 |                 |                       |     | 
  1443.                 +-----+-----+-----+-----+-----+-----+-----+-----+ 
  1444.                              IP TOS                IP TOS 
  1445.                    Field     Policy      Field     Policy 
  1446.                    Contents    Code      Contents    Code 
  1447.                    0 0 0 0  ==>   0      0 0 0 1  ==>   2 
  1448.                    0 0 1 0  ==>   4      0 0 1 1  ==>   6 
  1449.                    0 1 0 0  ==>   8      0 1 0 1  ==>  10 
  1450.                    0 1 1 0  ==>  12      0 1 1 1  ==>  14 
  1451.                    1 0 0 0  ==>  16      1 0 0 1  ==>  18 
  1452.                    1 0 1 0  ==>  20      1 0 1 1  ==>  22 
  1453.                    1 1 0 0  ==>  24      1 1 0 1  ==>  26 
  1454.                    1 1 1 0  ==>  28      1 1 1 1  ==>  30
  1455.  *
  1456.  * Attributes:
  1457.  *   accessible 1     isscalar 0     enums  0      hasdefval 0
  1458.  *   readable   1     iscolumn 1     ranges 1      hashint   0
  1459.  *   settable   0
  1460.  *
  1461.  * Ranges:  0 - 2147483647;
  1462.  *
  1463.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  1464.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  1465.  */
  1466. /**
  1467.  * check validity of ipCidrRouteTos index portion
  1468.  *
  1469.  * @retval MFD_SUCCESS   : the incoming value is legal
  1470.  * @retval MFD_BAD_VALUE : the incoming value is NOT legal
  1471.  *
  1472.  * @note this is not the place to do any checks for the sanity
  1473.  *       of multiple indexes. Those types of checks should be done in the
  1474.  *       ipCidrRouteTable_validate_index() function.
  1475.  */
  1476. int
  1477. ipCidrRouteTos_check_index(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1478. {
  1479.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTos_check_index",
  1480.                 "calledn"));
  1481.     netsnmp_assert(NULL != rowreq_ctx);
  1482.     /*
  1483.      * TODO:426:M: |-> Check ipCidrRouteTable index ipCidrRouteTos.
  1484.      * check that index value in the table context (rowreq_ctx)
  1485.      * for ipCidrRouteTos is legal.
  1486.      */
  1487.     return MFD_SUCCESS;         /* ipCidrRouteTos index ok */
  1488. }                               /* ipCidrRouteTos_check_index */
  1489. /*---------------------------------------------------------------------
  1490.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteNextHop
  1491.  * ipCidrRouteNextHop is subid 4 of ipCidrRouteEntry.
  1492.  * Its status is Deprecated, and its access level is ReadOnly.
  1493.  * OID: .1.3.6.1.2.1.4.24.4.1.4
  1494.  * Description:
  1495. On remote routes, the address of the next system en  
  1496.                 route; Otherwise, 0.0.0.0.
  1497.  *
  1498.  * Attributes:
  1499.  *   accessible 1     isscalar 0     enums  0      hasdefval 0
  1500.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  1501.  *   settable   0
  1502.  *
  1503.  *
  1504.  * Its syntax is IPADDR (based on perltype IPADDR)
  1505.  * The net-snmp type is ASN_IPADDRESS. The C type decl is u_long (u_long)
  1506.  */
  1507. /**
  1508.  * check validity of ipCidrRouteNextHop index portion
  1509.  *
  1510.  * @retval MFD_SUCCESS   : the incoming value is legal
  1511.  * @retval MFD_BAD_VALUE : the incoming value is NOT legal
  1512.  *
  1513.  * @note this is not the place to do any checks for the sanity
  1514.  *       of multiple indexes. Those types of checks should be done in the
  1515.  *       ipCidrRouteTable_validate_index() function.
  1516.  */
  1517. int
  1518. ipCidrRouteNextHop_check_index(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1519. {
  1520.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHop_check_index",
  1521.                 "calledn"));
  1522.     netsnmp_assert(NULL != rowreq_ctx);
  1523.     /*
  1524.      * TODO:426:M: |-> Check ipCidrRouteTable index ipCidrRouteNextHop.
  1525.      * check that index value in the table context (rowreq_ctx)
  1526.      * for ipCidrRouteNextHop is legal.
  1527.      */
  1528.     return MFD_SUCCESS;         /* ipCidrRouteNextHop index ok */
  1529. }                               /* ipCidrRouteNextHop_check_index */
  1530. /*
  1531.  * TODO:440:M: Implement ipCidrRouteTable node value checks.
  1532.  * TODO:450:M: Implement ipCidrRouteTable undo functions.
  1533.  * TODO:460:M: Implement ipCidrRouteTable set functions.
  1534.  * TODO:480:M: Implement ipCidrRouteTable commit functions.
  1535.  */
  1536. /*---------------------------------------------------------------------
  1537.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteIfIndex
  1538.  * ipCidrRouteIfIndex is subid 5 of ipCidrRouteEntry.
  1539.  * Its status is Deprecated, and its access level is Create.
  1540.  * OID: .1.3.6.1.2.1.4.24.4.1.5
  1541.  * Description:
  1542. The ifIndex value which identifies  the local interface 
  1543.                 through which the next hop of this route should be  
  1544.                 reached.
  1545.  *
  1546.  * Attributes:
  1547.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  1548.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  1549.  *   settable   1
  1550.  *   defval: 0
  1551.  *
  1552.  *
  1553.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  1554.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  1555.  */
  1556. /**
  1557.  * Check that the proposed new value is potentially valid.
  1558.  *
  1559.  * @param rowreq_ctx
  1560.  *        Pointer to the row request context.
  1561.  * @param ipCidrRouteIfIndex_val
  1562.  *        A long containing the new value.
  1563.  *
  1564.  * @retval MFD_SUCCESS        : incoming value is legal
  1565.  * @retval MFD_NOT_VALID_NOW  : incoming value is not valid now
  1566.  * @retval MFD_NOT_VALID_EVER : incoming value is never valid
  1567.  *
  1568.  * This is the place to check for requirements that are not
  1569.  * expressed in the mib syntax (for example, a requirement that
  1570.  * is detailed in the description for an object).
  1571.  *
  1572.  * You should check that the requested change between the undo value and the
  1573.  * new value is legal (ie, the transistion from one value to another
  1574.  * is legal).
  1575.  *      
  1576.  *@note
  1577.  * This check is only to determine if the new value
  1578.  * is b potentially valid. This is the first check of many, and
  1579.  * is one of the simplest ones.
  1580.  * 
  1581.  *@note
  1582.  * this is not the place to do any checks for values
  1583.  * which depend on some other value in the mib. Those
  1584.  * types of checks should be done in the
  1585.  * ipCidrRouteTable_check_dependencies() function.
  1586.  *
  1587.  * The following checks have already been done for you:
  1588.  *    The syntax is ASN_INTEGER
  1589.  *
  1590.  * If there a no other checks you need to do, simply return MFD_SUCCESS.
  1591.  *
  1592.  */
  1593. int
  1594. ipCidrRouteIfIndex_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  1595.                                long ipCidrRouteIfIndex_val)
  1596. {
  1597.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_check_value",
  1598.                 "calledn"));
  1599.     /** should never get a NULL pointer */
  1600.     netsnmp_assert(NULL != rowreq_ctx);
  1601.     /*
  1602.      * TODO:441:o: |-> Check for valid ipCidrRouteIfIndex value.
  1603.      */
  1604.     return MFD_SUCCESS;         /* ipCidrRouteIfIndex value not illegal */
  1605. }                               /* ipCidrRouteIfIndex_check_value */
  1606. /**
  1607.  * Save old value information
  1608.  *
  1609.  * @param rowreq_ctx
  1610.  *        Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
  1611.  *
  1612.  * @retval MFD_SUCCESS : success
  1613.  * @retval MFD_ERROR   : error. set will fail.
  1614.  *
  1615.  * This function will be called after the table level undo setup function
  1616.  * ipCidrRouteTable_undo_setup has been called.
  1617.  *
  1618.  *@note
  1619.  * this function will only be called if a new value is set for this column.
  1620.  *
  1621.  * If there is any setup specific to a particular column (e.g. allocating
  1622.  * memory for a string), you should do that setup in this function, so it
  1623.  * won't be done unless it is necessary.
  1624.  */
  1625. int
  1626. ipCidrRouteIfIndex_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1627. {
  1628.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_undo_setup",
  1629.                 "calledn"));
  1630.     /** should never get a NULL pointer */
  1631.     netsnmp_assert(NULL != rowreq_ctx);
  1632.     /*
  1633.      * TODO:455:o: |-> Setup ipCidrRouteIfIndex undo.
  1634.      */
  1635.     /*
  1636.      * copy ipCidrRouteIfIndex data
  1637.      * set rowreq_ctx->undo->ipCidrRouteIfIndex from rowreq_ctx->data->ipCidrRouteIfIndex
  1638.      */
  1639.     return MFD_SUCCESS;
  1640. }                               /* ipCidrRouteIfIndex_undo_setup */
  1641. /**
  1642.  * Set the new value.
  1643.  *
  1644.  * @param rowreq_ctx
  1645.  *        Pointer to the users context. You should know how to
  1646.  *        manipulate the value from this object.
  1647.  * @param ipCidrRouteIfIndex_val
  1648.  *        A long containing the new value.
  1649.  */
  1650. int
  1651. ipCidrRouteIfIndex_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  1652.                        long ipCidrRouteIfIndex_val)
  1653. {
  1654.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_set",
  1655.                 "calledn"));
  1656.     /** should never get a NULL pointer */
  1657.     netsnmp_assert(NULL != rowreq_ctx);
  1658.     /*
  1659.      * TODO:461:M: |-> Set ipCidrRouteIfIndex value.
  1660.      * set ipCidrRouteIfIndex value in rowreq_ctx->data
  1661.      */
  1662.     return MFD_SUCCESS;
  1663. }                               /* ipCidrRouteIfIndex_set */
  1664. /**
  1665.  * undo the previous set.
  1666.  *
  1667.  * @param rowreq_ctx
  1668.  *        Pointer to the users context.
  1669.  */
  1670. int
  1671. ipCidrRouteIfIndex_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1672. {
  1673.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_undo",
  1674.                 "calledn"));
  1675.     netsnmp_assert(NULL != rowreq_ctx);
  1676.     /*
  1677.      * TODO:456:o: |-> Clean up ipCidrRouteIfIndex undo.
  1678.      */
  1679.     /*
  1680.      * copy ipCidrRouteIfIndex data
  1681.      * set rowreq_ctx->data->ipCidrRouteIfIndex from rowreq_ctx->undo->ipCidrRouteIfIndex
  1682.      */
  1683.     return MFD_SUCCESS;
  1684. }                               /* ipCidrRouteIfIndex_undo */
  1685. /*---------------------------------------------------------------------
  1686.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteType
  1687.  * ipCidrRouteType is subid 6 of ipCidrRouteEntry.
  1688.  * Its status is Deprecated, and its access level is Create.
  1689.  * OID: .1.3.6.1.2.1.4.24.4.1.6
  1690.  * Description:
  1691. The type of route.  Note that local(3) refers to a  
  1692.                 route for which the next hop is the final destination;   
  1693.                 remote(4) refers to a route for which the next hop is  
  1694.                 not the final destination. 
  1695.                 Routes which do not result in traffic forwarding or 
  1696.                 rejection should not be displayed even if the  
  1697.                 implementation keeps them stored internally. 
  1698.                 reject (2) refers to a route which, if matched,  
  1699.                 discards the message as unreachable. This is used in  
  1700.                 some protocols as a means of correctly aggregating  
  1701.                 routes.
  1702.  *
  1703.  * Attributes:
  1704.  *   accessible 1     isscalar 0     enums  1      hasdefval 0
  1705.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  1706.  *   settable   1
  1707.  *
  1708.  * Enum range: 3/8. Values:  other(1), reject(2), local(3), remote(4)
  1709.  *
  1710.  * Its syntax is INTEGER (based on perltype INTEGER)
  1711.  * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
  1712.  */
  1713. /**
  1714.  * Check that the proposed new value is potentially valid.
  1715.  *
  1716.  * @param rowreq_ctx
  1717.  *        Pointer to the row request context.
  1718.  * @param ipCidrRouteType_val
  1719.  *        A long containing the new value.
  1720.  *
  1721.  * @retval MFD_SUCCESS        : incoming value is legal
  1722.  * @retval MFD_NOT_VALID_NOW  : incoming value is not valid now
  1723.  * @retval MFD_NOT_VALID_EVER : incoming value is never valid
  1724.  *
  1725.  * This is the place to check for requirements that are not
  1726.  * expressed in the mib syntax (for example, a requirement that
  1727.  * is detailed in the description for an object).
  1728.  *
  1729.  * You should check that the requested change between the undo value and the
  1730.  * new value is legal (ie, the transistion from one value to another
  1731.  * is legal).
  1732.  *      
  1733.  *@note
  1734.  * This check is only to determine if the new value
  1735.  * is b potentially valid. This is the first check of many, and
  1736.  * is one of the simplest ones.
  1737.  * 
  1738.  *@note
  1739.  * this is not the place to do any checks for values
  1740.  * which depend on some other value in the mib. Those
  1741.  * types of checks should be done in the
  1742.  * ipCidrRouteTable_check_dependencies() function.
  1743.  *
  1744.  * The following checks have already been done for you:
  1745.  *    The syntax is ASN_INTEGER
  1746.  *    The value is one of  other(1), reject(2), local(3), remote(4)
  1747.  *
  1748.  * If there a no other checks you need to do, simply return MFD_SUCCESS.
  1749.  *
  1750.  */
  1751. int
  1752. ipCidrRouteType_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  1753.                             u_long ipCidrRouteType_val)
  1754. {
  1755.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_check_value",
  1756.                 "calledn"));
  1757.     /** should never get a NULL pointer */
  1758.     netsnmp_assert(NULL != rowreq_ctx);
  1759.     /*
  1760.      * TODO:441:o: |-> Check for valid ipCidrRouteType value.
  1761.      */
  1762.     return MFD_SUCCESS;         /* ipCidrRouteType value not illegal */
  1763. }                               /* ipCidrRouteType_check_value */
  1764. /**
  1765.  * Save old value information
  1766.  *
  1767.  * @param rowreq_ctx
  1768.  *        Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
  1769.  *
  1770.  * @retval MFD_SUCCESS : success
  1771.  * @retval MFD_ERROR   : error. set will fail.
  1772.  *
  1773.  * This function will be called after the table level undo setup function
  1774.  * ipCidrRouteTable_undo_setup has been called.
  1775.  *
  1776.  *@note
  1777.  * this function will only be called if a new value is set for this column.
  1778.  *
  1779.  * If there is any setup specific to a particular column (e.g. allocating
  1780.  * memory for a string), you should do that setup in this function, so it
  1781.  * won't be done unless it is necessary.
  1782.  */
  1783. int
  1784. ipCidrRouteType_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1785. {
  1786.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_undo_setup",
  1787.                 "calledn"));
  1788.     /** should never get a NULL pointer */
  1789.     netsnmp_assert(NULL != rowreq_ctx);
  1790.     /*
  1791.      * TODO:455:o: |-> Setup ipCidrRouteType undo.
  1792.      */
  1793.     /*
  1794.      * copy ipCidrRouteType data
  1795.      * set rowreq_ctx->undo->ipCidrRouteType from rowreq_ctx->data->ipCidrRouteType
  1796.      */
  1797.     return MFD_SUCCESS;
  1798. }                               /* ipCidrRouteType_undo_setup */
  1799. /**
  1800.  * Set the new value.
  1801.  *
  1802.  * @param rowreq_ctx
  1803.  *        Pointer to the users context. You should know how to
  1804.  *        manipulate the value from this object.
  1805.  * @param ipCidrRouteType_val
  1806.  *        A long containing the new value.
  1807.  */
  1808. int
  1809. ipCidrRouteType_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  1810.                     u_long ipCidrRouteType_val)
  1811. {
  1812.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_set",
  1813.                 "calledn"));
  1814.     /** should never get a NULL pointer */
  1815.     netsnmp_assert(NULL != rowreq_ctx);
  1816.     /*
  1817.      * TODO:461:M: |-> Set ipCidrRouteType value.
  1818.      * set ipCidrRouteType value in rowreq_ctx->data
  1819.      */
  1820.     return MFD_SUCCESS;
  1821. }                               /* ipCidrRouteType_set */
  1822. /**
  1823.  * undo the previous set.
  1824.  *
  1825.  * @param rowreq_ctx
  1826.  *        Pointer to the users context.
  1827.  */
  1828. int
  1829. ipCidrRouteType_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1830. {
  1831.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_undo",
  1832.                 "calledn"));
  1833.     netsnmp_assert(NULL != rowreq_ctx);
  1834.     /*
  1835.      * TODO:456:o: |-> Clean up ipCidrRouteType undo.
  1836.      */
  1837.     /*
  1838.      * copy ipCidrRouteType data
  1839.      * set rowreq_ctx->data->ipCidrRouteType from rowreq_ctx->undo->ipCidrRouteType
  1840.      */
  1841.     return MFD_SUCCESS;
  1842. }                               /* ipCidrRouteType_undo */
  1843. /*---------------------------------------------------------------------
  1844.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteInfo
  1845.  * ipCidrRouteInfo is subid 9 of ipCidrRouteEntry.
  1846.  * Its status is Deprecated, and its access level is Create.
  1847.  * OID: .1.3.6.1.2.1.4.24.4.1.9
  1848.  * Description:
  1849. A reference to MIB definitions specific to the  
  1850.                 particular routing protocol which is responsible for  
  1851.                 this route, as determined by the value specified in the  
  1852.                 route's ipCidrRouteProto value.  If this information is  
  1853.                 not present, its value should be set to the OBJECT  
  1854.                 IDENTIFIER { 0 0 }, which is a syntactically valid  
  1855.                 object identifier, and any implementation conforming to  
  1856.                 ASN.1 and the Basic Encoding Rules must be able to  
  1857.                 generate and recognize this value.
  1858.  *
  1859.  * Attributes:
  1860.  *   accessible 1     isscalar 0     enums  0      hasdefval 0
  1861.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  1862.  *   settable   1
  1863.  *
  1864.  *
  1865.  * Its syntax is OBJECTID (based on perltype OBJECTID)
  1866.  * The net-snmp type is ASN_OBJECT_ID. The C type decl is oid (oid)
  1867.  * This data type requires a length.  (Max 2147483647)
  1868.  */
  1869. /**
  1870.  * Check that the proposed new value is potentially valid.
  1871.  *
  1872.  * @param rowreq_ctx
  1873.  *        Pointer to the row request context.
  1874.  * @param ipCidrRouteInfo_val_ptr
  1875.  *        A oid containing the new value.
  1876.  * @param ipCidrRouteInfo_val_ptr_len
  1877.  *        The size (in bytes) of the data pointed to by ipCidrRouteInfo_val_ptr
  1878.  *
  1879.  * @retval MFD_SUCCESS        : incoming value is legal
  1880.  * @retval MFD_NOT_VALID_NOW  : incoming value is not valid now
  1881.  * @retval MFD_NOT_VALID_EVER : incoming value is never valid
  1882.  *
  1883.  * This is the place to check for requirements that are not
  1884.  * expressed in the mib syntax (for example, a requirement that
  1885.  * is detailed in the description for an object).
  1886.  *
  1887.  * You should check that the requested change between the undo value and the
  1888.  * new value is legal (ie, the transistion from one value to another
  1889.  * is legal).
  1890.  *      
  1891.  *@note
  1892.  * This check is only to determine if the new value
  1893.  * is b potentially valid. This is the first check of many, and
  1894.  * is one of the simplest ones.
  1895.  * 
  1896.  *@note
  1897.  * this is not the place to do any checks for values
  1898.  * which depend on some other value in the mib. Those
  1899.  * types of checks should be done in the
  1900.  * ipCidrRouteTable_check_dependencies() function.
  1901.  *
  1902.  * The following checks have already been done for you:
  1903.  *    The syntax is ASN_OBJECT_ID
  1904.  *
  1905.  * If there a no other checks you need to do, simply return MFD_SUCCESS.
  1906.  *
  1907.  */
  1908. int
  1909. ipCidrRouteInfo_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  1910.                             oid * ipCidrRouteInfo_val_ptr,
  1911.                             size_t ipCidrRouteInfo_val_ptr_len)
  1912. {
  1913.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_check_value",
  1914.                 "calledn"));
  1915.     /** should never get a NULL pointer */
  1916.     netsnmp_assert(NULL != rowreq_ctx);
  1917.     netsnmp_assert(NULL != ipCidrRouteInfo_val_ptr);
  1918.     /*
  1919.      * TODO:441:o: |-> Check for valid ipCidrRouteInfo value.
  1920.      */
  1921.     return MFD_SUCCESS;         /* ipCidrRouteInfo value not illegal */
  1922. }                               /* ipCidrRouteInfo_check_value */
  1923. /**
  1924.  * Save old value information
  1925.  *
  1926.  * @param rowreq_ctx
  1927.  *        Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
  1928.  *
  1929.  * @retval MFD_SUCCESS : success
  1930.  * @retval MFD_ERROR   : error. set will fail.
  1931.  *
  1932.  * This function will be called after the table level undo setup function
  1933.  * ipCidrRouteTable_undo_setup has been called.
  1934.  *
  1935.  *@note
  1936.  * this function will only be called if a new value is set for this column.
  1937.  *
  1938.  * If there is any setup specific to a particular column (e.g. allocating
  1939.  * memory for a string), you should do that setup in this function, so it
  1940.  * won't be done unless it is necessary.
  1941.  */
  1942. int
  1943. ipCidrRouteInfo_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1944. {
  1945.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_undo_setup",
  1946.                 "calledn"));
  1947.     /** should never get a NULL pointer */
  1948.     netsnmp_assert(NULL != rowreq_ctx);
  1949.     /*
  1950.      * TODO:455:o: |-> Setup ipCidrRouteInfo undo.
  1951.      */
  1952.     /*
  1953.      * copy ipCidrRouteInfo and ipCidrRouteInfo_len data
  1954.      * set rowreq_ctx->undo->ipCidrRouteInfo from rowreq_ctx->data->ipCidrRouteInfo
  1955.      */
  1956.     return MFD_SUCCESS;
  1957. }                               /* ipCidrRouteInfo_undo_setup */
  1958. /**
  1959.  * Set the new value.
  1960.  *
  1961.  * @param rowreq_ctx
  1962.  *        Pointer to the users context. You should know how to
  1963.  *        manipulate the value from this object.
  1964.  * @param ipCidrRouteInfo_val_ptr
  1965.  *        A oid containing the new value.
  1966.  * @param ipCidrRouteInfo_val_ptr_len
  1967.  *        The size (in bytes) of the data pointed to by ipCidrRouteInfo_val_ptr
  1968.  */
  1969. int
  1970. ipCidrRouteInfo_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  1971.                     oid * ipCidrRouteInfo_val_ptr,
  1972.                     size_t ipCidrRouteInfo_val_ptr_len)
  1973. {
  1974.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_set",
  1975.                 "calledn"));
  1976.     /** should never get a NULL pointer */
  1977.     netsnmp_assert(NULL != rowreq_ctx);
  1978.     netsnmp_assert(NULL != ipCidrRouteInfo_val_ptr);
  1979.     /*
  1980.      * TODO:461:M: |-> Set ipCidrRouteInfo value.
  1981.      * set ipCidrRouteInfo value in rowreq_ctx->data
  1982.      */
  1983.     return MFD_SUCCESS;
  1984. }                               /* ipCidrRouteInfo_set */
  1985. /**
  1986.  * undo the previous set.
  1987.  *
  1988.  * @param rowreq_ctx
  1989.  *        Pointer to the users context.
  1990.  */
  1991. int
  1992. ipCidrRouteInfo_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  1993. {
  1994.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_undo",
  1995.                 "calledn"));
  1996.     netsnmp_assert(NULL != rowreq_ctx);
  1997.     /*
  1998.      * TODO:456:o: |-> Clean up ipCidrRouteInfo undo.
  1999.      */
  2000.     /*
  2001.      * copy ipCidrRouteInfo and ipCidrRouteInfo_len data
  2002.      * set rowreq_ctx->data->ipCidrRouteInfo from rowreq_ctx->undo->ipCidrRouteInfo
  2003.      */
  2004.     return MFD_SUCCESS;
  2005. }                               /* ipCidrRouteInfo_undo */
  2006. /*---------------------------------------------------------------------
  2007.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteNextHopAS
  2008.  * ipCidrRouteNextHopAS is subid 10 of ipCidrRouteEntry.
  2009.  * Its status is Deprecated, and its access level is Create.
  2010.  * OID: .1.3.6.1.2.1.4.24.4.1.10
  2011.  * Description:
  2012. The Autonomous System Number of the Next Hop.  The  
  2013.                 semantics of this object are determined by the routing- 
  2014.                 protocol specified in the route's ipCidrRouteProto  
  2015.                 value. When this object is unknown or not relevant its  
  2016.                 value should be set to zero.
  2017.  *
  2018.  * Attributes:
  2019.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  2020.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  2021.  *   settable   1
  2022.  *   defval: 0
  2023.  *
  2024.  *
  2025.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  2026.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  2027.  */
  2028. /**
  2029.  * Check that the proposed new value is potentially valid.
  2030.  *
  2031.  * @param rowreq_ctx
  2032.  *        Pointer to the row request context.
  2033.  * @param ipCidrRouteNextHopAS_val
  2034.  *        A long containing the new value.
  2035.  *
  2036.  * @retval MFD_SUCCESS        : incoming value is legal
  2037.  * @retval MFD_NOT_VALID_NOW  : incoming value is not valid now
  2038.  * @retval MFD_NOT_VALID_EVER : incoming value is never valid
  2039.  *
  2040.  * This is the place to check for requirements that are not
  2041.  * expressed in the mib syntax (for example, a requirement that
  2042.  * is detailed in the description for an object).
  2043.  *
  2044.  * You should check that the requested change between the undo value and the
  2045.  * new value is legal (ie, the transistion from one value to another
  2046.  * is legal).
  2047.  *      
  2048.  *@note
  2049.  * This check is only to determine if the new value
  2050.  * is b potentially valid. This is the first check of many, and
  2051.  * is one of the simplest ones.
  2052.  * 
  2053.  *@note
  2054.  * this is not the place to do any checks for values
  2055.  * which depend on some other value in the mib. Those
  2056.  * types of checks should be done in the
  2057.  * ipCidrRouteTable_check_dependencies() function.
  2058.  *
  2059.  * The following checks have already been done for you:
  2060.  *    The syntax is ASN_INTEGER
  2061.  *
  2062.  * If there a no other checks you need to do, simply return MFD_SUCCESS.
  2063.  *
  2064.  */
  2065. int
  2066. ipCidrRouteNextHopAS_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  2067.                                  long ipCidrRouteNextHopAS_val)
  2068. {
  2069.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_check_value", "calledn"));
  2070.     /** should never get a NULL pointer */
  2071.     netsnmp_assert(NULL != rowreq_ctx);
  2072.     /*
  2073.      * TODO:441:o: |-> Check for valid ipCidrRouteNextHopAS value.
  2074.      */
  2075.     return MFD_SUCCESS;         /* ipCidrRouteNextHopAS value not illegal */
  2076. }                               /* ipCidrRouteNextHopAS_check_value */
  2077. /**
  2078.  * Save old value information
  2079.  *
  2080.  * @param rowreq_ctx
  2081.  *        Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
  2082.  *
  2083.  * @retval MFD_SUCCESS : success
  2084.  * @retval MFD_ERROR   : error. set will fail.
  2085.  *
  2086.  * This function will be called after the table level undo setup function
  2087.  * ipCidrRouteTable_undo_setup has been called.
  2088.  *
  2089.  *@note
  2090.  * this function will only be called if a new value is set for this column.
  2091.  *
  2092.  * If there is any setup specific to a particular column (e.g. allocating
  2093.  * memory for a string), you should do that setup in this function, so it
  2094.  * won't be done unless it is necessary.
  2095.  */
  2096. int
  2097. ipCidrRouteNextHopAS_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  2098. {
  2099.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_undo_setup",
  2100.                 "calledn"));
  2101.     /** should never get a NULL pointer */
  2102.     netsnmp_assert(NULL != rowreq_ctx);
  2103.     /*
  2104.      * TODO:455:o: |-> Setup ipCidrRouteNextHopAS undo.
  2105.      */
  2106.     /*
  2107.      * copy ipCidrRouteNextHopAS data
  2108.      * set rowreq_ctx->undo->ipCidrRouteNextHopAS from rowreq_ctx->data->ipCidrRouteNextHopAS
  2109.      */
  2110.     return MFD_SUCCESS;
  2111. }                               /* ipCidrRouteNextHopAS_undo_setup */
  2112. /**
  2113.  * Set the new value.
  2114.  *
  2115.  * @param rowreq_ctx
  2116.  *        Pointer to the users context. You should know how to
  2117.  *        manipulate the value from this object.
  2118.  * @param ipCidrRouteNextHopAS_val
  2119.  *        A long containing the new value.
  2120.  */
  2121. int
  2122. ipCidrRouteNextHopAS_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  2123.                          long ipCidrRouteNextHopAS_val)
  2124. {
  2125.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_set",
  2126.                 "calledn"));
  2127.     /** should never get a NULL pointer */
  2128.     netsnmp_assert(NULL != rowreq_ctx);
  2129.     /*
  2130.      * TODO:461:M: |-> Set ipCidrRouteNextHopAS value.
  2131.      * set ipCidrRouteNextHopAS value in rowreq_ctx->data
  2132.      */
  2133.     return MFD_SUCCESS;
  2134. }                               /* ipCidrRouteNextHopAS_set */
  2135. /**
  2136.  * undo the previous set.
  2137.  *
  2138.  * @param rowreq_ctx
  2139.  *        Pointer to the users context.
  2140.  */
  2141. int
  2142. ipCidrRouteNextHopAS_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  2143. {
  2144.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_undo",
  2145.                 "calledn"));
  2146.     netsnmp_assert(NULL != rowreq_ctx);
  2147.     /*
  2148.      * TODO:456:o: |-> Clean up ipCidrRouteNextHopAS undo.
  2149.      */
  2150.     /*
  2151.      * copy ipCidrRouteNextHopAS data
  2152.      * set rowreq_ctx->data->ipCidrRouteNextHopAS from rowreq_ctx->undo->ipCidrRouteNextHopAS
  2153.      */
  2154.     return MFD_SUCCESS;
  2155. }                               /* ipCidrRouteNextHopAS_undo */
  2156. /*---------------------------------------------------------------------
  2157.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric1
  2158.  * ipCidrRouteMetric1 is subid 11 of ipCidrRouteEntry.
  2159.  * Its status is Deprecated, and its access level is Create.
  2160.  * OID: .1.3.6.1.2.1.4.24.4.1.11
  2161.  * Description:
  2162. The primary routing metric for this route.  The  
  2163.                 semantics of this metric are determined by the routing- 
  2164.                 protocol specified in the route's ipCidrRouteProto  
  2165.                 value.  If this metric is not used, its value should be  
  2166.                 set to -1.
  2167.  *
  2168.  * Attributes:
  2169.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  2170.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  2171.  *   settable   1
  2172.  *   defval: -1
  2173.  *
  2174.  *
  2175.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  2176.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  2177.  */
  2178. /**
  2179.  * Check that the proposed new value is potentially valid.
  2180.  *
  2181.  * @param rowreq_ctx
  2182.  *        Pointer to the row request context.
  2183.  * @param ipCidrRouteMetric1_val
  2184.  *        A long containing the new value.
  2185.  *
  2186.  * @retval MFD_SUCCESS        : incoming value is legal
  2187.  * @retval MFD_NOT_VALID_NOW  : incoming value is not valid now
  2188.  * @retval MFD_NOT_VALID_EVER : incoming value is never valid
  2189.  *
  2190.  * This is the place to check for requirements that are not
  2191.  * expressed in the mib syntax (for example, a requirement that
  2192.  * is detailed in the description for an object).
  2193.  *
  2194.  * You should check that the requested change between the undo value and the
  2195.  * new value is legal (ie, the transistion from one value to another
  2196.  * is legal).
  2197.  *      
  2198.  *@note
  2199.  * This check is only to determine if the new value
  2200.  * is b potentially valid. This is the first check of many, and
  2201.  * is one of the simplest ones.
  2202.  * 
  2203.  *@note
  2204.  * this is not the place to do any checks for values
  2205.  * which depend on some other value in the mib. Those
  2206.  * types of checks should be done in the
  2207.  * ipCidrRouteTable_check_dependencies() function.
  2208.  *
  2209.  * The following checks have already been done for you:
  2210.  *    The syntax is ASN_INTEGER
  2211.  *
  2212.  * If there a no other checks you need to do, simply return MFD_SUCCESS.
  2213.  *
  2214.  */
  2215. int
  2216. ipCidrRouteMetric1_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  2217.                                long ipCidrRouteMetric1_val)
  2218. {
  2219.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_check_value",
  2220.                 "calledn"));
  2221.     /** should never get a NULL pointer */
  2222.     netsnmp_assert(NULL != rowreq_ctx);
  2223.     /*
  2224.      * TODO:441:o: |-> Check for valid ipCidrRouteMetric1 value.
  2225.      */
  2226.     return MFD_SUCCESS;         /* ipCidrRouteMetric1 value not illegal */
  2227. }                               /* ipCidrRouteMetric1_check_value */
  2228. /**
  2229.  * Save old value information
  2230.  *
  2231.  * @param rowreq_ctx
  2232.  *        Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
  2233.  *
  2234.  * @retval MFD_SUCCESS : success
  2235.  * @retval MFD_ERROR   : error. set will fail.
  2236.  *
  2237.  * This function will be called after the table level undo setup function
  2238.  * ipCidrRouteTable_undo_setup has been called.
  2239.  *
  2240.  *@note
  2241.  * this function will only be called if a new value is set for this column.
  2242.  *
  2243.  * If there is any setup specific to a particular column (e.g. allocating
  2244.  * memory for a string), you should do that setup in this function, so it
  2245.  * won't be done unless it is necessary.
  2246.  */
  2247. int
  2248. ipCidrRouteMetric1_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  2249. {
  2250.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_undo_setup",
  2251.                 "calledn"));
  2252.     /** should never get a NULL pointer */
  2253.     netsnmp_assert(NULL != rowreq_ctx);
  2254.     /*
  2255.      * TODO:455:o: |-> Setup ipCidrRouteMetric1 undo.
  2256.      */
  2257.     /*
  2258.      * copy ipCidrRouteMetric1 data
  2259.      * set rowreq_ctx->undo->ipCidrRouteMetric1 from rowreq_ctx->data->ipCidrRouteMetric1
  2260.      */
  2261.     return MFD_SUCCESS;
  2262. }                               /* ipCidrRouteMetric1_undo_setup */
  2263. /**
  2264.  * Set the new value.
  2265.  *
  2266.  * @param rowreq_ctx
  2267.  *        Pointer to the users context. You should know how to
  2268.  *        manipulate the value from this object.
  2269.  * @param ipCidrRouteMetric1_val
  2270.  *        A long containing the new value.
  2271.  */
  2272. int
  2273. ipCidrRouteMetric1_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  2274.                        long ipCidrRouteMetric1_val)
  2275. {
  2276.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_set",
  2277.                 "calledn"));
  2278.     /** should never get a NULL pointer */
  2279.     netsnmp_assert(NULL != rowreq_ctx);
  2280.     /*
  2281.      * TODO:461:M: |-> Set ipCidrRouteMetric1 value.
  2282.      * set ipCidrRouteMetric1 value in rowreq_ctx->data
  2283.      */
  2284.     return MFD_SUCCESS;
  2285. }                               /* ipCidrRouteMetric1_set */
  2286. /**
  2287.  * undo the previous set.
  2288.  *
  2289.  * @param rowreq_ctx
  2290.  *        Pointer to the users context.
  2291.  */
  2292. int
  2293. ipCidrRouteMetric1_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  2294. {
  2295.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_undo",
  2296.                 "calledn"));
  2297.     netsnmp_assert(NULL != rowreq_ctx);
  2298.     /*
  2299.      * TODO:456:o: |-> Clean up ipCidrRouteMetric1 undo.
  2300.      */
  2301.     /*
  2302.      * copy ipCidrRouteMetric1 data
  2303.      * set rowreq_ctx->data->ipCidrRouteMetric1 from rowreq_ctx->undo->ipCidrRouteMetric1
  2304.      */
  2305.     return MFD_SUCCESS;
  2306. }                               /* ipCidrRouteMetric1_undo */
  2307. /*---------------------------------------------------------------------
  2308.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric2
  2309.  * ipCidrRouteMetric2 is subid 12 of ipCidrRouteEntry.
  2310.  * Its status is Deprecated, and its access level is Create.
  2311.  * OID: .1.3.6.1.2.1.4.24.4.1.12
  2312.  * Description:
  2313. An alternate routing metric for this route.  The  
  2314.                 semantics of this metric are determined by the routing- 
  2315.                 protocol specified in the route's ipCidrRouteProto  
  2316.                 value.  If this metric is not used, its value should be  
  2317.                 set to -1.
  2318.  *
  2319.  * Attributes:
  2320.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  2321.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  2322.  *   settable   1
  2323.  *   defval: -1
  2324.  *
  2325.  *
  2326.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  2327.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  2328.  */
  2329. /**
  2330.  * Check that the proposed new value is potentially valid.
  2331.  *
  2332.  * @param rowreq_ctx
  2333.  *        Pointer to the row request context.
  2334.  * @param ipCidrRouteMetric2_val
  2335.  *        A long containing the new value.
  2336.  *
  2337.  * @retval MFD_SUCCESS        : incoming value is legal
  2338.  * @retval MFD_NOT_VALID_NOW  : incoming value is not valid now
  2339.  * @retval MFD_NOT_VALID_EVER : incoming value is never valid
  2340.  *
  2341.  * This is the place to check for requirements that are not
  2342.  * expressed in the mib syntax (for example, a requirement that
  2343.  * is detailed in the description for an object).
  2344.  *
  2345.  * You should check that the requested change between the undo value and the
  2346.  * new value is legal (ie, the transistion from one value to another
  2347.  * is legal).
  2348.  *      
  2349.  *@note
  2350.  * This check is only to determine if the new value
  2351.  * is b potentially valid. This is the first check of many, and
  2352.  * is one of the simplest ones.
  2353.  * 
  2354.  *@note
  2355.  * this is not the place to do any checks for values
  2356.  * which depend on some other value in the mib. Those
  2357.  * types of checks should be done in the
  2358.  * ipCidrRouteTable_check_dependencies() function.
  2359.  *
  2360.  * The following checks have already been done for you:
  2361.  *    The syntax is ASN_INTEGER
  2362.  *
  2363.  * If there a no other checks you need to do, simply return MFD_SUCCESS.
  2364.  *
  2365.  */
  2366. int
  2367. ipCidrRouteMetric2_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  2368.                                long ipCidrRouteMetric2_val)
  2369. {
  2370.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_check_value",
  2371.                 "calledn"));
  2372.     /** should never get a NULL pointer */
  2373.     netsnmp_assert(NULL != rowreq_ctx);
  2374.     /*
  2375.      * TODO:441:o: |-> Check for valid ipCidrRouteMetric2 value.
  2376.      */
  2377.     /*
  2378.      * does any os use metric 2-5? if so, update to deal with it.
  2379.      * otherwise, only accept same value we have.
  2380.      */
  2381.     if (ipCidrRouteMetric2_val != rowreq_ctx->data->rt_metric2)
  2382.         return MFD_NOT_VALID_EVER;
  2383.     return MFD_SUCCESS;         /* ipCidrRouteMetric2 value not illegal */
  2384. }                               /* ipCidrRouteMetric2_check_value */
  2385. /**
  2386.  * Save old value information
  2387.  *
  2388.  * @param rowreq_ctx
  2389.  *        Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
  2390.  *
  2391.  * @retval MFD_SUCCESS : success
  2392.  * @retval MFD_ERROR   : error. set will fail.
  2393.  *
  2394.  * This function will be called after the table level undo setup function
  2395.  * ipCidrRouteTable_undo_setup has been called.
  2396.  *
  2397.  *@note
  2398.  * this function will only be called if a new value is set for this column.
  2399.  *
  2400.  * If there is any setup specific to a particular column (e.g. allocating
  2401.  * memory for a string), you should do that setup in this function, so it
  2402.  * won't be done unless it is necessary.
  2403.  */
  2404. int
  2405. ipCidrRouteMetric2_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  2406. {
  2407.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_undo_setup",
  2408.                 "calledn"));
  2409.     /** should never get a NULL pointer */
  2410.     netsnmp_assert(NULL != rowreq_ctx);
  2411.     /*
  2412.      * TODO:455:o: |-> Setup ipCidrRouteMetric2 undo.
  2413.      */
  2414.     /*
  2415.      * copy ipCidrRouteMetric2 data
  2416.      * set rowreq_ctx->undo->ipCidrRouteMetric2 from rowreq_ctx->data->ipCidrRouteMetric2
  2417.      */
  2418.     return MFD_SUCCESS;
  2419. }                               /* ipCidrRouteMetric2_undo_setup */
  2420. /**
  2421.  * Set the new value.
  2422.  *
  2423.  * @param rowreq_ctx
  2424.  *        Pointer to the users context. You should know how to
  2425.  *        manipulate the value from this object.
  2426.  * @param ipCidrRouteMetric2_val
  2427.  *        A long containing the new value.
  2428.  */
  2429. int
  2430. ipCidrRouteMetric2_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  2431.                        long ipCidrRouteMetric2_val)
  2432. {
  2433.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_set",
  2434.                 "calledn"));
  2435.     /** should never get a NULL pointer */
  2436.     netsnmp_assert(NULL != rowreq_ctx);
  2437.     /*
  2438.      * TODO:461:M: |-> Set ipCidrRouteMetric2 value.
  2439.      * set ipCidrRouteMetric2 value in rowreq_ctx->data
  2440.      */
  2441.     return MFD_SUCCESS;
  2442. }                               /* ipCidrRouteMetric2_set */
  2443. /**
  2444.  * undo the previous set.
  2445.  *
  2446.  * @param rowreq_ctx
  2447.  *        Pointer to the users context.
  2448.  */
  2449. int
  2450. ipCidrRouteMetric2_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  2451. {
  2452.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_undo",
  2453.                 "calledn"));
  2454.     netsnmp_assert(NULL != rowreq_ctx);
  2455.     /*
  2456.      * TODO:456:o: |-> Clean up ipCidrRouteMetric2 undo.
  2457.      */
  2458.     /*
  2459.      * copy ipCidrRouteMetric2 data
  2460.      * set rowreq_ctx->data->ipCidrRouteMetric2 from rowreq_ctx->undo->ipCidrRouteMetric2
  2461.      */
  2462.     return MFD_SUCCESS;
  2463. }                               /* ipCidrRouteMetric2_undo */
  2464. /*---------------------------------------------------------------------
  2465.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric3
  2466.  * ipCidrRouteMetric3 is subid 13 of ipCidrRouteEntry.
  2467.  * Its status is Deprecated, and its access level is Create.
  2468.  * OID: .1.3.6.1.2.1.4.24.4.1.13
  2469.  * Description:
  2470. An alternate routing metric for this route.  The  
  2471.                 semantics of this metric are determined by the routing- 
  2472.                 protocol specified in the route's ipCidrRouteProto  
  2473.                 value.  If this metric is not used, its value should be  
  2474.                 set to -1.
  2475.  *
  2476.  * Attributes:
  2477.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  2478.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  2479.  *   settable   1
  2480.  *   defval: -1
  2481.  *
  2482.  *
  2483.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  2484.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  2485.  */
  2486. /**
  2487.  * Check that the proposed new value is potentially valid.
  2488.  *
  2489.  * @param rowreq_ctx
  2490.  *        Pointer to the row request context.
  2491.  * @param ipCidrRouteMetric3_val
  2492.  *        A long containing the new value.
  2493.  *
  2494.  * @retval MFD_SUCCESS        : incoming value is legal
  2495.  * @retval MFD_NOT_VALID_NOW  : incoming value is not valid now
  2496.  * @retval MFD_NOT_VALID_EVER : incoming value is never valid
  2497.  *
  2498.  * This is the place to check for requirements that are not
  2499.  * expressed in the mib syntax (for example, a requirement that
  2500.  * is detailed in the description for an object).
  2501.  *
  2502.  * You should check that the requested change between the undo value and the
  2503.  * new value is legal (ie, the transistion from one value to another
  2504.  * is legal).
  2505.  *      
  2506.  *@note
  2507.  * This check is only to determine if the new value
  2508.  * is b potentially valid. This is the first check of many, and
  2509.  * is one of the simplest ones.
  2510.  * 
  2511.  *@note
  2512.  * this is not the place to do any checks for values
  2513.  * which depend on some other value in the mib. Those
  2514.  * types of checks should be done in the
  2515.  * ipCidrRouteTable_check_dependencies() function.
  2516.  *
  2517.  * The following checks have already been done for you:
  2518.  *    The syntax is ASN_INTEGER
  2519.  *
  2520.  * If there a no other checks you need to do, simply return MFD_SUCCESS.
  2521.  *
  2522.  */
  2523. int
  2524. ipCidrRouteMetric3_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  2525.                                long ipCidrRouteMetric3_val)
  2526. {
  2527.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_check_value",
  2528.                 "calledn"));
  2529.     /** should never get a NULL pointer */
  2530.     netsnmp_assert(NULL != rowreq_ctx);
  2531.     /*
  2532.      * TODO:441:o: |-> Check for valid ipCidrRouteMetric3 value.
  2533.      */
  2534.     /*
  2535.      * does any os use metric 2-5? if so, update to deal with it.
  2536.      * otherwise, only accept same value we have.
  2537.      */
  2538.     if (ipCidrRouteMetric3_val != rowreq_ctx->data->rt_metric3)
  2539.         return MFD_NOT_VALID_EVER;
  2540.     return MFD_SUCCESS;         /* ipCidrRouteMetric3 value not illegal */
  2541. }                               /* ipCidrRouteMetric3_check_value */
  2542. /**
  2543.  * Save old value information
  2544.  *
  2545.  * @param rowreq_ctx
  2546.  *        Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
  2547.  *
  2548.  * @retval MFD_SUCCESS : success
  2549.  * @retval MFD_ERROR   : error. set will fail.
  2550.  *
  2551.  * This function will be called after the table level undo setup function
  2552.  * ipCidrRouteTable_undo_setup has been called.
  2553.  *
  2554.  *@note
  2555.  * this function will only be called if a new value is set for this column.
  2556.  *
  2557.  * If there is any setup specific to a particular column (e.g. allocating
  2558.  * memory for a string), you should do that setup in this function, so it
  2559.  * won't be done unless it is necessary.
  2560.  */
  2561. int
  2562. ipCidrRouteMetric3_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  2563. {
  2564.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_undo_setup",
  2565.                 "calledn"));
  2566.     /** should never get a NULL pointer */
  2567.     netsnmp_assert(NULL != rowreq_ctx);
  2568.     /*
  2569.      * TODO:455:o: |-> Setup ipCidrRouteMetric3 undo.
  2570.      */
  2571.     /*
  2572.      * copy ipCidrRouteMetric3 data
  2573.      * set rowreq_ctx->undo->ipCidrRouteMetric3 from rowreq_ctx->data->ipCidrRouteMetric3
  2574.      */
  2575.     return MFD_SUCCESS;
  2576. }                               /* ipCidrRouteMetric3_undo_setup */
  2577. /**
  2578.  * Set the new value.
  2579.  *
  2580.  * @param rowreq_ctx
  2581.  *        Pointer to the users context. You should know how to
  2582.  *        manipulate the value from this object.
  2583.  * @param ipCidrRouteMetric3_val
  2584.  *        A long containing the new value.
  2585.  */
  2586. int
  2587. ipCidrRouteMetric3_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  2588.                        long ipCidrRouteMetric3_val)
  2589. {
  2590.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_set",
  2591.                 "calledn"));
  2592.     /** should never get a NULL pointer */
  2593.     netsnmp_assert(NULL != rowreq_ctx);
  2594.     /*
  2595.      * TODO:461:M: |-> Set ipCidrRouteMetric3 value.
  2596.      * set ipCidrRouteMetric3 value in rowreq_ctx->data
  2597.      */
  2598.     return MFD_SUCCESS;
  2599. }                               /* ipCidrRouteMetric3_set */
  2600. /**
  2601.  * undo the previous set.
  2602.  *
  2603.  * @param rowreq_ctx
  2604.  *        Pointer to the users context.
  2605.  */
  2606. int
  2607. ipCidrRouteMetric3_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  2608. {
  2609.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_undo",
  2610.                 "calledn"));
  2611.     netsnmp_assert(NULL != rowreq_ctx);
  2612.     /*
  2613.      * TODO:456:o: |-> Clean up ipCidrRouteMetric3 undo.
  2614.      */
  2615.     /*
  2616.      * copy ipCidrRouteMetric3 data
  2617.      * set rowreq_ctx->data->ipCidrRouteMetric3 from rowreq_ctx->undo->ipCidrRouteMetric3
  2618.      */
  2619.     return MFD_SUCCESS;
  2620. }                               /* ipCidrRouteMetric3_undo */
  2621. /*---------------------------------------------------------------------
  2622.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric4
  2623.  * ipCidrRouteMetric4 is subid 14 of ipCidrRouteEntry.
  2624.  * Its status is Deprecated, and its access level is Create.
  2625.  * OID: .1.3.6.1.2.1.4.24.4.1.14
  2626.  * Description:
  2627. An alternate routing metric for this route.  The  
  2628.                 semantics of this metric are determined by the routing- 
  2629.                 protocol specified in the route's ipCidrRouteProto  
  2630.                 value.  If this metric is not used, its value should be  
  2631.                 set to -1.
  2632.  *
  2633.  * Attributes:
  2634.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  2635.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  2636.  *   settable   1
  2637.  *   defval: -1
  2638.  *
  2639.  *
  2640.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  2641.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  2642.  */
  2643. /**
  2644.  * Check that the proposed new value is potentially valid.
  2645.  *
  2646.  * @param rowreq_ctx
  2647.  *        Pointer to the row request context.
  2648.  * @param ipCidrRouteMetric4_val
  2649.  *        A long containing the new value.
  2650.  *
  2651.  * @retval MFD_SUCCESS        : incoming value is legal
  2652.  * @retval MFD_NOT_VALID_NOW  : incoming value is not valid now
  2653.  * @retval MFD_NOT_VALID_EVER : incoming value is never valid
  2654.  *
  2655.  * This is the place to check for requirements that are not
  2656.  * expressed in the mib syntax (for example, a requirement that
  2657.  * is detailed in the description for an object).
  2658.  *
  2659.  * You should check that the requested change between the undo value and the
  2660.  * new value is legal (ie, the transistion from one value to another
  2661.  * is legal).
  2662.  *      
  2663.  *@note
  2664.  * This check is only to determine if the new value
  2665.  * is b potentially valid. This is the first check of many, and
  2666.  * is one of the simplest ones.
  2667.  * 
  2668.  *@note
  2669.  * this is not the place to do any checks for values
  2670.  * which depend on some other value in the mib. Those
  2671.  * types of checks should be done in the
  2672.  * ipCidrRouteTable_check_dependencies() function.
  2673.  *
  2674.  * The following checks have already been done for you:
  2675.  *    The syntax is ASN_INTEGER
  2676.  *
  2677.  * If there a no other checks you need to do, simply return MFD_SUCCESS.
  2678.  *
  2679.  */
  2680. int
  2681. ipCidrRouteMetric4_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  2682.                                long ipCidrRouteMetric4_val)
  2683. {
  2684.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_check_value",
  2685.                 "calledn"));
  2686.     /** should never get a NULL pointer */
  2687.     netsnmp_assert(NULL != rowreq_ctx);
  2688.     /*
  2689.      * TODO:441:o: |-> Check for valid ipCidrRouteMetric4 value.
  2690.      */
  2691.     /*
  2692.      * does any os use metric 2-5? if so, update to deal with it.
  2693.      * otherwise, only accept same value we have.
  2694.      */
  2695.     if (ipCidrRouteMetric4_val != rowreq_ctx->data->rt_metric4)
  2696.         return MFD_NOT_VALID_EVER;
  2697.     return MFD_SUCCESS;         /* ipCidrRouteMetric4 value not illegal */
  2698. }                               /* ipCidrRouteMetric4_check_value */
  2699. /**
  2700.  * Save old value information
  2701.  *
  2702.  * @param rowreq_ctx
  2703.  *        Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
  2704.  *
  2705.  * @retval MFD_SUCCESS : success
  2706.  * @retval MFD_ERROR   : error. set will fail.
  2707.  *
  2708.  * This function will be called after the table level undo setup function
  2709.  * ipCidrRouteTable_undo_setup has been called.
  2710.  *
  2711.  *@note
  2712.  * this function will only be called if a new value is set for this column.
  2713.  *
  2714.  * If there is any setup specific to a particular column (e.g. allocating
  2715.  * memory for a string), you should do that setup in this function, so it
  2716.  * won't be done unless it is necessary.
  2717.  */
  2718. int
  2719. ipCidrRouteMetric4_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  2720. {
  2721.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_undo_setup",
  2722.                 "calledn"));
  2723.     /** should never get a NULL pointer */
  2724.     netsnmp_assert(NULL != rowreq_ctx);
  2725.     /*
  2726.      * TODO:455:o: |-> Setup ipCidrRouteMetric4 undo.
  2727.      */
  2728.     /*
  2729.      * copy ipCidrRouteMetric4 data
  2730.      * set rowreq_ctx->undo->ipCidrRouteMetric4 from rowreq_ctx->data->ipCidrRouteMetric4
  2731.      */
  2732.     return MFD_SUCCESS;
  2733. }                               /* ipCidrRouteMetric4_undo_setup */
  2734. /**
  2735.  * Set the new value.
  2736.  *
  2737.  * @param rowreq_ctx
  2738.  *        Pointer to the users context. You should know how to
  2739.  *        manipulate the value from this object.
  2740.  * @param ipCidrRouteMetric4_val
  2741.  *        A long containing the new value.
  2742.  */
  2743. int
  2744. ipCidrRouteMetric4_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  2745.                        long ipCidrRouteMetric4_val)
  2746. {
  2747.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_set",
  2748.                 "calledn"));
  2749.     /** should never get a NULL pointer */
  2750.     netsnmp_assert(NULL != rowreq_ctx);
  2751.     /*
  2752.      * TODO:461:M: |-> Set ipCidrRouteMetric4 value.
  2753.      * set ipCidrRouteMetric4 value in rowreq_ctx->data
  2754.      */
  2755.     return MFD_SUCCESS;
  2756. }                               /* ipCidrRouteMetric4_set */
  2757. /**
  2758.  * undo the previous set.
  2759.  *
  2760.  * @param rowreq_ctx
  2761.  *        Pointer to the users context.
  2762.  */
  2763. int
  2764. ipCidrRouteMetric4_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  2765. {
  2766.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_undo",
  2767.                 "calledn"));
  2768.     netsnmp_assert(NULL != rowreq_ctx);
  2769.     /*
  2770.      * TODO:456:o: |-> Clean up ipCidrRouteMetric4 undo.
  2771.      */
  2772.     /*
  2773.      * copy ipCidrRouteMetric4 data
  2774.      * set rowreq_ctx->data->ipCidrRouteMetric4 from rowreq_ctx->undo->ipCidrRouteMetric4
  2775.      */
  2776.     return MFD_SUCCESS;
  2777. }                               /* ipCidrRouteMetric4_undo */
  2778. /*---------------------------------------------------------------------
  2779.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric5
  2780.  * ipCidrRouteMetric5 is subid 15 of ipCidrRouteEntry.
  2781.  * Its status is Deprecated, and its access level is Create.
  2782.  * OID: .1.3.6.1.2.1.4.24.4.1.15
  2783.  * Description:
  2784. An alternate routing metric for this route.  The  
  2785.                 semantics of this metric are determined by the routing- 
  2786.                 protocol specified in the route's ipCidrRouteProto  
  2787.                 value.  If this metric is not used, its value should be  
  2788.                 set to -1.
  2789.  *
  2790.  * Attributes:
  2791.  *   accessible 1     isscalar 0     enums  0      hasdefval 1
  2792.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  2793.  *   settable   1
  2794.  *   defval: -1
  2795.  *
  2796.  *
  2797.  * Its syntax is INTEGER32 (based on perltype INTEGER32)
  2798.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  2799.  */
  2800. /**
  2801.  * Check that the proposed new value is potentially valid.
  2802.  *
  2803.  * @param rowreq_ctx
  2804.  *        Pointer to the row request context.
  2805.  * @param ipCidrRouteMetric5_val
  2806.  *        A long containing the new value.
  2807.  *
  2808.  * @retval MFD_SUCCESS        : incoming value is legal
  2809.  * @retval MFD_NOT_VALID_NOW  : incoming value is not valid now
  2810.  * @retval MFD_NOT_VALID_EVER : incoming value is never valid
  2811.  *
  2812.  * This is the place to check for requirements that are not
  2813.  * expressed in the mib syntax (for example, a requirement that
  2814.  * is detailed in the description for an object).
  2815.  *
  2816.  * You should check that the requested change between the undo value and the
  2817.  * new value is legal (ie, the transistion from one value to another
  2818.  * is legal).
  2819.  *      
  2820.  *@note
  2821.  * This check is only to determine if the new value
  2822.  * is b potentially valid. This is the first check of many, and
  2823.  * is one of the simplest ones.
  2824.  * 
  2825.  *@note
  2826.  * this is not the place to do any checks for values
  2827.  * which depend on some other value in the mib. Those
  2828.  * types of checks should be done in the
  2829.  * ipCidrRouteTable_check_dependencies() function.
  2830.  *
  2831.  * The following checks have already been done for you:
  2832.  *    The syntax is ASN_INTEGER
  2833.  *
  2834.  * If there a no other checks you need to do, simply return MFD_SUCCESS.
  2835.  *
  2836.  */
  2837. int
  2838. ipCidrRouteMetric5_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  2839.                                long ipCidrRouteMetric5_val)
  2840. {
  2841.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_check_value",
  2842.                 "calledn"));
  2843.     /** should never get a NULL pointer */
  2844.     netsnmp_assert(NULL != rowreq_ctx);
  2845.     /*
  2846.      * TODO:441:o: |-> Check for valid ipCidrRouteMetric5 value.
  2847.      */
  2848.     /*
  2849.      * does any os use metric 2-5? if so, update to deal with it.
  2850.      * otherwise, only accept same value we have.
  2851.      */
  2852.     if (ipCidrRouteMetric5_val != rowreq_ctx->data->rt_metric5)
  2853.         return MFD_NOT_VALID_EVER;
  2854.     return MFD_SUCCESS;         /* ipCidrRouteMetric5 value not illegal */
  2855. }                               /* ipCidrRouteMetric5_check_value */
  2856. /**
  2857.  * Save old value information
  2858.  *
  2859.  * @param rowreq_ctx
  2860.  *        Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
  2861.  *
  2862.  * @retval MFD_SUCCESS : success
  2863.  * @retval MFD_ERROR   : error. set will fail.
  2864.  *
  2865.  * This function will be called after the table level undo setup function
  2866.  * ipCidrRouteTable_undo_setup has been called.
  2867.  *
  2868.  *@note
  2869.  * this function will only be called if a new value is set for this column.
  2870.  *
  2871.  * If there is any setup specific to a particular column (e.g. allocating
  2872.  * memory for a string), you should do that setup in this function, so it
  2873.  * won't be done unless it is necessary.
  2874.  */
  2875. int
  2876. ipCidrRouteMetric5_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  2877. {
  2878.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_undo_setup",
  2879.                 "calledn"));
  2880.     /** should never get a NULL pointer */
  2881.     netsnmp_assert(NULL != rowreq_ctx);
  2882.     /*
  2883.      * TODO:455:o: |-> Setup ipCidrRouteMetric5 undo.
  2884.      */
  2885.     /*
  2886.      * copy ipCidrRouteMetric5 data
  2887.      * set rowreq_ctx->undo->ipCidrRouteMetric5 from rowreq_ctx->data->ipCidrRouteMetric5
  2888.      */
  2889.     return MFD_SUCCESS;
  2890. }                               /* ipCidrRouteMetric5_undo_setup */
  2891. /**
  2892.  * Set the new value.
  2893.  *
  2894.  * @param rowreq_ctx
  2895.  *        Pointer to the users context. You should know how to
  2896.  *        manipulate the value from this object.
  2897.  * @param ipCidrRouteMetric5_val
  2898.  *        A long containing the new value.
  2899.  */
  2900. int
  2901. ipCidrRouteMetric5_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  2902.                        long ipCidrRouteMetric5_val)
  2903. {
  2904.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_set",
  2905.                 "calledn"));
  2906.     /** should never get a NULL pointer */
  2907.     netsnmp_assert(NULL != rowreq_ctx);
  2908.     /*
  2909.      * TODO:461:M: |-> Set ipCidrRouteMetric5 value.
  2910.      * set ipCidrRouteMetric5 value in rowreq_ctx->data
  2911.      */
  2912.     return MFD_SUCCESS;
  2913. }                               /* ipCidrRouteMetric5_set */
  2914. /**
  2915.  * undo the previous set.
  2916.  *
  2917.  * @param rowreq_ctx
  2918.  *        Pointer to the users context.
  2919.  */
  2920. int
  2921. ipCidrRouteMetric5_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  2922. {
  2923.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_undo",
  2924.                 "calledn"));
  2925.     netsnmp_assert(NULL != rowreq_ctx);
  2926.     /*
  2927.      * TODO:456:o: |-> Clean up ipCidrRouteMetric5 undo.
  2928.      */
  2929.     /*
  2930.      * copy ipCidrRouteMetric5 data
  2931.      * set rowreq_ctx->data->ipCidrRouteMetric5 from rowreq_ctx->undo->ipCidrRouteMetric5
  2932.      */
  2933.     return MFD_SUCCESS;
  2934. }                               /* ipCidrRouteMetric5_undo */
  2935. /*---------------------------------------------------------------------
  2936.  * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteStatus
  2937.  * ipCidrRouteStatus is subid 16 of ipCidrRouteEntry.
  2938.  * Its status is Deprecated, and its access level is Create.
  2939.  * OID: .1.3.6.1.2.1.4.24.4.1.16
  2940.  * Description:
  2941. The row status variable, used according to row  
  2942.                 installation and removal conventions.
  2943.  *
  2944.  * Attributes:
  2945.  *   accessible 1     isscalar 0     enums  1      hasdefval 0
  2946.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  2947.  *   settable   1
  2948.  *
  2949.  * Enum range: 3/8. Values:  active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
  2950.  *
  2951.  * Its syntax is RowStatus (based on perltype INTEGER)
  2952.  * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
  2953.  */
  2954. /**
  2955.  * Check that the proposed new value is potentially valid.
  2956.  *
  2957.  * @param rowreq_ctx
  2958.  *        Pointer to the row request context.
  2959.  * @param ipCidrRouteStatus_val
  2960.  *        A long containing the new value.
  2961.  *
  2962.  * @retval MFD_SUCCESS        : incoming value is legal
  2963.  * @retval MFD_NOT_VALID_NOW  : incoming value is not valid now
  2964.  * @retval MFD_NOT_VALID_EVER : incoming value is never valid
  2965.  *
  2966.  * This is the place to check for requirements that are not
  2967.  * expressed in the mib syntax (for example, a requirement that
  2968.  * is detailed in the description for an object).
  2969.  *
  2970.  * You should check that the requested change between the undo value and the
  2971.  * new value is legal (ie, the transistion from one value to another
  2972.  * is legal).
  2973.  *      
  2974.  *@note
  2975.  * This check is only to determine if the new value
  2976.  * is b potentially valid. This is the first check of many, and
  2977.  * is one of the simplest ones.
  2978.  * 
  2979.  *@note
  2980.  * this is not the place to do any checks for values
  2981.  * which depend on some other value in the mib. Those
  2982.  * types of checks should be done in the
  2983.  * ipCidrRouteTable_check_dependencies() function.
  2984.  *
  2985.  * The following checks have already been done for you:
  2986.  *    The syntax is ASN_INTEGER
  2987.  *    The value is one of  active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
  2988.  *
  2989.  * If there a no other checks you need to do, simply return MFD_SUCCESS.
  2990.  *
  2991.  */
  2992. int
  2993. ipCidrRouteStatus_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  2994.                               u_long ipCidrRouteStatus_val)
  2995. {
  2996.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteStatus_check_value",
  2997.                 "calledn"));
  2998.     /** should never get a NULL pointer */
  2999.     netsnmp_assert(NULL != rowreq_ctx);
  3000.     /*
  3001.      * TODO:441:o: |-> Check for valid ipCidrRouteStatus value.
  3002.      */
  3003.     return MFD_SUCCESS;         /* ipCidrRouteStatus value not illegal */
  3004. }                               /* ipCidrRouteStatus_check_value */
  3005. /**
  3006.  * Save old value information
  3007.  *
  3008.  * @param rowreq_ctx
  3009.  *        Pointer to the table context (ipCidrRouteTable_rowreq_ctx)
  3010.  *
  3011.  * @retval MFD_SUCCESS : success
  3012.  * @retval MFD_ERROR   : error. set will fail.
  3013.  *
  3014.  * This function will be called after the table level undo setup function
  3015.  * ipCidrRouteTable_undo_setup has been called.
  3016.  *
  3017.  *@note
  3018.  * this function will only be called if a new value is set for this column.
  3019.  *
  3020.  * If there is any setup specific to a particular column (e.g. allocating
  3021.  * memory for a string), you should do that setup in this function, so it
  3022.  * won't be done unless it is necessary.
  3023.  */
  3024. int
  3025. ipCidrRouteStatus_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  3026. {
  3027.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteStatus_undo_setup",
  3028.                 "calledn"));
  3029.     /** should never get a NULL pointer */
  3030.     netsnmp_assert(NULL != rowreq_ctx);
  3031.     /*
  3032.      * TODO:455:o: |-> Setup ipCidrRouteStatus undo.
  3033.      */
  3034.     /*
  3035.      * copy ipCidrRouteStatus data
  3036.      * set rowreq_ctx->undo->ipCidrRouteStatus from rowreq_ctx->data->ipCidrRouteStatus
  3037.      */
  3038.     return MFD_SUCCESS;
  3039. }                               /* ipCidrRouteStatus_undo_setup */
  3040. /**
  3041.  * Set the new value.
  3042.  *
  3043.  * @param rowreq_ctx
  3044.  *        Pointer to the users context. You should know how to
  3045.  *        manipulate the value from this object.
  3046.  * @param ipCidrRouteStatus_val
  3047.  *        A long containing the new value.
  3048.  */
  3049. int
  3050. ipCidrRouteStatus_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx,
  3051.                       u_long ipCidrRouteStatus_val)
  3052. {
  3053.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteStatus_set",
  3054.                 "calledn"));
  3055.     /** should never get a NULL pointer */
  3056.     netsnmp_assert(NULL != rowreq_ctx);
  3057.     /*
  3058.      * TODO:461:M: |-> Set ipCidrRouteStatus value.
  3059.      * set ipCidrRouteStatus value in rowreq_ctx->data
  3060.      */
  3061.     return MFD_SUCCESS;
  3062. }                               /* ipCidrRouteStatus_set */
  3063. /**
  3064.  * undo the previous set.
  3065.  *
  3066.  * @param rowreq_ctx
  3067.  *        Pointer to the users context.
  3068.  */
  3069. int
  3070. ipCidrRouteStatus_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx)
  3071. {
  3072.     DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteStatus_undo",
  3073.                 "calledn"));
  3074.     netsnmp_assert(NULL != rowreq_ctx);
  3075.     /*
  3076.      * TODO:456:o: |-> Clean up ipCidrRouteStatus undo.
  3077.      */
  3078.     /*
  3079.      * copy ipCidrRouteStatus data
  3080.      * set rowreq_ctx->data->ipCidrRouteStatus from rowreq_ctx->undo->ipCidrRouteStatus
  3081.      */
  3082.     return MFD_SUCCESS;
  3083. }                               /* ipCidrRouteStatus_undo */
  3084. /** @} */
  3085. /** @{ */