1

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

1 回答 1

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

祝你好运

于 2018-10-03T12:50:17.813 回答