查看源代码 代理配置文件的定义

所有配置数据必须包含在位于配置目录中的配置文件中。此目录的名称在 config_dir 配置参数中给出。这些文件在启动时读取,并用于初始化 SNMPv2-MIB 或 STANDARD-MIB、SNMP-FRAMEWORK-MIB、SNMP-MPD-MIB、SNMP-VIEW-BASED-ACM-MIB、SNMP-COMMUNITY-MIB、SNMP-USER-BASED-SM-MIB(根据 SNMP-USM-HMAC-SHA2-MIB 调整)、SNMP-TARGET-MIB 和 SNMP-NOTIFICATION-MIB(有关 MIB 的描述,请参阅 代理的管理)。

这些文件是

找到配置文件的目录作为参数传递给代理。

所有文件中的条目格式都是 Erlang 术语,用 '.' 和换行符分隔。在以下部分中,将描述这些术语的格式。注释可以指定为普通的 Erlang 注释。

这些文件中的语法错误在启动时通过错误报告模块的函数 config_err/2 发现并报告。

代理信息

代理信息应存储在名为 agent.conf 的文件中。

每个条目都是大小为 2 的元组

{AgentVariable, Value}。

  • AgentVariable 是 SNMP-FRAMEWORK-MIB 中的变量之一,或者是内部变量 intAgentUDPPort(定义代理侦听的 UDP 端口)或 intAgentTransports(定义代理的传输域和地址)之一。
  • Value 是变量的值。

以下示例显示了 agent.conf 文件

{intAgentUDPPort, 4000}.
{intAgentTransports,
 [{transportDomainUdpIpv4, {141,213,11,24}},
  {transportDomainUdpIpv6, {0,0,0,0,0,0,0,1}}]}.
{snmpEngineID, "mbj's engine"}.
{snmpEngineMaxMessageSize, 484}.

这些是支持的条目及其值类型

      {snmpEngine,               string()}.                     % Mandatory
      {snmpEngineMaxMessageSize, snmp_framework_mib:max_message_size()}.  % Mandatory
      {intAgentUDPPort,          inet:port_number()}.                      % Optional
      {intAgentTransports,       [snmpa_conf:intAgentTransport()]}.   % Mandatory

如果为传输域指定了“传统”传输(没有显式的 Kind,同时处理请求和陷阱),则不能为该域指定具有特定 Kind 的传输。例如,不允许这样做

 [{transportDomainUdpIpv4, {{141,213,11,24}, 4000}},
  {transportDomainUdpIpv4, {{141,213,11,24}, 4001}, trap_sender}].

请注意,每个传输域只能配置每个 kind 的一个传输。

PortInfo system 用于指示“系统”应该选择(端口号“0”(零)的正常使用方式)。端口信息“0”(零)不能用于此,因为它(在内部)用于表示“默认”端口号。

在传统的传输条目中,当 Addr 值不包含端口号时,将使用 intAgentUDPPort 的值。

