映射SNMP ASN.1到C ++数据类型

问题描述 投票:1回答:2

我添加SNMP以太网类MIB变量,以我们现有的SNMP C ++代码库,并做了第一次。

我现在面临的困难是了解MIB变量的数据类型,并将其映射到C ++数据类型 - 例如dot3StatsIndex MIB变量语法InterfaceIndex是什么呢等同数据类型在C ++中。

自从我采取了第一次或者更确切地说,是在学习阶段 - 请让我知道什么是不同的ASN.1数据类型,以及他们是否都在上面列出的类型以及如何映射到C ++数据类型?

另外如何从RFC导出MIB变量的数据类型?

snmp net-snmp pysnmp snmp4j
2个回答
1
投票

我想,如果你只是按照类型继承链中,你最终用碱SNMP类型应该映射到你的类型。

对于InterfaceIndex,看到哪些MIB它是进口的(它的IF-MIB):

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, OBJECT-IDENTITY,
    Integer32, Counter32, Counter64, mib-2, transmission
        FROM SNMPv2-SMI
    MODULE-COMPLIANCE, OBJECT-GROUP
        FROM SNMPv2-CONF
    TruthValue
        FROM SNMPv2-TC
    ifIndex, InterfaceIndex
        FROM IF-MIB;

然后找到其应该引用一个基本类型(它Integer32这可能映射到ASN1_INT)的定义。

InterfaceIndex ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS       current
    DESCRIPTION
        "A unique value, greater than zero, for each interface or ...
        network management system to the next re-initialization."
    SYNTAX       Integer32 (1..2147483647)

1
投票

在我的C ++ SNMP代理,我写的东西像下面(不幸的是,实际的源代码不再提供给我,我敢肯定有更多的选择,但你的想法):

using varbind_val_t = std::variant<

   // ASN.1 INTEGER, SMIv2 Integer32
   int32_t,

   // ASN.1 OCTET STRING
   std::string,

   // ASN.1 OBJECT IDENTIFIER
   oid_t,

   // RFC4001 InetAddressType (TextualConvention)
   IpAddress::Type, // enum saying IPv4 or IPv6

   // RFC4001 InetAddress (TextualConvention)
   IpAddress,       // can be an IPv4 or IPv6 address

   // SMIv2 IpAddress
   ipv4_t,

   // ASN.1 MacAddress (TextualConvention)
   mac_address_t,

   // SMIv2 Counter32/Gauge32/TimeTicks/Unsigned32
   uint32_t,

   // SMIv2 Counter64
   uint64_t
>;

当建立或接收的PDU,该变体的有关访问者将编码或从上面给出的C ++类的值进行解码的给定值的线表示。有时,这是一个非常薄的包装(整数是一个整数!),有时它需要多一点的工作(oid_t需要展开)。这是非常快速和灵活。问题的关键是,映射是完全由你 - 尽量挑选具有相同范围的可能值的类型,否则你可能会沿途某处丢失信息。但没有“的” C ++类型ASN.1或SMIv2的类型的映射。

任何文本的约定如InterfaceIndex不是真正的类型,但线索SNMP管理者就如何代表某些字段。对于那些不包括在上述列表中作为特殊情况,我只是用实际的基础类型的,在这种情况下,作为显示伊利亚,Integer32。你可以阅读的MIB追查一下这些东西的真正含义是(或使用经理像iReasoning这不告诉你的一个相当不错的工作)。

您应参照相关规范,以确定您需要支持哪些类型:

© www.soinside.com 2019 - 2024. All rights reserved.