非常教程

Erlang 20参考手册

snmp

snmp_index

模块

snmp_index

模块摘要

用于SNMP索引的抽象数据类型

描述

该模块snmp_index为SNMP表执行SNMP索引结构的抽象数据类型(ADT)。它是作为ordered_set数据类型的ets表实现的,这意味着所有的操作都是O(log n)。在表中,密钥是ASN.1 OBJECT IDENTIFIER。

此索引用于将SNMP顺序的实现与表的实际实现分开。该模块实现了SNMP排序,即GET Next的实现。

例如,假设有一个SNMP表,它最好在Erlang中作为每个SNMP表行的一个进程来实现。进一步假设SNMP表中的索引是一个八进制字符串。索引结构将按以下方式创建:

snmp_index:new(string)
    

对于我们创建的每一个新进程,我们都会在snmp_index结构:

new_process(Name, SnmpIndex) ->
  Pid = start_process(),
  NewSnmpIndex = 
    snmp_index:insert(SnmpIndex, Name, Pid),
  <...>
    

通过这种结构,我们现在可以将对象标识符映射到正确的进程,例如GET Next请求:

get_next_pid(Oid, SnmpIndex) ->
  {ok, {_, Pid}} = snmp_index:get_next(SnmpIndex, Oid),
  Pid.
    

公共数据类型

以下功能使用下列数据类型:

  • index()
  • oid() = [byte()]
  • key_types = type_spec() | {type_spec(), type_spec(), ...}
  • type_spec() = fix_string | string | integer
  • key() = key_spec() | {key_spec(), key_spec(), ...}
  • key_spec() = string() | integer()

index()类型表示SNMP索引结构。

oid()类型用于表示ASN.1对象标识符。

key_types()类型在创建索引结构时使用,并且key()类型在从结构中插入和删除项时使用。

key_types()类型定义表的SNMP索引列的类型。如果表只有一个索引列,则这种类型应该是一个原子,但是如果表有多个索引列,则应该是一个带有原子的元组。

如果INDEX列的类型为INTEGER,或者从INTEGER派生,则相应的类型应为integer。如果它是可变长度类型(例如OBJECT IDENTIFIER,OCTET STRING),则相应的类型应该是string。最后,如果类型是可变长度的,但是具有固定的大小限制(例如IpAddress),则相应的类型应该是fix_string

例如,如果SNMP表有两个INDEX列,第一个是大小为2的OCTET STRING,第二个是OBJECT IDENTIFER,则相应的key_types参数是{fix_string, string}

key()类型与key_types()类型。如果key_types()是单个原子,对应的key()也是单一类型,但如果key_types()是一个元组,key必须是同样大小的元组。

在上面的例子中,有效的keys{"hi", "mom"}{"no", "thanks"},然而"hi"{"hi", 42}并且{"hello", "there"}将是无效的。

警告

更新索引的所有api函数都返回NewIndex术语。这是为了向后兼容以前的实现,该实现使用了纯用Erlang编写的B+树作为索引。大NewIndex现在可以忽略返回值。返回值现在是ETS表的不变表标识符。

使用ETS表的实现引入了与旧实现的语义不兼容。在那些旧的实现中,使用纯Erlang术语,索引和其他Erlang术语一样被垃圾收集,在丢弃时不必删除。只有在创建ETS表的进程显式删除它或创建过程终止时,ETS表才会被删除。

delete/1现在添加了一个新界面来处理当进程想要丢弃索引表(即构建一个全新的)时的情况。任何使用瞬态snmp索引的应用程序都必须进行修改以处理此问题。

由于SNMP适配器通常在整个系统生存期内保持索引,所以这很少是一个问题。

出口

delete(Index) -> true

类型

删除一个完整的索引结构(即持有索引的ets表)。这次调用后,索引不能再被引用。见warning note上面。

delete(Index, Key) -> NewIndex

类型

从索引结构中删除键及其值。返回一个新结构。

get(Index, KeyOid) -> {ok, {KeyOid, Value}} | undefined

类型

获取带键的项。KeyOid可以在SNMP工具函数中使用。

get_last(Index) -> {ok, {KeyOid, Value}} | undefined

类型

获取索引结构中的最后一项。

get_next(Index, KeyOid) -> {ok, {NextKeyOid, Value}} | undefined

类型

获取snmp词典排序中的下一个项。KeyOid在索引结构中。KeyOid不需要引用索引中的现有项。

insert(Index, Key, Value) -> NewIndex

类型

将新的键值元组插入索引结构中。如果具有相同键的项已经存在,则Value覆盖旧值。

key_to_oid(Index, Key) -> KeyOid

类型

皈依Key对象标识符。

new(KeyTypes) -> Index

类型

创建新的SNMP索引结构。大key_types()类型在上述描述。

snmp相关

1.1. SNMP简介 | 1. SNMP Introduction
2.2.代理功能描述 | 2. Agent Functional Description
3.3.管理功能描述 | 3. Manager Functional Description
4.4. MIB编译器 | 4. The MIB Compiler
5.5.运行应用程序 | 5. Running the application
6.6.代理配置文件的定义 | 6. Definition of Agent Configuration Files
7.7. Manager配置文件的定义 | 7. Definition of Manager Configuration Files
8.8.代理实现示例 | 8. Agent Implementation Example
9.9.管理实施例 | 9. Manager Implementation Example
10.10.检测函数 | 10. Instrumentation Functions
11.检测函数的定义 | 11. Definition of Instrumentation Functions
12.Net if的定义 | 12. Definition of Agent Net if
13.管理Netif 的定义 | 13. Definition of Manager Net if
14.14.审计跟踪日志 | 14. Audit Trail Log
15.15.高级代理主题 | 15. Advanced Agent Topics
16.16. SNMP Appendix A
17.17. SNMP Appendix B
18.snmp
19.snmpa
20.snmpa_conf
21.snmpa_discovery_handler
22.snmpa_error
23.snmpa_error_io
24.snmpa_error_logger
25.snmpa_error_report
26.snmpa_local_db
27.snmpa_mib_data
28.snmpa_mib_storage
29.snmpa_mpd
30.snmpa_network_interface
31.snmpa_network_interface_filter
32.snmpa_notification_delivery_info_receiver
33.snmpa_notification_filter
34.snmpa_supervisor
35.snmpc
36.snmpm
37.snmpm_conf
38.snmpm_mpd
39.snmpm_network_interface
40.snmpm_network_interface_filter
41.snmpm_user
42.snmp_community_mib
43.snmp_framework_mib
44.snmp_generic
45.snmp_notification_mib
46.snmp_pdus
47.snmp_standard_mib
48.snmp_target_mib
49.snmp_user_based_sm_mib
50.snmp_view_based_acm_mib
Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1