前言
写这篇文章之前先声明一下,笔者这里说到的ASF不是指Microsoft的多媒体文件的ASF格式(可能这个很多人更熟悉一些),而是用于远程管理的ASF(Alert Standard Format)标准,以免有误导读者之闲。
闲话少说,步入正题,笔者有幸花了一点时间比较详细的研究了一下ASF的标准,并开发了部分和ASF有关的控制台软件部分的程序,有一些经验放在这里和有兴趣的读者一同分享。
ASF标准
关于ASF,笔者在之前的一篇文章已经提到过,《ASF vs AMT》;ASF标准支持的两种网络协议主要是PET和RMCP,相对应提供的功能主要也是两个:PET事件报警和远程电源控制。利用PET,远程控制台能很快收到客户机系统硬件发送过来的事件,这些事件可能是机箱***、温度过高、风扇转速过低、硬件故障、操作系统崩溃等,事件是否能产生和发出还得依赖于相对应的硬件或传感器是否能把事件判断出来并发送消息到SMBUS总线。远程电源控制主要是远程开关机,并且还可以查询远程客户机当前的电源状态以及开机支持的参数,并能能指定远程开机是的相关参数,然后由BIOS去解释执行。
ASF支持需要响应的软硬件配合,其中包括网卡需要支持ASF标准,BIOS需要支持ASF标准,主板芯片组需要支持SMBUS协议,控制台程序需要能接受和处理PET和RMCP(或RSSP)格式数据,客户端程序需要能够配置网卡相关的ASF参数。
硬件对ASF的支持
对ASF的支持最重要就是网卡芯片的支持,首先网卡芯片需要记录系统所使用的IP地址,这样即使在关机的情况下也可以通过网络寻址到;其次网卡肯定要部分实现UDP/IP协议栈,因为其需要接收控制台发送过来的RMCP命令,是 UDP格式的数据包,另外还需要将收到的事件打包成PET格式,然后通过UDP端口发送出去;网卡还需要能够支持PET格式,能够将从SMBUS获取的信息按PET格式组装并发送;最后网卡还需要能够部分和BIOS交互,以获取BIOS支持的启动参数,并将远程控制台发送过来的启动参数传递给BIOS。笔者所知道的三大网卡芯片厂商(Intel,Broadcom和Realtek)都有生产支持ASF1.0或ASF 2.0标准的网卡芯片。(1)Intel支持ASF标准的芯片有:所有支持Intel AMT的网卡芯片,比如Intel 82567 LM/LF;其他还是有Intel部分服务器网卡芯片,比如Intel 82547 GI/EI等;(2)Broadcom支持ASF标准的芯片有:Broadcom 5751, 5751, 5701, 5702等等,可以从Broadcom的官方网站上查到,相应的datasheet中都有说明;(3)Realtek支持ASF标准的芯片有:Realtek 8111CP和8111DP。相对来说,Realtek支持ASF标准的芯片要少一些。
ASF同样需要BIOS的支持才能正常工作,BIOS需要增加相应的ACPI表,并按ASF标准实现相应的查询和响应的功能。一般我们可以通过可以读取BIOS的ACPI表的工具来查看相应的机器是否支持ASF,下图就是笔者使用的HP DC7800台式机获得的和ASF有关的ACPI表,表的名字一般是!ASF。

具体每位表示什么意思,大家可以参考ASF标准文档。笔者这里说一下笔者比较关注的ASF的远程电源控制功能,上面这张表中的0x56位表示的就是BIOS支持的远程电源控制的能力,0x0F表示此BIOS只支持ASF安全模式的远程电源控制,也就是必须先通过ASF的安全协议连接,然后发送的远程电源控制命令才能成功。