📄 copyvb.c
字号:
(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 + -