MSC+BSC: add separate suites for AoIP: aoip_sms, aoip_debug

It would be nicer to select the network programs as scenarios, i.e.
independently from the specifics of tests that don't care whether a NITB or a
MSC+BSC is in place. See OS#2270.

For now have a separate script for BSC+MSC+HLR operation to be able to rapidly
get the binaries to work. We might even simply drop the NITB style, in which
case we don't need to make it configurable.

Change-Id: I06d2529822f3e483ce7fffc439edfa57844e01ef
diff --git a/suites/aoip_debug/interactive.py b/suites/aoip_debug/interactive.py
new file mode 100755
index 0000000..4f56d5c
--- /dev/null
+++ b/suites/aoip_debug/interactive.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+from osmo_gsm_tester.test import *
+hlr = suite.hlr()
+bts = suite.bts()
+mgcpgw = suite.mgcpgw(bts_ip=bts.remote_addr())
+msc = suite.msc(hlr, mgcpgw)
+bsc = suite.bsc(msc)
+modems = suite.modems(int(prompt('How many modems?')))
+
+hlr.start()
+msc.start()
+
+bsc.bts_add(bts)
+bsc.start()
+
+bts.start()
+
+for m in modems:
+  hlr.subscriber_add(m)
+  m.connect(bsc)
+
+while True:
+  cmd = prompt('Enter command: (q)uit (s)ms (g)et-registered (w)ait-registered')
+  cmd = cmd.strip().lower()
+
+  if not cmd:
+    continue
+  if 'quit'.startswith(cmd):
+    break
+  elif 'wait-registered'.startswith(cmd):
+    try:
+      wait(msc.subscriber_attached, *modems)
+    except Timeout:
+      print('Timeout while waiting for registration.')
+  elif 'get-registered'.startswith(cmd):
+    print(msc.imsi_list_attached())
+    print('RESULT: %s' %
+       ('All modems are registered.' if msc.subscriber_attached(*modems)
+        else 'Some modem(s) not registered yet.'))
+  elif 'sms'.startswith(cmd):
+    for mo in modems:
+      for mt in modems:
+        mo.sms_send(mt.msisdn, 'to ' + mt.name())