我正在尝试使用海鸥自动发送Diameter消息。我能够成功发送一条消息,但现在需要能够发送多条消息。
请参阅下面的配置文件和脚本文件。
使用以下内容,我可以设置通话数量,但是无论设置什么,我都只能看到发送的第一条消息,在此之后所有其余消息都为空白。
非常感谢您正确设置此设置的任何帮助
配置XML。
<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>
<configuration name=\"SimpleIPClientCon\">
<define entity=\"transport\"
name=\"trans-1\"
file=\"libtrans_ip.so\"
create_function=\"create_cipio_instance\"
delete_function=\"delete_cipio_instance\"
init-args=\"type=tcp\">
</define>
<define entity=\"channel\"
name=\"channel-1\"
protocol=\"diameter-v1\"
transport=\"trans-1\"
open-args=\"mode=client;dest={self.identity_listener_host}:{self.identity_listener_port}\">
</define>
<define entity=\"traffic-param\" name=\"call-rate\" value=\"1\"></define>
<define entity=\"traffic-param\" name=\"display-period\" value=\"1\"></define>
<define entity=\"traffic-param\" name=\"log-stat-period\" value=\"1\"></define>
<define entity=\"traffic-param\" name=\"log-stat-file\" value=\"/opt/seagull/diameter/logs/client-stat.csv\"></define>
<define entity=\"traffic-param\" name=\"call-timeout-ms\" value=\"30\"></define>
<define entity=\"traffic-param\" name=\"display-scenario-stat\" value=\"true\"></define>
<define entity=\"traffic-param\" name=\"display-protocol-stat\" value=\"true\"></define>
<define entity=\"traffic-param\" name=\"log-protocol-stat-period\" value=\"5\"></define>
<define entity=\"traffic-param\" name=\"log-protocol-stat-name\" value=\"all\"></define>
<define entity=\"traffic-param\" name=\"log-protocol-stat-file\" value=\"/opt/seagull/diameter/logs/client-protocol-stat.csv\"></define>
<define entity=\"traffic-param\" name=\"max-send\" value=\"1\"></define>
<define entity=\"traffic-param\" name=\"max-receive\" value=\"1\"></define>
<define entity=\"traffic-param\" name=\"max-simultaneous-calls\" value=\"1\"></define>
<define entity=\"traffic-param\" name=\"select-timeout-ms\" value=\"30\"></define>
<define entity=\"traffic-param\" name=\"number-calls\" value=\"{number_of_calls}\"></define>
</configuration>
场景XML
<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>
<scenario>
<counter>
<counterdef name=\"HbH-counter\" init=\"1000\"> </counterdef>
<counterdef name=\"EtE-counter\" init=\"2000\"> </counterdef>
<counterdef name=\"session-counter\" init=\"0\"> </counterdef>
</counter>
<init>
<send channel=\"channel-1\">
<command name=\"CER\">
<avp name=\"Session-Id\" value=\"test-seesion\"> </avp>
<avp name=\"Auth-Application-Id\" value=\"16777238\"> </avp>
<avp name=\"Origin-Host\" value=\"sp-test-host\"> </avp>
<avp name=\"Origin-Realm\" value=\"sp-test-host-realm\"> </avp>
<avp name=\"Destination-Realm\" value=\"sp-test-dest-realm\"> </avp>
<avp name=\"CC-Request-Type\" value=\"{str(self.request_type_value_dict[message])}\"> </avp>
<avp name=\"CC-Request-Number\" value=\"0\"> </avp>
<avp name=\"Destination-Host\" value=\"sp-test-dest-host\"> </avp>
<avp name=\"Origin-State-Id\" value=\"1505899589\"> </avp>
<avp name=\"Subscription-Id\">
<avp name=\"Subscription-Id-Type\" value=\"0\"> </avp>
<avp name=\"Subscription-Id-Data\" value=\"{self.subscriber_id}\"> </avp>
</avp>
<avp name=\"Subscription-Id\" value=\"\">
<avp name=\"Subscription-Id-Type\" value=\"1\"> </avp>
<avp name=\"Subscription-Id-Data\" value=\"250016371458760\"> </avp>
</avp>
<avp name=\"Framed-IP-Address\" value=\"{self.ip_address[1]}\"> </avp>
<avp name=\"Vendor-Id\" value=\"11\"> </avp>
<avp name=\"Product-Name\" value=\"HP\"> </avp>
<avp name=\"Supported-Vendor-Id\" value=\"10415\"> </avp>
<avp name=\"Vendor-Specific-Application-Id\">
<avp name=\"Vendor-Id\" value=\"10415\"></avp>
<avp name=\"Auth-Application-Id\" value=\"4\"></avp>
</avp>
<avp name=\"Firmware-Revision\" value=\"1030006\"></avp>
</command>
</send>
</init>
<!-- Traffic -->
<traffic>
<send channel=\"channel-1\">
<action>
<!-- For each new call, increment the session-ID counter -->
<inc-counter name=\"HbH-counter\"> </inc-counter>
<inc-counter name=\"EtE-counter\"> </inc-counter>
<inc-counter name=\"session-counter\"> </inc-counter>
<set-value name=\"HbH-id\"
format=\"\$(HbH-counter)\"></set-value>
<set-value name=\"EtE-id\"
format=\"\$(EtE-counter)\"></set-value>
<set-value name=\"Session-Id\"
format=\"seagull.mydomain.com;1096298391;\$(session-counter)\"></set-value>
</action>
<command name=\"CCR\">
<avp name=\"Session-Id\" value=\"value_is_replaced\"> </avp>
<avp name=\"Origin-Host\" value=\"seagull.mydomain.com\"> </avp>
<avp name=\"Origin-Realm\" value=\"ExampleRealm\"> </avp>
<avp name=\"Destination-Realm\" value=\"ExampleRealm\"> </avp>
<avp name=\"Vendor-Specific-Application-Id\">
<avp name=\"Vendor-Id\" value=\"10415\"></avp>
<avp name=\"Auth-Application-Id\" value=\"4\"></avp>
</avp>
<avp name=\"Auth-Application-Id\" value=\"4\"></avp>
<avp name=\"Service-Context-Id\" value=\"32260@3gpp.org\"> </avp>
<avp name=\"CC-Request-Type\" value=\"0x00000001\"> </avp>
<avp name=\"CC-Request-Number\" value=\"0\"> </avp>
</command>
<action>
<start-timer></start-timer>
</action>
</send>
</traffic>
</scenario>
答案 0 :(得分:1)
正如我在上一个答案中所写,正确的流程应始于CER / CEA方案。 您(作为客户端)发送CER应该(从服务器)接受CEA。然后才发送所有其他消息。
我猜现在您正在发送CER + CCR,您会收到CEA,但只有现在服务器已准备好接收CCR。
您应该发送CER并等待CEA,而不仅仅是发送CCR。这是您等待CEA的CER:
<init>
<send channel=\"channel-1\">
<command name=\"CER\">
<avp name=\"Session-Id\" value=\"test-seesion\"> </avp>
<avp name=\"Auth-Application-Id\" value=\"16777238\"> </avp>
<avp name=\"Origin-Host\" value=\"sp-test-host\"> </avp>
<avp name=\"Origin-Realm\" value=\"sp-test-host-realm\"> </avp>
<avp name=\"Destination-Realm\" value=\"sp-test-dest-realm\"> </avp>
<avp name=\"CC-Request-Type\" value=\"{str(self.request_type_value_dict[message])}\"> </avp>
<avp name=\"CC-Request-Number\" value=\"0\"> </avp>
<avp name=\"Destination-Host\" value=\"sp-test-dest-host\"> </avp>
<avp name=\"Origin-State-Id\" value=\"1505899589\"> </avp>
<avp name=\"Subscription-Id\">
<avp name=\"Subscription-Id-Type\" value=\"0\"> </avp>
<avp name=\"Subscription-Id-Data\" value=\"{self.subscriber_id}\"> </avp>
</avp>
<avp name=\"Subscription-Id\" value=\"\">
<avp name=\"Subscription-Id-Type\" value=\"1\"> </avp>
<avp name=\"Subscription-Id-Data\" value=\"250016371458760\"> </avp>
</avp>
<avp name=\"Framed-IP-Address\" value=\"{self.ip_address[1]}\"> </avp>
<avp name=\"Vendor-Id\" value=\"11\"> </avp>
<avp name=\"Product-Name\" value=\"HP\"> </avp>
<avp name=\"Supported-Vendor-Id\" value=\"10415\"> </avp>
<avp name=\"Vendor-Specific-Application-Id\">
<avp name=\"Vendor-Id\" value=\"10415\"></avp>
<avp name=\"Auth-Application-Id\" value=\"4\"></avp>
</avp>
<avp name=\"Firmware-Revision\" value=\"1030006\"></avp>
</command>
</send>
<receive channel="channel-1">
<command name="CEA">
</command>
</receive>
</init>
一个(我不太喜欢)的选择就是等待。 您可以在请求之间添加:
<wait-ms value="20000"></wait-ms>
这将导致您的脚本在发送请求之前等待
即使您似乎已经在使用Diameter协议,但我还是建议您阅读Diameter教程(或更好的RFC 3588),因为您还会遇到其他问题,例如来自服务器的WDR或错误的逐跳/端到端标题
祝你好运