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

📄 copyvb.c

📁 wm PNE 3.3 source code, running at more than vxworks6.x version.
💻 C
📖 第 1 页 / 共 2 页
字号:
                        (pNewPkt, vbCount-1,                         sizeof (COEX_TRAPENTERPRISE) /                         sizeof (OIDC_T),                         COEX_TRAPENTERPRISE,                         pPkt->pdu.trap_pdu.enterprise_objid.num_components,                         pPkt->pdu.trap_pdu.enterprise_objid.component_list);                    break;                default:                    /* We don't support translation into this version. */                    return ENVOY_ERR_UNKNOWN;                }            break;#endif /* #if INSTALL_ENVOY_SNMP_VERSION_1 */#if INSTALL_ENVOY_SNMP_VERSION_2        case SNMP_VERSION_2:#endif#endif /* #if INSTALL_ENVOY_SNMP_COEXISTENCE */        case SNMP_VERSION_3:            switch (pNewPkt->snmp_version)                {#if INSTALL_ENVOY_SNMP_COEXISTENCE#if INSTALL_ENVOY_SNMP_VERSION_1                case SNMP_VERSION_1:                    copyVarBindList (&(pNewPkt->pdu.trap_pdu.trap_vbl),                                     &(pPkt->pdu.std_pdu.std_vbl),                                     SNMP_VERSION_1);                    /*                     * Now we have to add three additional varbinds:                     * snmpTrapAddress.0, snmpTrapCommunity.0,                     * and snmpTrapEnterprise.0.                     */                    vbCount = pNewPkt->pdu.trap_pdu.trap_vbl.vbl_count;                                        break;#endif /* #if INSTALL_ENVOY_SNMP_VERSION_1 */#if INSTALL_ENVOY_SNMP_VERSION_2                case SNMP_VERSION_2:#endif#endif /* #if INSTALL_ENVOY_SNMP_COEXISTENCE */                case SNMP_VERSION_3:                    copyVarBindList (&(pNewPkt->pdu.std_pdu.std_vbl),                                     &(pPkt->pdu.std_pdu.std_vbl),                                     pNewPkt->snmp_version);                    break;                default:                    /* We don't support translation into this version. */                    return ENVOY_ERR_UNKNOWN;                }            break;        default:            /*             * We shouldn't ever get here -- we should have             * already discarded the packet.  But just in case...             */            return ENVOY_ERR_UNKNOWN;        }    return ENVOY_ERR_NOERR;    }#endif /* #if INSTALL_ENVOY_SNMP_V3_PROXY */#if (INSTALL_ENVOY_SNMP_COEXISTENCE) && (INSTALL_ENVOY_SNMP_VERSION_1)/****************************************************************************NAME: SNMP_Convert_VBPURPOSE: Take an SNMPv2-style varbindlist and extract enterprise informationPARAMETERS: VBL_T *          the VarBindList            OBJ_ID_T *       enterprise OID            int *            generic parameter            sbits32_t *      specific parameter            bits32_t *       timestamp parameterRETURNS: 1 if successful, 0 otherwise****************************************************************************/int  SNMP_Convert_VB(VBL_T          *vblp,                  OBJ_ID_T       *enterprise,                  int            *generic,                  sbits32_t      *specific,                  bits32_t       *timestamp){VB_T *trap_vbp, *ent_vbp;OBJ_ID_T *trap_oid, *ent_oid;int i;*timestamp = VB_GET_UINT32(vblp_index_to_vbp(vblp, 0));trap_vbp = vblp_index_to_vbp(vblp, 1);if ((trap_vbp == 0) ||    (oidcmp(trap_vbp->vb_obj_id.num_components,            trap_vbp->vb_obj_id.component_list,            sizeof(COEX_SNMPTRAPOID)/sizeof(OIDC_T),            COEX_SNMPTRAPOID) == 0))    return (0);trap_oid = VB_GET_OBJECT_ID(trap_vbp);/* Step 1:  Is the value of snmpTrapOID one of the standard traps? */if ((trap_oid->num_components == (sizeof(COEX_COLDSTART)/sizeof(OIDC_T))) &&    (oidcmp(sizeof(COEX_SNMPTRAPS)/sizeof(OIDC_T),            trap_oid->component_list,            sizeof(COEX_SNMPTRAPS)/sizeof(OIDC_T),            COEX_SNMPTRAPS) == 1) &&    (trap_oid->component_list[trap_oid->num_components - 1] <= 6)) {    /* It matches one of the standard traps, now look for a varbind     * with an OID of snmpTrapEnterprise.     */    for (ent_vbp = vblp_index_to_vbp(vblp, 2), i = vblp->vbl_count - 2;         i; ent_vbp++, i--) {        ent_oid = &(ent_vbp->vb_obj_id);        if ((oidcmp(ent_oid->num_components - 1,                    ent_oid->component_list,                    sizeof(COEX_TRAPENTERPRISE)/sizeof(OIDC_T),                    COEX_TRAPENTERPRISE) == 1) &&            (ent_oid->component_list[ent_oid->num_components - 1] == 0))            break;        }    if (i > 0) {        /* We have an snmpTrapEnterprise varbind. */        enterprise->num_components =            (VB_GET_OBJECT_ID(ent_vbp))->num_components;        enterprise->component_list =            (VB_GET_OBJECT_ID(ent_vbp))->component_list;        }    else {        /* No snmpTrapEnterprise varbind.  Set enterprise OID         * to snmpTraps.         */        enterprise->num_components = sizeof(COEX_SNMPTRAPS)/sizeof(OIDC_T);        enterprise->component_list = COEX_SNMPTRAPS;        }    *generic = trap_oid->component_list[trap_oid->num_components - 1] - 1;    *specific = 0;    return (1);    }/* We are not dealing with one of the standard traps. * We derive the enterprise information from snmpTrapOID. */enterprise->component_list = trap_oid->component_list;if (trap_oid->component_list[trap_oid->num_components - 2] == 0)     enterprise->num_components = trap_oid->num_components - 2;else     enterprise->num_components = trap_oid->num_components - 1;*generic = 6;*specific = trap_oid->component_list[trap_oid->num_components -1];return (1);}#endif#if INSTALL_ENVOY_SNMP_COEXISTENCE || INSTALL_ENVOY_SNMP_V3_NOTIFY/****************************************************************************NAME: copyVarBindListPURPOSE: Copy a varbindlist.PARAMETERS: VBL_T *          the new VarBindList            VBL_T *          the VarBindList to be copied            sbits32_t        SNMP version (SNMPv1 is handled specially)RETURNS: 1 if successful, 0 otherwise****************************************************************************/int copyVarBindList    (    VBL_T     *new_vblp,    VBL_T     *vblp,    sbits32_t  version    )    {    int bind_ok, vb_cnt, vb_mod;    VB_T *vbp;    bind_ok = 1;    if (version == SNMP_VERSION_1)        {        vbp = &(vblp->vblist[2]);        vb_cnt = 0;        vb_mod = 2;        }    else        {        vbp = &(vblp->vblist[0]);        vb_cnt = 0;        vb_mod = 0;        }             for ( ; (vb_cnt < (vblp->vbl_count - vb_mod)) && (bind_ok);          vb_cnt++, vbp = &(vblp->vblist[vb_cnt + vb_mod]))        {        switch(vbp->vb_data_flags_n_type)            {            case VT_NUMBER:                if (VBL_Bind_Integer(new_vblp,                                     vb_cnt,                                     vbp->vb_obj_id.num_components,                                     vbp->vb_obj_id.component_list,                                     VB_GET_INT32(vbp)))                     bind_ok = 0;                break;            case VT_STRING:            case VT_OPAQUE:                if (VBL_Bind_String(new_vblp,                                     vb_cnt,                                    vbp->vb_obj_id.num_components,                                    vbp->vb_obj_id.component_list,                                    vbp->vb_data_flags_n_type,                                    EBufferUsed(VB_GET_STRING(vbp)),                                    EBufferStart(VB_GET_STRING(vbp)),                                    0))                    bind_ok = 0;                break;            case VT_OBJECT:                if (VBL_Bind_Object_ID(new_vblp,                                       vb_cnt,                                       vbp->vb_obj_id.num_components,                                       vbp->vb_obj_id.component_list,                                       (VB_GET_OBJECT_ID(vbp))->num_components,                                       (VB_GET_OBJECT_ID(vbp))->component_list))                    bind_ok = 0;                break;            case VT_EMPTY:                if (VBL_Bind_Null(new_vblp,                                  vb_cnt,                                  vbp->vb_obj_id.num_components,                                  vbp->vb_obj_id.component_list))                    bind_ok = 0;                break;            case VT_IPADDRESS:                if (VBL_Bind_IP_Address(new_vblp,                                        vb_cnt,                                        vbp->vb_obj_id.num_components,                                        vbp->vb_obj_id.component_list,                                        VB_GET_IP_ADDRESS(vbp)))                    bind_ok = 0;                break;            case VT_COUNTER:            case VT_GAUGE:            case VT_TIMETICKS:            case VT_UINTEGER32:                if (VBL_Bind_Unsigned_Integer(new_vblp,                                              vb_cnt,                                              vbp->vb_obj_id.num_components,                                              vbp->vb_obj_id.component_list,                                              vbp->vb_data_flags_n_type,                                              VB_GET_UINT32(vbp)))                    bind_ok = 0;                break;                /* The logic below is to deal with Counter64 objects -- they                   can't go out in SNMPv1 traps, so the entire trap can't be                   sent.  However, if ENVOY_SNMP_USE_V2_TYPES has been                   manually installed, then this is OK.  Hence the kind of                   squirrely-looking code. */#if ((INSTALL_ENVOY_SNMP_USE_V2_TYPES) || \     ((ENVOY_USE_V2_TYPES) && !(INSTALL_ENVOY_SNMP_VERSION_1)))                    case VT_COUNTER64:                        DYNCFG_IFCFGVBL_BEGIN(envoy_use_v2_types)                            if (VBL_Bind_64_Unsigned_Integer                                (new_vblp,                                 vb_cnt,                                 vbp->vb_obj_id.num_components,                                 vbp->vb_obj_id.component_list,                                 vbp->vb_data_flags_n_type,                                 (VB_GET_UINT64(vbp))->high,                                 (VB_GET_UINT64(vbp))->low))                                bind_ok = 0;                        break;                        DYNCFG_IFCFGVBL_END(envoy_use_v2_types)#else#if ((ENVOY_USE_V2_TYPES) && (INSTALL_ENVOY_SNMP_VERSION_1))                            case VT_COUNTER64:                                DYNCFG_IFCFGVBL_BEGIN(envoy_use_v2_types)                            if ((version == SNMP_VERSION_1) ||                                (VBL_Bind_64_Unsigned_Integer                                 (new_vblp,                                  vb_cnt,                                  vbp->vb_obj_id.num_components,                                  vbp->vb_obj_id.component_list,                                  vbp->vb_data_flags_n_type,                                  (VB_GET_UINT64(vbp))->high,                                  (VB_GET_UINT64(vbp))->low)))                                bind_ok = 0;                        break;                        DYNCFG_IFCFGVBL_END(envoy_use_v2_types)#endif /* ((ENVOY_USE_V2_TYPES) && (INSTALL_ENVOY_SNMP_VERSION_1)) */#endif /* (INSTALL_ENVOY_SNMP_USE_V2_TYPES) */                            default:                                bind_ok = 0;            }        }    if (!bind_ok)        Clean_vb_list(new_vblp);    return(bind_ok);    }#endif

⌨️ 快捷键说明

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