檢視原始碼 代理程式組態檔案的定義

所有組態資料必須包含在位於組態目錄中的組態檔案中。此目錄的名稱在 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 的檔案中。

每個項目都是大小為二的元組

{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}].

請注意,每個傳輸網域的每種種類只能組態一個傳輸。

PortInfo system 用於指示「系統」應該選擇(通常使用通訊埠號碼「0」(零)的方式)。通訊埠資訊「0」(零)不能用於此,因為它(內部)用於表示「預設」通訊埠號碼。

在傳統傳輸項目中,當 Addr 值不包含通訊埠號碼時,會使用 intAgentUDPPort 的值。

請注意,(新的)擴充傳輸項目(包括 KindOpts)*必須* 指定通訊埠資訊,因為它們會忽略 intAgentUDPPort 指定的任何值。

Optsnet-if 處理序的相同,而且如果存在,則會優先(對於該傳輸)。重點是每個傳輸都可以有自己的 socket 選項。

snmpEngineID 的值是一個字串,對於已部署的代理程式,該字串應具有非常特定的結構。有關詳細資訊,請參閱 RFC 2271/2571。

注意

仍然支援舊版和中間變數 intAgentIpAddressintAgentTransportDomain,因此舊的 agent.conf 檔案可以正常運作。

但它們 *不能* 與 intAgentTransports 組合使用。

內容

內容資訊應儲存在名為 context.conf 的檔案中。預設內容 "" 不需要存在。

每一列定義代理程式中的一個內容。此資訊會用於 SNMP-VIEW-BASED-ACM-MIB 中的 vacmContextTable 表格。

每個項目都是一個項

ContextName。

  • ContextName 是一個字串。

系統資訊

系統資訊應儲存在名為 standard.conf 的檔案中。

每個項目都是大小為二的元組

{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 管理器之間的關係,該關係定義了驗證、存取控制和 Proxy 特性。

對應的表格是 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 相同,或者為 []。請特別注意,使用 6 個位元組的列表表示 IPv4 或 8 個字加 2 個位元組表示 IPv6 仍然是有效的位址格式,因此舊的組態仍然可以使用。

  • MaxMessageSize 是一個整數(預設值:2048)。

在舊組態中找到的包含 Ip 位址和 Udp 連接埠號碼的舊元組格式仍然有效。

請注意,如果 EngineId 的值為 discovery,則代理程式在與該管理員執行 *探索* 過程之前,無法向該管理員傳送 inform 訊息。

目標參數定義

有關目標參數定義的資訊應儲存在名為 target_params.conf 的檔案中。

對應的表格是 SNMP-TARGET-MIB 中的 snmpTargetParamsTable

每個項目都是一個項

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

  • ParamsName 是一個唯一的非空字串。
  • MPModelv1v2cv3
  • SecurityModelv1v2cusm
  • SecurityName 是一個字串。
  • SecurityLevelnoAuthNoPrivauthNoPrivauthPriv