请注意,(新的)扩展传输条目(包括 KindOpts必须指定端口信息,因为它们会忽略 intAgentUDPPort 指定的任何值。

Optsnet-if 进程的相同,如果存在,则优先(对于该传输)。重点是每个传输都可以有自己的套接字选项。

snmpEngineID 的值是一个字符串,对于已部署的代理,它应该具有非常特定的结构。有关详细信息,请参阅 RFC 2271/2571。

注意

仍支持旧版和中间变量 intAgentIpAddressintAgentTransportDomain,因此旧的 agent.conf 文件将可以工作。

但是它们不能与 intAgentTransports 结合使用。

上下文

上下文信息应存储在名为 context.conf 的文件中。默认上下文 "" 不需要存在。

每行定义代理中的一个上下文。此信息在 SNMP-VIEW-BASED-ACM-MIB 的 vacmContextTable 表中使用。

每个条目都是一个术语

ContextName。

  • ContextName 是一个字符串。

系统信息

系统信息应存储在名为 standard.conf 的文件中。

每个条目都是大小为 2 的元组

{SystemVariable, Value}。

  • SystemVariable 是系统组中的一个变量,或 snmpEnableAuthenTraps
  • Value 是变量的值。

以下示例显示了一个有效的 standard.conf 文件

{sysDescr, "Erlang SNMP agent"}.
{sysObjectID, [1,2,3]}.
{sysContact, "(mbj,eklas)@erlang.ericsson.se"}.
{sysName, "test"}.
{sysServices, 72}.
{snmpEnableAuthenTraps, enabled}.

必须为所有在 MIB 中缺少默认值的变量提供值。

团体

团体信息应存储在名为 community.conf 的文件中。如果代理配置为 SNMPv1 或 SNMPv2c,则必须存在该文件。

SNMP团体是 SNMP 代理和一组 SNMP 管理器之间的关系,它定义了身份验证、访问控制和代理特性。

相应的表是 SNMP-COMMUNITY-MIB 中的 snmpCommunityTable

每个条目都是一个术语

{CommunityIndex, CommunityName, SecurityName, ContextName, TransportTag}。

  • CommunityIndex 是一个非空字符串。
  • CommunityName 是一个字符串。
  • SecurityName 是一个字符串。
  • ContextName 是一个字符串。
  • TransportTag 是一个字符串。

VACM 的 MIB 视图

有关 VACM 的 MIB 视图的信息应存储在名为 vacm.conf 的文件中。

相应的表是 SNMP-VIEW-BASED-ACM-MIB 中的 vacmSecurityToGroupTablevacmAccessTablevacmViewTreeFamilyTable

每个条目都是一个术语,一个条目对应于其中一个表中的一行。

{vacmSecurityToGroup, SecModel, SecName, GroupName}。

{vacmAccess, GroupName, Prefix, SecModel, SecLevel, Match, ReadView, WriteView, NotifyView}。

{vacmViewTreeFamily, ViewIndex, ViewSubtree, ViewStatus, ViewMask}。

  • SecModelanyv1v2cusm
  • SecName 是一个字符串。
  • GroupName 是一个字符串。
  • Prefix 是一个字符串。
  • SecLevelnoAuthNoPrivauthNoPrivauthPriv
  • Matchprefixexact
  • ReadView 是一个字符串。
  • WriteView 是一个字符串。
  • NotifyView 是一个字符串。
  • ViewIndex 是一个整数。
  • ViewSubtree 是一个整数列表。
  • ViewStatusincludedexcluded
  • ViewMasknull 或由 1 和 0 组成的列表。1 表示此子标识符使用精确匹配。0 是通配符,匹配任何子标识符。如果掩码短于子树,则尾部被视为全部为 1。null 是全部为 1 的掩码的简写。

USM 的安全数据

有关 USM 安全数据的信息应存储在名为 usm.conf 的文件中,如果代理配置为 SNMPv3,则必须存在该文件。

相应的表是 SNMP-USER-BASED-SM-MIB(根据 SNMP-USM-HMAC-SHA2-MIB 调整)中的 usmUserTable

每个条目都是一个术语

{EngineID, UserName, SecName, Clone, AuthP, AuthKeyC, OwnAuthKeyC, PrivP, PrivKeyC, OwnPrivKeyC, Public, AuthKey, PrivKey}。

  • EngineID 是一个字符串。

  • UserName 是一个字符串。

  • SecName 是一个字符串。

  • ClonezeroDotZero 或一个整数列表。

  • AuthPusmNoAuthProtocolusmHMACMD5AuthProtocolusmHMACSHAAuthProtocolusmHMAC128SHA224AuthProtocolusmHMAC192SH256AuthProtocolusmHMAC256SHA384AuthProtocolusmHMAC384SHA512AuthProtocol

  • AuthKeyC 是一个字符串。

  • OwnAuthKeyC 是一个字符串。

  • PrivPusmNoPrivProtocolusmDESPrivProtocolusmAesCfb128Protocol

  • PrivKeyC 是一个字符串。

  • OwnPrivKeyC 是一个字符串。

  • Public 是一个字符串。

  • AuthKey 是一个(整数)列表。这是用户的秘密本地化身份验证密钥。它在 MIB 中不可见。此密钥的长度(八位字节数)必须为

    • 如果 usmHMACMD5AuthProtocol,则为 16。
    • 如果 usmHMACSHAAuthProtocol,则为 20。
    • 如果 usmHMAC128SHA224AuthProtocol,则为 28。
    • 如果 usmHMAC192SHA256AuthProtocol,则为 32。
    • 如果 usmHMAC256SHA384AuthProtocol,则为 48。
    • 如果 usmHMAC384SHA512AuthProtocol,则为 64。
  • PrivKey 是一个(整数)列表。这是用户的秘密本地化加密密钥。它在 MIB 中不可见。如果使用 usmDESPrivProtocolusmAesCfb128Protocol,则此密钥的长度必须为 16。

通知定义

有关通知定义的信息应存储在名为 notify.conf 的文件中。

相应的表是 SNMP-NOTIFICATION-MIB 中的 snmpNotifyTable

每个条目都是一个术语

{NotifyName, Tag, Type}。

  • NotifyName 是一个唯一的非空字符串。
  • Tag 是一个字符串。
  • Typetrapinform

目标地址定义

关于目标地址定义的信息应存储在名为 target_addr.conf 的文件中。

对应的表是 SNMP-TARGET-MIB 中的 snmpTargetAddrTable 和 SNMP-COMMUNITY-MIB 中的 snmpTargetAddrExtTable

每个条目都是一个术语

{TargetName, Domain, Addr, Timeout, RetryCount, TagList, ParamsName, EngineId}。

{TargetName, Domain, Addr, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize}。

  • TargetName 是一个唯一的非空字符串。

  • Domain 是以下原子之一:transportDomainUdpIpv4 | transportDomainUdpIpv6

  • Addr 可以是 IpAddr{IpAddr, IpPort} 元组。IpAddr 是一个常规的 Erlang/OTP ip_address() 或一个传统的 SNMP 整数列表,而 IpPort 是一个整数。

    如果省略 IpPort,则使用 162

  • Timeout 是一个整数。

  • RetryCount 是一个整数。

  • TagList 是一个字符串。

  • ParamsName 是一个字符串。

  • EngineId 是一个字符串或原子 discovery

  • TMask 的指定方式与 Addr 相同,或指定为 []。请特别注意,对于 IPv4 使用 6 个字节的列表,对于 IPv6 使用 8 个字加 2 个字节仍然是有效的地址格式,因此旧的配置仍然可以使用。

  • MaxMessageSize 是一个整数 (默认值: 2048)。

旧配置中使用的带有 Ip 地址和 Udp 端口号的旧元组格式仍然有效。

请注意,如果 EngineId 的值为 discovery,则代理在与该管理器执行发现过程之前,无法向该管理器发送 inform 消息。

目标参数定义

关于目标参数定义的信息应存储在名为 target_params.conf 的文件中。

对应的表是 SNMP-TARGET-MIB 中的 snmpTargetParamsTable

每个条目都是一个术语

{ParamsName, MPModel, SecurityModel, SecurityName, SecurityLevel}。

  • ParamsName 是一个唯一的非空字符串。
  • MPModelv1, v2cv3
  • SecurityModelv1, v2c, 或 usm
  • SecurityName 是一个字符串。
  • SecurityLevelnoAuthNoPrivauthNoPrivauthPriv