$ sudo yum install gcc-c++ $ sudo yum install openssl openssl-devel $ sudo yum install boost boost-doc boost-devel $ sudo yum install autoconf automake libtool
Please read the full documentation before you try it!
$ sudo yum install gcc-c++ $ sudo yum install openssl openssl-devel $ sudo yum install boost boost-doc boost-devel $ sudo yum install autoconf automake libtool
ACE is a pre-requisite for Open diameter.
$ tar xjvf ACE-5.6.9.tar.bz2 $ cd ACE_wrappers $ mkdir build $ cd build $ ../configure --prefix=/usr/local $ make $ sudo make install
$ tar xzvf opendiameter-1.0.7-i.tar.gz $ cd opendiameter-1.0.7-i $ mkdir build $ cd build $ ACE_ROOT=/usr/local BOOST_ROOT=/usr ../configure $ make
Source: http://diameter.sourceforge.net/
Just copy ACE_wrappers/ace/Swap.cpp to /usr/local/include/ace/.
This error occurs if ACE-5.5 is used.
$ cd ACE_wrappers $ sudo cp ace/Swap.cpp /usr/local/include/ace/
Copy ACE_wrappers/ace/Obstack.h to /usr/local/include/ace/
error: field `m_SigRegistrar' has incomplete type
Modify opendiameter-1.0.7-i/libdiameter/include/aaa_transport_ace.h. Add the following:
#include "ace/Sig_Handler.h"
Modify the following lines in opendiameter-1.0.7-i/libpana/include/pana_serial_num.h:
static inline ACE_UINT32 GenerateISN(ACE_UINT32 seed = 0) { if (seed == 0) { time_t t = 0; ACE_System_Time::get_local_system_time(t); } // simple time seeded randon number generator ACE_OS::srand(seed + ACE_OS::rand()); return ACE_OS::rand(); }
Apply the following changes to opendiameter/libodutl od_utl_xml_sax_parser.h and od_utl_xml_sax_parser.cxx (thanks to Mario Ivancic).
--- opendiameter-1.0.7-i/libodutl/include/od_utl_xml_sax_parser.h 2007-03-01 22:16:38.000000000 +0530 +++ diameter-gcc-4.3.2-ACE-5.6.9-test/opendiameter-1.0.7-i/libodutl/include/od_utl_xml_sax_parser.h 2009-06-23 20:10:25.000000000 +0530 @@ -113,8 +113,8 @@ return true; } virtual bool characters(const ACEXML_Char *ch, - int start, - int length ACEXML_ENV_ARG_DECL) { + size_t start, + size_t length ACEXML_ENV_ARG_DECL) { if (! m_inProcess) { std::string err = "Error: element "; err += m_name; @@ -171,8 +171,8 @@ virtual void Load(char* xmlFile); virtual void characters(const ACEXML_Char *ch, - int start, - int length ACEXML_ENV_ARG_DECL); + size_t start, + size_t length ACEXML_ENV_ARG_DECL); virtual void startDocument(ACEXML_ENV_SINGLE_ARG_DECL); virtual void endDocument(ACEXML_ENV_SINGLE_ARG_DECL); virtual void startElement(const ACEXML_Char *namespaceURI, @@ -208,8 +208,8 @@ protected: virtual bool characters(const ACEXML_Char *ch, - int start, - int length ACEXML_ENV_ARG_DECL) { + size_t start, + size_t length ACEXML_ENV_ARG_DECL) { if (! OD_Utl_XML_Element::characters(ch, start, length)) { return false; } --- opendiameter-1.0.7-i/libodutl/src/od_utl_xml_sax_parser.cxx 2007-03-01 22:16:38.000000000 +0530 +++ diameter-gcc-4.3.2-ACE-5.6.9-test/opendiameter-1.0.7-i/libodutl/src/od_utl_xml_sax_parser.cxx 2009-06-23 20:09:00.000000000 +0530 @@ -53,8 +53,8 @@ // Methods inherit from ACEXML_ContentHandler. virtual void characters (const ACEXML_Char *ch, - int start, - int length ACEXML_ENV_ARG_DECL) + size_t start, + size_t length ACEXML_ENV_ARG_DECL) ACE_THROW_SPEC ((ACEXML_SAXException)) { m_parser.characters(ch, start, length); } @@ -187,8 +187,8 @@ } void OD_Utl_XML_SaxParser::characters(const ACEXML_Char *ch, - int start, - int length ACEXML_ENV_ARG_DECL) + size_t start, + size_t length ACEXML_ENV_ARG_DECL) { if (m_currentElement) { m_currentElement->characters(ch, start, length);
The location where .xml files are searched are in /etc/opendiameter, even though installation happens in /usr/local/etc/opendiameter. Create the directories and copy the config files. Make sure that all references start with /etc/opendiameter/, and not from config/ in the .xml files.
# mkdir /etc/opendiameter/aaa -p # mkdir /etc/opendiameter/nas -p # cd opendiameter-1.0.7-i # cp -r applications/aaa/config /etc/opendiameter/aaa # cp -r applications/nas/config /etc/opendiameter/nas
If you get an error that states:
error while loading shared libraries: libACEXML_Parser-5.6.9.so: cannot open shared object file: No such file or directory
it means you haven’t yet provided the PATH to include ACE libraries. Export LD_LIBRARY_PATH to include ACE libraries.
# export LD_LIBRARY_PATH=/usr/local/lib
You can now start aaad, nasd as root.
Add the following in /etc/hosts file:
127.0.0.1 localaaa localaaa.localdomain1.net 127.0.0.1 localnas localnas.localdomain2.net
Download the following directory that contains aaa/config/ and nas/config/ .xml files and put it in /etc/opendiameter:
You can now start aaad as root:
# aaad
The following is a sample log:
[root@fedora config]# aaad (12062|3086161712)--- Cfg Data --- (12062|3086161712) Thread Cnt: 5 (12062|3086161712) Diam Cfg File: /etc/opendiameter/aaa/config/aaad_diameter_server.xml (12062|3086161712)--- Application Table --- (12062|3086161712) Application: diameter_eap (12062|3086161712) Enabled: true (12062|3086161712) Local Ident: aaad@opendiameter.org (12062|3086161712) User Db File: /etc/opendiameter/aaa/config/aaad_user_db.xml (12062|3086161712) Starting diameter core (12062|3086161712) Product : Open Diameter (12062|3086161712) Version : 1 (12062|3086161712) Vendor Id : 0 (12062|3086161712) Supported Vendor : 0 (12062|3086161712) Supported Vendor : 1 (12062|3086161712) Auth Application : 1 (12062|3086161712) Auth Application : 2 (12062|3086161712) Auth Application : 2000 (12062|3086161712) Auth Application : 10000 (12062|3086161712) Acct Application : 3 (12062|3086161712) Acct Application : 4 (12062|3086161712) Acct Application : 20000 (12062|3086161712) Vendor Specific Id : (12062|3086161712) Vendor=31, Auth=1 (12062|3086161712) Vendor Specific Id : (12062|3086161712) Vendor=41, Acct=6 (12062|3086161712) Dictionary : /etc/opendiameter/aaa/config/aaad_diameter_dictionary.xml (12062|3086161712) Identity : localaaa.localdomain1.net (12062|3086161712) Realm : localdomain1.net (12062|3086161712) TCP Listen : 1812 (12062|3086161712) SCTP Listen : 1813 (12062|3086161712) Watch-Dog timeout : 4 (12062|3086161712) Use IPv6 : 0 (12062|3086161712) Re-transmission Int : 8 (12062|3086161712) Max Re-trans Int : 3 (12062|3086161712) Recv Buffer Size : 2048 (12062|3086161712) Hostnames Used : localaaa.localdomain1.net (12062|3086161712) Dumping Peer Table (12062|3086161712) Expire Time 1 (12062|3086161712) Peer : Host = localnas.localdomain2.net, Port = 1811, TLS = 0 (12062|3086161712) Dumping Route Table (12062|3086161712) Exp Time : 0 (12062|3086161712) Route : Realm = localdomain2.net, Action = 0, Redirect-Usage = 0 (12062|3086161712) Application Id=2000, Vendor=0 (12062|3086161712) Server = localnas.localdomain2.net, metric = 2 (12062|3086161712) Max Sess : 10000 (12062|3086161712) Auth Stateful Auth : stateful (12062|3086161712) Auth Session(T) : 30 (12062|3086161712) Auth Lifetime(T) : 360 (12062|3086161712) Auth Grace(T) : 30 (12062|3086161712) Auth Abort(T) : 20 (12062|3086161712) Acct Session(T) : 30 (12062|3086161712) Acct Interim Int : 5 (12062|3086161712) Acct Real-Time : 1 (12062|3086161712) Debug Log : enabled (12062|3086161712) Trace Log : enabled (12062|3086161712) Info Log : enabled (12062|3086161712) Console Log : enabled (12062|3086161712) Syslog Log : enabled Vendor [id = "61"] Vendor [name = "Merit Networks"] Vendor [id = "42"] Vendor [name = "Sun Microsystems, Inc."] Vendor [id = "429"] Vendor [name = "US Robotics Corp."] Base [uri = "ftp://ftp.ietf.org/internet-drafts/draft-ietf-aaa-diameter-08.txt"] Base [uri = "ftp://ftp.ietf.org/internet-drafts/draft-ietf-aaa-diameter-08.txt"] (12062|3086161712) TCP Acceptor Listening at 1812, binding to localaaa.localdomain1.net (12062|3012729744) Waiting for incomming connection ... (12062|3086161712) SCTP Acceptor Listening at 1813, binding to localaaa.localdomain1.net (12062|3002239888) Waiting for incomming connection ... (12062|3086161712) Trying to connect to to localnas.localdomain2.net:1811 (12062|2991750032) Checking if connection attempt succeeded ... (12062|2991750032) Async Transport Setup Reports: Connection refused (12062|2991750032) IO Factory error: Connector [111=Connection refused] (12062|3086161712) **** User database **** (12062|3086161712) *** Match User: default (12062|3086161712) Method: archie (12062|3086161712) MD5 Passwd Typ: 2 (12062|3086161712) Shared secret: /etc/aaad/config/aaad_eap_shared_secret.bin (12062|3086161712) *** Match User: isp.net (12062|3086161712) Method: md5 (12062|3086161712) MD5 Passwd Typ: 1 (12062|3086161712) Shared secret: /etc/aaad/config/aaad_eap_shared_secret.bin (12062|3086161712) *** Match User: user (12062|3086161712) Method: archie (12062|3086161712) MD5 Passwd Typ: 1 (12062|3086161712) Shared secret: /etc/aaad/config/aaad_eap_shared_secret.bin (12062|3012729744) Waiting for incomming connection ... (12062|3002239888) Waiting for incomming connection ... (12062|3012729744) Waiting for incomming connection ... (12062|3002239888) Waiting for incomming connection ... (12062|3012729744) Waiting for incomming connection ... (12062|3002239888) Waiting for incomming connection ... (12062|3044199312) Retrying peer connection. Number of attemps 1 (12062|3044199312) Trying to connect to to localnas.localdomain2.net:1811 (12062|3012729744) Waiting for incomming connection ... (12062|3002239888) Waiting for incomming connection ...
Download the following directory that contains config/ directory with all the required .xml files, and put it in opendiameter-1.0.7-i/build/libdiameter:
You can now start aaa_test_server1 (localnas.localdomain2.net) from a terminal:
[root@fedora libdiameter]# export LD_LIBRARY_PATH=/usr/local/lib [root@fedora libdiameter]# ./aaa_test_server1 (12434|3085834032) Starting diameter core (12434|3085834032) Product : Open Diameter (12434|3085834032) Version : 1 (12434|3085834032) Vendor Id : 0 (12434|3085834032) Supported Vendor : 0 (12434|3085834032) Supported Vendor : 1 (12434|3085834032) Auth Application : 1 (12434|3085834032) Auth Application : 2 (12434|3085834032) Auth Application : 10000 (12434|3085834032) Acct Application : 3 (12434|3085834032) Acct Application : 4 (12434|3085834032) Acct Application : 20000 (12434|3085834032) Vendor Specific Id : (12434|3085834032) Vendor=31, Auth=1 (12434|3085834032) Vendor Specific Id : (12434|3085834032) Vendor=41, Acct=6 (12434|3085834032) Dictionary : config/dictionary.xml (12434|3085834032) Identity : localnas.localdomain2.net (12434|3085834032) Realm : localdomain2.net (12434|3085834032) TCP Listen : 1812 (12434|3085834032) SCTP Listen : 1813 (12434|3085834032) Watch-Dog timeout : 4 (12434|3085834032) Use IPv6 : 0 (12434|3085834032) Re-transmission Int : 8 (12434|3085834032) Max Re-trans Int : 3 (12434|3085834032) Recv Buffer Size : 2048 (12434|3085834032) Hostnames Used : localnas.localdomain2.net (12434|3085834032) Dumping Peer Table (12434|3085834032) Expire Time 1 (12434|3085834032) Peer : Host = localaaa.localdomain1.net, Port = 1811, TLS = 0 (12434|3085834032) Dumping Route Table (12434|3085834032) Exp Time : 0 (12434|3085834032) Route : Realm = localdomain1.net, Action = 0, Redirect-Usage = 0 (12434|3085834032) Application Id=10000, Vendor=0 (12434|3085834032) Server = localaaa.localdomain1.net, metric = 2 (12434|3085834032) Max Sess : 10000 (12434|3085834032) Auth Stateful Auth : stateful (12434|3085834032) Auth Session(T) : 30 (12434|3085834032) Auth Lifetime(T) : 360 (12434|3085834032) Auth Grace(T) : 30 (12434|3085834032) Auth Abort(T) : 20 (12434|3085834032) Acct Session(T) : 30 (12434|3085834032) Acct Interim Int : 5 (12434|3085834032) Acct Real-Time : 1 (12434|3085834032) Debug Log : enabled (12434|3085834032) Trace Log : enabled (12434|3085834032) Info Log : enabled (12434|3085834032) Console Log : enabled (12434|3085834032) Syslog Log : enabled Vendor [id = "61"] Vendor [name = "Merit Networks"] Vendor [id = "42"] Vendor [name = "Sun Microsystems, Inc."] Vendor [id = "429"] Vendor [name = "US Robotics Corp."] Base [uri = "ftp://ftp.ietf.org/internet-drafts/draft-ietf-aaa-diameter-08.txt"] Base [uri = "ftp://ftp.ietf.org/internet-drafts/draft-ietf-aaa-diameter-08.txt"] (12434|3085834032) TCP Acceptor Listening at 1812, binding to localnas.localdomain2.net (12434|3085834032) SCTP Acceptor Listening at 1813, binding to localnas.localdomain2.net (12434|3001912208) Waiting for incomming connection ... (12434|3085834032) Trying to connect to to localaaa.localdomain1.net:1811 (12434|2991422352) Checking if connection attempt succeeded ... (12434|3064851344) Connection attempt accepted (12434|3064851344) Sent CER (12434|3022891920) SIGPIPE received, closing connection (12434|3022891920) Async IO Reports: Broken pipe Just wait here and let factory take care of new sessions (12434|2980932496) Async IO Reports: Transport endpoint is not connected (12434|3012402064) Waiting for incomming connection ... (12434|3012402064) Waiting for incomming connection ... (12434|3054361488) Peer Capabilities (12434|3054361488) Hostname : localaaa.localdomain1.net (12434|3054361488) Realm : localdomain1.net (12434|3054361488) Host IP : type=1, 127.0.0.1 (12434|3054361488) VendorId : 0 (12434|3054361488) Product Name : Open Diameter (12434|3054361488) Orig State : 1245853459 (12434|3054361488) Supported Vendor Id : 0 (12434|3054361488) Supported Vendor Id : 1 (12434|3054361488) Auth Application Id : 1 (12434|3054361488) Auth Application Id : 2 (12434|3054361488) Auth Application Id : 10000 (12434|3054361488) Acct Application Id : 3 (12434|3054361488) Acct Application Id : 4 (12434|3054361488) Acct Application Id : 20000 (12434|3054361488) Vendor Specific Id : (12434|3054361488) Vendor=31, Auth=1 (12434|3054361488) Vendor Specific Id : (12434|3054361488) Vendor=41, Acct=6 (12434|3054361488) Inband Sec : 0 (12434|3054361488) Firmware Ver : 1 (12434|3054361488) Election occurring ... (12434|3054361488) ***** Local peer wins election ***** (12434|3043871632) Sent CEA: rcode=2001 (12434|3043871632) Capabilities negotiation completed successfully (win-election) (12434|3033381776) Async Transport Setup Reports: Transport endpoint is not connected (12434|3001912208) Waiting for incomming connection ... Just wait here and let factory take care of new sessions (12434|3075341200) Watchdog msg from [localaaa.localdomain1.net.localdomain1.net], state=1245853459, time=1245853462 (12434|3043871632) Watchdog msg from [localaaa.localdomain1.net.localdomain1.net], state=1245853459, time=1245853463 ...
You can now start aaa_test_client1 (localaaa.localdomain1.net):
[root@fedora libdiameter]# export LD_LIBRARY_PATH=/usr/local/lib [root@fedora libdiameter]# ./aaa_test_client1 config/nas1.local.xml 3 (12446|3087779632) Starting diameter core (12446|3087779632) Product : Open Diameter (12446|3087779632) Version : 1 (12446|3087779632) Vendor Id : 0 (12446|3087779632) Supported Vendor : 0 (12446|3087779632) Supported Vendor : 1 (12446|3087779632) Auth Application : 1 (12446|3087779632) Auth Application : 2 (12446|3087779632) Auth Application : 10000 (12446|3087779632) Acct Application : 3 (12446|3087779632) Acct Application : 4 (12446|3087779632) Acct Application : 20000 (12446|3087779632) Vendor Specific Id : (12446|3087779632) Vendor=31, Auth=1 (12446|3087779632) Vendor Specific Id : (12446|3087779632) Vendor=41, Acct=6 (12446|3087779632) Dictionary : config/dictionary.xml (12446|3087779632) Identity : localaaa.localdomain1.net (12446|3087779632) Realm : localdomain1.net (12446|3087779632) TCP Listen : 1810 (12446|3087779632) SCTP Listen : 1811 (12446|3087779632) Watch-Dog timeout : 3 (12446|3087779632) Use IPv6 : 0 (12446|3087779632) Re-transmission Int : 8 (12446|3087779632) Max Re-trans Int : 3 (12446|3087779632) Recv Buffer Size : 2048 (12446|3087779632) Hostnames Used : localaaa.localdomain1.net (12446|3087779632) Dumping Peer Table (12446|3087779632) Expire Time 1 (12446|3087779632) Peer : Host = localnas.localdomain2.net, Port = 1812, TLS = 0 (12446|3087779632) Dumping Route Table (12446|3087779632) Exp Time : 0 (12446|3087779632) Route : Realm = localdomain2.net, Action = 1, Redirect-Usage = 0 (12446|3087779632) Application Id=1, Vendor=0 (12446|3087779632) Server = localnas.localdomain2.net, metric = 2 (12446|3087779632) Max Sess : 10000 (12446|3087779632) Auth Stateful Auth : stateful (12446|3087779632) Auth Session(T) : 30 (12446|3087779632) Auth Lifetime(T) : 360 (12446|3087779632) Auth Grace(T) : 30 (12446|3087779632) Auth Abort(T) : 20 (12446|3087779632) Acct Session(T) : 30 (12446|3087779632) Acct Interim Int : 5 (12446|3087779632) Acct Real-Time : 1 (12446|3087779632) Debug Log : enabled (12446|3087779632) Trace Log : enabled (12446|3087779632) Info Log : enabled (12446|3087779632) Console Log : enabled (12446|3087779632) Syslog Log : disabled Vendor [id = "61"] Vendor [name = "Merit Networks"] Vendor [id = "42"] Vendor [name = "Sun Microsystems, Inc."] Vendor [id = "429"] Vendor [name = "US Robotics Corp."] Base [uri = "ftp://ftp.ietf.org/internet-drafts/draft-ietf-aaa-diameter-08.txt"] Base [uri = "ftp://ftp.ietf.org/internet-drafts/draft-ietf-aaa-diameter-08.txt"] (12446|3087779632) TCP Acceptor Listening at 1810, binding to localaaa.localdomain1.net (12446|3012537232) Waiting for incomming connection ... (12446|3087779632) SCTP Acceptor Listening at 1811, binding to localaaa.localdomain1.net (12446|3002047376) Waiting for incomming connection ... (12446|3087779632) Trying to connect to to localnas.localdomain2.net:1812 (12446|2991557520) Checking if connection attempt succeeded ... (12446|3064986512) Connection attempt accepted (12446|3064986512) Sent CER (12446|3044006800) Peer Capabilities (12446|3044006800) Hostname : localnas.localdomain2.net (12446|3044006800) Realm : localdomain2.net (12446|3044006800) Host IP : type=1, 127.0.0.1 (12446|3044006800) VendorId : 0 (12446|3044006800) Product Name : Open Diameter (12446|3044006800) Orig State : 1245853452 (12446|3044006800) Supported Vendor Id : 0 (12446|3044006800) Supported Vendor Id : 1 (12446|3044006800) Auth Application Id : 1 (12446|3044006800) Auth Application Id : 2 (12446|3044006800) Auth Application Id : 10000 (12446|3044006800) Acct Application Id : 3 (12446|3044006800) Acct Application Id : 4 (12446|3044006800) Acct Application Id : 20000 (12446|3044006800) Vendor Specific Id : (12446|3044006800) Vendor=31, Auth=1 (12446|3044006800) Vendor Specific Id : (12446|3044006800) Vendor=41, Acct=6 (12446|3044006800) Inband Sec : 0 (12446|3044006800) Firmware Ver : 1 (12446|3044006800) *** Local capabilities accepted by peer *** (12446|3087779632) Trying to connect to to dynamic.peer.com:1812 (12446|2960087952) Checking if connection attempt succeeded ... Waiting till this AAA has connectivity (12446|3087779632) Session id=localaaa.localdomain1.net.localdomain1.net;;";my_client Sending request message (12446|3087779632) DestHost(server.isp.net) present but not ours so try realm routing (12446|3087779632) DestHost(server.isp.net) does not match any peer (12446|3087779632) DestRealm(isp.net) not in routing table (12446|3087779632) Router cannot deliver message, sending back with an error (12446|3087779632) *** Router rejected request message *** (12446|3087779632) Message header dump version = 1 length = 0 flags(r,p,e,t) = (1,0,0,0) command = 300 hop-by-hop = 701372979 end-to-end = 1899287708 Application id = 10000 (12446|3087779632) **** Request Message Error **** (12446|3087779632) Message header dump version = 1 length = 0 flags(r,p,e,t) = (1,0,0,0) command = 300 hop-by-hop = 701372979 end-to-end = 1899287708 Application id = 10000 (12446|3087779632) **** Received message with error bit set **** Waiting till user is authorized Waiting till user is authorized (12446|3077286800) Watchdog msg from [localnas.localdomain2.net.localdomain2.net], state=1245853452, time=1245853462 Waiting till user is authorized (12446|3064986512) Watchdog msg from [localnas.localdomain2.net.localdomain2.net], state=1245853452, time=1245853463 Waiting till user is authorized ...
You will see debug messages on both the client and server.
On the server (localnas.localdomain2.net):
(12434|3075341200) Watchdog msg from [localaaa.localdomain1.net.localdomain1.net], state=1245853459, time=1245853462
On the client (localaaa.localdomain1.net):
(12446|3064986512) Watchdog msg from [localnas.localdomain2.net.localdomain2.net], state=1245853452, time=1245853463
Wireshark has support for Diameter captures. Install wireshark:
$ sudo yum install wireshark
Copy the .xml files used by aaa_test_client1 and aaa_test_server1 to /usr/share/wireshark/diameter:
cp isp.local.xml /usr/share/wireshark/diameter cp nas1.local.xml /usr/share/wireshark/diameter
Update dictionary.xml in /usr/share/wireshark/diameter/ with the following entries for the two client/servers:
<!DOCTYPE dictionary SYSTEM "dictionary.dtd" [ <!ENTITY isp.local SYSTEM "isp.local.xml"> <!ENTITY nas1.local SYSTEM "nas1.local.xml"> ...
At the following at the end of the file:
... &nas1.local; &isp.local;
Start wireshark and add the respective client/server TCP, SCTP ports in Edit→Preferences→Protocols→Diameter settings.
For the aaa_test_client1 and aaa_test_server1 example, the following are the port values:
TCP 1810, 1812 SCTP 1811
Here is a screenshot of wireshark with the read diameter values: