[VTY] Add feature to send silent SMS from console

"Silent SMS" is a SMS that is delivered (and confirmed) but
not shown on the display of the phone.  You can now send
such SMS by using
	sms send silent extension 12345 text
or
	sms send silent imsi 123451234512345 text
diff --git a/openbsc/src/vty_interface_layer3.c b/openbsc/src/vty_interface_layer3.c
index 87c1c85..6fe209e 100644
--- a/openbsc/src/vty_interface_layer3.c
+++ b/openbsc/src/vty_interface_layer3.c
@@ -194,12 +194,12 @@
 }
 
 static int _send_sms_buffer(struct gsm_subscriber *receiver,
-			     struct buffer *b)
+			     struct buffer *b, u_int8_t tp_pid)
 {
 	struct gsm_sms *sms;
 
 	sms = sms_from_text(receiver, buffer_getstr(b));
-
+	sms->protocol_id = tp_pid;
 	gsm411_send_sms_subscr(receiver, sms);
 
 	return CMD_SUCCESS;
@@ -219,7 +219,27 @@
 		return CMD_WARNING;
 
 	b = argv_to_buffer(argc, argv, 1);
-	rc = _send_sms_buffer(receiver, b);
+	rc = _send_sms_buffer(receiver, b, 0);
+	buffer_free(b);
+
+	return rc;
+}
+
+DEFUN(sms_send_silent_ext,
+      sms_send_silent_ext_cmd,
+      "sms send silent extension EXTEN .LINE",
+      "Send a silent message to a subscriber identified by EXTEN")
+{
+	struct gsm_subscriber *receiver;
+	struct buffer *b;
+	int rc;
+
+	receiver = subscr_get_by_extension(gsmnet, argv[0]);
+	if (!receiver)
+		return CMD_WARNING;
+
+	b = argv_to_buffer(argc, argv, 1);
+	rc = _send_sms_buffer(receiver, b, 64);
 	buffer_free(b);
 	subscr_put(receiver);
 
@@ -240,7 +260,27 @@
 		return CMD_WARNING;
 
 	b = argv_to_buffer(argc, argv, 1);
-	rc = _send_sms_buffer(receiver, b);
+	rc = _send_sms_buffer(receiver, b, 0);
+	buffer_free(b);
+
+	return rc;
+}
+
+DEFUN(sms_send_silent_imsi,
+      sms_send_silent_imsi_cmd,
+      "sms send silent imsi IMSI .LINE",
+      "Send a silent message to a subscriber identified by IMSI")
+{
+	struct gsm_subscriber *receiver;
+	struct buffer *b;
+	int rc;
+
+	receiver = subscr_get_by_imsi(gsmnet, argv[0]);
+	if (!receiver)
+		return CMD_WARNING;
+
+	b = argv_to_buffer(argc, argv, 1);
+	rc = _send_sms_buffer(receiver, b, 64);
 	buffer_free(b);
 	subscr_put(receiver);
 
@@ -307,6 +347,8 @@
 	install_element(VIEW_NODE, &sms_send_pend_cmd);
 	install_element(VIEW_NODE, &sms_send_ext_cmd);
 	install_element(VIEW_NODE, &sms_send_imsi_cmd);
+	install_element(VIEW_NODE, &sms_send_silent_ext_cmd);
+	install_element(VIEW_NODE, &sms_send_silent_imsi_cmd);
 
 	install_element(CONFIG_NODE, &cfg_subscr_cmd);
 	install_node(&subscr_node, dummy_config_write);