Open Diameter 1.0.7g在windows系统上的安装和部署。
工具:
1. VC7.1
VC8和VC9应该也可以
2. Xerces C++ XML Parser
最好用2系列的包(否则需要修改open diameter的工程设置和头文件,甚至会需要修改一些接口的使用),http://xml.apache.org/xerces-c 上有windows版本的供VC71使用的已经编译好的包。
3. ACE library
ACE选用了5.6版本,因为更高版本的包里没有现成的VC71的工程文件(只有VC8和VC9的),当然也可以通过MPC工具(MakeProjectCreator)来产生相应的工程文件,只是没太有兴趣去研究MPC。ACE5.6版本的默认设置里没有SSL的支持,所以在用VC71打开ACE_wrappers/ACE.sln之后需要手动把ACE_wrappers/ace/SSL/SSL.vcproj这个工程文件添加到解决方案中,这样就会生成ACE_SSL相关的库文件和dll.(也可以通过更改设置增加SSL选项,然后重新使用MPC工具生成新的工程文件)。
4. BOOST library
安装简单,使用了boost_1_43_0,按照说明把bootstrap.bat执行一下即可。
5. OpenSSL library
安装简单,不过需要先装perl工具。
所有工具安装好后,可以把库文件和头文件夹以及dll文件集中管理,以便编译Open Diameter。Dll的路径需要增加到PATH环境变量中。
编译OpenDiameter 1.0.7:
这个过程不是很顺利,可能是编译器的缘故,不过通过一些些小的修补,便可以顺利通过编译并且部署成功。
打开Solution/VC71/OpenDiameter.sln,在工具-〉选项-〉项目-〉VC++目录的“包含文件”“库文件”条目下增加以上4个工具的头文件和库文件目录。
编译中可能会出现的问题:
1. 一些符号找不到,这个问题应该是和库版本的问题相关,解决方法很简单只要找到这个符号所在的头文件然后加入到当前文件中。具体修改如下
aaa_transport_ace.h中增加#include <ace/Sig_Handler.h>
diameter_parser_api.h中增加#include <ace/Local_Memory_Pool.h>
2. time_t类型和ACE_UINT32无法转换。这个问题可能是编译器的问题;简单解决方法如下:
-- ACE_System_Time::get_local_system_time(seed);改为
++ time_t tempvalue = 0;
++ ACE_System_Time::get_local_system_time(tempvalue);
++ seed = (ACE_UINT32)tempvalue;
这个问题可能出现在pana_serial_num.h,pana_nonce_generator.h,pana_dhcp_bootstrap.h,pana_cookie.cxx这几个文件中
3. 某个子工程文件(忘记是哪个了…)会产生Xerces的某个非dll符号(也就是静态连接符号)找不到的连接错误。这是工程文件的问题,修改工程文件的设置可以解决。
4. WPA模块需要win DDK,但是安装了之后还是由某个802.11的类型找不到。考虑到这个模块只和wifi相关,所以暂时把这个模块的工程文件从总的解决方案中剔除出去即可。
5. 总解决方案中有几个installer工程,可以剔除。
部署Open diameter:
以两个域的漫游为例部署open diameter
1. DNS服务器
Diameter完全依赖于DNS服务,windows下的DNS服务器,个人感觉RaidenDNSD使用起来很方便。安装好后,建立两个域newdomain.com和newdomain2.com,各个域下的ip为:
客户端 tempc.newdomain.com 192.168.0.2
代理 proxy.newdomain.com 192.168.0.3
服务器 temps.newdomain2.com 192.168.0.4
以下三个节点都把DNS服务器地址是这位RaidenDNSD DNS 服务器的地址
2. Diameter客户端
使用opendiameter源代码里提供的AAASampleClient5, 配置文件里需要当前节点的id(tempc.newdomain.com)和域(newdomain.com), peer table里需要填proxy.newdomain.com, 然后route table里需要域newdomain2.com 角色类型1(这里使用relay类型的代理)以及路由地址proxy.newdomain.com。
3. Diameter 代理(路由节点)
使用opendiameter源代码里提供的AAASampleAgent;配置文件里需要自己的id和域(同上)peer table 需要把tempc.newdomain.com和temps.newdomain2.com都加入进去。
4. Diameter 服务器
使用opendiameter源代码里提供的AAASampleServer5, 配置基本同上,只是peer节点里只有proxy.newdomain.com
5. 客户程序和服务器程序
直接和Diameter客户端和服务器邦定在一起。只是简单的验证字符串“username@domain.com”