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

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: inetNetToMediaTable.c,v 1.4.2.1 2005/08/18 21:13:10 rstory Exp $
  6.  */
  7. /** mainpage MFD helper for inetNetToMediaTable
  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 "inetNetToMediaTable.h"
  23. #include <net-snmp/agent/mib_modules.h>
  24. #include "inetNetToMediaTable_interface.h"
  25. oid             inetNetToMediaTable_oid[] = { INETNETTOMEDIATABLE_OID };
  26. int             inetNetToMediaTable_oid_size =
  27. OID_LENGTH(inetNetToMediaTable_oid);
  28. void            initialize_table_inetNetToMediaTable(void);
  29. /**
  30.  * Initializes the inetNetToMediaTable module
  31.  */
  32. void
  33. init_inetNetToMediaTable(void)
  34. {
  35.     DEBUGMSGTL(("verbose:inetNetToMediaTable:init_inetNetToMediaTable",
  36.                 "calledn"));
  37.     /*
  38.      * TODO:300:o: Perform inetNetToMediaTable one-time module initialization.
  39.      */
  40.     /*
  41.      * here we initialize all the tables we're planning on supporting
  42.      */
  43.     if (should_init("inetNetToMediaTable"))
  44.         initialize_table_inetNetToMediaTable();
  45. }                               /* init_inetNetToMediaTable */
  46. /**
  47.  * Initialize the table inetNetToMediaTable 
  48.  *    (Define its contents and how it's structured)
  49.  */
  50. void
  51. initialize_table_inetNetToMediaTable(void)
  52. {
  53.     inetNetToMediaTable_registration_ptr user_context;
  54.     u_long          flags;
  55.     DEBUGMSGTL(("verbose:inetNetToMediaTable:initialize_table_inetNetToMediaTable", "calledn"));
  56.     /*
  57.      * TODO:301:o: Perform inetNetToMediaTable one-time table initialization.
  58.      */
  59.     /*
  60.      * TODO:302:o: |->Initialize inetNetToMediaTable 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("inetNetToMediaTable", 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.     _inetNetToMediaTable_initialize_interface(user_context, flags);
  79. }                               /* initialize_table_inetNetToMediaTable */
  80. /**
  81.  * pre-request callback
  82.  *
  83.  *
  84.  * @retval MFD_SUCCESS              : success.
  85.  * @retval MFD_ERROR                : other error
  86.  */
  87. int
  88. inetNetToMediaTable_pre_request(inetNetToMediaTable_registration_ptr
  89.                                 user_context)
  90. {
  91.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_pre_request", "calledn"));
  92.     /*
  93.      * TODO:510:o: Perform inetNetToMediaTable pre-request actions.
  94.      */
  95.     return MFD_SUCCESS;
  96. }                               /* inetNetToMediaTable_pre_request */
  97. /**
  98.  * post-request callback
  99.  *
  100.  *
  101.  * @retval MFD_SUCCESS : success.
  102.  * @retval MFD_ERROR   : other error (ignored)
  103.  */
  104. int
  105. inetNetToMediaTable_post_request(inetNetToMediaTable_registration_ptr
  106.                                  user_context)
  107. {
  108.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_post_request", "calledn"));
  109.     /*
  110.      * TODO:511:o: Perform inetNetToMediaTable pos-request actions.
  111.      */
  112.     return MFD_SUCCESS;
  113. }                               /* inetNetToMediaTable_post_request */
  114. /**********************************************************************
  115.  **********************************************************************
  116.  ***
  117.  *** Table inetNetToMediaTable
  118.  ***
  119.  **********************************************************************
  120.  **********************************************************************/
  121. /*
  122.  * inetNetToMediaTable is subid 35 of ip.
  123.  * Its status is Current.
  124.  * OID: .1.3.6.1.2.1.4.35, length: 8
  125.  */
  126. /*
  127.  * ---------------------------------------------------------------------
  128.  * * TODO:200:r: Implement inetNetToMediaTable data context functions.
  129.  */
  130. /*
  131.  * inetNetToMediaTable_allocate_data
  132.  *
  133.  * Purpose: create new inetNetToMediaTable_data.
  134.  */
  135. inetNetToMediaTable_data *
  136. inetNetToMediaTable_allocate_data(void)
  137. {
  138.     /*
  139.      * TODO:201:r: |-> allocate memory for the inetNetToMediaTable data context.
  140.      */
  141.     /** this might not be right for netsnmp_inetmedia_entry */
  142.     inetNetToMediaTable_data *rtn = netsnmp_access_arp_entry_create();
  143.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_allocate_data", "calledn"));
  144.     if (NULL == rtn) {
  145.         snmp_log(LOG_ERR, "unable to malloc memory for new "
  146.                  "inetNetToMediaTable_data.n");
  147.     }
  148.     return rtn;
  149. }                               /* inetNetToMediaTable_allocate_data */
  150. /*
  151.  * inetNetToMediaTable_release_data
  152.  *
  153.  * Purpose: release inetNetToMediaTable data.
  154.  */
  155. void
  156. inetNetToMediaTable_release_data(inetNetToMediaTable_data * data)
  157. {
  158.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_release_data", "calledn"));
  159.     /*
  160.      * TODO:202:r: |-> release memory for the inetNetToMediaTable data context.
  161.      */
  162.     netsnmp_access_arp_entry_free(data);
  163. }                               /* inetNetToMediaTable_release_data */
  164. /**
  165.  * set mib index(es)
  166.  *
  167.  * @param tbl_idx mib index structure
  168.  *
  169.  * @retval MFD_SUCCESS     : success.
  170.  * @retval MFD_ERROR       : other error.
  171.  *
  172.  * @remark
  173.  *  This convenience function is useful for setting all the MIB index
  174.  *  components with a single function call. It is assume that the C values
  175.  *  have already been mapped from their native/rawformat to the MIB format.
  176.  */
  177. int
  178. inetNetToMediaTable_indexes_set_tbl_idx(inetNetToMediaTable_mib_index *
  179.                                         tbl_idx,
  180.                                         long inetNetToMediaIfIndex_val,
  181.                                         u_long
  182.                                         inetNetToMediaNetAddressType_val,
  183.                                         char
  184.                                         *inetNetToMediaNetAddress_val_ptr, size_t
  185.                                         inetNetToMediaNetAddress_val_ptr_len)
  186. {
  187.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_indexes_set_tbl_idx", "calledn"));
  188.     /*
  189.      * inetNetToMediaIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H 
  190.      */
  191.     /** WARNING: this code might not work for netsnmp_arp_entry */
  192.     tbl_idx->inetNetToMediaIfIndex = inetNetToMediaIfIndex_val;
  193.     /*
  194.      * inetNetToMediaNetAddressType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h 
  195.      */
  196.     /** WARNING: this code might not work for netsnmp_arp_entry */
  197.     tbl_idx->inetNetToMediaNetAddressType =
  198.         inetNetToMediaNetAddressType_val;
  199.     /*
  200.      * inetNetToMediaNetAddress(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h 
  201.      */
  202.     tbl_idx->inetNetToMediaNetAddress_len =
  203.         sizeof(tbl_idx->inetNetToMediaNetAddress);
  204.     /** WARNING: this code might not work for netsnmp_arp_entry */
  205.     /*
  206.      * make sure there is enough space for inetNetToMediaNetAddress data
  207.      */
  208.     if (tbl_idx->inetNetToMediaNetAddress_len <
  209.         inetNetToMediaNetAddress_val_ptr_len) {
  210.         snmp_log(LOG_ERR, "not enough space for valuen");
  211.         return MFD_ERROR;
  212.     }
  213.     tbl_idx->inetNetToMediaNetAddress_len =
  214.         inetNetToMediaNetAddress_val_ptr_len;
  215.     memcpy(tbl_idx->inetNetToMediaNetAddress,
  216.            inetNetToMediaNetAddress_val_ptr,
  217.            tbl_idx->inetNetToMediaNetAddress_len *
  218.            sizeof(tbl_idx->inetNetToMediaNetAddress[0]));
  219.     return MFD_SUCCESS;
  220. }                               /* inetNetToMediaTable_indexes_set_tbl_idx */
  221. /**
  222.  * @internal
  223.  * set row context indexes
  224.  *
  225.  * @param reqreq_ctx the row context that needs updated indexes
  226.  *
  227.  * @retval MFD_SUCCESS     : success.
  228.  * @retval MFD_ERROR       : other error.
  229.  *
  230.  * @remark
  231.  *  This function sets the mib indexs, then updates the oid indexs
  232.  *  from the mib index.
  233.  */
  234. int
  235. inetNetToMediaTable_indexes_set(inetNetToMediaTable_rowreq_ctx *
  236.                                 rowreq_ctx, long inetNetToMediaIfIndex_val,
  237.                                 u_long inetNetToMediaNetAddressType_val,
  238.                                 char *inetNetToMediaNetAddress_val_ptr,
  239.                                 size_t
  240.                                 inetNetToMediaNetAddress_val_ptr_len)
  241. {
  242.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_indexes_set", "calledn"));
  243.     if (MFD_SUCCESS !=
  244.         inetNetToMediaTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
  245.                                                 inetNetToMediaIfIndex_val,
  246.                                                 inetNetToMediaNetAddressType_val,
  247.                                                 inetNetToMediaNetAddress_val_ptr,
  248.                                                 inetNetToMediaNetAddress_val_ptr_len))
  249.         return MFD_ERROR;
  250.     /*
  251.      * convert mib index to oid index
  252.      */
  253.     rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
  254.     if (0 != inetNetToMediaTable_index_to_oid(&rowreq_ctx->oid_idx,
  255.                                               &rowreq_ctx->tbl_idx)) {
  256.         return MFD_ERROR;
  257.     }
  258.     return MFD_SUCCESS;
  259. }                               /* inetNetToMediaTable_indexes_set */
  260. /*---------------------------------------------------------------------
  261.  * IP-MIB::inetNetToMediaEntry.inetNetToMediaPhysAddress
  262.  * inetNetToMediaPhysAddress is subid 4 of inetNetToMediaEntry.
  263.  * Its status is Current, and its access level is Create.
  264.  * OID: .1.3.6.1.2.1.4.35.1.4
  265.  * Description:
  266. The media-dependent `physical' address.
  267.             As the entries in this table are typically not persistent
  268.             when this object is written the entity SHOULD NOT save the
  269.             change to non-volatile storage.
  270.  *
  271.  * Attributes:
  272.  *   accessible 1     isscalar 0     enums  0      hasdefval 0
  273.  *   readable   1     iscolumn 1     ranges 1      hashint   1
  274.  *   settable   1
  275.  *   hint: 1x:
  276.  *
  277.  * Ranges:  0 - 65535;
  278.  *
  279.  * Its syntax is PhysAddress (based on perltype OCTETSTR)
  280.  * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
  281.  * This data type requires a length.  (Max 65535)
  282.  */
  283. /**
  284.  * Extract the current value of the inetNetToMediaPhysAddress data.
  285.  *
  286.  * Set a value using the data context for the row.
  287.  *
  288.  * @param rowreq_ctx
  289.  *        Pointer to the row request context.
  290.  * @param inetNetToMediaPhysAddress_val_ptr_ptr
  291.  *        Pointer to storage for a char variable
  292.  * @param inetNetToMediaPhysAddress_val_ptr_len_ptr
  293.  *        Pointer to a size_t. On entry, it will contain the size (in bytes)
  294.  *        pointed to by inetNetToMediaPhysAddress.
  295.  *        On exit, this value should contain the data size (in bytes).
  296.  *
  297.  * @retval MFD_SUCCESS         : success
  298.  * @retval MFD_SKIP            : skip this node (no value for now)
  299.  * @retval MFD_ERROR           : Any other error
  300. *
  301.  * @note If you need more than (*inetNetToMediaPhysAddress_val_ptr_len_ptr) bytes of memory,
  302.  *       allocate it using malloc() and update inetNetToMediaPhysAddress_val_ptr_ptr.
  303.  *       <b>DO NOT</b> free the previous pointer.
  304.  *       The MFD helper will release the memory you allocate.
  305.  *
  306.  * @remark If you call this function yourself, you are responsible
  307.  *         for checking if the pointer changed, and freeing any
  308.  *         previously allocated memory. (Not necessary if you pass
  309.  *         in a pointer to static memory, obviously.)
  310.  */
  311. int
  312. inetNetToMediaPhysAddress_get(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
  313.                               char **inetNetToMediaPhysAddress_val_ptr_ptr,
  314.                               size_t
  315.                               *inetNetToMediaPhysAddress_val_ptr_len_ptr)
  316. {
  317.    /** we should have a non-NULL pointer and enough storage */
  318.     netsnmp_assert((NULL != inetNetToMediaPhysAddress_val_ptr_ptr)
  319.                    && (NULL != *inetNetToMediaPhysAddress_val_ptr_ptr));
  320.     netsnmp_assert(NULL != inetNetToMediaPhysAddress_val_ptr_len_ptr);
  321.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaPhysAddress_get", "calledn"));
  322.     netsnmp_assert(NULL != rowreq_ctx);
  323.     /*
  324.      * TODO:231:o: |-> Extract the current value of the inetNetToMediaPhysAddress data.
  325.      * set (* inetNetToMediaPhysAddress_val_ptr_ptr ) and (* inetNetToMediaPhysAddress_val_ptr_len_ptr ) from rowreq_ctx->data
  326.      */
  327.     if ((*inetNetToMediaPhysAddress_val_ptr_len_ptr) <
  328.         rowreq_ctx->data->arp_physaddress_len)
  329.         return MFD_SKIP;
  330.     memcpy((*inetNetToMediaPhysAddress_val_ptr_ptr),
  331.            rowreq_ctx->data->arp_physaddress,
  332.            rowreq_ctx->data->arp_physaddress_len);
  333.     (*inetNetToMediaPhysAddress_val_ptr_len_ptr) =
  334.         rowreq_ctx->data->arp_physaddress_len;
  335.     
  336.     return MFD_SUCCESS;
  337. }                               /* inetNetToMediaPhysAddress_get */
  338. /*---------------------------------------------------------------------
  339.  * IP-MIB::inetNetToMediaEntry.inetNetToMediaLastUpdated
  340.  * inetNetToMediaLastUpdated is subid 5 of inetNetToMediaEntry.
  341.  * Its status is Current, and its access level is ReadOnly.
  342.  * OID: .1.3.6.1.2.1.4.35.1.5
  343.  * Description:
  344. The value of sysUpTime at the time this entry was last
  345.             updated.  If this entry was updated prior to the last re-
  346.             initialization of the local network management subsystem,
  347.             then this object contains a zero value.
  348.  *
  349.  * Attributes:
  350.  *   accessible 1     isscalar 0     enums  0      hasdefval 0
  351.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  352.  *   settable   0
  353.  *
  354.  *
  355.  * Its syntax is TimeStamp (based on perltype TICKS)
  356.  * The net-snmp type is ASN_TIMETICKS. The C type decl is u_long (u_long)
  357.  */
  358. /**
  359.  * Extract the current value of the inetNetToMediaLastUpdated data.
  360.  *
  361.  * Set a value using the data context for the row.
  362.  *
  363.  * @param rowreq_ctx
  364.  *        Pointer to the row request context.
  365.  * @param inetNetToMediaLastUpdated_val_ptr
  366.  *        Pointer to storage for a u_long variable
  367.  *
  368.  * @retval MFD_SUCCESS         : success
  369.  * @retval MFD_SKIP            : skip this node (no value for now)
  370.  * @retval MFD_ERROR           : Any other error
  371.  */
  372. int
  373. inetNetToMediaLastUpdated_get(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
  374.                               u_long * inetNetToMediaLastUpdated_val_ptr)
  375. {
  376.    /** we should have a non-NULL pointer */
  377.     netsnmp_assert(NULL != inetNetToMediaLastUpdated_val_ptr);
  378.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaLastUpdated_get", "calledn"));
  379.     netsnmp_assert(NULL != rowreq_ctx);
  380.     /*
  381.      * TODO:231:o: |-> Extract the current value of the inetNetToMediaLastUpdated data.
  382.      * set (* inetNetToMediaLastUpdated_val_ptr ) from rowreq_ctx->data
  383.      */
  384.     return MFD_SKIP;            /* TODO:235:M: |-> Remove SKIP once you've set inetNetToMediaLastUpdated data */
  385.     return MFD_SUCCESS;
  386. }                               /* inetNetToMediaLastUpdated_get */
  387. /*---------------------------------------------------------------------
  388.  * IP-MIB::inetNetToMediaEntry.inetNetToMediaType
  389.  * inetNetToMediaType is subid 6 of inetNetToMediaEntry.
  390.  * Its status is Current, and its access level is Create.
  391.  * OID: .1.3.6.1.2.1.4.35.1.6
  392.  * Description:
  393. The type of mapping.
  394.             Setting this object to the value invalid(2) has the effect
  395.             of invalidating the corresponding entry in the
  396.             inetNetToMediaTable.  That is, it effectively dis-
  397.             associates the interface identified with said entry from the
  398.             mapping identified with said entry.  It is an
  399.             implementation- specific matter as to whether the agent
  400.             removes an invalidated entry from the table.  Accordingly,
  401.             management stations must be prepared to receive tabular
  402.             information from agents that corresponds to entries not
  403.             currently in use.  Proper interpretation of such entries
  404.             requires examination of the relevant inetNetToMediaType
  405.             object.
  406.             The 'dynamic(3)' type indicates that the IP address to
  407.             physical addresses mapping has been dynamically resolved
  408.             using e.g. IPv4 ARP or the IPv6 Neighbor Discovery protocol.
  409.             The 'static(4)' type indicates that the mapping has been
  410.             statically configured.  Both of these refer to entries that
  411.             provide mappings for other entities addresses.
  412.             The 'local(5)' type indicates that the mapping is provided
  413.             for an entity's own interface address.
  414.             As the entries in this table are typically not persistent
  415.             when this object is written the entity SHOULD NOT save the
  416.             change to non-volatile storage.
  417.  *
  418.  * Attributes:
  419.  *   accessible 1     isscalar 0     enums  1      hasdefval 1
  420.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  421.  *   settable   1
  422.  *   defval: static
  423.  *
  424.  * Enum range: 5/8. Values:  other(1), invalid(2), dynamic(3), static(4), local(5)
  425.  *
  426.  * Its syntax is INTEGER (based on perltype INTEGER)
  427.  * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
  428.  */
  429. /**
  430.  * Extract the current value of the inetNetToMediaType data.
  431.  *
  432.  * Set a value using the data context for the row.
  433.  *
  434.  * @param rowreq_ctx
  435.  *        Pointer to the row request context.
  436.  * @param inetNetToMediaType_val_ptr
  437.  *        Pointer to storage for a long variable
  438.  *
  439.  * @retval MFD_SUCCESS         : success
  440.  * @retval MFD_SKIP            : skip this node (no value for now)
  441.  * @retval MFD_ERROR           : Any other error
  442.  */
  443. int
  444. inetNetToMediaType_get(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
  445.                        u_long * inetNetToMediaType_val_ptr)
  446. {
  447.    /** we should have a non-NULL pointer */
  448.     netsnmp_assert(NULL != inetNetToMediaType_val_ptr);
  449.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaType_get",
  450.                 "calledn"));
  451.     netsnmp_assert(NULL != rowreq_ctx);
  452.     /*
  453.      * TODO:231:o: |-> Extract the current value of the inetNetToMediaType data.
  454.      * set (* inetNetToMediaType_val_ptr ) from rowreq_ctx->data
  455.      */
  456.     (*inetNetToMediaType_val_ptr) = rowreq_ctx->data->arp_type;
  457.     return MFD_SUCCESS;
  458. }                               /* inetNetToMediaType_get */
  459. /*---------------------------------------------------------------------
  460.  * IP-MIB::inetNetToMediaEntry.inetNetToMediaState
  461.  * inetNetToMediaState is subid 7 of inetNetToMediaEntry.
  462.  * Its status is Current, and its access level is ReadOnly.
  463.  * OID: .1.3.6.1.2.1.4.35.1.7
  464.  * Description:
  465. The Neighbor Unreachability Detection [4] state for the
  466.             interface when the address mapping in this entry is used.
  467.             If Neighbor Unreachability Detection is not in use (e.g. for
  468.             IPv4), this object is always unknown(6).
  469.  *
  470.  * Attributes:
  471.  *   accessible 1     isscalar 0     enums  1      hasdefval 0
  472.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  473.  *   settable   0
  474.  *
  475.  * Enum range: 6/8. Values:  reachable(1), stale(2), delay(3), probe(4), invalid(5), unknown(6), incomplete(7)
  476.  *
  477.  * Its syntax is INTEGER (based on perltype INTEGER)
  478.  * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
  479.  */
  480. /**
  481.  * Extract the current value of the inetNetToMediaState data.
  482.  *
  483.  * Set a value using the data context for the row.
  484.  *
  485.  * @param rowreq_ctx
  486.  *        Pointer to the row request context.
  487.  * @param inetNetToMediaState_val_ptr
  488.  *        Pointer to storage for a long variable
  489.  *
  490.  * @retval MFD_SUCCESS         : success
  491.  * @retval MFD_SKIP            : skip this node (no value for now)
  492.  * @retval MFD_ERROR           : Any other error
  493.  */
  494. int
  495. inetNetToMediaState_get(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
  496.                         u_long * inetNetToMediaState_val_ptr)
  497. {
  498.    /** we should have a non-NULL pointer */
  499.     netsnmp_assert(NULL != inetNetToMediaState_val_ptr);
  500.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaState_get",
  501.                 "calledn"));
  502.     netsnmp_assert(NULL != rowreq_ctx);
  503.     /*
  504.      * TODO:231:o: |-> Extract the current value of the inetNetToMediaState data.
  505.      * set (* inetNetToMediaState_val_ptr ) from rowreq_ctx->data
  506.      */
  507.     (*inetNetToMediaState_val_ptr) = INETNETTOMEDIASTATE_UNKNOWN;
  508.     return MFD_SUCCESS;
  509. }                               /* inetNetToMediaState_get */
  510. /*---------------------------------------------------------------------
  511.  * IP-MIB::inetNetToMediaEntry.inetNetToMediaRowStatus
  512.  * inetNetToMediaRowStatus is subid 8 of inetNetToMediaEntry.
  513.  * Its status is Current, and its access level is Create.
  514.  * OID: .1.3.6.1.2.1.4.35.1.8
  515.  * Description:
  516. The status of this conceptual row.
  517.             The RowStatus TC requires that this DESCRIPTION clause
  518.             states under which circumstances other objects in this row
  519.             can be modified.  The value of this object has no effect on
  520.             whether other objects in this conceptual row can be
  521.             modified.
  522.             A conceptual row can not be made active until the
  523.             inetNetToMediaPhysAddress object has been set.
  524.             Note that if the inetNetToMediaType is set to 'invalid' the
  525.             managed node may delete the entry independent of the state
  526.             of this object.
  527.  *
  528.  * Attributes:
  529.  *   accessible 1     isscalar 0     enums  1      hasdefval 0
  530.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  531.  *   settable   1
  532.  *
  533.  * Enum range: 3/8. Values:  active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
  534.  *
  535.  * Its syntax is RowStatus (based on perltype INTEGER)
  536.  * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
  537.  */
  538. /**
  539.  * Extract the current value of the inetNetToMediaRowStatus data.
  540.  *
  541.  * Set a value using the data context for the row.
  542.  *
  543.  * @param rowreq_ctx
  544.  *        Pointer to the row request context.
  545.  * @param inetNetToMediaRowStatus_val_ptr
  546.  *        Pointer to storage for a long variable
  547.  *
  548.  * @retval MFD_SUCCESS         : success
  549.  * @retval MFD_SKIP            : skip this node (no value for now)
  550.  * @retval MFD_ERROR           : Any other error
  551.  */
  552. int
  553. inetNetToMediaRowStatus_get(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
  554.                             u_long * inetNetToMediaRowStatus_val_ptr)
  555. {
  556.    /** we should have a non-NULL pointer */
  557.     netsnmp_assert(NULL != inetNetToMediaRowStatus_val_ptr);
  558.     (*inetNetToMediaRowStatus_val_ptr) =
  559.         rowreq_ctx->inetNetToMediaRowStatus;
  560.     return MFD_SUCCESS;
  561. }                               /* inetNetToMediaRowStatus_get */
  562. /** @} */
  563. /**********************************************************************
  564.  **********************************************************************
  565.  ***
  566.  *** Table inetNetToMediaTable
  567.  ***
  568.  **********************************************************************
  569.  **********************************************************************/
  570. /*
  571.  * inetNetToMediaTable is subid 35 of ip.
  572.  * Its status is Current.
  573.  * OID: .1.3.6.1.2.1.4.35, length: 8
  574.  */
  575.     /*
  576.      * NOTE: if you update this chart, please update the versions in
  577.      *       local/mib2c-conf.d/parent-set.m2i
  578.      *       agent/mibgroup/helpers/baby_steps.c
  579.      * while you're at it.
  580.      */
  581.     /*
  582.      ***********************************************************************
  583.      * Baby Steps Flow Chart (2004.06.05)                                  *
  584.      *                                                                     *
  585.      * +--------------+    +================+    U = unconditional path    *
  586.      * |optional state|    ||required state||    S = path for success      *
  587.      * +--------------+    +================+    E = path for error        *
  588.      ***********************************************************************
  589.      *
  590.      *                        +--------------+
  591.      *                        |     pre      |
  592.      *                        |   request    |
  593.      *                        +--------------+
  594.      *                               | U
  595.      * +-------------+        +==============+
  596.      * |    row    |f|<-------||  object    ||
  597.      * |  create   |1|      E ||  lookup    ||
  598.      * +-------------+        +==============+
  599.      *     E |   | S                 | S
  600.      *       |   +------------------>|
  601.      *       |                +==============+
  602.      *       |              E ||   check    ||
  603.      *       |<---------------||   values   ||
  604.      *       |                +==============+
  605.      *       |                       | S
  606.      *       |                +==============+
  607.      *       |       +<-------||   undo     ||
  608.      *       |       |      E ||   setup    ||
  609.      *       |       |        +==============+
  610.      *       |       |               | S
  611.      *       |       |        +==============+
  612.      *       |       |        ||    set     ||-------------------------->+
  613.      *       |       |        ||   value    || E                         |
  614.      *       |       |        +==============+                           |
  615.      *       |       |               | S                                 |
  616.      *       |       |        +--------------+                           |
  617.      *       |       |        |    check     |-------------------------->|
  618.      *       |       |        |  consistency | E                         |
  619.      *       |       |        +--------------+                           |
  620.      *       |       |               | S                                 |
  621.      *       |       |        +==============+         +==============+  |
  622.      *       |       |        ||   commit   ||-------->||     undo   ||  |
  623.      *       |       |        ||            || E       ||    commit  ||  |
  624.      *       |       |        +==============+         +==============+  |
  625.      *       |       |               | S                     U |<--------+
  626.      *       |       |        +--------------+         +==============+
  627.      *       |       |        | irreversible |         ||    undo    ||
  628.      *       |       |        |    commit    |         ||     set    ||
  629.      *       |       |        +--------------+         +==============+
  630.      *       |       |               | U                     U |
  631.      *       |       +-------------->|<------------------------+
  632.      *       |                +==============+
  633.      *       |                ||   undo     ||
  634.      *       |                ||  cleanup   ||
  635.      *       |                +==============+
  636.      *       +---------------------->| U
  637.      *                               |
  638.      *                          (err && f1)------------------->+
  639.      *                               |                         |
  640.      *                        +--------------+         +--------------+
  641.      *                        |    post      |<--------|      row     |
  642.      *                        |   request    |       U |    release   |
  643.      *                        +--------------+         +--------------+
  644.      *
  645.      */
  646. /**
  647.  * verify specified index is valid.
  648.  *
  649.  * This check is independent of whether or not the values specified for
  650.  * the columns of the new row are valid. Column values and row consistency
  651.  * will be checked later. At this point, only the index values should be
  652.  * checked.
  653.  *
  654.  * All of the individual index validation functions have been called, so this
  655.  * is the place to make sure they are valid as a whole when combined. If
  656.  * you only have one index, 
  657.  * 
  658.  *
  659.  *
  660.  * @param inetNetToMediaTable_reg
  661.  *        Pointer to the user registration data
  662.  * @param inetNetToMediaTable_rowreq_ctx
  663.  *        Pointer to the users context.
  664.  * @retval MFD_SUCCESS            : success
  665.  * @retval MFD_CANNOT_CREATE_NOW  : index not valid right now
  666.  * @retval MFD_CANNOT_CREATE_EVER : index never valid
  667.  */
  668. int
  669. inetNetToMediaTable_validate_index(inetNetToMediaTable_registration_ptr
  670.                                    inetNetToMediaTable_reg,
  671.                                    inetNetToMediaTable_rowreq_ctx *
  672.                                    rowreq_ctx)
  673. {
  674.     int             rc = MFD_SUCCESS;
  675.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_validate_index", "calledn"));
  676.     /** we should have a non-NULL pointer */
  677.     netsnmp_assert(NULL != rowreq_ctx);
  678.     /*
  679.      * TODO:430:M: |-> Validate potential inetNetToMediaTable index.
  680.      */
  681.     if (1) {
  682.         snmp_log(LOG_WARNING, "invalid index for a new row in the "
  683.                  "inetNetToMediaTable table.n");
  684.         /*
  685.          * determine failure type.
  686.          *
  687.          * If the index could not ever be created, return MFD_NOT_EVER
  688.          * If the index can not be created under the present circumstances
  689.          * (even though it could be created under other circumstances),
  690.          * return MFD_NOT_NOW.
  691.          */
  692.         if (0) {
  693.             return MFD_CANNOT_CREATE_EVER;
  694.         } else {
  695.             return MFD_CANNOT_CREATE_NOW;
  696.         }
  697.     }
  698.     return rc;
  699. }                               /* inetNetToMediaTable_validate_index */
  700. /**
  701.  * Setup up context with information needed to undo a set request.
  702.  *
  703.  * This function will be called before the individual node undo setup
  704.  * functions are called. If you need to do any undo setup that is not
  705.  * related to a specific column, you can do it here.
  706.  *
  707.  * Note that an individual node's undo_setup function will only be called
  708.  * if that node is being set to a new value.
  709.  *
  710.  * If there is any setup specific to a particular column (e.g. allocating
  711.  * memory for a string), you should do that setup in the node's undo_setup
  712.  * function, so it won't be done unless it is necessary.
  713.  *
  714.  * @param rowreq_ctx
  715.  *        Pointer to the table context (inetNetToMediaTable_rowreq_ctx)
  716.  *
  717.  * @retval MFD_SUCCESS : success
  718.  * @retval MFD_ERROR   : error. set will fail.
  719.  */
  720. int
  721. inetNetToMediaTable_undo_setup(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
  722. {
  723.     int             rc = MFD_SUCCESS;
  724.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_undo_setup", "calledn"));
  725.     /** we should have a non-NULL pointer */
  726.     netsnmp_assert(NULL != rowreq_ctx);
  727.     /*
  728.      * TODO:451:M: |-> Setup inetNetToMediaTable undo.
  729.      * set up inetNetToMediaTable undo information, in preparation for a set.
  730.      */
  731.     return rc;
  732. }                               /* inetNetToMediaTable_undo_setup */
  733. /**
  734.  * Cleanup up context undo information.
  735.  *
  736.  * This function will be called after set/commit processing. If you
  737.  * allocated any resources in undo_setup, this is the place to release
  738.  * those resources.
  739.  *
  740.  * This function is called regardless of the success or failure of the set
  741.  * request. If you need to perform different steps for cleanup depending
  742.  * on success or failure, you can add a flag to the rowreq_ctx.
  743.  *
  744.  * @param rowreq_ctx
  745.  *        Pointer to the table context (inetNetToMediaTable_rowreq_ctx)
  746.  *
  747.  * @retval MFD_SUCCESS : success
  748.  * @retval MFD_ERROR   : error
  749.  */
  750. int
  751. inetNetToMediaTable_undo_cleanup(inetNetToMediaTable_rowreq_ctx *
  752.                                  rowreq_ctx)
  753. {
  754.     int             rc = MFD_SUCCESS;
  755.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_undo_cleanup", "calledn"));
  756.     /** we should have a non-NULL pointer */
  757.     netsnmp_assert(NULL != rowreq_ctx);
  758.     /*
  759.      * TODO:452:M: |-> Cleanup inetNetToMediaTable undo.
  760.      */
  761.     return rc;
  762. }                               /* inetNetToMediaTable_undo_cleanup */
  763. /**
  764.  * commit new values.
  765.  *
  766.  * At this point, you should have done everything you can to ensure that
  767.  * this commit will not fail.
  768.  *
  769.  * Should you need different behavior depending on which columns were
  770.  * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
  771.  * set. The definitions for the FLAG_* bits can be found in
  772.  * inetNetToMediaTable.h.
  773.  * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
  774.  *
  775.  * @param inetNetToMediaTable_rowreq_ctx
  776.  *        Pointer to the users context.
  777.  *
  778.  * @retval MFD_SUCCESS : success
  779.  * @retval MFD_ERROR   : error
  780.  */
  781. int
  782. inetNetToMediaTable_commit(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
  783. {
  784.     int             rc = MFD_SUCCESS;
  785.     int             save_flags;
  786.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_commit",
  787.                 "calledn"));
  788.     /** we should have a non-NULL pointer */
  789.     netsnmp_assert(NULL != rowreq_ctx);
  790.     /*
  791.      * save flags, then clear until we actually do something
  792.      */
  793.     save_flags = rowreq_ctx->column_set_flags;
  794.     rowreq_ctx->column_set_flags = 0;
  795.     /*
  796.      * commit inetNetToMediaTable data
  797.      * 1) check the column's flag in save_flags to see if it was set.
  798.      * 2) clear the flag when you handle that column
  799.      * 3) set the column's flag in column_set_flags if it needs undo
  800.      *    processing in case of a failure.
  801.      */
  802. #if 1
  803. #warning nettomedia commit
  804. #else
  805.     if (save_flags & FLAG_INETNETTOMEDIAPHYSADDRESS) {
  806.         save_flags &= ~FLAG_INETNETTOMEDIAPHYSADDRESS;  /* clear inetNetToMediaPhysAddress */
  807.         /*
  808.          * TODO:482:o: |-> commit column inetNetToMediaPhysAddress.
  809.          */
  810.         rc = -1;
  811.         if (-1 == rc) {
  812.             snmp_log(LOG_ERR,
  813.                      "inetNetToMediaTable column inetNetToMediaPhysAddress commit failedn");
  814.         } else {
  815.             /*
  816.              * set flag, in case we need to undo inetNetToMediaPhysAddress
  817.              */
  818.             rowreq_ctx->column_set_flags |= FLAG_INETNETTOMEDIAPHYSADDRESS;
  819.         }
  820.     }
  821.     if (save_flags & FLAG_INETNETTOMEDIATYPE) {
  822.         save_flags &= ~FLAG_INETNETTOMEDIATYPE; /* clear inetNetToMediaType */
  823.         /*
  824.          * TODO:482:o: |-> commit column inetNetToMediaType.
  825.          */
  826.         rc = -1;
  827.         if (-1 == rc) {
  828.             snmp_log(LOG_ERR,
  829.                      "inetNetToMediaTable column inetNetToMediaType commit failedn");
  830.         } else {
  831.             /*
  832.              * set flag, in case we need to undo inetNetToMediaType
  833.              */
  834.             rowreq_ctx->column_set_flags |= FLAG_INETNETTOMEDIATYPE;
  835.         }
  836.     }
  837.     if (save_flags & FLAG_INETNETTOMEDIAROWSTATUS) {
  838.         save_flags &= ~FLAG_INETNETTOMEDIAROWSTATUS;    /* clear inetNetToMediaRowStatus */
  839.         /*
  840.          * TODO:482:o: |-> commit column inetNetToMediaRowStatus.
  841.          */
  842.         rc = -1;
  843.         if (-1 == rc) {
  844.             snmp_log(LOG_ERR,
  845.                      "inetNetToMediaTable column inetNetToMediaRowStatus commit failedn");
  846.         } else {
  847.             /*
  848.              * set flag, in case we need to undo inetNetToMediaRowStatus
  849.              */
  850.             rowreq_ctx->column_set_flags |= FLAG_INETNETTOMEDIAROWSTATUS;
  851.         }
  852.     }
  853. #endif
  854.     if (save_flags) {
  855.         snmp_log(LOG_ERR, "unhandled columns (0x%x) in commitn",
  856.                  save_flags);
  857.         return MFD_ERROR;
  858.     }
  859.     return rc;
  860. }                               /* inetNetToMediaTable_commit */
  861. /**
  862.  * undo commit new values.
  863.  *
  864.  * Should you need different behavior depending on which columns were
  865.  * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
  866.  * set. The definitions for the FLAG_* bits can be found in
  867.  * inetNetToMediaTable.h.
  868.  * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
  869.  *
  870.  * @param inetNetToMediaTable_rowreq_ctx
  871.  *        Pointer to the users context.
  872.  *
  873.  * @retval MFD_SUCCESS : success
  874.  * @retval MFD_ERROR   : error
  875.  */
  876. int
  877. inetNetToMediaTable_undo_commit(inetNetToMediaTable_rowreq_ctx *
  878.                                 rowreq_ctx)
  879. {
  880.     int             rc = MFD_SUCCESS;
  881.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaTable_undo_commit", "calledn"));
  882.     /** we should have a non-NULL pointer */
  883.     netsnmp_assert(NULL != rowreq_ctx);
  884.     /*
  885.      * TODO:485:M: |-> Undo inetNetToMediaTable commit.
  886.      * check the column's flag in rowreq_ctx->column_set_flags to see
  887.      * if it was set during commit, then undo it.
  888.      *
  889.      * eg: if (rowreq_ctx->column_set_flags & FLAG_) {}
  890.      */
  891.     return rc;
  892. }                               /* inetNetToMediaTable_undo_commit */
  893. /*
  894.  * TODO:420:r: Implement inetNetToMediaTable index validation.
  895.  */
  896. /*---------------------------------------------------------------------
  897.  * IP-MIB::inetNetToMediaEntry.inetNetToMediaIfIndex
  898.  * inetNetToMediaIfIndex is subid 1 of inetNetToMediaEntry.
  899.  * Its status is Current, and its access level is NoAccess.
  900.  * OID: .1.3.6.1.2.1.4.35.1.1
  901.  * Description:
  902. The index value which uniquely identifies the interface to
  903.             which this entry is applicable.  The interface identified by
  904.             a particular value of this index is the same interface as
  905.             identified by the same value of the IF-MIB's ifIndex.
  906.  *
  907.  * Attributes:
  908.  *   accessible 0     isscalar 0     enums  0      hasdefval 0
  909.  *   readable   0     iscolumn 1     ranges 1      hashint   1
  910.  *   settable   0
  911.  *   hint: d
  912.  *
  913.  * Ranges:  1 - 2147483647;
  914.  *
  915.  * Its syntax is InterfaceIndex (based on perltype INTEGER32)
  916.  * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
  917.  *
  918.  *
  919.  *
  920.  * NOTE: NODE inetNetToMediaIfIndex IS NOT ACCESSIBLE
  921.  *
  922.  *
  923.  */
  924. /**
  925.  * check validity of inetNetToMediaIfIndex index portion
  926.  *
  927.  * @retval MFD_SUCCESS   : the incoming value is legal
  928.  * @retval MFD_BAD_VALUE : the incoming value is NOT legal
  929.  *
  930.  * @note this is not the place to do any checks for the sanity
  931.  *       of multiple indexes. Those types of checks should be done in the
  932.  *       inetNetToMediaTable_validate_index() function.
  933.  */
  934. int
  935. inetNetToMediaIfIndex_check_index(inetNetToMediaTable_rowreq_ctx *
  936.                                   rowreq_ctx)
  937. {
  938.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaIfIndex_check_index", "calledn"));
  939.     netsnmp_assert(NULL != rowreq_ctx);
  940.     /*
  941.      * TODO:426:M: |-> Check inetNetToMediaTable index inetNetToMediaIfIndex.
  942.      * check that index value in the table context (rowreq_ctx)
  943.      * for inetNetToMediaIfIndex is legal.
  944.      */
  945.     return MFD_SUCCESS;         /* inetNetToMediaIfIndex index ok */
  946. }                               /* inetNetToMediaIfIndex_check_index */
  947. /*---------------------------------------------------------------------
  948.  * IP-MIB::inetNetToMediaEntry.inetNetToMediaNetAddressType
  949.  * inetNetToMediaNetAddressType is subid 2 of inetNetToMediaEntry.
  950.  * Its status is Current, and its access level is NoAccess.
  951.  * OID: .1.3.6.1.2.1.4.35.1.2
  952.  * Description:
  953. The type of inetNetToMediaNetAddress.
  954.  *
  955.  * Attributes:
  956.  *   accessible 0     isscalar 0     enums  1      hasdefval 0
  957.  *   readable   0     iscolumn 1     ranges 0      hashint   0
  958.  *   settable   0
  959.  *
  960.  * Enum range: 5/8. Values:  unknown(0), ipv4(1), ipv6(2), ipv4z(3), ipv6z(4), dns(16)
  961.  *
  962.  * Its syntax is InetAddressType (based on perltype INTEGER)
  963.  * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
  964.  *
  965.  *
  966.  *
  967.  * NOTE: NODE inetNetToMediaNetAddressType IS NOT ACCESSIBLE
  968.  *
  969.  *
  970.  */
  971. /**
  972.  * check validity of inetNetToMediaNetAddressType index portion
  973.  *
  974.  * @retval MFD_SUCCESS   : the incoming value is legal
  975.  * @retval MFD_BAD_VALUE : the incoming value is NOT legal
  976.  *
  977.  * @note this is not the place to do any checks for the sanity
  978.  *       of multiple indexes. Those types of checks should be done in the
  979.  *       inetNetToMediaTable_validate_index() function.
  980.  */
  981. int
  982. inetNetToMediaNetAddressType_check_index(inetNetToMediaTable_rowreq_ctx *
  983.                                          rowreq_ctx)
  984. {
  985.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaNetAddressType_check_index", "calledn"));
  986.     netsnmp_assert(NULL != rowreq_ctx);
  987.     /*
  988.      * TODO:426:M: |-> Check inetNetToMediaTable index inetNetToMediaNetAddressType.
  989.      * check that index value in the table context (rowreq_ctx)
  990.      * for inetNetToMediaNetAddressType is legal.
  991.      */
  992.     return MFD_SUCCESS;         /* inetNetToMediaNetAddressType index ok */
  993. }                               /* inetNetToMediaNetAddressType_check_index */
  994. /*---------------------------------------------------------------------
  995.  * IP-MIB::inetNetToMediaEntry.inetNetToMediaNetAddress
  996.  * inetNetToMediaNetAddress is subid 3 of inetNetToMediaEntry.
  997.  * Its status is Current, and its access level is NoAccess.
  998.  * OID: .1.3.6.1.2.1.4.35.1.3
  999.  * Description:
  1000. The IP Address corresponding to the media-dependent
  1001.             `physical' address.  The address type of this object is
  1002.             specified in inetNetToMediaAddressType.
  1003.             Implementors need to be aware that if the size of
  1004.             inetNetToMediaNetAddress exceeds 115 octets then OIDS of
  1005.             instances of columns in this row will have more than 128
  1006.             sub-identifiers and cannot be accessed using SNMPv1, SNMPv2c
  1007.             or SNMPv3.
  1008.  *
  1009.  * Attributes:
  1010.  *   accessible 0     isscalar 0     enums  0      hasdefval 0
  1011.  *   readable   0     iscolumn 1     ranges 1      hashint   0
  1012.  *   settable   0
  1013.  *
  1014.  * Ranges:  0 - 255;
  1015.  *
  1016.  * Its syntax is InetAddress (based on perltype OCTETSTR)
  1017.  * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
  1018.  * This data type requires a length.  (Max 255)
  1019.  *
  1020.  *
  1021.  *
  1022.  * NOTE: NODE inetNetToMediaNetAddress IS NOT ACCESSIBLE
  1023.  *
  1024.  *
  1025.  */
  1026. /**
  1027.  * check validity of inetNetToMediaNetAddress index portion
  1028.  *
  1029.  * @retval MFD_SUCCESS   : the incoming value is legal
  1030.  * @retval MFD_BAD_VALUE : the incoming value is NOT legal
  1031.  *
  1032.  * @note this is not the place to do any checks for the sanity
  1033.  *       of multiple indexes. Those types of checks should be done in the
  1034.  *       inetNetToMediaTable_validate_index() function.
  1035.  */
  1036. int
  1037. inetNetToMediaNetAddress_check_index(inetNetToMediaTable_rowreq_ctx *
  1038.                                      rowreq_ctx)
  1039. {
  1040.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaNetAddress_check_index", "calledn"));
  1041.     netsnmp_assert(NULL != rowreq_ctx);
  1042.     /*
  1043.      * TODO:426:M: |-> Check inetNetToMediaTable index inetNetToMediaNetAddress.
  1044.      * check that index value in the table context (rowreq_ctx)
  1045.      * for inetNetToMediaNetAddress is legal.
  1046.      */
  1047.     return MFD_SUCCESS;         /* inetNetToMediaNetAddress index ok */
  1048. }                               /* inetNetToMediaNetAddress_check_index */
  1049. /*
  1050.  * TODO:440:M: Implement inetNetToMediaTable node value checks.
  1051.  * TODO:450:M: Implement inetNetToMediaTable undo functions.
  1052.  * TODO:460:M: Implement inetNetToMediaTable set functions.
  1053.  * TODO:480:M: Implement inetNetToMediaTable commit functions.
  1054.  */
  1055. /*---------------------------------------------------------------------
  1056.  * IP-MIB::inetNetToMediaEntry.inetNetToMediaPhysAddress
  1057.  * inetNetToMediaPhysAddress is subid 4 of inetNetToMediaEntry.
  1058.  * Its status is Current, and its access level is Create.
  1059.  * OID: .1.3.6.1.2.1.4.35.1.4
  1060.  * Description:
  1061. The media-dependent `physical' address.
  1062.             As the entries in this table are typically not persistent
  1063.             when this object is written the entity SHOULD NOT save the
  1064.             change to non-volatile storage.
  1065.  *
  1066.  * Attributes:
  1067.  *   accessible 1     isscalar 0     enums  0      hasdefval 0
  1068.  *   readable   1     iscolumn 1     ranges 1      hashint   1
  1069.  *   settable   1
  1070.  *   hint: 1x:
  1071.  *
  1072.  * Ranges:  0 - 65535;
  1073.  *
  1074.  * Its syntax is PhysAddress (based on perltype OCTETSTR)
  1075.  * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
  1076.  * This data type requires a length.  (Max 65535)
  1077.  */
  1078. /**
  1079.  * Check that the proposed new value is potentially valid.
  1080.  *
  1081.  * @param rowreq_ctx
  1082.  *        Pointer to the row request context.
  1083.  * @param inetNetToMediaPhysAddress_val_ptr
  1084.  *        A char containing the new value.
  1085.  * @param inetNetToMediaPhysAddress_val_ptr_len
  1086.  *        The size (in bytes) of the data pointed to by inetNetToMediaPhysAddress_val_ptr
  1087.  *
  1088.  * @retval MFD_SUCCESS        : incoming value is legal
  1089.  * @retval MFD_NOT_VALID_NOW  : incoming value is not valid now
  1090.  * @retval MFD_NOT_VALID_EVER : incoming value is never valid
  1091.  *
  1092.  * This is the place to check for requirements that are not
  1093.  * expressed in the mib syntax (for example, a requirement that
  1094.  * is detailed in the description for an object).
  1095.  *
  1096.  * You should check that the requested change between the undo value and the
  1097.  * new value is legal (ie, the transistion from one value to another
  1098.  * is legal).
  1099.  *      
  1100.  *@note
  1101.  * This check is only to determine if the new value
  1102.  * is b potentially valid. This is the first check of many, and
  1103.  * is one of the simplest ones.
  1104.  * 
  1105.  *@note
  1106.  * this is not the place to do any checks for values
  1107.  * which depend on some other value in the mib. Those
  1108.  * types of checks should be done in the
  1109.  * inetNetToMediaTable_check_dependencies() function.
  1110.  *
  1111.  * The following checks have already been done for you:
  1112.  *    The syntax is ASN_OCTET_STR
  1113.  *    The length is in (one of) the range set(s):  0 - 65535
  1114.  *
  1115.  * If there a no other checks you need to do, simply return MFD_SUCCESS.
  1116.  *
  1117.  */
  1118. int
  1119. inetNetToMediaPhysAddress_check_value(inetNetToMediaTable_rowreq_ctx *
  1120.                                       rowreq_ctx, char
  1121.                                       *inetNetToMediaPhysAddress_val_ptr, size_t
  1122.                                       inetNetToMediaPhysAddress_val_ptr_len)
  1123. {
  1124.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaPhysAddress_check_value", "calledn"));
  1125.     /** should never get a NULL pointer */
  1126.     netsnmp_assert(NULL != rowreq_ctx);
  1127.     netsnmp_assert(NULL != inetNetToMediaPhysAddress_val_ptr);
  1128.     /*
  1129.      * TODO:441:o: |-> Check for valid inetNetToMediaPhysAddress value.
  1130.      */
  1131.     return MFD_SUCCESS;         /* inetNetToMediaPhysAddress value not illegal */
  1132. }                               /* inetNetToMediaPhysAddress_check_value */
  1133. /**
  1134.  * Save old value information
  1135.  *
  1136.  * @param rowreq_ctx
  1137.  *        Pointer to the table context (inetNetToMediaTable_rowreq_ctx)
  1138.  *
  1139.  * @retval MFD_SUCCESS : success
  1140.  * @retval MFD_ERROR   : error. set will fail.
  1141.  *
  1142.  * This function will be called after the table level undo setup function
  1143.  * inetNetToMediaTable_undo_setup has been called.
  1144.  *
  1145.  *@note
  1146.  * this function will only be called if a new value is set for this column.
  1147.  *
  1148.  * If there is any setup specific to a particular column (e.g. allocating
  1149.  * memory for a string), you should do that setup in this function, so it
  1150.  * won't be done unless it is necessary.
  1151.  */
  1152. int
  1153. inetNetToMediaPhysAddress_undo_setup(inetNetToMediaTable_rowreq_ctx *
  1154.                                      rowreq_ctx)
  1155. {
  1156.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaPhysAddress_undo_setup", "calledn"));
  1157.     /** should never get a NULL pointer */
  1158.     netsnmp_assert(NULL != rowreq_ctx);
  1159.     /*
  1160.      * TODO:455:o: |-> Setup inetNetToMediaPhysAddress undo.
  1161.      */
  1162.     /*
  1163.      * copy inetNetToMediaPhysAddress and inetNetToMediaPhysAddress_len data
  1164.      * set rowreq_ctx->undo->inetNetToMediaPhysAddress from rowreq_ctx->data->inetNetToMediaPhysAddress
  1165.      */
  1166.     return MFD_SUCCESS;
  1167. }                               /* inetNetToMediaPhysAddress_undo_setup */
  1168. /**
  1169.  * Set the new value.
  1170.  *
  1171.  * @param rowreq_ctx
  1172.  *        Pointer to the users context. You should know how to
  1173.  *        manipulate the value from this object.
  1174.  * @param inetNetToMediaPhysAddress_val_ptr
  1175.  *        A char containing the new value.
  1176.  * @param inetNetToMediaPhysAddress_val_ptr_len
  1177.  *        The size (in bytes) of the data pointed to by inetNetToMediaPhysAddress_val_ptr
  1178.  */
  1179. int
  1180. inetNetToMediaPhysAddress_set(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
  1181.                               char *inetNetToMediaPhysAddress_val_ptr,
  1182.                               size_t inetNetToMediaPhysAddress_val_ptr_len)
  1183. {
  1184.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaPhysAddress_set", "calledn"));
  1185.     /** should never get a NULL pointer */
  1186.     netsnmp_assert(NULL != rowreq_ctx);
  1187.     netsnmp_assert(NULL != inetNetToMediaPhysAddress_val_ptr);
  1188.     /*
  1189.      * TODO:461:M: |-> Set inetNetToMediaPhysAddress value.
  1190.      * set inetNetToMediaPhysAddress value in rowreq_ctx->data
  1191.      */
  1192.     return MFD_SUCCESS;
  1193. }                               /* inetNetToMediaPhysAddress_set */
  1194. /**
  1195.  * undo the previous set.
  1196.  *
  1197.  * @param rowreq_ctx
  1198.  *        Pointer to the users context.
  1199.  */
  1200. int
  1201. inetNetToMediaPhysAddress_undo(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
  1202. {
  1203.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaPhysAddress_undo", "calledn"));
  1204.     netsnmp_assert(NULL != rowreq_ctx);
  1205.     /*
  1206.      * TODO:456:o: |-> Clean up inetNetToMediaPhysAddress undo.
  1207.      */
  1208.     /*
  1209.      * copy inetNetToMediaPhysAddress and inetNetToMediaPhysAddress_len data
  1210.      * set rowreq_ctx->data->inetNetToMediaPhysAddress from rowreq_ctx->undo->inetNetToMediaPhysAddress
  1211.      */
  1212.     return MFD_SUCCESS;
  1213. }                               /* inetNetToMediaPhysAddress_undo */
  1214. /*---------------------------------------------------------------------
  1215.  * IP-MIB::inetNetToMediaEntry.inetNetToMediaType
  1216.  * inetNetToMediaType is subid 6 of inetNetToMediaEntry.
  1217.  * Its status is Current, and its access level is Create.
  1218.  * OID: .1.3.6.1.2.1.4.35.1.6
  1219.  * Description:
  1220. The type of mapping.
  1221.             Setting this object to the value invalid(2) has the effect
  1222.             of invalidating the corresponding entry in the
  1223.             inetNetToMediaTable.  That is, it effectively dis-
  1224.             associates the interface identified with said entry from the
  1225.             mapping identified with said entry.  It is an
  1226.             implementation- specific matter as to whether the agent
  1227.             removes an invalidated entry from the table.  Accordingly,
  1228.             management stations must be prepared to receive tabular
  1229.             information from agents that corresponds to entries not
  1230.             currently in use.  Proper interpretation of such entries
  1231.             requires examination of the relevant inetNetToMediaType
  1232.             object.
  1233.             The 'dynamic(3)' type indicates that the IP address to
  1234.             physical addresses mapping has been dynamically resolved
  1235.             using e.g. IPv4 ARP or the IPv6 Neighbor Discovery protocol.
  1236.             The 'static(4)' type indicates that the mapping has been
  1237.             statically configured.  Both of these refer to entries that
  1238.             provide mappings for other entities addresses.
  1239.             The 'local(5)' type indicates that the mapping is provided
  1240.             for an entity's own interface address.
  1241.             As the entries in this table are typically not persistent
  1242.             when this object is written the entity SHOULD NOT save the
  1243.             change to non-volatile storage.
  1244.  *
  1245.  * Attributes:
  1246.  *   accessible 1     isscalar 0     enums  1      hasdefval 1
  1247.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  1248.  *   settable   1
  1249.  *   defval: static
  1250.  *
  1251.  * Enum range: 5/8. Values:  other(1), invalid(2), dynamic(3), static(4), local(5)
  1252.  *
  1253.  * Its syntax is INTEGER (based on perltype INTEGER)
  1254.  * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
  1255.  */
  1256. /**
  1257.  * Check that the proposed new value is potentially valid.
  1258.  *
  1259.  * @param rowreq_ctx
  1260.  *        Pointer to the row request context.
  1261.  * @param inetNetToMediaType_val
  1262.  *        A long containing the new value.
  1263.  *
  1264.  * @retval MFD_SUCCESS        : incoming value is legal
  1265.  * @retval MFD_NOT_VALID_NOW  : incoming value is not valid now
  1266.  * @retval MFD_NOT_VALID_EVER : incoming value is never valid
  1267.  *
  1268.  * This is the place to check for requirements that are not
  1269.  * expressed in the mib syntax (for example, a requirement that
  1270.  * is detailed in the description for an object).
  1271.  *
  1272.  * You should check that the requested change between the undo value and the
  1273.  * new value is legal (ie, the transistion from one value to another
  1274.  * is legal).
  1275.  *      
  1276.  *@note
  1277.  * This check is only to determine if the new value
  1278.  * is b potentially valid. This is the first check of many, and
  1279.  * is one of the simplest ones.
  1280.  * 
  1281.  *@note
  1282.  * this is not the place to do any checks for values
  1283.  * which depend on some other value in the mib. Those
  1284.  * types of checks should be done in the
  1285.  * inetNetToMediaTable_check_dependencies() function.
  1286.  *
  1287.  * The following checks have already been done for you:
  1288.  *    The syntax is ASN_INTEGER
  1289.  *    The value is one of  other(1), invalid(2), dynamic(3), static(4), local(5)
  1290.  *
  1291.  * If there a no other checks you need to do, simply return MFD_SUCCESS.
  1292.  *
  1293.  */
  1294. int
  1295. inetNetToMediaType_check_value(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
  1296.                                u_long inetNetToMediaType_val)
  1297. {
  1298.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaType_check_value", "calledn"));
  1299.     /** should never get a NULL pointer */
  1300.     netsnmp_assert(NULL != rowreq_ctx);
  1301.     /*
  1302.      * TODO:441:o: |-> Check for valid inetNetToMediaType value.
  1303.      */
  1304.     return MFD_SUCCESS;         /* inetNetToMediaType value not illegal */
  1305. }                               /* inetNetToMediaType_check_value */
  1306. /**
  1307.  * Save old value information
  1308.  *
  1309.  * @param rowreq_ctx
  1310.  *        Pointer to the table context (inetNetToMediaTable_rowreq_ctx)
  1311.  *
  1312.  * @retval MFD_SUCCESS : success
  1313.  * @retval MFD_ERROR   : error. set will fail.
  1314.  *
  1315.  * This function will be called after the table level undo setup function
  1316.  * inetNetToMediaTable_undo_setup has been called.
  1317.  *
  1318.  *@note
  1319.  * this function will only be called if a new value is set for this column.
  1320.  *
  1321.  * If there is any setup specific to a particular column (e.g. allocating
  1322.  * memory for a string), you should do that setup in this function, so it
  1323.  * won't be done unless it is necessary.
  1324.  */
  1325. int
  1326. inetNetToMediaType_undo_setup(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
  1327. {
  1328.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaType_undo_setup", "calledn"));
  1329.     /** should never get a NULL pointer */
  1330.     netsnmp_assert(NULL != rowreq_ctx);
  1331.     /*
  1332.      * TODO:455:o: |-> Setup inetNetToMediaType undo.
  1333.      */
  1334.     /*
  1335.      * copy inetNetToMediaType data
  1336.      * set rowreq_ctx->undo->inetNetToMediaType from rowreq_ctx->data->inetNetToMediaType
  1337.      */
  1338.     return MFD_SUCCESS;
  1339. }                               /* inetNetToMediaType_undo_setup */
  1340. /**
  1341.  * Set the new value.
  1342.  *
  1343.  * @param rowreq_ctx
  1344.  *        Pointer to the users context. You should know how to
  1345.  *        manipulate the value from this object.
  1346.  * @param inetNetToMediaType_val
  1347.  *        A long containing the new value.
  1348.  */
  1349. int
  1350. inetNetToMediaType_set(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
  1351.                        u_long inetNetToMediaType_val)
  1352. {
  1353.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaType_set",
  1354.                 "calledn"));
  1355.     /** should never get a NULL pointer */
  1356.     netsnmp_assert(NULL != rowreq_ctx);
  1357.     /*
  1358.      * TODO:461:M: |-> Set inetNetToMediaType value.
  1359.      * set inetNetToMediaType value in rowreq_ctx->data
  1360.      */
  1361.     return MFD_SUCCESS;
  1362. }                               /* inetNetToMediaType_set */
  1363. /**
  1364.  * undo the previous set.
  1365.  *
  1366.  * @param rowreq_ctx
  1367.  *        Pointer to the users context.
  1368.  */
  1369. int
  1370. inetNetToMediaType_undo(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
  1371. {
  1372.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaType_undo",
  1373.                 "calledn"));
  1374.     netsnmp_assert(NULL != rowreq_ctx);
  1375.     /*
  1376.      * TODO:456:o: |-> Clean up inetNetToMediaType undo.
  1377.      */
  1378.     /*
  1379.      * copy inetNetToMediaType data
  1380.      * set rowreq_ctx->data->inetNetToMediaType from rowreq_ctx->undo->inetNetToMediaType
  1381.      */
  1382.     return MFD_SUCCESS;
  1383. }                               /* inetNetToMediaType_undo */
  1384. /*---------------------------------------------------------------------
  1385.  * IP-MIB::inetNetToMediaEntry.inetNetToMediaRowStatus
  1386.  * inetNetToMediaRowStatus is subid 8 of inetNetToMediaEntry.
  1387.  * Its status is Current, and its access level is Create.
  1388.  * OID: .1.3.6.1.2.1.4.35.1.8
  1389.  * Description:
  1390. The status of this conceptual row.
  1391.             The RowStatus TC requires that this DESCRIPTION clause
  1392.             states under which circumstances other objects in this row
  1393.             can be modified.  The value of this object has no effect on
  1394.             whether other objects in this conceptual row can be
  1395.             modified.
  1396.             A conceptual row can not be made active until the
  1397.             inetNetToMediaPhysAddress object has been set.
  1398.             Note that if the inetNetToMediaType is set to 'invalid' the
  1399.             managed node may delete the entry independent of the state
  1400.             of this object.
  1401.  *
  1402.  * Attributes:
  1403.  *   accessible 1     isscalar 0     enums  1      hasdefval 0
  1404.  *   readable   1     iscolumn 1     ranges 0      hashint   0
  1405.  *   settable   1
  1406.  *
  1407.  * Enum range: 3/8. Values:  active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
  1408.  *
  1409.  * Its syntax is RowStatus (based on perltype INTEGER)
  1410.  * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
  1411.  */
  1412. /**
  1413.  * Check that the proposed new value is potentially valid.
  1414.  *
  1415.  * @param rowreq_ctx
  1416.  *        Pointer to the row request context.
  1417.  * @param inetNetToMediaRowStatus_val
  1418.  *        A long containing the new value.
  1419.  *
  1420.  * @retval MFD_SUCCESS        : incoming value is legal
  1421.  * @retval MFD_NOT_VALID_NOW  : incoming value is not valid now
  1422.  * @retval MFD_NOT_VALID_EVER : incoming value is never valid
  1423.  *
  1424.  * This is the place to check for requirements that are not
  1425.  * expressed in the mib syntax (for example, a requirement that
  1426.  * is detailed in the description for an object).
  1427.  *
  1428.  * You should check that the requested change between the undo value and the
  1429.  * new value is legal (ie, the transistion from one value to another
  1430.  * is legal).
  1431.  *      
  1432.  *@note
  1433.  * This check is only to determine if the new value
  1434.  * is b potentially valid. This is the first check of many, and
  1435.  * is one of the simplest ones.
  1436.  * 
  1437.  *@note
  1438.  * this is not the place to do any checks for values
  1439.  * which depend on some other value in the mib. Those
  1440.  * types of checks should be done in the
  1441.  * inetNetToMediaTable_check_dependencies() function.
  1442.  *
  1443.  * The following checks have already been done for you:
  1444.  *    The syntax is ASN_INTEGER
  1445.  *    The value is one of  active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6)
  1446.  *
  1447.  * If there a no other checks you need to do, simply return MFD_SUCCESS.
  1448.  *
  1449.  */
  1450. int
  1451. inetNetToMediaRowStatus_check_value(inetNetToMediaTable_rowreq_ctx *
  1452.                                     rowreq_ctx,
  1453.                                     u_long inetNetToMediaRowStatus_val)
  1454. {
  1455.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaRowStatus_check_value", "calledn"));
  1456.     /** should never get a NULL pointer */
  1457.     netsnmp_assert(NULL != rowreq_ctx);
  1458.     /*
  1459.      * TODO:441:o: |-> Check for valid inetNetToMediaRowStatus value.
  1460.      */
  1461.     return MFD_SUCCESS;         /* inetNetToMediaRowStatus value not illegal */
  1462. }                               /* inetNetToMediaRowStatus_check_value */
  1463. /**
  1464.  * Save old value information
  1465.  *
  1466.  * @param rowreq_ctx
  1467.  *        Pointer to the table context (inetNetToMediaTable_rowreq_ctx)
  1468.  *
  1469.  * @retval MFD_SUCCESS : success
  1470.  * @retval MFD_ERROR   : error. set will fail.
  1471.  *
  1472.  * This function will be called after the table level undo setup function
  1473.  * inetNetToMediaTable_undo_setup has been called.
  1474.  *
  1475.  *@note
  1476.  * this function will only be called if a new value is set for this column.
  1477.  *
  1478.  * If there is any setup specific to a particular column (e.g. allocating
  1479.  * memory for a string), you should do that setup in this function, so it
  1480.  * won't be done unless it is necessary.
  1481.  */
  1482. int
  1483. inetNetToMediaRowStatus_undo_setup(inetNetToMediaTable_rowreq_ctx *
  1484.                                    rowreq_ctx)
  1485. {
  1486.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaRowStatus_undo_setup", "calledn"));
  1487.     /** should never get a NULL pointer */
  1488.     netsnmp_assert(NULL != rowreq_ctx);
  1489.     /*
  1490.      * TODO:455:o: |-> Setup inetNetToMediaRowStatus undo.
  1491.      */
  1492.     /*
  1493.      * copy inetNetToMediaRowStatus data
  1494.      * set rowreq_ctx->undo->inetNetToMediaRowStatus from rowreq_ctx->data->inetNetToMediaRowStatus
  1495.      */
  1496.     rowreq_ctx->inetNetToMediaRowStatus_undo =
  1497.         rowreq_ctx->inetNetToMediaRowStatus;
  1498.     return MFD_SUCCESS;
  1499. }                               /* inetNetToMediaRowStatus_undo_setup */
  1500. /**
  1501.  * Set the new value.
  1502.  *
  1503.  * @param rowreq_ctx
  1504.  *        Pointer to the users context. You should know how to
  1505.  *        manipulate the value from this object.
  1506.  * @param inetNetToMediaRowStatus_val
  1507.  *        A long containing the new value.
  1508.  */
  1509. int
  1510. inetNetToMediaRowStatus_set(inetNetToMediaTable_rowreq_ctx * rowreq_ctx,
  1511.                             u_long inetNetToMediaRowStatus_val)
  1512. {
  1513.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaRowStatus_set",
  1514.                 "calledn"));
  1515.     /** should never get a NULL pointer */
  1516.     netsnmp_assert(NULL != rowreq_ctx);
  1517.     /*
  1518.      * TODO:461:M: |-> Set inetNetToMediaRowStatus value.
  1519.      * set inetNetToMediaRowStatus value in rowreq_ctx->data
  1520.      */
  1521.     return MFD_SUCCESS;
  1522. }                               /* inetNetToMediaRowStatus_set */
  1523. /**
  1524.  * undo the previous set.
  1525.  *
  1526.  * @param rowreq_ctx
  1527.  *        Pointer to the users context.
  1528.  */
  1529. int
  1530. inetNetToMediaRowStatus_undo(inetNetToMediaTable_rowreq_ctx * rowreq_ctx)
  1531. {
  1532.     DEBUGMSGTL(("verbose:inetNetToMediaTable:inetNetToMediaRowStatus_undo",
  1533.                 "calledn"));
  1534.     netsnmp_assert(NULL != rowreq_ctx);
  1535.     /*
  1536.      * TODO:456:o: |-> Clean up inetNetToMediaRowStatus undo.
  1537.      */
  1538.     /*
  1539.      * copy inetNetToMediaRowStatus data
  1540.      * set rowreq_ctx->data->inetNetToMediaRowStatus from rowreq_ctx->undo->inetNetToMediaRowStatus
  1541.      */
  1542.     rowreq_ctx->inetNetToMediaRowStatus =
  1543.         rowreq_ctx->inetNetToMediaRowStatus_undo;
  1544.     return MFD_SUCCESS;
  1545. }                               /* inetNetToMediaRowStatus_undo */
  1546. /**
  1547.  * check dependencies
  1548.  *
  1549.  * This is useful for for tables which have dependencies between columns
  1550.  * (or rows, or tables). For example, two columns allocating a percentage
  1551.  * of something add up 100%.
  1552.  *
  1553.  * Should you need different behavior depending on which columns were
  1554.  * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
  1555.  * set. The definitions for the FLAG_* bits can be found in
  1556.  * inetNetToMediaTable.h.
  1557.  * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
  1558.  *
  1559.  * @retval MFD_SUCCESS all the changes to the row are legal
  1560.  * @retval MFD_ERROR   one or more changes are not legal
  1561.  *
  1562.  * (see README-table-inetNetToMediaTable if you don't have dependencies)
  1563.  */
  1564. int
  1565. inetNetToMediaTable_check_dependencies(inetNetToMediaTable_rowreq_ctx *
  1566.                                        rowreq_ctx)
  1567. {
  1568.     int             rc = MFD_SUCCESS;
  1569.     DEBUGMSGTL(("internal:inetNetToMediaTable:inetNetToMediaTable_check_dependencies", "calledn"));
  1570.     netsnmp_assert(NULL != rowreq_ctx);
  1571.     /*
  1572.      * TODO:470:o: Check inetNetToMediaTable row dependencies.
  1573.      * check that all new value are legal and consistent with each other
  1574.      */
  1575.     /*
  1576.      * check RowStatus dependencies
  1577.      */
  1578.     if (rowreq_ctx->column_set_flags & FLAG_INETNETTOMEDIAROWSTATUS) {
  1579.         /*
  1580.          * check for valid RowStatus transition (old, new)
  1581.          * (Note: move transition check to 
  1582.          *  to catch errors earlier)
  1583.          */
  1584.         rc = check_rowstatus_transition(rowreq_ctx->
  1585.                                         inetNetToMediaRowStatus_undo,
  1586.                                         rowreq_ctx->
  1587.                                         inetNetToMediaRowStatus);
  1588.         if (MFD_SUCCESS != rc)
  1589.             return rc;
  1590.         /*
  1591.          * row creation requirements
  1592.          */
  1593.         if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
  1594.             if (ROWSTATUS_CREATEANDGO ==
  1595.                 rowreq_ctx->inetNetToMediaRowStatus) {
  1596.                 if (rowreq_ctx->column_set_flags !=
  1597.                     INETNETTOMEDIATABLE_REQUIRED_COLS) {
  1598.                     DEBUGMSGTL(("inetNetToMediaTable",
  1599.                                 "required columns missingn"));
  1600.                     return MFD_CANNOT_CREATE_NOW;
  1601.                 }
  1602.             }
  1603.         } /* row creation */
  1604.         else {
  1605.             /*
  1606.              * row change requirements
  1607.              */
  1608.             /*
  1609.              * don't allow a destroy if any other value was changed, since
  1610.              * that might call data access routines with bad info.
  1611.              *
  1612.              * you may or may not require the row be notInService before it
  1613.              * can be destroyed.
  1614.              */
  1615.             if (ROWSTATUS_DESTROY == rowreq_ctx->inetNetToMediaRowStatus) {
  1616.                 if (rowreq_ctx->
  1617.                     column_set_flags & ~FLAG_INETNETTOMEDIAROWSTATUS) {
  1618.                     DEBUGMSGTL(("inetNetToMediaTable",
  1619.                                 "destroy must be only varbind for rown"));
  1620.                     return MFD_NOT_VALID_NOW;
  1621.                 }
  1622.             }                   /* row destroy */
  1623.         }                       /* row change */
  1624.     } else {
  1625.         /*
  1626.          * must have row status to create a row
  1627.          */
  1628.         if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) {
  1629.             DEBUGMSGTL(("inetNetToMediaTable",
  1630.                         "must use RowStatus to create rowsn"));
  1631.             return MFD_CANNOT_CREATE_NOW;
  1632.         }
  1633.     }                           /* row status not set */
  1634.     if (MFD_SUCCESS != rc)
  1635.         return rc;
  1636.     return rc;
  1637. }                               /* inetNetToMediaTable_check_dependencies */
  1638. /** @} */
  1639. /** @{ */