⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmpnotifyfiltertable_data_access.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
📖 第 1 页 / 共 2 页
字号:
    /*     * TODO:390:o: Prepare row for request.     * If populating row data was delayed, this is the place to     * fill in the row for this request.     */    return MFD_SUCCESS;}                               /* snmpNotifyFilterTable_row_prep *//* * TODO:420:r: Implement snmpNotifyFilterTable index validation. *//*--------------------------------------------------------------------- * SNMP-NOTIFICATION-MIB::snmpNotifyFilterProfileEntry.snmpNotifyFilterProfileName * snmpNotifyFilterProfileName is subid 1 of snmpNotifyFilterProfileEntry. * Its status is Current, and its access level is Create. * OID: .1.3.6.1.6.3.13.1.2.1.1 * Description:The name of the filter profile to be used when generating         notifications using the corresponding entry in the         snmpTargetAddrTable. * * Attributes: *   accessible 1     isscalar 0     enums  0      hasdefval 0 *   readable   1     iscolumn 1     ranges 1      hashint   1 *   settable   1 *   hint: 255t * * Ranges:  1 - 32; * * Its syntax is SnmpAdminString (based on perltype OCTETSTR) * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char) * This data type requires a length.  (Max 32) *//** * check validity of snmpNotifyFilterProfileName external index portion * * NOTE: this is not the place to do any checks for the sanity *       of multiple indexes. Those types of checks should be done in the *       snmpNotifyFilterTable_validate_index() function. * * @retval MFD_SUCCESS   : the incoming value is legal * @retval MFD_ERROR     : the incoming value is NOT legal */int                                                             snmpNotifyFilterTable_snmpNotifyFilterProfileName_check_index    (snmpNotifyFilterTable_rowreq_ctx * rowreq_ctx) {    DEBUGMSGTL(("verbose:snmpNotifyFilterTable:snmpNotifyFilterTable_snmpNotifyFilterProfileName_check_index", "called\n"));    netsnmp_assert(NULL != rowreq_ctx);    /*     * TODO:424:M: |-> Check snmpNotifyFilterTable external index snmpNotifyFilterProfileName.     * check that index value in the table context (rowreq_ctx)     * for the external index snmpNotifyFilterProfileName is legal.     */    return MFD_SUCCESS;         /*  external index snmpNotifyFilterProfileName ok */}                               /* snmpNotifyFilterTable_snmpNotifyFilterProfileName_check_index *//*--------------------------------------------------------------------- * SNMP-NOTIFICATION-MIB::snmpNotifyFilterEntry.snmpNotifyFilterSubtree * snmpNotifyFilterSubtree is subid 1 of snmpNotifyFilterEntry. * Its status is Current, and its access level is NoAccess. * OID: .1.3.6.1.6.3.13.1.3.1.1 * Description:The MIB subtree which, when combined with the corresponding         instance of snmpNotifyFilterMask, defines a family of         subtrees which are included in or excluded from the         filter profile. * * Attributes: *   accessible 0     isscalar 0     enums  0      hasdefval 0 *   readable   0     iscolumn 1     ranges 0      hashint   0 *   settable   0 * * * 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. * * * * NOTE: NODE snmpNotifyFilterSubtree IS NOT ACCESSIBLE * * *//** * check validity of snmpNotifyFilterSubtree index portion * * @retval MFD_SUCCESS   : the incoming value is legal * @retval MFD_ERROR     : the incoming value is NOT legal * * @note this is not the place to do any checks for the sanity *       of multiple indexes. Those types of checks should be done in the *       snmpNotifyFilterTable_validate_index() function. * * @note Also keep in mind that if the index refers to a row in this or *       some other table, you can't check for that row here to make *       decisions, since that row might not be created yet, but may *       be created during the processing this request. If you have *       such checks, they should be done in the check_dependencies *       function, because any new/deleted/changed rows should be *       available then. * * The following checks have already been done for you: * * If there a no other checks you need to do, simply return MFD_SUCCESS. */intsnmpNotifyFilterSubtree_check_index(snmpNotifyFilterTable_rowreq_ctx *                                    rowreq_ctx){    DEBUGMSGTL(("verbose:snmpNotifyFilterTable:snmpNotifyFilterSubtree_check_index", "called\n"));    netsnmp_assert(NULL != rowreq_ctx);    /*     * TODO:426:M: |-> Check snmpNotifyFilterTable index snmpNotifyFilterSubtree.     * check that index value in the table context is legal.     * (rowreq_ctx->tbl_index.snmpNotifyFilterSubtree)     */    return MFD_SUCCESS;         /* snmpNotifyFilterSubtree index ok */}                               /* snmpNotifyFilterSubtree_check_index *//** * verify specified index is valid. * * This check is independent of whether or not the values specified for * the columns of the new row are valid. Column values and row consistency * will be checked later. At this point, only the index values should be * checked. * * All of the individual index validation functions have been called, so this * is the place to make sure they are valid as a whole when combined. If * you only have one index, then you probably don't need to do anything else * here. *  * @note Keep in mind that if the indexes refer to a row in this or *       some other table, you can't check for that row here to make *       decisions, since that row might not be created yet, but may *       be created during the processing this request. If you have *       such checks, they should be done in the check_dependencies *       function, because any new/deleted/changed rows should be *       available then. * * * @param snmpNotifyFilterTable_reg *        Pointer to the user registration data * @param rowreq_ctx *        Pointer to the users context. * @retval MFD_SUCCESS            : success * @retval MFD_CANNOT_CREATE_NOW  : index not valid right now * @retval MFD_CANNOT_CREATE_EVER : index never valid */intsnmpNotifyFilterTable_validate_index(snmpNotifyFilterTable_registration *                                     snmpNotifyFilterTable_reg,                                     snmpNotifyFilterTable_rowreq_ctx *                                     rowreq_ctx){    int             rc = MFD_SUCCESS;    DEBUGMSGTL(("verbose:snmpNotifyFilterTable:snmpNotifyFilterTable_validate_index", "called\n"));    /** we should have a non-NULL pointer */    netsnmp_assert(NULL != rowreq_ctx);    /*     * TODO:430:M: |-> Validate potential snmpNotifyFilterTable index.     */    return rc;}                               /* snmpNotifyFilterTable_validate_index *//** @} *//* * ugly, inefficient hack: create a dummy viewEntry list from the filter table * entries matching a profile name. This lets us use the existing vacm * routines for matching oids to views. */struct vacm_viewEntry *snmpNotifyFilterTable_vacm_view_subtree(const char *profile){    oid             tmp_oid[MAX_OID_LEN];    netsnmp_index   tmp_idx;    int             i, j;    netsnmp_void_array *s;    struct vacm_viewEntry *tmp;    snmpNotifyFilterTable_rowreq_ctx *rowreq;    netsnmp_container *c;    tmp_idx.len = 0;    tmp_idx.oids = tmp_oid;    /*     * get the container     */    c = snmpNotifyFilterTable_container_get();    if ((NULL == profile) || (NULL == c))        return NULL;    /*     * get the profile subset     */    tmp_idx.oids[0] = strlen(profile);    tmp_idx.len = tmp_idx.oids[0] + 1;    for (i = 0; i < tmp_idx.len; ++i)        tmp_idx.oids[i + 1] = profile[i];    s = c->get_subset(c, &tmp_idx);    if (NULL == s)        return NULL;    /*     * allocate temporary storage     */    tmp = calloc(sizeof(struct vacm_viewEntry), s->size + 1);    if (NULL == tmp) {        free(s->array);        free(s);        return NULL;    }    /*     * copy data     */    for (i = 0, j = 0; i < s->size; ++i) {        rowreq = (snmpNotifyFilterTable_rowreq_ctx *) s->array[i];        /*         * must match profile name exactly, and subset will return         * longer matches, if they exist.         */        if (tmp_idx.oids[0] !=            rowreq->tbl_idx.snmpNotifyFilterProfileName_len)            continue;        /*         * exact match, copy data         * vacm_viewEntry viewName and viewSubtree are prefixed with length         */        tmp[j].viewName[0] =            rowreq->tbl_idx.snmpNotifyFilterProfileName_len;        memcpy(&tmp[j].viewName[1],               rowreq->tbl_idx.snmpNotifyFilterProfileName,               tmp[j].viewName[0]);        tmp[j].viewSubtree[0] =            rowreq->tbl_idx.snmpNotifyFilterSubtree_len;        memcpy(&tmp[j].viewSubtree[1],               rowreq->tbl_idx.snmpNotifyFilterSubtree,               tmp[j].viewSubtree[0] * sizeof(oid));        tmp[j].viewSubtreeLen = tmp[j].viewSubtree[0] + 1;        tmp[j].viewMaskLen = rowreq->data.snmpNotifyFilterMask_len;        memcpy(tmp[j].viewMask, rowreq->data.snmpNotifyFilterMask,               tmp[j].viewMaskLen * sizeof(oid));        tmp[j].viewType = rowreq->data.snmpNotifyFilterType;        tmp[j].next = &tmp[j + 1];        ++j;    }    if (j)        tmp[j - 1].next = NULL;    else {        SNMP_FREE(tmp);    }    free(s->array);    free(s);    return tmp;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -