IPMItool的架构

==============

源码目录如下

+---contrib         //用于建立web管理页面的shell脚本

+---control         //包含一些安装、配置信息

+---debian          //包含changelog等信息

+---doc             //man的帮助信息

+---include

|   \---ipmitool    //头文件定义

+---lib             //对IPMI规范的对应实现,如ipmi_session.c处理session

\---src             //此目录下是ipmitool的三个主程序

\---plugins     // ipmi_intf.c interface一些通用功能的实现

+---bmc     // ipmitool与bmc kernel driver之间的接口

+---imb     // Intel IMB Interface

+---lan     // IPMI v1.5 LAN Interface

+---lanplus // IPMI v2.0 RMCP+ LAN Interface

+---lipmi   // Solaris x86 LIPMI interface

\---open    // Linux OpenIPMI Interface [default]

C语言下的工厂模式

=================

从上述的目录结构不难看出,IPMItool设计上的一个重要特色就是将不同的interface看作plugin。从而使系统具有清晰的结构和良好的扩充性。

IPMI规范中定义的实体,如session,fru,sdr,chassis,sensor等等,都在lib中做对应的实现。这部分是与具体interface相分离的。interface的通用接口在include\ipmitool\ipmi_intf.h中定义;interface的通用功能实现,在\src\plugins\ipmi_intf.c中。值得注意的是,interface是IPMI规范中定义的概念,普通意义上的接口本文中均使用中文“接口”。

这种将通用接口与具体实现相分离的方式无疑就是一种简单工厂模式了。

实践

====

那么interface具体是怎么实现为plugin的呢?可以从一个具体的例子看一下。

include\ipmitool\ipmi_intf.h中用ipmi_intf定义了了

struct ipmi_intf {

...

struct ipmi_session * session;

struct ipmi_oem_handle * oem;

uint32_t my_addr;

uint32_t target_addr;

int (*setup)(struct ipmi_intf * intf);

int (*open)(struct ipmi_intf * intf);

void (*close)(struct ipmi_intf * intf);

...

};

与OO语言类似,struct内部定义了数据和方法。不同的是,方法采用的是函数指针的方式。因为没有this指针,所以函数的形参就是指向自身struct的指针。如setup。

而在具体实现中,如src\plugins\lan\lan.c中给出了具体的函数实现。如ipmi_lan_setup。在ipmi_lan_setup中,即可使用形参定义的intf指针实现对ipmi_intf结构中相应数据的操作。

struct ipmi_intf ipmi_lan_intf = {

name:  "lan",

desc:  "IPMI v1.5 LAN Interface",

setup:  ipmi_lan_setup,

open:  ipmi_lan_open,

close:  ipmi_lan_close,

sendrecv: ipmi_lan_send_cmd,

sendrsp: ipmi_lan_send_rsp,

keepalive: ipmi_lan_keepalive,

target_addr: IPMI_BMC_SLAVE_ADDR,

};

java ipmitool_ipmitool工具解析相关推荐

  1. Java 爬虫工具Jsoup解析

    Jsoup是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和 ...

  2. java定义语法解析器,java开发工具intellij idea使用教程:定义语法和解析器.pdf

    java开发工具intellij idea使用教程:定义语法和解析器.pdf 还剩 3页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 慧都 科技 -- ...

  3. java 自定义json解析注解 复杂json解析 工具类

    java 自定义json解析注解 复杂json解析 工具类 目录 java 自定义json解析注解 复杂json解析 工具类 1.背景 2.需求-各式各样的json 一.一星难度json[json对象 ...

  4. Java生成和解析二维码工具类(简单经典)

    Java生成和解析二维码工具类 开箱即用,简单不废话. pom.xml引入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...

  5. Java爬取解析去哪儿景点信息

    前言:这两周在做 Web 课的大作业,顺便琢磨了一下如何使用 Java 从网上获取一些数据,现在写这篇博客记录一下. PS:这里仅限交流学习用,如利用代码进行恶意攻击他网站,和作者无关!!! Java ...

  6. java构造和解析json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  7. idea如何删除java里面工程,Java开发工具IntelliJ IDEA配置项目系列教程(七):卸载模块...

    IntelliJ IDEA是Java语言开发的集成环境,IntelliJ在业界被公认为优秀的Java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUnit.CVS整合. ...

  8. Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  9. 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用...

    在线演示  本地下载 如果你曾经开发过内容聚合类网站的话,使用程序动态整合来自不同页面或者网站内容的功能肯定对于你来说非常熟悉.通常使用java的话,我们都会使用到一些HTML的解析,例如,httpp ...

最新文章

  1. python做表格计算公式_Python自学Day45 制作Excel报表
  2. 【The final】软件工程实践总结
  3. 速学c++(3)-函数
  4. 高级数据结构与算法 | AVL树 (高度平衡树)
  5. Android 页面多状态布局管理
  6. python官网下载步骤-下载及安装Python详细步骤
  7. qstringlist格式怎么写到txt_怎样把PDF转成TXT呢?
  8. 如何将Win7便签添加到桌面快捷方式
  9. depot_tools
  10. H264 视频文件 帧格式 传输封装等
  11. 为啥外包喜欢php,为什么要面向对象?
  12. 一个稳定、快速的云服务器——萤光云
  13. filebeat报错:Harvester could not be started on exist file
  14. Pro Tools 贴士- 使用Snapper快速试听和导入音频素材
  15. 常用室内定位技术总结
  16. 2022暑初二信息竞赛学习成果分享2
  17. 【单片机】辉光管时钟系列<一>--单片机最小系统
  18. lemming games 1!! hdlbits
  19. fluent 对电机油冷分析_车用油冷电机温度场分析
  20. 正态分布的前世今生——如何发现的?

热门文章

  1. 重磅直播|高反光表面三维视觉测量方法
  2. 学计算机高考英语听力考试时间,2021年广东新高考英语听说考试时间安排
  3. iPhone4 解决 FolderEnhancer 过期 安全模式 的问题
  4. java需要背的英语单词_这70个Java必背英语单词不会,就别说你是Java程序员!
  5. 佛太昊四项鸿蒙,【分享】正确使用佛太昊技能的普及
  6. Ansiable常用模块讲解,以及Ansible的管理方式
  7. 按键精灵重新定义Print Screen按键
  8. Java无锁并发详细教程
  9. 【easyUI】easyUI Confirm使用方法及配置文字以及回调以及【更改源码】扩展功能修改按钮文字;
  10. 高考十周年,为母校疯狂打Call