檢視原始碼 代理程式組態檔案的定義
所有組態資料必須包含在位於組態目錄中的組態檔案中。此目錄的名稱在 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 的描述,請參閱代理程式管理)。
這些檔案是:
agent.conf
:請參閱代理程式資訊standard.conf
:請參閱系統資訊context.conf
:請參閱內容community.conf
:請參閱社群target_addr.conf
:請參閱目標位址定義target_params.conf
:請參閱目標參數定義vacm.conf
:請參閱VACM 的 MIB 檢視usm.conf
:請參閱USM 的安全性資料notify.conf
:請參閱通知定義
尋找組態檔案的目錄是作為代理程式的參數給定的。
所有檔案中的項目格式都是 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
的值。
請注意,(新的)擴充傳輸項目(包括 Kind
和 Opts
)*必須* 指定通訊埠資訊,因為它們會忽略 intAgentUDPPort
指定的任何值。
Opts
與 net-if 處理序的相同,而且如果存在,則會優先(對於該傳輸)。重點是每個傳輸都可以有自己的 socket 選項。
snmpEngineID
的值是一個字串,對於已部署的代理程式,該字串應具有非常特定的結構。有關詳細資訊,請參閱 RFC 2271/2571。
注意
仍然支援舊版和中間變數
intAgentIpAddress
和intAgentTransportDomain
,因此舊的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 中的 vacmSecurityToGroupTable
、vacmAccessTable
和 vacmViewTreeFamilyTable
。
每個項目都是以下項之一,一個項目對應表格中的一列。
{vacmSecurityToGroup, SecModel, SecName, GroupName}。
{vacmAccess, GroupName, Prefix, SecModel, SecLevel, Match, ReadView, WriteView, NotifyView}。
{vacmViewTreeFamily, ViewIndex, ViewSubtree, ViewStatus, ViewMask}。
SecModel
是any
、v1
、v2c
或usm
。SecName
是一個字串。GroupName
是一個字串。Prefix
是一個字串。SecLevel
是noAuthNoPriv
、authNoPriv
或authPriv
。Match
是prefix
或exact
。ReadView
是一個字串。WriteView
是一個字串。NotifyView
是一個字串。ViewIndex
是一個整數。ViewSubtree
是一個整數列表。ViewStatus
是included
或excluded
。ViewMask
是null
或 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
是一個字串。Clone
是zeroDotZero
或一個整數列表。AuthP
是usmNoAuthProtocol
、usmHMACMD5AuthProtocol
、usmHMACSHAAuthProtocol
、usmHMAC128SHA224AuthProtocol
、usmHMAC192SH256AuthProtocol
、usmHMAC256SHA384AuthProtocol
或usmHMAC384SHA512AuthProtocol
。AuthKeyC
是一個字串。OwnAuthKeyC
是一個字串。PrivP
是usmNoPrivProtocol
、usmDESPrivProtocol
或usmAesCfb128Protocol
。PrivKeyC
是一個字串。OwnPrivKeyC
是一個字串。Public
是一個字串。AuthKey
是一個列表(整數)。這是使用者秘密的本地化驗證金鑰。它在 MIB 中不可見。此金鑰的長度(八位元組數)需要是:- 如果
usmHMACMD5AuthProtocol
則為 16。 - 如果
usmHMACSHAAuthProtocol
則為 20。 - 如果
usmHMAC128SHA224AuthProtocol
則為 28。 - 如果
usmHMAC192SHA256AuthProtocol
則為 32。 - 如果
usmHMAC256SHA384AuthProtocol
則為 48。 - 如果
usmHMAC384SHA512AuthProtocol
則為 64。
- 如果
PrivKey
是一個整數列表。這是使用者本地化的加密密鑰。它在 MIB 中不可見。如果使用usmDESPrivProtocol
或usmAesCfb128Protocol
,則此密鑰的長度必須為 16。
通知定義
有關通知定義的資訊應儲存在名為 notify.conf
的檔案中。
對應的表格是 SNMP-NOTIFICATION-MIB 中的 snmpNotifyTable
。
每個項目都是一個項
{NotifyName, Tag, Type}。
NotifyName
是一個唯一的非空字串。Tag
是一個字串。Type
是trap
或inform
。
目標位址定義
有關目標位址定義的資訊應儲存在名為 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/OTPip_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
是一個唯一的非空字串。MPModel
是v1
、v2c
或v3
。SecurityModel
是v1
、v2c
或usm
。SecurityName
是一個字串。SecurityLevel
是noAuthNoPriv
、authNoPriv
或authPriv
。