使用海鸥多次发送Diameter消息

时间:2018-09-25 11:42:31

标签: diameter-protocol

我正在尝试使用海鸥自动发送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>

1 个答案:

答案 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或错误的逐跳/端到端标题

祝你好运