Отправка сообщения Diameter несколько раз с помощью чайки - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь автоматизировать отправку сообщения Diameter с помощью чайки.Я могу отправить одно сообщение успешно, но теперь мне нужно иметь возможность отправлять несколько сообщений.

См. Ниже файлы конфигурации и сценариев, которые я использую.

Используя нижеприведенное, я могу установить количество вызовов, но независимо от того, что установлено, я вижу только первое отправленное сообщение, после этого все оставшиеся сообщения остаются пустыми.

Любая помощь в правильной настройке приветствуется

Config 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 голосов
/ 03 октября 2018

Как я писал в последнем ответе, правильный поток должен начинаться со сценария CER / CEA.Вы (как клиент) отправляете CER, должны принять CEA (с сервера).Только тогда отправляйте все остальные сообщения.

Я предполагаю, что теперь вы отправляете CER + CCR, вы получаете обратно CEA, но только теперь сервер готов к получению CCR.

Вы должны отправить CER и ждать CEA и только после этого отправлятьCCR.Вот ваш CER с ожиданием CEA:

      <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, я рекомендую пройти черезДиаметр учебник (или лучше RFC 3588), так как вы также можете столкнуться с другими проблемами, такими как WDR с сервера или неправильные переходы за переходом / сквозной заголовок

Удачи

...