📄 inetcidrroutetable.c
字号:
* 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 */intinetCidrRouteMetric5_get(inetCidrRouteTable_rowreq_ctx * rowreq_ctx, long *inetCidrRouteMetric5_val_ptr){ /** we should have a non-NULL pointer */ netsnmp_assert(NULL != inetCidrRouteMetric5_val_ptr); DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteMetric5_get", "called\n")); netsnmp_assert(NULL != rowreq_ctx); /* * TODO:231:o: |-> Extract the current value of the inetCidrRouteMetric5 data-> * copy (* inetCidrRouteMetric5_val_ptr ) from rowreq_ctx->data */ /* * TODO:235:M: |-> Remove log message/SKIP once you've set inetCidrRouteMetric5 data */ (*inetCidrRouteMetric5_val_ptr) = rowreq_ctx->data->rt_metric5; return MFD_SUCCESS;} /* inetCidrRouteMetric5_get *//*--------------------------------------------------------------------- * IP-FORWARD-MIB::inetCidrRouteEntry.inetCidrRouteStatus * inetCidrRouteStatus is subid 17 of inetCidrRouteEntry. * Its status is Current, and its access level is Create. * OID: .1.3.6.1.2.1.4.24.7.1.17 * Description:The row status variable, used according to row installation and removal conventions. A row entry cannot be modified when the status is marked as active(1). * * 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 inetCidrRouteStatus data-> * * Set a value using the data context for the row. * * @param rowreq_ctx * Pointer to the row request context. * @param inetCidrRouteStatus_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 */intinetCidrRouteStatus_get(inetCidrRouteTable_rowreq_ctx * rowreq_ctx, u_long * inetCidrRouteStatus_val_ptr){ /** we should have a non-NULL pointer */ netsnmp_assert(NULL != inetCidrRouteStatus_val_ptr); /** WARNING: this code might not work for netsnmp_route_entry */ (*inetCidrRouteStatus_val_ptr) = rowreq_ctx->row_status; return MFD_SUCCESS;} /* inetCidrRouteStatus_get *//** @} *//********************************************************************** ********************************************************************** *** *** Table inetCidrRouteTable *** ********************************************************************** **********************************************************************//* * IP-FORWARD-MIB::inetCidrRouteTable is subid 7 of ipForward. * Its status is Current. * OID: .1.3.6.1.2.1.4.24.7, 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 * inetCidrRouteTable_allocate_data(), but may need extra * initialization similar to what you may have done in * inetCidrRouteTable_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 (inetCidrRouteTable_rowreq_ctx) * * @retval MFD_SUCCESS : success * @retval MFD_ERROR : error. set will fail. */intinetCidrRouteTable_undo_setup(inetCidrRouteTable_rowreq_ctx * rowreq_ctx){ int rc = MFD_SUCCESS; DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_undo_setup", "called\n")); /** we should have a non-NULL pointer */ netsnmp_assert(NULL != rowreq_ctx); /* * TODO:451:M: |-> Setup inetCidrRouteTable undo. * set up inetCidrRouteTable undo information, in preparation for a set. * Undo storage is in (* inetCidrRouteStatus_val_ptr )* */ rowreq_ctx->row_status_undo = rowreq_ctx->row_status; rc = netsnmp_access_route_entry_copy(rowreq_ctx->undo, rowreq_ctx->data); return rc;} /* inetCidrRouteTable_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 (inetCidrRouteTable_rowreq_ctx) * * @retval MFD_SUCCESS : success * @retval MFD_ERROR : error. set will fail. */intinetCidrRouteTable_undo(inetCidrRouteTable_rowreq_ctx * rowreq_ctx){ int rc = MFD_SUCCESS; DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_undo", "called\n")); /** we should have a non-NULL pointer */ netsnmp_assert(NULL != rowreq_ctx); /* * TODO:451:M: |-> inetCidrRouteTable undo. * inetCidrRouteTable undo information, in response to a failed set. * Undo storage is in (* inetCidrRouteStatus_val_ptr )* */ rowreq_ctx->row_status = rowreq_ctx->row_status_undo; rc = netsnmp_access_route_entry_copy(rowreq_ctx->data, rowreq_ctx->undo); return rc;} /* inetCidrRouteTable_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 (inetCidrRouteTable_rowreq_ctx) * * @retval MFD_SUCCESS : success * @retval MFD_ERROR : error */intinetCidrRouteTable_undo_cleanup(inetCidrRouteTable_rowreq_ctx * rowreq_ctx){ int rc = MFD_SUCCESS; DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_undo_cleanup", "called\n")); /** we should have a non-NULL pointer */ netsnmp_assert(NULL != rowreq_ctx); /* * TODO:452:M: |-> Cleanup inetCidrRouteTable undo. * Undo storage is in (* inetCidrRouteStatus_val_ptr )* */ return rc;} /* inetCidrRouteTable_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 * inetCidrRouteTable.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 */intinetCidrRouteTable_commit(inetCidrRouteTable_rowreq_ctx * rowreq_ctx){ int rc = MFD_SUCCESS; int save_flags; DEBUGMSGTL(("verbose:inetCidrRouteTable:inetCidrRouteTable_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 inetCidrRouteTable 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. */ /* * did anything change? */ if (0 == save_flags) { DEBUGMSGTL(("ipAddressTable:ipAddressTable_commit", "no change\n")); return MFD_SUCCESS; } /* * pass everything to data access */ if (save_flags & COLUMN_INETCIDRROUTESTATUS_FLAG) { if (rowreq_ctx->rowreq_flags & MFD_ROW_CREATED) { if (ROWSTATUS_DESTROY == rowreq_ctx->row_status) { rowreq_ctx->rowreq_flags |= MFD_ROW_DELETED; return MFD_SUCCESS; } netsnmp_assert(ROWSTATUS_ACTIVE == rowreq_ctx->row_status); rowreq_ctx->data->flags |= NETSNMP_ACCESS_ROUTE_CREATE; } else if (ROWSTATUS_DESTROY == rowreq_ctx->row_status) { rowreq_ctx->data->flags |= NETSNMP_ACCESS_ROUTE_DELETE; } else rowreq_ctx->data->flags |= NETSNMP_ACCESS_ROUTE_CHANGE; } else rowreq_ctx->data->flags |= NETSNMP_ACCESS_ROUTE_CHANGE; /* * do it * let data access know what columns are set */ rowreq_ctx->data->flags |= (save_flags & NETSNMP_ACCESS_ROUTE_RESERVED_BITS);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -