net-snmp解析代码,如何解析MIB?

2024-03-28

我在学习代码库。解析MIB。

In parse.c and parse.h代码保留一个哈希桶。(indexed bucket (tree list)).
还有一个树结构,其中包含一个指向的next指针Next node in hashed list of names.

struct tree{  
    .
    .
    struct tree    *next;       // Next node in hashed list of names 
    int             modid;     // The module containing this node 
}

我打印了MIB,

SNMP-FRAMEWORK-MIB:snmpFrameworkMIB(10) 类型=24下一页->' ipSystemStatsHCOctetGroup ipSystemStatsOutFragReqds ifStackGroup2 ifOutErrors '

我无法理解之后出现的对象名称之间的关系是什么下一页-> ?

对象名称组合在一起的标准是什么?目前我还不清楚该准则。

什么是莫迪?它的值不等于模块 OID!

NOTE:纯粹出于在 MIB 树中遍历的目的,给出了 *child、*parent 和 *peer!还modid不是 OID 的一部分。

parse.h 中名为“模块兼容性”的数据结构:

struct module_compatability {
        const char     *old_module;
        const char     *new_module;
        const char     *tag;    /* NULL implies unconditional replacement,
                                 * otherwise node identifier or prefix */
        size_t          tag_len;        /* 0 implies exact match (or unconditional) */
        struct module_compatability *next;      /* linked list */
    };

这个结构有什么用呢?什么意义上的兼容?


我也使用 Net-snmp 工作了一段时间,我与您分享我的观察。
也许这会对你有所帮助。

1. 结构树 *next;

struct tree    * next; /* Next node in hashed list of names */   

Net-snmp 功能提供按模块“名称”查询,
Object 当查询的对象名称(字符串)为 ASCII 时,i.e.

$ snmptranslate -On -IR bundleSize  
  -   
  -  
  .1.3.6.1.4.1.26149.2.1.2.2.1.9  

它有一个大小为 128 的散列表(内部)数据结构“桶”。

哈希函数:

name_hash(str*) - return some of ASCII value. 

然后这个哈希值被传递到一个宏中NBUCKET(x) - 返回索引 (0-127)。 冲突通过如下链接解决。桶[中]->下一个->下一个->下一个........


其代码位于parse.c --

tree->next and 'bucket'按以下方式管理:

 tp->hash = name_hash(tp->name); // Fist find hash value as some of ASCII
 b = BUCKET(tp->hash);           // map hash value into (0-127)
 if (buckets[b])                 // check for collision 
     tp->next = buckets[b];     // collision is resolved ny chan chain 
 buckets[b] = tp;           // new coming node become first node in chain

2.int修改;

  • The module containing this node.
    • 有一个“struct module”类型的链表
    • modid 是模块链表中的序列号。
    • 序列号从0开始。
    • modid= 模块开始读取的编号
    • parse.h 'find_module(int modid)' 中定义的函数返回节点地址 存储有关模块的信息。

parse.h 中名为“模块兼容性”的数据结构:

This is an array of structre 'module compatability' use to store compatible 
basic MIB name (RFC's defined).   

const char     *old_module;   // snmp-v1  
const char     *new_module;   // snmp-v2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

net-snmp解析代码,如何解析MIB? 的相关文章

  • 终止进程树(C for Windows)

    以前曾有人问过这个问题 但我在代码中找不到明确的答案 我打开一个进程 ProcessA PID 为 1234 此进程打开一个子进程 ProcessAB PID 5678 完成后 我终止了 ProcessA 但 ProcessAB 仍然存在
  • 您应该通过属性访问同一类中的变量吗?

    如果您有一个获取和设置实例变量的属性 那么通常您总是使用该类外部的属性来访问它 我的问题是你也应该在课堂上这样做吗 如果有的话 我总是使用该属性 即使是在班级内 但我想听到一些支持和反对的论据 以确定哪个是最正确的以及为什么 或者这只是项目
  • Console.ReadLine() 末尾没有换行符?

    问题很简单 当我使用 Console ReadLine 控制台上打印的下一个内容将在下一行 有什么办法可以继续打印该行吗 提前致谢 请检查 控制台 Read 这不会导致新行或换行
  • 当父类也实现 IDisposable 时,在子类上实现 IDisposable

    我有一个父类和子类都需要实现IDisposable 应该在哪里virtual and base Dispose 通话发挥作用 当我刚刚覆盖Dispose bool disposing 打电话 说我实现了感觉真的很奇怪IDisposable没
  • 修改 CookieAuthenticationOptions LoginPath OnRedirectToReturnUrl 事件

    我的 MVC 6 ASP NET 5 项目中有以下设置 配置方法中的Startup cs app UseCookieAuthentication options gt options AuthenticationScheme Cookie
  • 在 C# 中读取并发送 mp4 文件

    我使用以下代码从服务器读取 mp4 文件并通过 http 发送它 我的服务器端是 mvc4 控制器 有趣的是 视频在 Chrome 中渲染得很好 但在 ios 设备上没有得到任何东西 所以我认为这可能是响应流标头问题 我缺少什么吗 var
  • Arduino C++ 析构函数?

    我知道在Arduino中你不能使用delete 那么什么时候调用 C 类中定义的析构函数呢 同样 如果我想创建一个指向数组的指针 我必须使用malloc and free 当对象被销毁时 析构函数被调用 对于自动 堆栈上 变量 它在离开其作
  • Azure 函数 - 如何读取表单数据

    如何阅读表单数据 in Azure 函数 我尝试了多种方法 但总是出现错误 例如 using System Net public static async Task
  • HttpCookie 和 Cookie 的区别?

    所以我很困惑 因为 msdn 和其他教程告诉我使用 HttpCookies 通过 Response Cookies Add cookie 添加 cookie 但这就是问题所在 Response Cookies Add 只接受 Cookie
  • 当我已经定义了变量时,为什么会收到一条错误消息,指示变量不存在?

    我收到一条错误消息 表明MyRandomArray在当前上下文中不存在 如何在 C WinForms 应用程序中跨类访问变量 public void Quiz Load object sender EventArgs e string My
  • 什么是排列索引?

    我正在阅读 加速 C 我不明白练习 5 1 设计并实现一个程序 根据以下输入生成排列索引 排列索引是其中每个短语由短语中的每个单词索引的索引 The quick brown fox jumped over the fence The qui
  • 如何编辑 .csproj 文件

    当我使用 NET Framework 4 0 MSBUILD EXE 文件编译 csproj 文件时 出现错误 在 website01 csproj 的当前上下文中找不到 lable01 实际上 我需要添加每个 ASP NET 页面及其代码
  • 如何在 C++ 中检查文件是否已被另一个应用程序打开?

    我知道 有is open C 中的函数 但我希望一个程序检查文件是否尚未被另一个应用程序打开 有没有办法使用标准库来做到这一点 编辑 在答案中澄清这是针对 Linux 应用程序的 不仅标准库没有这个功能 一般来说也是不可能的 你可以 在li
  • 尝试返回 IQueryable 时发生转换错误

    我有一个查询应该返回IQueryable
  • 如何在类库中添加配置文件,后跟 .NET Core 1.1 的连接字符串

    我正在开发 n 层应用程序 其中有数据访问层 它独立于任何其他应用程序 我已经为 NET Core 1 1 创建了类库 我可以看到依赖项文件夹 但看不到任何配置 JSON 文件 我想知道 我可以在类库项目中添加 AppSetting JSO
  • 是否可以在 Visual Studio 2010 项目中使用多个“字符集”?

    如您所知 在 Visual Studio 2010 c 中 我们有 noset unicode 和 MBCS 字符集 我们可以通过菜单或预处理器指令 如 define UNICODE 来设置它 我正在开发一个项目 它有一个使用 MBCS 字
  • qt 读取就绪信号

    我正在尝试与运行 1996 年处理器的设备建立串行连接 这意味着数据传输回我可能需要几秒钟的时间 我知道readyRead每次有新数据可用时都会生成信号 但我的问题是生成多长时间 这也是我可以测试就绪读取是否较低的一种方法 因为如果当它们不
  • Xamarin Mac 中 AttributeName 的用途

    我正在尝试对 Xamarin 中的 NSMutableAttributedString 中的子字符串进行着色 但它似乎缺少正确的常量 我应该在那里放什么 Update 这越来越接近 var s new NSMutableAttributed
  • 哪个是对的? catch (_com_error e) 还是 catch (_com_error& e)?

    我应该使用哪一个 catch com error e or catch com error e 第二 这是我试图引用萨特的话 按值抛出 按引用捕获 学会catch正确 按值 而不是指针 抛出异常 通过引用捕获它们 通常是const 这是组合
  • 可选地支持模板的initializer_list构造可能包装容器

    如果我有一个包装标准容器的模板 似乎我可以相当轻松地委托初始化器列表构造函数 template

随机推荐