[Overview] [Code Structure] [Configuration and Usage] [Examples]
Realm routing is integrated - see the example configuration file for a simple usage example.
A series of processes are forked:
The protocol codec is implemented into diameter_avp.c and diameter_msg.c. The Diameter base protocol state machine is implemented in peerstatemachine.c. peermanager.c takes care of peer administration. Basic transactions are defined in transaction.c.
For input configuration file, take a look at configdtd.h for the structure. Here we have an example (not really usable, but you should be able to derive your own):
<?xml version="1.0" encoding="UTF-8"?> <DiameterPeer FQDN="xcscf.open-ims.test" Realm="open-ims.test" Vendor_Id="10415" Product_Name="CDiameterPeer" AcceptUnknownPeers="0" DropUnknownOnDisconnect="1" Tc="30" Workers="4" QueueLength="32" > <Peer FQDN="hss1.open-ims.test" Realm="open-ims.test" port="3868"/> <Peer FQDN="hss2.open-ims.test" Realm="open-ims.test" port="3868"/> <Acceptor port="3868" /> <Acceptor port="3869" bind="127.0.0.1" /> <Acceptor port="3870" bind="192.168.1.1" /> <Auth id="16777216" vendor="10415"/><!-- 3GPP Cx --> <Auth id="16777216" vendor="4491"/><!-- CableLabs Cx --> <Auth id="16777216" vendor="13019"/><!-- ETSI/TISPAN Cx --> <Realm name="my.open-ims.test"> <Route FQDN="blackjack" metric="2"/> <Route FQDN="test1" metric="3"/> <Route FQDN="test2" metric="5"/> </Realm> <Realm name="test1.open-ims.test"> <Route FQDN="test3" metric="7"/> <Route FQDN="test4" metric="11"/> </Realm> <Realm name="test2.open-ims.test"> <Route FQDN="test5" metric="13"/> </Realm> <DefaultRoute FQDN="hss1.open-ims.test" metric="15"/> <DefaultRoute FQDN="hss2.open-ims.test" metric="13"/> </DiameterPeer>
It is used by :
<?xml version="1.0" encoding="UTF-8"?> <DiameterPeer FQDN="icscf.open-ims.test" Realm="open-ims.test" Vendor_Id="10415" Product_Name="CDiameterPeer" AcceptUnknownPeers="1" DropUnknownOnDisconnect="1" Tc="30" Workers="4" QueueLength="8" > <Peer FQDN="hss.open-ims.test" Realm="open-ims.test" port="3868"/> <Acceptor port="3869" bind="127.0.0.1"/> <Auth id="16777216" vendor="10415"/><!-- 3GPP Cx --> <Auth id="16777216" vendor="4491"/><!-- CableLabs Cx --> <Auth id="16777216" vendor="13019"/><!-- ETSI/TISPAN Cx --> <DefaultRoute FQDN="hss.open-ims.test" metric="10"/> <!-- Realm Routing configuration - Uncomment and Edit! <Realm name="open-ims.test"> <Route FQDN="hss1.open-ims.test" metric="10"/> <Route FQDN="hss2.open-ims.test" metric="20"/> </Realm> <Realm name="another.open-ims.test"> <Route FQDN="hss3.open-ims.test" metric="10"/> <Route FQDN="hss2.open-ims.test" metric="20"/> </Realm> <DefaultRoute FQDN="hss.open-ims.test" metric="10"/> <DefaultRoute FQDN="hss4.open-ims.test" metric="20"/> --> </DiameterPeer>
<?xml version="1.0" encoding="UTF-8"?> <DiameterPeer FQDN="scscf.open-ims.test" Realm="open-ims.test" Vendor_Id="10415" Product_Name="CDiameterPeer" AcceptUnknownPeers="1" DropUnknownOnDisconnect="1" Tc="30" Workers="4" QueueLength="8" > <Peer FQDN="hss.open-ims.test" Realm="open-ims.test" port="3868"/> <Acceptor port="3870" bind="127.0.0.1"/> <Auth id="16777216" vendor="10415"/><!-- 3GPP Cx --> <Auth id="16777216" vendor="4491"/><!-- CableLabs Cx --> <Auth id="16777216" vendor="13019"/><!-- ETSI/TISPAN Cx --> <DefaultRoute FQDN="hss.open-ims.test" metric="10"/> <!-- Realm Routing configuration - Uncomment and Edit! <Realm name="open-ims.test"> <Route FQDN="hss1.open-ims.test" metric="10"/> <Route FQDN="hss2.open-ims.test" metric="20"/> </Realm> <Realm name="another.open-ims.test"> <Route FQDN="hss3.open-ims.test" metric="10"/> <Route FQDN="hss2.open-ims.test" metric="20"/> </Realm> <DefaultRoute FQDN="hss.open-ims.test" metric="10"/> <DefaultRoute FQDN="hss4.open-ims.test" metric="20"/> --> </DiameterPeer>
1.5.2