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

📄 mfd-access-container-cached-defines.m2i

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 M2I
📖 第 1 页 / 共 2 页
字号:
@      include m2c_setup_node.m2i@@        if $m2c_node_needlength == 1@                               , $node, ${node}_len@        else@                               , $node@        end@@   end@ # foreach index               )) {            snmp_log(LOG_ERR,"error setting index while loading "                     "${context} cache.\n");            ${context}_release_rowreq_ctx(rowreq_ctx);            continue;        }        /*         * TODO:352:r: |   |-> populate $context data context.         * Populate data context here. (optionally, delay until row prep)         */@if $m2c_data_transient == 0@ # persistent    /* non-TRANSIENT data: no need to copy. set pointer to data */@else@    /*     * TRANSIENT or semi-TRANSIENT data:     * copy data or save any info needed to do it in row_prep.     */@   foreach $node nonindex@@      include m2c_setup_node.m2i@    /*     * setup/save data for $node     * $m2c_node_summary     */@      if "$m2c_data_context" eq "generated"@@         eval $m2c_ctx_lh = "$m2c_ctx_rh"@@         eval $m2c_ctx_lhs = "$m2c_ctx_rhs"@@         eval $m2c_ctx_rh = "$node"@@         eval $m2c_ctx_rhs = "${node}_len"@@         include generic-value-map.m2i@    @      end@ # data_context ! generated@   end@ // for each@end@ # transient                /*         * insert into table container         */        CONTAINER_INSERT(container, rowreq_ctx);        ++count;    }@if $m2c_include_examples == 1@$example_start    if(NULL != filep)        fclose(filep);$example_end@end@ # example    DEBUGMSGT(("verbose:${context}:${context}_cache_load",               "inserted %d records\n", count));    return MFD_SUCCESS;} /* ${context}_cache_load *//** * cache clean up * * @param container container with all current items * *  This optional callback is called prior to all *  item's being removed from the container. If you *  need to do any processing before that, do it here. * * @note *  The MFD helper will take care of releasing all the row contexts.@   if ($m2c_data_allocate == 1) && ($m2c_data_transient == 0)@ *  If you did not pass a data context pointer when allocating *  the rowreq context, the one that was allocated will be deleted. *  If you did pass one in, it will not be deleted and that memory *  is your responsibility.@   end@ * */void${context}_cache_free(netsnmp_container *container){    DEBUGMSGTL(("verbose:${context}:${context}_cache_free","called\n"));    /*     * TODO:380:M: Free $context cache.     */} /* ${context}_cache_free */@end@ // m2c_processing_type eq 'c'##########################################################################//######################################################################//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@if $m2c_processing_type eq 'i'@/** * @internal */static int_cache_load(netsnmp_cache *cache, void *vmagic){    DEBUGMSGTL(("internal:${context}:_cache_load","called\n"));    if((NULL == cache) || (NULL == cache->magic)) {        snmp_log(LOG_ERR, "invalid cache for ${context}_cache_load\n");        return -1;    }    /** should only be called for an invalid or expired cache */    netsnmp_assert((0 == cache->valid) || (1 == cache->expired));        /*     * call user code     */    return ${context}_cache_load((netsnmp_container*)cache->magic);} /* _cache_load *//** * @internal */static void_cache_item_free(${context}_rowreq_ctx *rowreq_ctx, void *context){    DEBUGMSGTL(("internal:${context}:_cache_item_free","called\n"));    if(NULL == rowreq_ctx)        return;    ${context}_release_rowreq_ctx(rowreq_ctx);} /* _cache_item_free *//** * @internal */static void_cache_free(netsnmp_cache *cache, void *magic){    netsnmp_container *container;    DEBUGMSGTL(("internal:${context}:_cache_free","called\n"));    if((NULL == cache) || (NULL == cache->magic)) {        snmp_log(LOG_ERR, "invalid cache in ${context}_cache_free\n");        return;    }    container = (netsnmp_container*)cache->magic;    /*     * call user code     */    ${context}_cache_free(container);        /*     * free all items. inefficient, but easy.     */    CONTAINER_CLEAR(container,                    (netsnmp_container_obj_func *)_cache_item_free,                    NULL);} /* _cache_free *//** * @internal * initialize the iterator container with functions or wrappers */void_${context}_container_init(${context}_interface_ctx *if_ctx){    DEBUGMSGTL(("internal:${context}:_${context}_container_init","called\n"));    @    if 0@    /*     * find cache     */    if_ctx->cache =        netsnmp_cache_find_by_oid(PARTNER_oid, OID_LENGTH(PARTNER_oid));@    else@    /*     * set up the cache     */    if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */                                         _cache_load, _cache_free,                                         ${context}_oid,                                         ${context}_oid_size);@    end@ // shared cache    if(NULL == if_ctx->cache) {        snmp_log(LOG_ERR, "error creating cache for ${context}\n");        return;    }    if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;    ${context}_container_init(&if_ctx->container, if_ctx->cache);    if(NULL == if_ctx->container)        if_ctx->container = netsnmp_container_find("${context}:table_container");    if(NULL == if_ctx->container) {        snmp_log(LOG_ERR,"error creating container in "                 "${context}_container_init\n");        return;    }    if_ctx->cache->magic = (void*)if_ctx->container;} /* _${context}_container_init */@end@ // m2c_processing_type eq 'i'##########################################################################//######################################################################//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@if $m2c_processing_type eq 'r'@##  container-cached summary  ------------------------    The container-cached data access code is for cases when you want to    cache your data in the agent/sub-agent.    ... to be continued...########################################################################  Updating the Index  ------------------    TODO : update index for the raw data    FUNC : ${context}_indexes_set    WHERE: ${context}_data_access.c    This is a convenience function for setting the index context from    the native C data. Where necessary, value mapping should be done.    @if $mfd_readme_verbose == 1@    This function should update the table index values (found in    tbl_idx) for the given raw data.    @end@@end@ // m2c_processing_type eq 'r'##########################################################################//####################################################################@if $m2c_mark_boundary == 1@/** END code generated by $RCSfile: mfd-access-container-cached-defines.m2i,v $ $Revision: 1.16.2.1 $ */@end@

⌨️ 快捷键说明

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