[PATCH 02/10] Add example to communicate through the control interface

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

Daniel Willmann daniel at totalueberwachung.de
Fri May 20 17:06:19 UTC 2011


---
 openbsc/contrib/bsc_control.py |  100 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 100 insertions(+), 0 deletions(-)
 create mode 100755 openbsc/contrib/bsc_control.py

diff --git a/openbsc/contrib/bsc_control.py b/openbsc/contrib/bsc_control.py
new file mode 100755
index 0000000..36c8e45
--- /dev/null
+++ b/openbsc/contrib/bsc_control.py
@@ -0,0 +1,100 @@
+#!/usr/bin/python
+
+import sys,os
+from optparse import OptionParser
+import socket
+import struct
+
+verbose = False
+
+def prefix_ipa_ctrl_header(data):
+	return struct.pack(">HBB", len(data)+1, 0xee, 0) + data
+
+def remove_ipa_ctrl_header(data):
+	if (len(data) < 4):
+		raise BaseException("Answer too short!")
+	(plen, ipa_proto, osmo_proto) = struct.unpack(">HBB", data[:4])
+	if (plen + 3 > len(data)):
+		print "Warning: Wrong payload length (expected %i, got %i)" % (plen, len(data) - 3)
+	if (ipa_proto != 0xee or osmo_proto != 0):
+		raise BaseException("Wrong protocol in answer!")
+
+	return data[4:plen+3], data[plen+3:]
+
+def connect(host, port):
+	if verbose:
+		print "Connecting to host %s:%i" % (host, port)
+
+	sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+	sck.setblocking(1)
+	sck.connect((host, port))
+	return sck
+
+def send(sck, data):
+	if verbose:
+		print "Sending \"%s\"" %(data)
+	data = prefix_ipa_ctrl_header(data)
+	sck.send(data)
+
+def do_set(var, value, id, sck):
+	setmsg = "SET %s %s %s" %(options.id, var, value)
+	send(sck, setmsg)
+
+def do_get(var, id, sck):
+	getmsg = "GET %s %s" %(options.id, var)
+	send(sck, getmsg)
+
+parser = OptionParser("Usage: %prog [options] var [value]")
+parser.add_option("-d", "--host", dest="host",
+  help="connect to HOST", metavar="HOST")
+parser.add_option("-p", "--port", dest="port", type="int",
+  help="use PORT", metavar="PORT", default=4249)
+parser.add_option("-g", "--get", action="store_true",
+  dest="cmd_get", help="perform GET operation")
+parser.add_option("-s", "--set", action="store_true",
+  dest="cmd_set", help="perform SET operation")
+parser.add_option("-i", "--id", dest="id", default="1",
+  help="set id manually", metavar="ID")
+parser.add_option("-v", "--verbose", action="store_true",
+  dest="verbose", help="be verbose", default=False)
+parser.add_option("-m", "--monitor", action="store_true",
+  dest="monitor", help="monitor the connection for traps", default=False)
+
+(options, args) = parser.parse_args()
+
+verbose = options.verbose
+
+if options.cmd_set and options.cmd_get:
+	parser.error("Get and set options are mutually exclusive!")
+
+if not (options.cmd_get or options.cmd_set or options.monitor):
+	parser.error("One of -m, -g, or -s must be set")
+
+if not (options.host):
+	parser.error("Destination host and port required!")
+
+sock = connect(options.host, options.port)
+
+if options.cmd_set:
+	if len(args) < 2:
+		parser.error("Set requires var and value arguments")
+	do_set(args[0], ' '.join(args[1:]), options.id, sock)
+
+if options.cmd_get:
+	if len(args) != 1:
+		parser.error("Get requires the var argument")
+	do_get(args[0], options.id, sock)
+
+data = sock.recv(1024)
+while (len(data)>0):
+	(answer, data) = remove_ipa_ctrl_header(data)
+	print "Got message:", answer
+
+if options.monitor:
+	while (True):
+		data = sock.recv(1024)
+		while (len(data)>0):
+			(answer, data) = remove_ipa_ctrl_header(data)
+			print "Got message:", answer
+
+sock.close()
-- 
1.7.5.rc3





More information about the OpenBSC mailing list