diff options
Diffstat (limited to 'agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c')
-rw-r--r-- | agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c | 3361 |
1 files changed, 3361 insertions, 0 deletions
diff --git a/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c b/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c new file mode 100644 index 0000000..323c1bc --- /dev/null +++ b/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable.c @@ -0,0 +1,3361 @@ +/* + * Note: this file originally auto-generated by mib2c using + * version : 1.48 $ of : mfd-top.m2c,v $ + * + * $Id$ + */ +/** \page MFD helper for ipCidrRouteTable + * + * \section intro Introduction + * Introductory text. + * + */ +/* + * standard Net-SNMP includes + */ +#include <net-snmp/net-snmp-config.h> +#include <net-snmp/net-snmp-includes.h> +#include <net-snmp/agent/net-snmp-agent-includes.h> + +/* + * include our parent header + */ +#include "ipCidrRouteTable.h" + +#include <net-snmp/agent/mib_modules.h> + +#include "ipCidrRouteTable_interface.h" + +const oid ipCidrRouteTable_oid[] = { IPCIDRROUTETABLE_OID }; +const int ipCidrRouteTable_oid_size = +OID_LENGTH(ipCidrRouteTable_oid); + +ipCidrRouteTable_registration ipCidrRouteTable_user_context; +static ipCidrRouteTable_registration *ipCidrRouteTable_user_context_p; + +void initialize_table_ipCidrRouteTable(void); +void shutdown_table_ipCidrRouteTable(void); + + +/** + * Initializes the ipCidrRouteTable module + */ +void +init_ipCidrRouteTable(void) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:init_ipCidrRouteTable", + "called\n")); + + /* + * TODO:300:o: Perform ipCidrRouteTable one-time module initialization. + */ + + /* + * here we initialize all the tables we're planning on supporting + */ + if (should_init("ipCidrRouteTable")) + initialize_table_ipCidrRouteTable(); + +} /* init_ipCidrRouteTable */ + +/** + * Shut-down the ipCidrRouteTable module (agent is exiting) + */ +void +shutdown_ipCidrRouteTable(void) +{ + if (should_init("ipCidrRouteTable")) + shutdown_table_ipCidrRouteTable(); + +} + +/** + * Initialize the table ipCidrRouteTable + * (Define its contents and how it's structured) + */ +void +initialize_table_ipCidrRouteTable(void) +{ + u_long flags; + + DEBUGMSGTL(("verbose:ipCidrRouteTable:initialize_table_ipCidrRouteTable", "called\n")); + + /* + * TODO:301:o: Perform ipCidrRouteTable one-time table initialization. + */ + + /* + * TODO:302:o: |->Initialize ipCidrRouteTable user context + * if you'd like to pass in a pointer to some data for this + * table, allocate or set it up here. + */ + /* + * a netsnmp_data_list is a simple way to store void pointers. A simple + * string token is used to add, find or remove pointers. + */ + ipCidrRouteTable_user_context_p + = netsnmp_create_data_list("ipCidrRouteTable", NULL, NULL); + + /* + * No support for any flags yet, but in the future you would + * set any flags here. + */ + flags = 0; + + /* + * call interface initialization code + */ + _ipCidrRouteTable_initialize_interface + (ipCidrRouteTable_user_context_p, flags); +} /* initialize_table_ipCidrRouteTable */ + +/** + * Shutdown the table ipCidrRouteTable + */ +void +shutdown_table_ipCidrRouteTable(void) +{ + /* + * call interface shutdown code + */ + _ipCidrRouteTable_shutdown_interface(ipCidrRouteTable_user_context_p); + netsnmp_free_all_list_data(ipCidrRouteTable_user_context_p); + ipCidrRouteTable_user_context_p = NULL; +} + +/** + * extra context initialization (eg default values) + * + * @param rowreq_ctx : row request context + * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate) + * + * @retval MFD_SUCCESS : no errors + * @retval MFD_ERROR : error (context allocate will fail) + */ +int +ipCidrRouteTable_rowreq_ctx_init(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + void *user_init_ctx) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_rowreq_ctx_init", "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:210:o: |-> Perform extra ipCidrRouteTable rowreq initialization. (eg DEFVALS) + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteTable_rowreq_ctx_init */ + +/** + * extra context cleanup + * + */ +void +ipCidrRouteTable_rowreq_ctx_cleanup(ipCidrRouteTable_rowreq_ctx * + rowreq_ctx) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_rowreq_ctx_cleanup", "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:211:o: |-> Perform extra ipCidrRouteTable rowreq cleanup. + */ + if (NULL != rowreq_ctx->data) { + ipCidrRouteTable_release_data(rowreq_ctx->data); + rowreq_ctx->data = NULL; + } +} /* ipCidrRouteTable_rowreq_ctx_cleanup */ + +/** + * pre-request callback + * + * @param user_context + * + * @retval MFD_SUCCESS : success. + * @retval MFD_ERROR : other error + */ +int +ipCidrRouteTable_pre_request(ipCidrRouteTable_registration * user_context) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_pre_request", + "called\n")); + + /* + * TODO:510:o: Perform ipCidrRouteTable pre-request actions. + */ + + return MFD_SUCCESS; +} /* ipCidrRouteTable_pre_request */ + +/** + * post-request callback + * + * Note: + * New rows have been inserted into the container, and + * deleted rows have been removed from the container and + * released. + * @param user_context + * @param rc : MFD_SUCCESS if all requests succeeded + * + * @retval MFD_SUCCESS : success. + * @retval MFD_ERROR : other error (ignored) + */ +int +ipCidrRouteTable_post_request(ipCidrRouteTable_registration * user_context, + int rc) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_post_request", + "called\n")); + + /* + * TODO:511:o: Perform ipCidrRouteTable post-request actions. + */ + + /* + * check to set if any rows were changed. + */ + if (ipCidrRouteTable_dirty_get()) { + /* + * check if request was successful. If so, this would be + * a good place to save data to its persistent store. + */ + if (MFD_SUCCESS == rc) { + /* + * save changed rows, if you haven't already + */ + } + + ipCidrRouteTable_dirty_set(0); /* clear table dirty flag */ + } + + return MFD_SUCCESS; +} /* ipCidrRouteTable_post_request */ + + +/********************************************************************** + ********************************************************************** + *** + *** Table ipCidrRouteTable + *** + ********************************************************************** + **********************************************************************/ +/* + * IP-FORWARD-MIB::ipCidrRouteTable is subid 4 of ipForward. + * Its status is Deprecated. + * OID: .1.3.6.1.2.1.4.24.4, length: 9 + */ + +/* + * --------------------------------------------------------------------- + * * TODO:200:r: Implement ipCidrRouteTable data context functions. + */ +/* + * ipCidrRouteTable_allocate_data + * + * Purpose: create new ipCidrRouteTable_data. + */ +ipCidrRouteTable_data * +ipCidrRouteTable_allocate_data(void) +{ + /* + * TODO:201:r: |-> allocate memory for the ipCidrRouteTable data context. + */ + ipCidrRouteTable_data *rtn = netsnmp_access_route_entry_create(); + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_allocate_data", + "called\n")); + + if (NULL == rtn) { + snmp_log(LOG_ERR, "unable to malloc memory for new " + "ipCidrRouteTable_data.\n"); + } + + return rtn; +} /* ipCidrRouteTable_allocate_data */ + +/* + * ipCidrRouteTable_release_data + * + * Purpose: release ipCidrRouteTable data. + */ +void +ipCidrRouteTable_release_data(ipCidrRouteTable_data * data) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_release_data", + "called\n")); + + /* + * TODO:202:r: |-> release memory for the ipCidrRouteTable data context. + */ + netsnmp_access_route_entry_free(data); +} /* ipCidrRouteTable_release_data */ + + + +/** + * set mib index(es) + * + * @param tbl_idx mib index structure + * @param ipCidrRouteDest_val + * @param ipCidrRouteMask_val + * @param ipCidrRouteTos_val + * @param ipCidrRouteNextHop_val + * + * @retval MFD_SUCCESS : success. + * @retval MFD_ERROR : other error. + * + * @remark + * This convenience function is useful for setting all the MIB index + * components with a single function call. It is assume that the C values + * have already been mapped from their native/rawformat to the MIB format. + */ +int +ipCidrRouteTable_indexes_set_tbl_idx(ipCidrRouteTable_mib_index * tbl_idx, + u_long ipCidrRouteDest_val, + u_long ipCidrRouteMask_val, + long ipCidrRouteTos_val, + u_long ipCidrRouteNextHop_val) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_indexes_set_tbl_idx", "called\n")); + + /* + * ipCidrRouteDest(1)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h + */ + tbl_idx->ipCidrRouteDest = ipCidrRouteDest_val; + + /* + * ipCidrRouteMask(2)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h + */ + tbl_idx->ipCidrRouteMask = ipCidrRouteMask_val; + + /* + * ipCidrRouteTos(3)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/R/d/h + */ + tbl_idx->ipCidrRouteTos = ipCidrRouteTos_val; + + /* + * ipCidrRouteNextHop(4)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h + */ + tbl_idx->ipCidrRouteNextHop = ipCidrRouteNextHop_val; + + + return MFD_SUCCESS; +} /* ipCidrRouteTable_indexes_set_tbl_idx */ + +/** + * @internal + * set row context indexes + * + * @param reqreq_ctx the row context that needs updated indexes + * + * @retval MFD_SUCCESS : success. + * @retval MFD_ERROR : other error. + * + * @remark + * This function sets the mib indexs, then updates the oid indexs + * from the mib index. + */ +int +ipCidrRouteTable_indexes_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + u_long ipCidrRouteDest_val, + u_long ipCidrRouteMask_val, + long ipCidrRouteTos_val, + u_long ipCidrRouteNextHop_val) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_indexes_set", + "called\n")); + + if (MFD_SUCCESS != + ipCidrRouteTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx, + ipCidrRouteDest_val, + ipCidrRouteMask_val, + ipCidrRouteTos_val, + ipCidrRouteNextHop_val)) + return MFD_ERROR; + + /* + * convert mib index to oid index + */ + rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid); + if (0 != ipCidrRouteTable_index_to_oid(&rowreq_ctx->oid_idx, + &rowreq_ctx->tbl_idx)) { + return MFD_ERROR; + } + + return MFD_SUCCESS; +} /* ipCidrRouteTable_indexes_set */ + + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteIfIndex + * ipCidrRouteIfIndex is subid 5 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.5 + * Description: +The ifIndex value which identifies the local interface + + + through which the next hop of this route should be + reached. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: 0 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Extract the current value of the ipCidrRouteIfIndex data. + * + * Set a value using the data context for the row. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteIfIndex_val_ptr + * Pointer to storage for a long variable + * + * @retval MFD_SUCCESS : success + * @retval MFD_SKIP : skip this node (no value for now) + * @retval MFD_ERROR : Any other error + */ +int +ipCidrRouteIfIndex_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long *ipCidrRouteIfIndex_val_ptr) +{ + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != ipCidrRouteIfIndex_val_ptr); + + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_get", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:231:o: |-> Extract the current value of the ipCidrRouteIfIndex data. + * copy (* ipCidrRouteIfIndex_val_ptr ) from rowreq_ctx->data + */ + (*ipCidrRouteIfIndex_val_ptr) = rowreq_ctx->data->if_index; + + return MFD_SUCCESS; +} /* ipCidrRouteIfIndex_get */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteType + * ipCidrRouteType is subid 6 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.6 + * Description: +The type of route. Note that local(3) refers to a + route for which the next hop is the final destination; + remote(4) refers to a route for which the next hop is + not the final destination. + + Routes which do not result in traffic forwarding or + rejection should not be displayed even if the + implementation keeps them stored internally. + + reject (2) refers to a route which, if matched, + discards the message as unreachable. This is used in + some protocols as a means of correctly aggregating + routes. + * + * Attributes: + * accessible 1 isscalar 0 enums 1 hasdefval 0 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * + * Enum range: 3/8. Values: other(1), reject(2), local(3), remote(4) + * + * Its syntax is INTEGER (based on perltype INTEGER) + * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long) + */ +/** + * Extract the current value of the ipCidrRouteType data. + * + * Set a value using the data context for the row. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteType_val_ptr + * Pointer to storage for a long variable + * + * @retval MFD_SUCCESS : success + * @retval MFD_SKIP : skip this node (no value for now) + * @retval MFD_ERROR : Any other error + */ +int +ipCidrRouteType_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + u_long * ipCidrRouteType_val_ptr) +{ + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != ipCidrRouteType_val_ptr); + + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_get", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:231:o: |-> Extract the current value of the ipCidrRouteType data. + * copy (* ipCidrRouteType_val_ptr ) from rowreq_ctx->data + */ + (*ipCidrRouteType_val_ptr) = rowreq_ctx->data->rt_type; + + return MFD_SUCCESS; +} /* ipCidrRouteType_get */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteProto + * ipCidrRouteProto is subid 7 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is ReadOnly. + * OID: .1.3.6.1.2.1.4.24.4.1.7 + * Description: +The routing mechanism via which this route was learned. + Inclusion of values for gateway routing protocols is + not intended to imply that hosts should support those + protocols. + * + * Attributes: + * accessible 1 isscalar 0 enums 1 hasdefval 0 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 0 + * + * 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) + * + * Its syntax is INTEGER (based on perltype INTEGER) + * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long) + */ +/** + * Extract the current value of the ipCidrRouteProto data. + * + * Set a value using the data context for the row. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteProto_val_ptr + * Pointer to storage for a long variable + * + * @retval MFD_SUCCESS : success + * @retval MFD_SKIP : skip this node (no value for now) + * @retval MFD_ERROR : Any other error + */ +int +ipCidrRouteProto_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + u_long * ipCidrRouteProto_val_ptr) +{ + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != ipCidrRouteProto_val_ptr); + + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteProto_get", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:231:o: |-> Extract the current value of the ipCidrRouteProto data. + * copy (* ipCidrRouteProto_val_ptr ) from rowreq_ctx->data + */ + (*ipCidrRouteProto_val_ptr) = rowreq_ctx->data->rt_proto; + + return MFD_SUCCESS; +} /* ipCidrRouteProto_get */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteAge + * ipCidrRouteAge is subid 8 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is ReadOnly. + * OID: .1.3.6.1.2.1.4.24.4.1.8 + * Description: +The number of seconds since this route was last updated + or otherwise determined to be correct. Note that no + semantics of `too old' can be implied except through + knowledge of the routing protocol by which the route + was learned. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 0 + * defval: 0 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Extract the current value of the ipCidrRouteAge data. + * + * Set a value using the data context for the row. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteAge_val_ptr + * Pointer to storage for a long variable + * + * @retval MFD_SUCCESS : success + * @retval MFD_SKIP : skip this node (no value for now) + * @retval MFD_ERROR : Any other error + */ +int +ipCidrRouteAge_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long *ipCidrRouteAge_val_ptr) +{ + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != ipCidrRouteAge_val_ptr); + + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteAge_get", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:231:o: |-> Extract the current value of the ipCidrRouteAge data. + * copy (* ipCidrRouteAge_val_ptr ) from rowreq_ctx->data + */ + /* + * TODO:235:M: |-> Remove log message/SKIP once you've set ipCidrRouteAge data + */ + return MFD_SKIP; + + return MFD_SUCCESS; +} /* ipCidrRouteAge_get */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteInfo + * ipCidrRouteInfo is subid 9 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.9 + * Description: +A reference to MIB definitions specific to the + particular routing protocol which is responsible for + this route, as determined by the value specified in the + route's ipCidrRouteProto value. If this information is + not present, its value should be set to the OBJECT + IDENTIFIER { 0 0 }, which is a syntactically valid + object identifier, and any implementation conforming to + ASN.1 and the Basic Encoding Rules must be able to + generate and recognize this value. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 0 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * + * + * Its syntax is OBJECTID (based on perltype OBJECTID) + * The net-snmp type is ASN_OBJECT_ID. The C type decl is oid (oid) + * This data type requires a length. (Max ) + */ +/** + * Extract the current value of the ipCidrRouteInfo data. + * + * Set a value using the data context for the row. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteInfo_val_ptr_ptr + * Pointer to storage for a oid variable + * @param ipCidrRouteInfo_val_ptr_len_ptr + * Pointer to a size_t. On entry, it will contain the size (in bytes) + * pointed to by ipCidrRouteInfo. + * On exit, this value should contain the data size (in bytes). + * + * @retval MFD_SUCCESS : success + * @retval MFD_SKIP : skip this node (no value for now) + * @retval MFD_ERROR : Any other error +* + * @note If you need more than (*ipCidrRouteInfo_val_ptr_len_ptr) bytes of memory, + * allocate it using malloc() and update ipCidrRouteInfo_val_ptr_ptr. + * <b>DO NOT</b> free the previous pointer. + * The MFD helper will release the memory you allocate. + * + * @remark If you call this function yourself, you are responsible + * for checking if the pointer changed, and freeing any + * previously allocated memory. (Not necessary if you pass + * in a pointer to static memory, obviously.) + */ +int +ipCidrRouteInfo_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + oid ** ipCidrRouteInfo_val_ptr_ptr, + size_t * ipCidrRouteInfo_val_ptr_len_ptr) +{ + /** we should have a non-NULL pointer and enough storage */ + netsnmp_assert((NULL != ipCidrRouteInfo_val_ptr_ptr) + && (NULL != *ipCidrRouteInfo_val_ptr_ptr)); + netsnmp_assert(NULL != ipCidrRouteInfo_val_ptr_len_ptr); + + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_get", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:231:o: |-> Extract the current value of the ipCidrRouteInfo data. + * copy (* ipCidrRouteInfo_val_ptr_ptr ) data and (* ipCidrRouteInfo_val_ptr_len_ptr ) from rowreq_ctx->data + */ + /** nullOidLen is in bytes, so not sizeof(oid) needed */ + if ((*ipCidrRouteInfo_val_ptr_len_ptr) < (size_t)nullOidLen) { + (*ipCidrRouteInfo_val_ptr_ptr) = (oid*)malloc(nullOidLen); + if (NULL == (*ipCidrRouteInfo_val_ptr_ptr)) + return MFD_ERROR; + } + (*ipCidrRouteInfo_val_ptr_len_ptr) = (size_t)nullOidLen; + memcpy((*ipCidrRouteInfo_val_ptr_ptr), nullOid, (size_t)nullOidLen); + + return MFD_SUCCESS; +} /* ipCidrRouteInfo_get */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteNextHopAS + * ipCidrRouteNextHopAS is subid 10 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.10 + * Description: +The Autonomous System Number of the Next Hop. The + semantics of this object are determined by the routing- + protocol specified in the route's ipCidrRouteProto + value. When this object is unknown or not relevant its + value should be set to zero. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: 0 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Extract the current value of the ipCidrRouteNextHopAS data. + * + * Set a value using the data context for the row. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteNextHopAS_val_ptr + * Pointer to storage for a long variable + * + * @retval MFD_SUCCESS : success + * @retval MFD_SKIP : skip this node (no value for now) + * @retval MFD_ERROR : Any other error + */ +int +ipCidrRouteNextHopAS_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long *ipCidrRouteNextHopAS_val_ptr) +{ + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != ipCidrRouteNextHopAS_val_ptr); + + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_get", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:231:o: |-> Extract the current value of the ipCidrRouteNextHopAS data. + * copy (* ipCidrRouteNextHopAS_val_ptr ) from rowreq_ctx->data + */ + (*ipCidrRouteNextHopAS_val_ptr) = rowreq_ctx->data->rt_nexthop_as; + + return MFD_SUCCESS; +} /* ipCidrRouteNextHopAS_get */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric1 + * ipCidrRouteMetric1 is subid 11 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.11 + * Description: +The primary routing metric for this route. The + semantics of this metric are determined by the routing- + protocol specified in the route's ipCidrRouteProto + value. If this metric is not used, its value should be + set to -1. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: -1 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Extract the current value of the ipCidrRouteMetric1 data. + * + * Set a value using the data context for the row. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteMetric1_val_ptr + * Pointer to storage for a long variable + * + * @retval MFD_SUCCESS : success + * @retval MFD_SKIP : skip this node (no value for now) + * @retval MFD_ERROR : Any other error + */ +int +ipCidrRouteMetric1_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long *ipCidrRouteMetric1_val_ptr) +{ + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != ipCidrRouteMetric1_val_ptr); + + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_get", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric1 data. + * copy (* ipCidrRouteMetric1_val_ptr ) from rowreq_ctx->data + */ + (*ipCidrRouteMetric1_val_ptr) = rowreq_ctx->data->rt_metric1; + + return MFD_SUCCESS; +} /* ipCidrRouteMetric1_get */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric2 + * ipCidrRouteMetric2 is subid 12 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.12 + * Description: +An alternate routing metric for this route. The + semantics of this metric are determined by the routing- + protocol specified in the route's ipCidrRouteProto + value. If this metric is not used, its value should be + set to -1. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: -1 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Extract the current value of the ipCidrRouteMetric2 data. + * + * Set a value using the data context for the row. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteMetric2_val_ptr + * Pointer to storage for a long variable + * + * @retval MFD_SUCCESS : success + * @retval MFD_SKIP : skip this node (no value for now) + * @retval MFD_ERROR : Any other error + */ +int +ipCidrRouteMetric2_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long *ipCidrRouteMetric2_val_ptr) +{ + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != ipCidrRouteMetric2_val_ptr); + + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_get", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric2 data. + * copy (* ipCidrRouteMetric2_val_ptr ) from rowreq_ctx->data + */ + (*ipCidrRouteMetric2_val_ptr) = rowreq_ctx->data->rt_metric2; + + return MFD_SUCCESS; +} /* ipCidrRouteMetric2_get */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric3 + * ipCidrRouteMetric3 is subid 13 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.13 + * Description: +An alternate routing metric for this route. The + semantics of this metric are determined by the routing- + protocol specified in the route's ipCidrRouteProto + value. If this metric is not used, its value should be + set to -1. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: -1 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Extract the current value of the ipCidrRouteMetric3 data. + * + * Set a value using the data context for the row. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteMetric3_val_ptr + * Pointer to storage for a long variable + * + * @retval MFD_SUCCESS : success + * @retval MFD_SKIP : skip this node (no value for now) + * @retval MFD_ERROR : Any other error + */ +int +ipCidrRouteMetric3_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long *ipCidrRouteMetric3_val_ptr) +{ + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != ipCidrRouteMetric3_val_ptr); + + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_get", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric3 data. + * copy (* ipCidrRouteMetric3_val_ptr ) from rowreq_ctx->data + */ + (*ipCidrRouteMetric3_val_ptr) = rowreq_ctx->data->rt_metric3; + + return MFD_SUCCESS; +} /* ipCidrRouteMetric3_get */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric4 + * ipCidrRouteMetric4 is subid 14 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.14 + * Description: +An alternate routing metric for this route. The + semantics of this metric are determined by the routing- + protocol specified in the route's ipCidrRouteProto + value. If this metric is not used, its value should be + set to -1. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: -1 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Extract the current value of the ipCidrRouteMetric4 data. + * + * Set a value using the data context for the row. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteMetric4_val_ptr + * Pointer to storage for a long variable + * + * @retval MFD_SUCCESS : success + * @retval MFD_SKIP : skip this node (no value for now) + * @retval MFD_ERROR : Any other error + */ +int +ipCidrRouteMetric4_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long *ipCidrRouteMetric4_val_ptr) +{ + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != ipCidrRouteMetric4_val_ptr); + + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_get", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric4 data. + * copy (* ipCidrRouteMetric4_val_ptr ) from rowreq_ctx->data + */ + (*ipCidrRouteMetric4_val_ptr) = rowreq_ctx->data->rt_metric4; + + return MFD_SUCCESS; +} /* ipCidrRouteMetric4_get */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric5 + * ipCidrRouteMetric5 is subid 15 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.15 + * Description: +An alternate routing metric for this route. The + semantics of this metric are determined by the routing- + + + protocol specified in the route's ipCidrRouteProto + value. If this metric is not used, its value should be + set to -1. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: -1 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Extract the current value of the ipCidrRouteMetric5 data. + * + * Set a value using the data context for the row. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteMetric5_val_ptr + * Pointer to storage for a long variable + * + * @retval MFD_SUCCESS : success + * @retval MFD_SKIP : skip this node (no value for now) + * @retval MFD_ERROR : Any other error + */ +int +ipCidrRouteMetric5_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long *ipCidrRouteMetric5_val_ptr) +{ + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != ipCidrRouteMetric5_val_ptr); + + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_get", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:231:o: |-> Extract the current value of the ipCidrRouteMetric5 data. + * copy (* ipCidrRouteMetric5_val_ptr ) from rowreq_ctx->data + */ + (*ipCidrRouteMetric5_val_ptr) = rowreq_ctx->data->rt_metric5; + + return MFD_SUCCESS; +} /* ipCidrRouteMetric5_get */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteStatus + * ipCidrRouteStatus is subid 16 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.16 + * Description: +The row status variable, used according to row + installation and removal conventions. + * + * Attributes: + * accessible 1 isscalar 0 enums 1 hasdefval 0 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * + * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6) + * + * Its syntax is RowStatus (based on perltype INTEGER) + * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long) + */ +/** + * Extract the current value of the ipCidrRouteStatus data. + * + * Set a value using the data context for the row. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteStatus_val_ptr + * Pointer to storage for a long variable + * + * @retval MFD_SUCCESS : success + * @retval MFD_SKIP : skip this node (no value for now) + * @retval MFD_ERROR : Any other error + */ +int +ipCidrRouteStatus_get(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + u_long * ipCidrRouteStatus_val_ptr) +{ + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != ipCidrRouteStatus_val_ptr); + + (*ipCidrRouteStatus_val_ptr) = rowreq_ctx->ipCidrRouteStatus; + + return MFD_SUCCESS; +} /* ipCidrRouteStatus_get */ + + + +/** @} */ +/********************************************************************** + ********************************************************************** + *** + *** Table ipCidrRouteTable + *** + ********************************************************************** + **********************************************************************/ +/* + * IP-FORWARD-MIB::ipCidrRouteTable is subid 4 of ipForward. + * Its status is Deprecated. + * OID: .1.3.6.1.2.1.4.24.4, length: 9 + */ + /* + * NOTE: if you update this chart, please update the versions in + * local/mib2c-conf.d/parent-set.m2i + * agent/mibgroup/helpers/baby_steps.c + * while you're at it. + */ + /* + *********************************************************************** + * Baby Steps Flow Chart (2004.06.05) * + * * + * +--------------+ +================+ U = unconditional path * + * |optional state| ||required state|| S = path for success * + * +--------------+ +================+ E = path for error * + *********************************************************************** + * + * +--------------+ + * | pre | + * | request | + * +--------------+ + * | U + * +-------------+ +==============+ + * | row |f|<-------|| object || + * | create |1| E || lookup || + * +-------------+ +==============+ + * E | | S | S + * | +------------------>| + * | +==============+ + * | E || check || + * |<---------------|| values || + * | +==============+ + * | | S + * | +==============+ + * | +<-------|| undo || + * | | E || setup || + * | | +==============+ + * | | | S + * | | +==============+ + * | | || set ||-------------------------->+ + * | | || value || E | + * | | +==============+ | + * | | | S | + * | | +--------------+ | + * | | | check |-------------------------->| + * | | | consistency | E | + * | | +--------------+ | + * | | | S | + * | | +==============+ +==============+ | + * | | || commit ||-------->|| undo || | + * | | || || E || commit || | + * | | +==============+ +==============+ | + * | | | S U |<--------+ + * | | +--------------+ +==============+ + * | | | irreversible | || undo || + * | | | commit | || set || + * | | +--------------+ +==============+ + * | | | U U | + * | +-------------->|<------------------------+ + * | +==============+ + * | || undo || + * | || cleanup || + * | +==============+ + * +---------------------->| U + * | + * (err && f1)------------------->+ + * | | + * +--------------+ +--------------+ + * | post |<--------| row | + * | request | U | release | + * +--------------+ +--------------+ + * + */ + +/** + * Setup up context with information needed to undo a set request. + * + * This function will be called before the individual node undo setup + * functions are called. If you need to do any undo setup that is not + * related to a specific column, you can do it here. + * + * Note that the undo context has been allocated with + * ipCidrRouteTable_allocate_data(), but may need extra + * initialization similar to what you may have done in + * ipCidrRouteTable_rowreq_ctx_init(). + * Note that an individual node's undo_setup function will only be called + * if that node is being set to a new value. + * + * If there is any setup specific to a particular column (e.g. allocating + * memory for a string), you should do that setup in the node's undo_setup + * function, so it won't be done unless it is necessary. + * + * @param rowreq_ctx + * Pointer to the table context (ipCidrRouteTable_rowreq_ctx) + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error. set will fail. + */ +int +ipCidrRouteTable_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + int rc = MFD_SUCCESS; + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_undo_setup", + "called\n")); + + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:451:M: |-> Setup ipCidrRouteTable undo. + * set up ipCidrRouteTable undo information, in preparation for a set. + * Undo storage is in (* ipCidrRouteStatus_val_ptr )* + */ + + return rc; +} /* ipCidrRouteTable_undo_setup */ + +/** + * Undo a set request. + * + * This function will be called before the individual node undo + * functions are called. If you need to do any undo that is not + * related to a specific column, you can do it here. + * + * Note that an individual node's undo function will only be called + * if that node is being set to a new value. + * + * If there is anything specific to a particular column (e.g. releasing + * memory for a string), you should do that setup in the node's undo + * function, so it won't be done unless it is necessary. + * + * @param rowreq_ctx + * Pointer to the table context (ipCidrRouteTable_rowreq_ctx) + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error. set will fail. + */ +int +ipCidrRouteTable_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + int rc = MFD_SUCCESS; + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_undo", + "called\n")); + + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:451:M: |-> ipCidrRouteTable undo. + * ipCidrRouteTable undo information, in response to a failed set. + * Undo storage is in (* ipCidrRouteStatus_val_ptr )* + */ + + return rc; +} /* ipCidrRouteTable_undo_setup */ + +/** + * Cleanup up context undo information. + * + * This function will be called after set/commit processing. If you + * allocated any resources in undo_setup, this is the place to release + * those resources. + * + * This function is called regardless of the success or failure of the set + * request. If you need to perform different steps for cleanup depending + * on success or failure, you can add a flag to the rowreq_ctx. + * + * @param rowreq_ctx + * Pointer to the table context (ipCidrRouteTable_rowreq_ctx) + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error + */ +int +ipCidrRouteTable_undo_cleanup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + int rc = MFD_SUCCESS; + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_undo_cleanup", + "called\n")); + + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:452:M: |-> Cleanup ipCidrRouteTable undo. + * Undo storage is in (* ipCidrRouteStatus_val_ptr )* + */ + + return rc; +} /* ipCidrRouteTable_undo_cleanup */ + +/** + * commit new values. + * + * At this point, you should have done everything you can to ensure that + * this commit will not fail. + * + * Should you need different behavior depending on which columns were + * set, rowreq_ctx->column_set_flags will indicate which writeable columns were + * set. The definitions for the COLUMN_*_FLAG bits can be found in + * ipCidrRouteTable.h. + * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags. + * + * @param rowreq_ctx + * Pointer to the users context. + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error + */ +int +ipCidrRouteTable_commit(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + int rc = MFD_SUCCESS; + int save_flags; + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_commit", + "called\n")); + + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * save flags, then clear until we actually do something + */ + save_flags = rowreq_ctx->column_set_flags; + rowreq_ctx->column_set_flags = 0; + + /* + * commit ipCidrRouteTable data + * 1) check the column's flag in save_flags to see if it was set. + * 2) clear the flag when you handle that column + * 3) set the column's flag in column_set_flags if it needs undo + * processing in case of a failure. + */ + if (save_flags & COLUMN_IPCIDRROUTEIFINDEX_FLAG) { + save_flags &= ~COLUMN_IPCIDRROUTEIFINDEX_FLAG; /* clear ipCidrRouteIfIndex */ + /* + * TODO:482:o: |-> commit column ipCidrRouteIfIndex. + */ + rc = -1; + if (-1 == rc) { + snmp_log(LOG_ERR, + "ipCidrRouteTable column ipCidrRouteIfIndex commit failed\n"); + } else { + /* + * set flag, in case we need to undo ipCidrRouteIfIndex + */ + rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEIFINDEX_FLAG; + } + } + + if (save_flags & COLUMN_IPCIDRROUTETYPE_FLAG) { + save_flags &= ~COLUMN_IPCIDRROUTETYPE_FLAG; /* clear ipCidrRouteType */ + /* + * TODO:482:o: |-> commit column ipCidrRouteType. + */ + rc = -1; + if (-1 == rc) { + snmp_log(LOG_ERR, + "ipCidrRouteTable column ipCidrRouteType commit failed\n"); + } else { + /* + * set flag, in case we need to undo ipCidrRouteType + */ + rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTETYPE_FLAG; + } + } + + if (save_flags & COLUMN_IPCIDRROUTEINFO_FLAG) { + save_flags &= ~COLUMN_IPCIDRROUTEINFO_FLAG; /* clear ipCidrRouteInfo */ + /* + * TODO:482:o: |-> commit column ipCidrRouteInfo. + */ + rc = -1; + if (-1 == rc) { + snmp_log(LOG_ERR, + "ipCidrRouteTable column ipCidrRouteInfo commit failed\n"); + } else { + /* + * set flag, in case we need to undo ipCidrRouteInfo + */ + rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEINFO_FLAG; + } + } + + if (save_flags & COLUMN_IPCIDRROUTENEXTHOPAS_FLAG) { + save_flags &= ~COLUMN_IPCIDRROUTENEXTHOPAS_FLAG; /* clear ipCidrRouteNextHopAS */ + /* + * TODO:482:o: |-> commit column ipCidrRouteNextHopAS. + */ + rc = -1; + if (-1 == rc) { + snmp_log(LOG_ERR, + "ipCidrRouteTable column ipCidrRouteNextHopAS commit failed\n"); + } else { + /* + * set flag, in case we need to undo ipCidrRouteNextHopAS + */ + rowreq_ctx->column_set_flags |= + COLUMN_IPCIDRROUTENEXTHOPAS_FLAG; + } + } + + if (save_flags & COLUMN_IPCIDRROUTEMETRIC1_FLAG) { + save_flags &= ~COLUMN_IPCIDRROUTEMETRIC1_FLAG; /* clear ipCidrRouteMetric1 */ + /* + * TODO:482:o: |-> commit column ipCidrRouteMetric1. + */ + rc = -1; + if (-1 == rc) { + snmp_log(LOG_ERR, + "ipCidrRouteTable column ipCidrRouteMetric1 commit failed\n"); + } else { + /* + * set flag, in case we need to undo ipCidrRouteMetric1 + */ + rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC1_FLAG; + } + } + + if (save_flags & COLUMN_IPCIDRROUTEMETRIC2_FLAG) { + save_flags &= ~COLUMN_IPCIDRROUTEMETRIC2_FLAG; /* clear ipCidrRouteMetric2 */ + /* + * TODO:482:o: |-> commit column ipCidrRouteMetric2. + */ + rc = -1; + if (-1 == rc) { + snmp_log(LOG_ERR, + "ipCidrRouteTable column ipCidrRouteMetric2 commit failed\n"); + } else { + /* + * set flag, in case we need to undo ipCidrRouteMetric2 + */ + rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC2_FLAG; + } + } + + if (save_flags & COLUMN_IPCIDRROUTEMETRIC3_FLAG) { + save_flags &= ~COLUMN_IPCIDRROUTEMETRIC3_FLAG; /* clear ipCidrRouteMetric3 */ + /* + * TODO:482:o: |-> commit column ipCidrRouteMetric3. + */ + rc = -1; + if (-1 == rc) { + snmp_log(LOG_ERR, + "ipCidrRouteTable column ipCidrRouteMetric3 commit failed\n"); + } else { + /* + * set flag, in case we need to undo ipCidrRouteMetric3 + */ + rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC3_FLAG; + } + } + + if (save_flags & COLUMN_IPCIDRROUTEMETRIC4_FLAG) { + save_flags &= ~COLUMN_IPCIDRROUTEMETRIC4_FLAG; /* clear ipCidrRouteMetric4 */ + /* + * TODO:482:o: |-> commit column ipCidrRouteMetric4. + */ + rc = -1; + if (-1 == rc) { + snmp_log(LOG_ERR, + "ipCidrRouteTable column ipCidrRouteMetric4 commit failed\n"); + } else { + /* + * set flag, in case we need to undo ipCidrRouteMetric4 + */ + rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC4_FLAG; + } + } + + if (save_flags & COLUMN_IPCIDRROUTEMETRIC5_FLAG) { + save_flags &= ~COLUMN_IPCIDRROUTEMETRIC5_FLAG; /* clear ipCidrRouteMetric5 */ + /* + * TODO:482:o: |-> commit column ipCidrRouteMetric5. + */ + rc = -1; + if (-1 == rc) { + snmp_log(LOG_ERR, + "ipCidrRouteTable column ipCidrRouteMetric5 commit failed\n"); + } else { + /* + * set flag, in case we need to undo ipCidrRouteMetric5 + */ + rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTEMETRIC5_FLAG; + } + } + + if (save_flags & COLUMN_IPCIDRROUTESTATUS_FLAG) { + save_flags &= ~COLUMN_IPCIDRROUTESTATUS_FLAG; /* clear ipCidrRouteStatus */ + /* + * TODO:482:o: |-> commit column ipCidrRouteStatus. + */ + rc = -1; + if (-1 == rc) { + snmp_log(LOG_ERR, + "ipCidrRouteTable column ipCidrRouteStatus commit failed\n"); + } else { + /* + * set flag, in case we need to undo ipCidrRouteStatus + */ + rowreq_ctx->column_set_flags |= COLUMN_IPCIDRROUTESTATUS_FLAG; + } + } + + /* + * if we successfully commited this row, set the dirty flag. + */ + if (MFD_SUCCESS == rc) { + rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY; + } + + if (save_flags) { + snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n", + save_flags); + return MFD_ERROR; + } + + return rc; +} /* ipCidrRouteTable_commit */ + +/** + * undo commit new values. + * + * Should you need different behavior depending on which columns were + * set, rowreq_ctx->column_set_flags will indicate which writeable columns were + * set. The definitions for the COLUMN_*_FLAG bits can be found in + * ipCidrRouteTable.h. + * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags. + * + * @param rowreq_ctx + * Pointer to the users context. + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error + */ +int +ipCidrRouteTable_undo_commit(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + int rc = MFD_SUCCESS; + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteTable_undo_commit", + "called\n")); + + /** we should have a non-NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:485:M: |-> Undo ipCidrRouteTable commit. + * check the column's flag in rowreq_ctx->column_set_flags to see + * if it was set during commit, then undo it. + * + * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {} + */ + + + /* + * if we successfully un-commited this row, clear the dirty flag. + */ + if (MFD_SUCCESS == rc) { + rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY; + } + + return rc; +} /* ipCidrRouteTable_undo_commit */ + +/* + * TODO:440:M: Implement ipCidrRouteTable node value checks. + * TODO:450:M: Implement ipCidrRouteTable undo functions. + * TODO:460:M: Implement ipCidrRouteTable set functions. + * TODO:480:M: Implement ipCidrRouteTable commit functions. + */ +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteIfIndex + * ipCidrRouteIfIndex is subid 5 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.5 + * Description: +The ifIndex value which identifies the local interface + + + through which the next hop of this route should be + reached. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: 0 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Check that the proposed new value is potentially valid. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteIfIndex_val + * A long containing the new value. + * + * @retval MFD_SUCCESS : incoming value is legal + * @retval MFD_NOT_VALID_NOW : incoming value is not valid now + * @retval MFD_NOT_VALID_EVER : incoming value is never valid + * + * This is the place to check for requirements that are not + * expressed in the mib syntax (for example, a requirement that + * is detailed in the description for an object). + * + * You should check that the requested change between the undo value and the + * new value is legal (ie, the transistion from one value to another + * is legal). + * + *@note + * This check is only to determine if the new value + * is \b potentially valid. This is the first check of many, and + * is one of the simplest ones. + * + *@note + * this is not the place to do any checks for values + * which depend on some other value in the mib. Those + * types of checks should be done in the + * ipCidrRouteTable_check_dependencies() function. + * + * The following checks have already been done for you: + * The syntax is ASN_INTEGER + * + * If there a no other checks you need to do, simply return MFD_SUCCESS. + * + */ +int +ipCidrRouteIfIndex_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteIfIndex_val) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_check_value", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:441:o: |-> Check for valid ipCidrRouteIfIndex value. + */ + + return MFD_SUCCESS; /* ipCidrRouteIfIndex value not illegal */ +} /* ipCidrRouteIfIndex_check_value */ + +/** + * Save old value information + * + * @param rowreq_ctx + * Pointer to the table context (ipCidrRouteTable_rowreq_ctx) + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error. set will fail. + * + * This function will be called after the table level undo setup function + * ipCidrRouteTable_undo_setup has been called. + * + *@note + * this function will only be called if a new value is set for this column. + * + * If there is any setup specific to a particular column (e.g. allocating + * memory for a string), you should do that setup in this function, so it + * won't be done unless it is necessary. + */ +int +ipCidrRouteIfIndex_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_undo_setup", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:455:o: |-> Setup ipCidrRouteIfIndex undo. + */ + /* + * copy ipCidrRouteIfIndex data + * set rowreq_ctx->undo->ipCidrRouteIfIndex from rowreq_ctx->data->ipCidrRouteIfIndex + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteIfIndex_undo_setup */ + +/** + * Set the new value. + * + * @param rowreq_ctx + * Pointer to the users context. You should know how to + * manipulate the value from this object. + * @param ipCidrRouteIfIndex_val + * A long containing the new value. + */ +int +ipCidrRouteIfIndex_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteIfIndex_val) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_set", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:461:M: |-> Set ipCidrRouteIfIndex value. + * set ipCidrRouteIfIndex value in rowreq_ctx->data + */ + + return MFD_SUCCESS; +} /* ipCidrRouteIfIndex_set */ + +/** + * undo the previous set. + * + * @param rowreq_ctx + * Pointer to the users context. + */ +int +ipCidrRouteIfIndex_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteIfIndex_undo", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:456:o: |-> Clean up ipCidrRouteIfIndex undo. + */ + /* + * copy ipCidrRouteIfIndex data + * set rowreq_ctx->data->ipCidrRouteIfIndex from rowreq_ctx->undo->ipCidrRouteIfIndex + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteIfIndex_undo */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteType + * ipCidrRouteType is subid 6 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.6 + * Description: +The type of route. Note that local(3) refers to a + route for which the next hop is the final destination; + remote(4) refers to a route for which the next hop is + not the final destination. + + Routes which do not result in traffic forwarding or + rejection should not be displayed even if the + implementation keeps them stored internally. + + reject (2) refers to a route which, if matched, + discards the message as unreachable. This is used in + some protocols as a means of correctly aggregating + routes. + * + * Attributes: + * accessible 1 isscalar 0 enums 1 hasdefval 0 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * + * Enum range: 3/8. Values: other(1), reject(2), local(3), remote(4) + * + * Its syntax is INTEGER (based on perltype INTEGER) + * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long) + */ +/** + * Check that the proposed new value is potentially valid. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteType_val + * A long containing the new value. + * + * @retval MFD_SUCCESS : incoming value is legal + * @retval MFD_NOT_VALID_NOW : incoming value is not valid now + * @retval MFD_NOT_VALID_EVER : incoming value is never valid + * + * This is the place to check for requirements that are not + * expressed in the mib syntax (for example, a requirement that + * is detailed in the description for an object). + * + * You should check that the requested change between the undo value and the + * new value is legal (ie, the transistion from one value to another + * is legal). + * + *@note + * This check is only to determine if the new value + * is \b potentially valid. This is the first check of many, and + * is one of the simplest ones. + * + *@note + * this is not the place to do any checks for values + * which depend on some other value in the mib. Those + * types of checks should be done in the + * ipCidrRouteTable_check_dependencies() function. + * + * The following checks have already been done for you: + * The syntax is ASN_INTEGER + * The value is one of other(1), reject(2), local(3), remote(4) + * + * If there a no other checks you need to do, simply return MFD_SUCCESS. + * + */ +int +ipCidrRouteType_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + u_long ipCidrRouteType_val) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_check_value", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:441:o: |-> Check for valid ipCidrRouteType value. + */ + + return MFD_SUCCESS; /* ipCidrRouteType value not illegal */ +} /* ipCidrRouteType_check_value */ + +/** + * Save old value information + * + * @param rowreq_ctx + * Pointer to the table context (ipCidrRouteTable_rowreq_ctx) + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error. set will fail. + * + * This function will be called after the table level undo setup function + * ipCidrRouteTable_undo_setup has been called. + * + *@note + * this function will only be called if a new value is set for this column. + * + * If there is any setup specific to a particular column (e.g. allocating + * memory for a string), you should do that setup in this function, so it + * won't be done unless it is necessary. + */ +int +ipCidrRouteType_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_undo_setup", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:455:o: |-> Setup ipCidrRouteType undo. + */ + /* + * copy ipCidrRouteType data + * set rowreq_ctx->undo->ipCidrRouteType from rowreq_ctx->data->ipCidrRouteType + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteType_undo_setup */ + +/** + * Set the new value. + * + * @param rowreq_ctx + * Pointer to the users context. You should know how to + * manipulate the value from this object. + * @param ipCidrRouteType_val + * A long containing the new value. + */ +int +ipCidrRouteType_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + u_long ipCidrRouteType_val) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_set", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:461:M: |-> Set ipCidrRouteType value. + * set ipCidrRouteType value in rowreq_ctx->data + */ + + return MFD_SUCCESS; +} /* ipCidrRouteType_set */ + +/** + * undo the previous set. + * + * @param rowreq_ctx + * Pointer to the users context. + */ +int +ipCidrRouteType_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteType_undo", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:456:o: |-> Clean up ipCidrRouteType undo. + */ + /* + * copy ipCidrRouteType data + * set rowreq_ctx->data->ipCidrRouteType from rowreq_ctx->undo->ipCidrRouteType + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteType_undo */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteInfo + * ipCidrRouteInfo is subid 9 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.9 + * Description: +A reference to MIB definitions specific to the + particular routing protocol which is responsible for + this route, as determined by the value specified in the + route's ipCidrRouteProto value. If this information is + not present, its value should be set to the OBJECT + IDENTIFIER { 0 0 }, which is a syntactically valid + object identifier, and any implementation conforming to + ASN.1 and the Basic Encoding Rules must be able to + generate and recognize this value. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 0 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * + * + * Its syntax is OBJECTID (based on perltype OBJECTID) + * The net-snmp type is ASN_OBJECT_ID. The C type decl is oid (oid) + * This data type requires a length. (Max ) + */ +/** + * Check that the proposed new value is potentially valid. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteInfo_val_ptr + * A oid containing the new value. + * @param ipCidrRouteInfo_val_ptr_len + * The size (in bytes) of the data pointed to by ipCidrRouteInfo_val_ptr + * + * @retval MFD_SUCCESS : incoming value is legal + * @retval MFD_NOT_VALID_NOW : incoming value is not valid now + * @retval MFD_NOT_VALID_EVER : incoming value is never valid + * + * This is the place to check for requirements that are not + * expressed in the mib syntax (for example, a requirement that + * is detailed in the description for an object). + * + * Since you aren't using a generated data context, you also need to + * check the length, to make sure you don't overflow your storage space. + * + * You should check that the requested change between the undo value and the + * new value is legal (ie, the transistion from one value to another + * is legal). + * + *@note + * This check is only to determine if the new value + * is \b potentially valid. This is the first check of many, and + * is one of the simplest ones. + * + *@note + * this is not the place to do any checks for values + * which depend on some other value in the mib. Those + * types of checks should be done in the + * ipCidrRouteTable_check_dependencies() function. + * + * The following checks have already been done for you: + * The syntax is ASN_OBJECT_ID + * + * If there a no other checks you need to do, simply return MFD_SUCCESS. + * + */ +int +ipCidrRouteInfo_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + oid * ipCidrRouteInfo_val_ptr, + size_t ipCidrRouteInfo_val_ptr_len) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_check_value", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + netsnmp_assert(NULL != ipCidrRouteInfo_val_ptr); + + /* + * TODO:441:o: |-> Check for valid ipCidrRouteInfo value. + */ + + return MFD_SUCCESS; /* ipCidrRouteInfo value not illegal */ +} /* ipCidrRouteInfo_check_value */ + +/** + * Save old value information + * + * @param rowreq_ctx + * Pointer to the table context (ipCidrRouteTable_rowreq_ctx) + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error. set will fail. + * + * This function will be called after the table level undo setup function + * ipCidrRouteTable_undo_setup has been called. + * + *@note + * this function will only be called if a new value is set for this column. + * + * If there is any setup specific to a particular column (e.g. allocating + * memory for a string), you should do that setup in this function, so it + * won't be done unless it is necessary. + */ +int +ipCidrRouteInfo_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_undo_setup", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:455:o: |-> Setup ipCidrRouteInfo undo. + */ + /* + * copy ipCidrRouteInfo and ipCidrRouteInfo_len data + * set rowreq_ctx->undo->ipCidrRouteInfo from rowreq_ctx->data->ipCidrRouteInfo + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteInfo_undo_setup */ + +/** + * Set the new value. + * + * @param rowreq_ctx + * Pointer to the users context. You should know how to + * manipulate the value from this object. + * @param ipCidrRouteInfo_val_ptr + * A oid containing the new value. + * @param ipCidrRouteInfo_val_ptr_len + * The size (in bytes) of the data pointed to by ipCidrRouteInfo_val_ptr + */ +int +ipCidrRouteInfo_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + oid * ipCidrRouteInfo_val_ptr, + size_t ipCidrRouteInfo_val_ptr_len) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_set", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + netsnmp_assert(NULL != ipCidrRouteInfo_val_ptr); + + /* + * TODO:461:M: |-> Set ipCidrRouteInfo value. + * set ipCidrRouteInfo value in rowreq_ctx->data + */ + + return MFD_SUCCESS; +} /* ipCidrRouteInfo_set */ + +/** + * undo the previous set. + * + * @param rowreq_ctx + * Pointer to the users context. + */ +int +ipCidrRouteInfo_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteInfo_undo", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:456:o: |-> Clean up ipCidrRouteInfo undo. + */ + /* + * copy ipCidrRouteInfo and ipCidrRouteInfo_len data + * set rowreq_ctx->data->ipCidrRouteInfo from rowreq_ctx->undo->ipCidrRouteInfo + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteInfo_undo */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteNextHopAS + * ipCidrRouteNextHopAS is subid 10 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.10 + * Description: +The Autonomous System Number of the Next Hop. The + semantics of this object are determined by the routing- + protocol specified in the route's ipCidrRouteProto + value. When this object is unknown or not relevant its + value should be set to zero. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: 0 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Check that the proposed new value is potentially valid. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteNextHopAS_val + * A long containing the new value. + * + * @retval MFD_SUCCESS : incoming value is legal + * @retval MFD_NOT_VALID_NOW : incoming value is not valid now + * @retval MFD_NOT_VALID_EVER : incoming value is never valid + * + * This is the place to check for requirements that are not + * expressed in the mib syntax (for example, a requirement that + * is detailed in the description for an object). + * + * You should check that the requested change between the undo value and the + * new value is legal (ie, the transistion from one value to another + * is legal). + * + *@note + * This check is only to determine if the new value + * is \b potentially valid. This is the first check of many, and + * is one of the simplest ones. + * + *@note + * this is not the place to do any checks for values + * which depend on some other value in the mib. Those + * types of checks should be done in the + * ipCidrRouteTable_check_dependencies() function. + * + * The following checks have already been done for you: + * The syntax is ASN_INTEGER + * + * If there a no other checks you need to do, simply return MFD_SUCCESS. + * + */ +int +ipCidrRouteNextHopAS_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteNextHopAS_val) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_check_value", "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:441:o: |-> Check for valid ipCidrRouteNextHopAS value. + */ + + return MFD_SUCCESS; /* ipCidrRouteNextHopAS value not illegal */ +} /* ipCidrRouteNextHopAS_check_value */ + +/** + * Save old value information + * + * @param rowreq_ctx + * Pointer to the table context (ipCidrRouteTable_rowreq_ctx) + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error. set will fail. + * + * This function will be called after the table level undo setup function + * ipCidrRouteTable_undo_setup has been called. + * + *@note + * this function will only be called if a new value is set for this column. + * + * If there is any setup specific to a particular column (e.g. allocating + * memory for a string), you should do that setup in this function, so it + * won't be done unless it is necessary. + */ +int +ipCidrRouteNextHopAS_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_undo_setup", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:455:o: |-> Setup ipCidrRouteNextHopAS undo. + */ + /* + * copy ipCidrRouteNextHopAS data + * set rowreq_ctx->undo->ipCidrRouteNextHopAS from rowreq_ctx->data->ipCidrRouteNextHopAS + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteNextHopAS_undo_setup */ + +/** + * Set the new value. + * + * @param rowreq_ctx + * Pointer to the users context. You should know how to + * manipulate the value from this object. + * @param ipCidrRouteNextHopAS_val + * A long containing the new value. + */ +int +ipCidrRouteNextHopAS_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteNextHopAS_val) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_set", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:461:M: |-> Set ipCidrRouteNextHopAS value. + * set ipCidrRouteNextHopAS value in rowreq_ctx->data + */ + + return MFD_SUCCESS; +} /* ipCidrRouteNextHopAS_set */ + +/** + * undo the previous set. + * + * @param rowreq_ctx + * Pointer to the users context. + */ +int +ipCidrRouteNextHopAS_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteNextHopAS_undo", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:456:o: |-> Clean up ipCidrRouteNextHopAS undo. + */ + /* + * copy ipCidrRouteNextHopAS data + * set rowreq_ctx->data->ipCidrRouteNextHopAS from rowreq_ctx->undo->ipCidrRouteNextHopAS + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteNextHopAS_undo */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric1 + * ipCidrRouteMetric1 is subid 11 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.11 + * Description: +The primary routing metric for this route. The + semantics of this metric are determined by the routing- + protocol specified in the route's ipCidrRouteProto + value. If this metric is not used, its value should be + set to -1. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: -1 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Check that the proposed new value is potentially valid. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteMetric1_val + * A long containing the new value. + * + * @retval MFD_SUCCESS : incoming value is legal + * @retval MFD_NOT_VALID_NOW : incoming value is not valid now + * @retval MFD_NOT_VALID_EVER : incoming value is never valid + * + * This is the place to check for requirements that are not + * expressed in the mib syntax (for example, a requirement that + * is detailed in the description for an object). + * + * You should check that the requested change between the undo value and the + * new value is legal (ie, the transistion from one value to another + * is legal). + * + *@note + * This check is only to determine if the new value + * is \b potentially valid. This is the first check of many, and + * is one of the simplest ones. + * + *@note + * this is not the place to do any checks for values + * which depend on some other value in the mib. Those + * types of checks should be done in the + * ipCidrRouteTable_check_dependencies() function. + * + * The following checks have already been done for you: + * The syntax is ASN_INTEGER + * + * If there a no other checks you need to do, simply return MFD_SUCCESS. + * + */ +int +ipCidrRouteMetric1_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteMetric1_val) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_check_value", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:441:o: |-> Check for valid ipCidrRouteMetric1 value. + */ + + return MFD_SUCCESS; /* ipCidrRouteMetric1 value not illegal */ +} /* ipCidrRouteMetric1_check_value */ + +/** + * Save old value information + * + * @param rowreq_ctx + * Pointer to the table context (ipCidrRouteTable_rowreq_ctx) + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error. set will fail. + * + * This function will be called after the table level undo setup function + * ipCidrRouteTable_undo_setup has been called. + * + *@note + * this function will only be called if a new value is set for this column. + * + * If there is any setup specific to a particular column (e.g. allocating + * memory for a string), you should do that setup in this function, so it + * won't be done unless it is necessary. + */ +int +ipCidrRouteMetric1_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_undo_setup", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:455:o: |-> Setup ipCidrRouteMetric1 undo. + */ + /* + * copy ipCidrRouteMetric1 data + * set rowreq_ctx->undo->ipCidrRouteMetric1 from rowreq_ctx->data->ipCidrRouteMetric1 + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteMetric1_undo_setup */ + +/** + * Set the new value. + * + * @param rowreq_ctx + * Pointer to the users context. You should know how to + * manipulate the value from this object. + * @param ipCidrRouteMetric1_val + * A long containing the new value. + */ +int +ipCidrRouteMetric1_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteMetric1_val) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_set", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:461:M: |-> Set ipCidrRouteMetric1 value. + * set ipCidrRouteMetric1 value in rowreq_ctx->data + */ + + return MFD_SUCCESS; +} /* ipCidrRouteMetric1_set */ + +/** + * undo the previous set. + * + * @param rowreq_ctx + * Pointer to the users context. + */ +int +ipCidrRouteMetric1_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric1_undo", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:456:o: |-> Clean up ipCidrRouteMetric1 undo. + */ + /* + * copy ipCidrRouteMetric1 data + * set rowreq_ctx->data->ipCidrRouteMetric1 from rowreq_ctx->undo->ipCidrRouteMetric1 + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteMetric1_undo */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric2 + * ipCidrRouteMetric2 is subid 12 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.12 + * Description: +An alternate routing metric for this route. The + semantics of this metric are determined by the routing- + protocol specified in the route's ipCidrRouteProto + value. If this metric is not used, its value should be + set to -1. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: -1 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Check that the proposed new value is potentially valid. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteMetric2_val + * A long containing the new value. + * + * @retval MFD_SUCCESS : incoming value is legal + * @retval MFD_NOT_VALID_NOW : incoming value is not valid now + * @retval MFD_NOT_VALID_EVER : incoming value is never valid + * + * This is the place to check for requirements that are not + * expressed in the mib syntax (for example, a requirement that + * is detailed in the description for an object). + * + * You should check that the requested change between the undo value and the + * new value is legal (ie, the transistion from one value to another + * is legal). + * + *@note + * This check is only to determine if the new value + * is \b potentially valid. This is the first check of many, and + * is one of the simplest ones. + * + *@note + * this is not the place to do any checks for values + * which depend on some other value in the mib. Those + * types of checks should be done in the + * ipCidrRouteTable_check_dependencies() function. + * + * The following checks have already been done for you: + * The syntax is ASN_INTEGER + * + * If there a no other checks you need to do, simply return MFD_SUCCESS. + * + */ +int +ipCidrRouteMetric2_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteMetric2_val) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_check_value", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:441:o: |-> Check for valid ipCidrRouteMetric2 value. + */ + /* + * does any os use metric 2-5? if so, update to deal with it. + * otherwise, only accept same value we have. + */ + if (ipCidrRouteMetric2_val != rowreq_ctx->data->rt_metric2) + return MFD_NOT_VALID_EVER; + + return MFD_SUCCESS; /* ipCidrRouteMetric2 value not illegal */ +} /* ipCidrRouteMetric2_check_value */ + +/** + * Save old value information + * + * @param rowreq_ctx + * Pointer to the table context (ipCidrRouteTable_rowreq_ctx) + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error. set will fail. + * + * This function will be called after the table level undo setup function + * ipCidrRouteTable_undo_setup has been called. + * + *@note + * this function will only be called if a new value is set for this column. + * + * If there is any setup specific to a particular column (e.g. allocating + * memory for a string), you should do that setup in this function, so it + * won't be done unless it is necessary. + */ +int +ipCidrRouteMetric2_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_undo_setup", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:455:o: |-> Setup ipCidrRouteMetric2 undo. + */ + /* + * copy ipCidrRouteMetric2 data + * set rowreq_ctx->undo->ipCidrRouteMetric2 from rowreq_ctx->data->ipCidrRouteMetric2 + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteMetric2_undo_setup */ + +/** + * Set the new value. + * + * @param rowreq_ctx + * Pointer to the users context. You should know how to + * manipulate the value from this object. + * @param ipCidrRouteMetric2_val + * A long containing the new value. + */ +int +ipCidrRouteMetric2_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteMetric2_val) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_set", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:461:M: |-> Set ipCidrRouteMetric2 value. + * set ipCidrRouteMetric2 value in rowreq_ctx->data + */ + + return MFD_SUCCESS; +} /* ipCidrRouteMetric2_set */ + +/** + * undo the previous set. + * + * @param rowreq_ctx + * Pointer to the users context. + */ +int +ipCidrRouteMetric2_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric2_undo", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:456:o: |-> Clean up ipCidrRouteMetric2 undo. + */ + /* + * copy ipCidrRouteMetric2 data + * set rowreq_ctx->data->ipCidrRouteMetric2 from rowreq_ctx->undo->ipCidrRouteMetric2 + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteMetric2_undo */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric3 + * ipCidrRouteMetric3 is subid 13 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.13 + * Description: +An alternate routing metric for this route. The + semantics of this metric are determined by the routing- + protocol specified in the route's ipCidrRouteProto + value. If this metric is not used, its value should be + set to -1. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: -1 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Check that the proposed new value is potentially valid. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteMetric3_val + * A long containing the new value. + * + * @retval MFD_SUCCESS : incoming value is legal + * @retval MFD_NOT_VALID_NOW : incoming value is not valid now + * @retval MFD_NOT_VALID_EVER : incoming value is never valid + * + * This is the place to check for requirements that are not + * expressed in the mib syntax (for example, a requirement that + * is detailed in the description for an object). + * + * You should check that the requested change between the undo value and the + * new value is legal (ie, the transistion from one value to another + * is legal). + * + *@note + * This check is only to determine if the new value + * is \b potentially valid. This is the first check of many, and + * is one of the simplest ones. + * + *@note + * this is not the place to do any checks for values + * which depend on some other value in the mib. Those + * types of checks should be done in the + * ipCidrRouteTable_check_dependencies() function. + * + * The following checks have already been done for you: + * The syntax is ASN_INTEGER + * + * If there a no other checks you need to do, simply return MFD_SUCCESS. + * + */ +int +ipCidrRouteMetric3_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteMetric3_val) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_check_value", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:441:o: |-> Check for valid ipCidrRouteMetric3 value. + */ + /* + * does any os use metric 2-5? if so, update to deal with it. + * otherwise, only accept same value we have. + */ + if (ipCidrRouteMetric3_val != rowreq_ctx->data->rt_metric3) + return MFD_NOT_VALID_EVER; + + return MFD_SUCCESS; /* ipCidrRouteMetric3 value not illegal */ +} /* ipCidrRouteMetric3_check_value */ + +/** + * Save old value information + * + * @param rowreq_ctx + * Pointer to the table context (ipCidrRouteTable_rowreq_ctx) + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error. set will fail. + * + * This function will be called after the table level undo setup function + * ipCidrRouteTable_undo_setup has been called. + * + *@note + * this function will only be called if a new value is set for this column. + * + * If there is any setup specific to a particular column (e.g. allocating + * memory for a string), you should do that setup in this function, so it + * won't be done unless it is necessary. + */ +int +ipCidrRouteMetric3_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_undo_setup", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:455:o: |-> Setup ipCidrRouteMetric3 undo. + */ + /* + * copy ipCidrRouteMetric3 data + * set rowreq_ctx->undo->ipCidrRouteMetric3 from rowreq_ctx->data->ipCidrRouteMetric3 + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteMetric3_undo_setup */ + +/** + * Set the new value. + * + * @param rowreq_ctx + * Pointer to the users context. You should know how to + * manipulate the value from this object. + * @param ipCidrRouteMetric3_val + * A long containing the new value. + */ +int +ipCidrRouteMetric3_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteMetric3_val) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_set", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:461:M: |-> Set ipCidrRouteMetric3 value. + * set ipCidrRouteMetric3 value in rowreq_ctx->data + */ + + return MFD_SUCCESS; +} /* ipCidrRouteMetric3_set */ + +/** + * undo the previous set. + * + * @param rowreq_ctx + * Pointer to the users context. + */ +int +ipCidrRouteMetric3_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric3_undo", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:456:o: |-> Clean up ipCidrRouteMetric3 undo. + */ + /* + * copy ipCidrRouteMetric3 data + * set rowreq_ctx->data->ipCidrRouteMetric3 from rowreq_ctx->undo->ipCidrRouteMetric3 + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteMetric3_undo */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric4 + * ipCidrRouteMetric4 is subid 14 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.14 + * Description: +An alternate routing metric for this route. The + semantics of this metric are determined by the routing- + protocol specified in the route's ipCidrRouteProto + value. If this metric is not used, its value should be + set to -1. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: -1 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Check that the proposed new value is potentially valid. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteMetric4_val + * A long containing the new value. + * + * @retval MFD_SUCCESS : incoming value is legal + * @retval MFD_NOT_VALID_NOW : incoming value is not valid now + * @retval MFD_NOT_VALID_EVER : incoming value is never valid + * + * This is the place to check for requirements that are not + * expressed in the mib syntax (for example, a requirement that + * is detailed in the description for an object). + * + * You should check that the requested change between the undo value and the + * new value is legal (ie, the transistion from one value to another + * is legal). + * + *@note + * This check is only to determine if the new value + * is \b potentially valid. This is the first check of many, and + * is one of the simplest ones. + * + *@note + * this is not the place to do any checks for values + * which depend on some other value in the mib. Those + * types of checks should be done in the + * ipCidrRouteTable_check_dependencies() function. + * + * The following checks have already been done for you: + * The syntax is ASN_INTEGER + * + * If there a no other checks you need to do, simply return MFD_SUCCESS. + * + */ +int +ipCidrRouteMetric4_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteMetric4_val) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_check_value", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:441:o: |-> Check for valid ipCidrRouteMetric4 value. + */ + /* + * does any os use metric 2-5? if so, update to deal with it. + * otherwise, only accept same value we have. + */ + if (ipCidrRouteMetric4_val != rowreq_ctx->data->rt_metric4) + return MFD_NOT_VALID_EVER; + + return MFD_SUCCESS; /* ipCidrRouteMetric4 value not illegal */ +} /* ipCidrRouteMetric4_check_value */ + +/** + * Save old value information + * + * @param rowreq_ctx + * Pointer to the table context (ipCidrRouteTable_rowreq_ctx) + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error. set will fail. + * + * This function will be called after the table level undo setup function + * ipCidrRouteTable_undo_setup has been called. + * + *@note + * this function will only be called if a new value is set for this column. + * + * If there is any setup specific to a particular column (e.g. allocating + * memory for a string), you should do that setup in this function, so it + * won't be done unless it is necessary. + */ +int +ipCidrRouteMetric4_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_undo_setup", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:455:o: |-> Setup ipCidrRouteMetric4 undo. + */ + /* + * copy ipCidrRouteMetric4 data + * set rowreq_ctx->undo->ipCidrRouteMetric4 from rowreq_ctx->data->ipCidrRouteMetric4 + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteMetric4_undo_setup */ + +/** + * Set the new value. + * + * @param rowreq_ctx + * Pointer to the users context. You should know how to + * manipulate the value from this object. + * @param ipCidrRouteMetric4_val + * A long containing the new value. + */ +int +ipCidrRouteMetric4_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteMetric4_val) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_set", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:461:M: |-> Set ipCidrRouteMetric4 value. + * set ipCidrRouteMetric4 value in rowreq_ctx->data + */ + + return MFD_SUCCESS; +} /* ipCidrRouteMetric4_set */ + +/** + * undo the previous set. + * + * @param rowreq_ctx + * Pointer to the users context. + */ +int +ipCidrRouteMetric4_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric4_undo", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:456:o: |-> Clean up ipCidrRouteMetric4 undo. + */ + /* + * copy ipCidrRouteMetric4 data + * set rowreq_ctx->data->ipCidrRouteMetric4 from rowreq_ctx->undo->ipCidrRouteMetric4 + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteMetric4_undo */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteMetric5 + * ipCidrRouteMetric5 is subid 15 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.15 + * Description: +An alternate routing metric for this route. The + semantics of this metric are determined by the routing- + + + protocol specified in the route's ipCidrRouteProto + value. If this metric is not used, its value should be + set to -1. + * + * Attributes: + * accessible 1 isscalar 0 enums 0 hasdefval 1 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * defval: -1 + * + * + * Its syntax is INTEGER32 (based on perltype INTEGER32) + * The net-snmp type is ASN_INTEGER. The C type decl is long (long) + */ +/** + * Check that the proposed new value is potentially valid. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteMetric5_val + * A long containing the new value. + * + * @retval MFD_SUCCESS : incoming value is legal + * @retval MFD_NOT_VALID_NOW : incoming value is not valid now + * @retval MFD_NOT_VALID_EVER : incoming value is never valid + * + * This is the place to check for requirements that are not + * expressed in the mib syntax (for example, a requirement that + * is detailed in the description for an object). + * + * You should check that the requested change between the undo value and the + * new value is legal (ie, the transistion from one value to another + * is legal). + * + *@note + * This check is only to determine if the new value + * is \b potentially valid. This is the first check of many, and + * is one of the simplest ones. + * + *@note + * this is not the place to do any checks for values + * which depend on some other value in the mib. Those + * types of checks should be done in the + * ipCidrRouteTable_check_dependencies() function. + * + * The following checks have already been done for you: + * The syntax is ASN_INTEGER + * + * If there a no other checks you need to do, simply return MFD_SUCCESS. + * + */ +int +ipCidrRouteMetric5_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteMetric5_val) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_check_value", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:441:o: |-> Check for valid ipCidrRouteMetric5 value. + */ + /* + * does any os use metric 2-5? if so, update to deal with it. + * otherwise, only accept same value we have. + */ + if (ipCidrRouteMetric5_val != rowreq_ctx->data->rt_metric5) + return MFD_NOT_VALID_EVER; + + return MFD_SUCCESS; /* ipCidrRouteMetric5 value not illegal */ +} /* ipCidrRouteMetric5_check_value */ + +/** + * Save old value information + * + * @param rowreq_ctx + * Pointer to the table context (ipCidrRouteTable_rowreq_ctx) + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error. set will fail. + * + * This function will be called after the table level undo setup function + * ipCidrRouteTable_undo_setup has been called. + * + *@note + * this function will only be called if a new value is set for this column. + * + * If there is any setup specific to a particular column (e.g. allocating + * memory for a string), you should do that setup in this function, so it + * won't be done unless it is necessary. + */ +int +ipCidrRouteMetric5_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_undo_setup", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:455:o: |-> Setup ipCidrRouteMetric5 undo. + */ + /* + * copy ipCidrRouteMetric5 data + * set rowreq_ctx->undo->ipCidrRouteMetric5 from rowreq_ctx->data->ipCidrRouteMetric5 + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteMetric5_undo_setup */ + +/** + * Set the new value. + * + * @param rowreq_ctx + * Pointer to the users context. You should know how to + * manipulate the value from this object. + * @param ipCidrRouteMetric5_val + * A long containing the new value. + */ +int +ipCidrRouteMetric5_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + long ipCidrRouteMetric5_val) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_set", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:461:M: |-> Set ipCidrRouteMetric5 value. + * set ipCidrRouteMetric5 value in rowreq_ctx->data + */ + + return MFD_SUCCESS; +} /* ipCidrRouteMetric5_set */ + +/** + * undo the previous set. + * + * @param rowreq_ctx + * Pointer to the users context. + */ +int +ipCidrRouteMetric5_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteMetric5_undo", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:456:o: |-> Clean up ipCidrRouteMetric5 undo. + */ + /* + * copy ipCidrRouteMetric5 data + * set rowreq_ctx->data->ipCidrRouteMetric5 from rowreq_ctx->undo->ipCidrRouteMetric5 + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteMetric5_undo */ + +/*--------------------------------------------------------------------- + * IP-FORWARD-MIB::ipCidrRouteEntry.ipCidrRouteStatus + * ipCidrRouteStatus is subid 16 of ipCidrRouteEntry. + * Its status is Deprecated, and its access level is Create. + * OID: .1.3.6.1.2.1.4.24.4.1.16 + * Description: +The row status variable, used according to row + installation and removal conventions. + * + * Attributes: + * accessible 1 isscalar 0 enums 1 hasdefval 0 + * readable 1 iscolumn 1 ranges 0 hashint 0 + * settable 1 + * + * Enum range: 3/8. Values: active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6) + * + * Its syntax is RowStatus (based on perltype INTEGER) + * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long) + */ +/** + * Check that the proposed new value is potentially valid. + * + * @param rowreq_ctx + * Pointer to the row request context. + * @param ipCidrRouteStatus_val + * A long containing the new value. + * + * @retval MFD_SUCCESS : incoming value is legal + * @retval MFD_NOT_VALID_NOW : incoming value is not valid now + * @retval MFD_NOT_VALID_EVER : incoming value is never valid + * + * This is the place to check for requirements that are not + * expressed in the mib syntax (for example, a requirement that + * is detailed in the description for an object). + * + * You should check that the requested change between the undo value and the + * new value is legal (ie, the transistion from one value to another + * is legal). + * + *@note + * This check is only to determine if the new value + * is \b potentially valid. This is the first check of many, and + * is one of the simplest ones. + * + *@note + * this is not the place to do any checks for values + * which depend on some other value in the mib. Those + * types of checks should be done in the + * ipCidrRouteTable_check_dependencies() function. + * + * The following checks have already been done for you: + * The syntax is ASN_INTEGER + * The value is one of active(1), notInService(2), notReady(3), createAndGo(4), createAndWait(5), destroy(6) + * + * If there a no other checks you need to do, simply return MFD_SUCCESS. + * + */ +int +ipCidrRouteStatus_check_value(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + u_long ipCidrRouteStatus_val) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteStatus_check_value", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:441:o: |-> Check for valid ipCidrRouteStatus value. + */ + + return MFD_SUCCESS; /* ipCidrRouteStatus value not illegal */ +} /* ipCidrRouteStatus_check_value */ + +/** + * Save old value information + * + * @param rowreq_ctx + * Pointer to the table context (ipCidrRouteTable_rowreq_ctx) + * + * @retval MFD_SUCCESS : success + * @retval MFD_ERROR : error. set will fail. + * + * This function will be called after the table level undo setup function + * ipCidrRouteTable_undo_setup has been called. + * + *@note + * this function will only be called if a new value is set for this column. + * + * If there is any setup specific to a particular column (e.g. allocating + * memory for a string), you should do that setup in this function, so it + * won't be done unless it is necessary. + */ +int +ipCidrRouteStatus_undo_setup(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteStatus_undo_setup", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:455:o: |-> Setup ipCidrRouteStatus undo. + */ + /* + * copy ipCidrRouteStatus data + * set rowreq_ctx->undo->ipCidrRouteStatus from rowreq_ctx->data->ipCidrRouteStatus + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteStatus_undo_setup */ + +/** + * Set the new value. + * + * @param rowreq_ctx + * Pointer to the users context. You should know how to + * manipulate the value from this object. + * @param ipCidrRouteStatus_val + * A long containing the new value. + */ +int +ipCidrRouteStatus_set(ipCidrRouteTable_rowreq_ctx * rowreq_ctx, + u_long ipCidrRouteStatus_val) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteStatus_set", + "called\n")); + + /** should never get a NULL pointer */ + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:461:M: |-> Set ipCidrRouteStatus value. + * set ipCidrRouteStatus value in rowreq_ctx->data + */ + + return MFD_SUCCESS; +} /* ipCidrRouteStatus_set */ + +/** + * undo the previous set. + * + * @param rowreq_ctx + * Pointer to the users context. + */ +int +ipCidrRouteStatus_undo(ipCidrRouteTable_rowreq_ctx * rowreq_ctx) +{ + + DEBUGMSGTL(("verbose:ipCidrRouteTable:ipCidrRouteStatus_undo", + "called\n")); + + netsnmp_assert(NULL != rowreq_ctx); + + /* + * TODO:456:o: |-> Clean up ipCidrRouteStatus undo. + */ + /* + * copy ipCidrRouteStatus data + * set rowreq_ctx->data->ipCidrRouteStatus from rowreq_ctx->undo->ipCidrRouteStatus + */ + + + return MFD_SUCCESS; +} /* ipCidrRouteStatus_undo */ + +/** @} */ +/** @{ */ |