Change in osmo-mgw[master]: mgcp_client: drop a bunch of dead code

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/gerrit-log@lists.osmocom.org/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Wed Dec 19 22:22:34 UTC 2018


Neels Hofmeyr has submitted this change and it was merged. ( https://gerrit.osmocom.org/12354 )

Change subject: mgcp_client: drop a bunch of dead code
......................................................................

mgcp_client: drop a bunch of dead code

Remove public API that makes no sense anymore and is dead code.

I see the dropped API as a dead-end initial misconception of the early mgcp
client, and it doesn't really make sense to drag this stuff along. It has not
been used by osmo-msc,-bsc for a long time now, and just confuses the reader.

It is public API, yes, and older versions of osmo-msc / osmo-bsc will not be
able to compile against this, but even if it did, the resulting MGCP client
would not work with the current osmo-mgw: this API is still based on the
premise that the MGCP client dictates the MGW endpoint numbers, a concept that
cannot be used with the current osmo-mgw. Instead, osmo-mgw expects a
wildcarded endpoint upon CRCX and assigns its own endpoint names.

Also, the bts-base configuration is unused and a legacy of when osmo-bsc_mgcp
had explicit BTS and CN sides.

Change-Id: I98a9f1f17a1c4ab20cea3b08c7d21663592134d6
---
M TODO-RELEASE
M include/osmocom/mgcp_client/mgcp_client.h
M src/libosmo-mgcp-client/mgcp_client.c
M src/libosmo-mgcp-client/mgcp_client_vty.c
M tests/mgcp_client/mgcp_client_test.c
M tests/mgcp_client/mgcp_client_test.err
M tests/mgcp_client/mgcp_client_test.ok
7 files changed, 12 insertions(+), 415 deletions(-)

Approvals:
  Neels Hofmeyr: Looks good to me, approved
  Max: Looks good to me, but someone else must approve
  Pau Espin Pedrol: Looks good to me, but someone else must approve
  Jenkins Builder: Verified



diff --git a/TODO-RELEASE b/TODO-RELEASE
index c5a3b36..3969146 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -24,3 +24,4 @@
 # If any interfaces have been removed or changed since the last public release, a=0.
 #
 #library		what		description / commit summary line
+libosmo-mgcp-client	various         Drop legacy API functions and mgcp_client_conf members
diff --git a/include/osmocom/mgcp_client/mgcp_client.h b/include/osmocom/mgcp_client/mgcp_client.h
index 79f2078..c1fd1b0 100644
--- a/include/osmocom/mgcp_client/mgcp_client.h
+++ b/include/osmocom/mgcp_client/mgcp_client.h
@@ -22,9 +22,6 @@
 	int local_port;
 	const char *remote_addr;
 	int remote_port;
-	uint16_t first_endpoint;
-	uint16_t last_endpoint;
-	uint16_t bts_base;
 };
 
 typedef unsigned int mgcp_trans_id_t;
@@ -123,9 +120,6 @@
 uint16_t mgcp_client_remote_port(struct mgcp_client *mgcp);
 uint32_t mgcp_client_remote_addr_n(struct mgcp_client *mgcp);
 
-int mgcp_client_next_endpoint(struct mgcp_client *client);
-void mgcp_client_release_endpoint(uint16_t id, struct mgcp_client *client);
-
 /* Invoked when an MGCP response is received or sending failed.  When the
  * response is passed as NULL, this indicates failure during transmission. */
 typedef void (* mgcp_response_cb_t )(struct mgcp_response *response, void *priv);
@@ -137,20 +131,6 @@
 
 enum mgcp_connection_mode;
 
-struct msgb *mgcp_msg_crcx(struct mgcp_client *mgcp,
-			   uint16_t rtp_endpoint, unsigned int call_id,
-			   enum mgcp_connection_mode mode)
-OSMO_DEPRECATED("Use mgcp_msg_gen() instead");
-
-struct msgb *mgcp_msg_mdcx(struct mgcp_client *mgcp,
-			   uint16_t rtp_endpoint, const char *rtp_conn_addr,
-			   uint16_t rtp_port, enum mgcp_connection_mode mode)
-OSMO_DEPRECATED("Use mgcp_msg_gen() instead");
-
-struct msgb *mgcp_msg_dlcx(struct mgcp_client *mgcp, uint16_t rtp_endpoint,
-			   unsigned int call_id)
-OSMO_DEPRECATED("Use mgcp_msg_gen() instead");
-
 struct msgb *mgcp_msg_gen(struct mgcp_client *mgcp, struct mgcp_msg *mgcp_msg);
 mgcp_trans_id_t mgcp_msg_trans_id(struct msgb *msg);
 
diff --git a/src/libosmo-mgcp-client/mgcp_client.c b/src/libosmo-mgcp-client/mgcp_client.c
index fc9c5d3..2ceab3c 100644
--- a/src/libosmo-mgcp-client/mgcp_client.c
+++ b/src/libosmo-mgcp-client/mgcp_client.c
@@ -190,75 +190,9 @@
 		.local_port = -1,
 		.remote_addr = NULL,
 		.remote_port = -1,
-		.first_endpoint = 0,
-		.last_endpoint = 0,
-		.bts_base = 0,
 	};
 }
 
-/* Test if a given endpoint id is currently in use */
-static bool endpoint_in_use(uint16_t id, struct mgcp_client *client)
-{
-	struct mgcp_inuse_endpoint *endpoint;
-	llist_for_each_entry(endpoint, &client->inuse_endpoints, entry) {
-		if (endpoint->id == id)
-			return true;
-	}
-
-	return false;
-}
-
-/*! Pick next free endpoint ID.
- *  \param[in,out] client MGCP client descriptor.
- *  \returns 0 on success, -EINVAL on error. */
-int mgcp_client_next_endpoint(struct mgcp_client *client)
-{
-	int i;
-	uint16_t first_endpoint = client->actual.first_endpoint;
-	uint16_t last_endpoint = client->actual.last_endpoint;
-	struct mgcp_inuse_endpoint *endpoint;
-
-	/* Use the maximum permitted range if the VTY
-	 * configuration does not specify a range */
-	if (client->actual.last_endpoint == 0) {
-		first_endpoint = 1;
-		last_endpoint = 65534;
-	}
-
-	/* Test the permitted endpoint range for an endpoint
-	 * number that is not in use. When a suitable endpoint
-	 * number can be found, seize it by adding it to the
-	 * inuse list. */
-	for (i=first_endpoint;i<last_endpoint;i++)
-	{
-		if (endpoint_in_use(i,client) == false) {
-			endpoint = talloc_zero(client, struct mgcp_inuse_endpoint);
-			endpoint->id = i;
-			llist_add_tail(&endpoint->entry, &client->inuse_endpoints);
-			return endpoint->id;
-		}
-	}
-
-	/* All endpoints are busy! */
-	return -EINVAL;
-}
-
-/*! Release a seized endpoint ID to make it available again for other calls.
- *  \param[in] id Endpoint ID
- *  \param[in,out] client MGCP client descriptor. */
-/* Release a seized endpoint id to make it available again for other calls */
-void mgcp_client_release_endpoint(uint16_t id, struct mgcp_client *client)
-{
-	struct mgcp_inuse_endpoint *endpoint;
-	struct mgcp_inuse_endpoint *endpoint_tmp;
-	llist_for_each_entry_safe(endpoint, endpoint_tmp, &client->inuse_endpoints, entry) {
-		if (endpoint->id == id) {
-			llist_del(&endpoint->entry);
-			talloc_free(endpoint);
-		}
-	}
-}
-
 static void mgcp_client_handle_response(struct mgcp_client *mgcp,
 					struct mgcp_response_pending *pending,
 					struct mgcp_response *response)
@@ -769,10 +703,6 @@
 	mgcp->actual.remote_port = conf->remote_port >= 0 ? (uint16_t)conf->remote_port :
 		MGCP_CLIENT_REMOTE_PORT_DEFAULT;
 
-	mgcp->actual.first_endpoint = conf->first_endpoint > 0 ? (uint16_t)conf->first_endpoint : 0;
-	mgcp->actual.last_endpoint = conf->last_endpoint > 0 ? (uint16_t)conf->last_endpoint : 0;
-	mgcp->actual.bts_base = conf->bts_base > 0 ? (uint16_t)conf->bts_base : 4000;
-
 	return mgcp;
 }
 
@@ -977,54 +907,6 @@
 	 */
 }
 
-static struct msgb *mgcp_msg_from_buf(mgcp_trans_id_t trans_id,
-				      const char *buf, int len)
-{
-	struct msgb *msg;
-
-	if (len > (4096 - 128)) {
-		LOGP(DLMGCP, LOGL_ERROR, "Cannot send to MGCP GW:"
-		     " message too large: %d\n", len);
-		return NULL;
-	}
-
-	msg = msgb_alloc_headroom(4096, 128, "MGCP tx");
-	OSMO_ASSERT(msg);
-
-	char *dst = (char*)msgb_put(msg, len);
-	memcpy(dst, buf, len);
-	msg->l2h = msg->data;
-	msg->cb[MSGB_CB_MGCP_TRANS_ID] = trans_id;
-
-	return msg;
-}
-
-static struct msgb *mgcp_msg_from_str(mgcp_trans_id_t trans_id,
-				      const char *fmt, ...)
-{
-	static char compose[4096 - 128];
-	va_list ap;
-	int len;
-	OSMO_ASSERT(fmt);
-
-	va_start(ap, fmt);
-	len = vsnprintf(compose, sizeof(compose), fmt, ap);
-	va_end(ap);
-	if (len >= sizeof(compose)) {
-		LOGP(DLMGCP, LOGL_ERROR,
-		     "Message too large: trans_id=%u len=%d\n",
-		     trans_id, len);
-		return NULL;
-	}
-	if (len < 1) {
-		LOGP(DLMGCP, LOGL_ERROR,
-		     "Failed to compose message: trans_id=%u len=%d\n",
-		     trans_id, len);
-		return NULL;
-	}
-	return mgcp_msg_from_buf(trans_id, compose, len);
-}
-
 static mgcp_trans_id_t mgcp_client_next_trans_id(struct mgcp_client *mgcp)
 {
 	/* avoid zero trans_id to distinguish from unset trans_id */
@@ -1033,52 +915,6 @@
 	return mgcp->next_trans_id ++;
 }
 
-struct msgb *mgcp_msg_crcx(struct mgcp_client *mgcp,
-			   uint16_t rtp_endpoint, unsigned int call_id,
-			   enum mgcp_connection_mode mode)
-{
-	mgcp_trans_id_t trans_id = mgcp_client_next_trans_id(mgcp);
-	return mgcp_msg_from_str(trans_id,
-		 "CRCX %u %x at mgw MGCP 1.0\r\n"
-		 "C: %x\r\n"
-		 "L: p:20, a:AMR, nt:IN\r\n"
-		 "M: %s\r\n"
-		 ,
-		 trans_id,
-		 rtp_endpoint,
-		 call_id,
-		 mgcp_client_cmode_name(mode));
-}
-
-struct msgb *mgcp_msg_mdcx(struct mgcp_client *mgcp,
-			   uint16_t rtp_endpoint, const char *rtp_conn_addr,
-			   uint16_t rtp_port, enum mgcp_connection_mode mode)
-
-{
-	mgcp_trans_id_t trans_id = mgcp_client_next_trans_id(mgcp);
-	return mgcp_msg_from_str(trans_id,
-		 "MDCX %u %x at mgw MGCP 1.0\r\n"
-		 "M: %s\r\n"
-		 "\r\n"
-		 "c=IN IP4 %s\r\n"
-		 "m=audio %u RTP/AVP 255\r\n"
-		 ,
-		 trans_id,
-		 rtp_endpoint,
-		 mgcp_client_cmode_name(mode),
-		 rtp_conn_addr,
-		 rtp_port);
-}
-
-struct msgb *mgcp_msg_dlcx(struct mgcp_client *mgcp, uint16_t rtp_endpoint,
-			   unsigned int call_id)
-{
-	mgcp_trans_id_t trans_id = mgcp_client_next_trans_id(mgcp);
-	return mgcp_msg_from_str(trans_id,
-				 "DLCX %u %x at mgw MGCP 1.0\r\n"
-				 "C: %x\r\n", trans_id, rtp_endpoint, call_id);
-}
-
 #define MGCP_CRCX_MANDATORY (MGCP_MSG_PRESENCE_ENDPOINT | \
 			     MGCP_MSG_PRESENCE_CALL_ID | \
 			     MGCP_MSG_PRESENCE_CONN_MODE)
diff --git a/src/libosmo-mgcp-client/mgcp_client_vty.c b/src/libosmo-mgcp-client/mgcp_client_vty.c
index ecc205f..8fa0272 100644
--- a/src/libosmo-mgcp-client/mgcp_client_vty.c
+++ b/src/libosmo-mgcp-client/mgcp_client_vty.c
@@ -101,23 +101,14 @@
 		 MGW_STR "remote bind to connect to MGCP gateway with\n"
 		 "remote bind port\n")
 
-DEFUN(cfg_mgw_endpoint_range, cfg_mgw_endpoint_range_cmd,
+DEFUN_DEPRECATED(cfg_mgw_endpoint_range, cfg_mgw_endpoint_range_cmd,
       "mgw endpoint-range <1-65534> <1-65534>",
-      MGW_STR "usable range of endpoint identifiers\n"
-      "set first usable endpoint identifier\n"
-      "set last usable endpoint identifier\n")
+      MGW_STR "DEPRECATED: the endpoint range cannot be defined by the client\n"
+      "-\n" "-\n")
 {
-	uint16_t first_endpoint = atoi(argv[0]);
-	uint16_t last_endpoint = atoi(argv[1]);
-
-	if (last_endpoint < first_endpoint) {
-		vty_out(vty, "last endpoint must be greater than first endpoint!%s",
-			VTY_NEWLINE);
-		return CMD_SUCCESS;
-	}
-
-	global_mgcp_client_conf->first_endpoint = first_endpoint;
-	global_mgcp_client_conf->last_endpoint = last_endpoint;
+	vty_out(vty, "Please do not use legacy config 'mgw endpoint-range'"
+		" (the range can no longer be defined by the MGCP client)%s",
+		VTY_NEWLINE);
 	return CMD_SUCCESS;
 }
 ALIAS_DEPRECATED(cfg_mgw_endpoint_range, cfg_mgcpgw_endpoint_range_cmd,
@@ -128,14 +119,15 @@
 
 #define BTS_START_STR "First UDP port allocated for the BTS side\n"
 #define UDP_PORT_STR "UDP Port number\n"
-DEFUN(cfg_mgw_rtp_bts_base_port,
+DEFUN_DEPRECATED(cfg_mgw_rtp_bts_base_port,
       cfg_mgw_rtp_bts_base_port_cmd,
       "mgw bts-base <0-65534>",
       MGW_STR
-      BTS_START_STR
-      UDP_PORT_STR)
+      "DEPRECATED: there is no explicit BTS side in current osmo-mgw\n" "-\n")
 {
-	global_mgcp_client_conf->bts_base = atoi(argv[0]);
+	vty_out(vty, "Please do not use legacy config 'mgw bts-base'"
+		" (there is no explicit BTS side in an MGW anymore)%s",
+		VTY_NEWLINE);
 	return CMD_SUCCESS;
 }
 ALIAS_DEPRECATED(cfg_mgw_rtp_bts_base_port,
@@ -149,9 +141,6 @@
 {
 	const char *addr;
 	int port;
-	uint16_t first_endpoint;
-	uint16_t last_endpoint;
-	uint16_t bts_base;
 
 	addr = global_mgcp_client_conf->local_addr;
 	if (addr)
@@ -171,19 +160,6 @@
 		vty_out(vty, "%smgw remote-port %u%s", indent,
 			(uint16_t)port, VTY_NEWLINE);
 
-	first_endpoint = global_mgcp_client_conf->first_endpoint;
-	last_endpoint = global_mgcp_client_conf->last_endpoint;
-	if (last_endpoint != 0) {
-		vty_out(vty, "%smgw endpoint-range %u %u%s", indent,
-			first_endpoint, last_endpoint, VTY_NEWLINE);
-	}
-
-	bts_base = global_mgcp_client_conf->bts_base;
-	if (bts_base) {
-		vty_out(vty, "%smgw bts-base %u%s", indent,
-			bts_base, VTY_NEWLINE);
-	}
-
 	return CMD_SUCCESS;
 }
 
diff --git a/tests/mgcp_client/mgcp_client_test.c b/tests/mgcp_client/mgcp_client_test.c
index e6982e4..1db70cf 100644
--- a/tests/mgcp_client/mgcp_client_test.c
+++ b/tests/mgcp_client/mgcp_client_test.c
@@ -135,87 +135,6 @@
 	return trans_id;
 }
 
-void test_crcx(void)
-{
-	struct msgb *msg;
-	mgcp_trans_id_t trans_id;
-
-	printf("\n===== %s =====\n", __func__);
-
-	if (mgcp)
-		talloc_free(mgcp);
-	mgcp = mgcp_client_init(ctx, &conf);
-
-	msg = mgcp_msg_crcx(mgcp, 23, 42, MGCP_CONN_LOOPBACK);
-	trans_id = dummy_mgcp_send(msg);
-
-	reply_to(trans_id, 200, "OK",
-		"I: 1\r\n\r\n"
-		"v=0\r\n"
-		"o=- 1 23 IN IP4 10.9.1.120\r\n"
-		"s=-\r\n"
-		"c=IN IP4 10.9.1.120\r\n"
-		"t=0 0\r\n"
-		"m=audio 16002 RTP/AVP 110 96\r\n"
-		"a=rtpmap:110 AMR/8000\r\n"
-		"a=rtpmap:96 GSM-EFR/8000\r\n"
-		"a=ptime:20\r\n");
-}
-
-void test_crcx_long_conn_id(void)
-{
-	struct msgb *msg;
-	mgcp_trans_id_t trans_id;
-
-	printf("\n===== %s =====\n", __func__);
-
-	if (mgcp)
-		talloc_free(mgcp);
-	mgcp = mgcp_client_init(ctx, &conf);
-
-	msg = mgcp_msg_crcx(mgcp, 23, 42, MGCP_CONN_LOOPBACK);
-	trans_id = dummy_mgcp_send(msg);
-
-	reply_to(trans_id, 200, "OK",
-		"I: 123456789abcdef0123456789ABCDEF0\r\n\r\n"
-		"v=0\r\n"
-		"o=- 1 23 IN IP4 10.9.1.120\r\n"
-		"s=-\r\n"
-		"c=IN IP4 10.9.1.120\r\n"
-		"t=0 0\r\n"
-		"m=audio 16002 RTP/AVP 110 96\r\n"
-		"a=rtpmap:110 AMR/8000\r\n"
-		"a=rtpmap:96 GSM-EFR/8000\r\n"
-		"a=ptime:20\r\n");
-}
-
-void test_crcx_too_long_conn_id(void)
-{
-	struct msgb *msg;
-	mgcp_trans_id_t trans_id;
-
-	printf("\n===== %s =====\n", __func__);
-
-	if (mgcp)
-		talloc_free(mgcp);
-	mgcp = mgcp_client_init(ctx, &conf);
-
-	msg = mgcp_msg_crcx(mgcp, 23, 42, MGCP_CONN_LOOPBACK);
-	trans_id = dummy_mgcp_send(msg);
-
-	reply_to(trans_id, 200, "OK",
-		"I: 123456789abcdef0123456789ABCDEF01001029\r\n\r\n"
-		"v=0\r\n"
-		"o=- 1 23 IN IP4 10.9.1.120\r\n"
-		"s=-\r\n"
-		"c=IN IP4 10.9.1.120\r\n"
-		"t=0 0\r\n"
-		"m=audio 16002 RTP/AVP 110 96\r\n"
-		"a=rtpmap:110 AMR/8000\r\n"
-		"a=rtpmap:96 GSM-EFR/8000\r\n"
-		"a=ptime:20\r\n");
-}
-
 void test_mgcp_msg(void)
 {
 	struct msgb *msg;
@@ -618,14 +537,11 @@
 
 	mgcp_client_conf_init(&conf);
 
-	test_crcx();
 	test_mgcp_msg();
 	test_mgcp_client_cancel();
 	test_sdp_section_start();
 	test_map_codec_to_pt_and_map_pt_to_codec();
 	test_map_pt_to_codec();
-	test_crcx_long_conn_id();
-	test_crcx_too_long_conn_id();
 
 	printf("Done\n");
 	fprintf(stderr, "Done\n");
diff --git a/tests/mgcp_client/mgcp_client_test.err b/tests/mgcp_client/mgcp_client_test.err
index b20f93f..1d5a1a0 100644
--- a/tests/mgcp_client/mgcp_client_test.err
+++ b/tests/mgcp_client/mgcp_client_test.err
@@ -66,6 +66,4 @@
 DLMGCP ptmap contains illegal mapping: codec=0 maps to pt=100
 DLMGCP ptmap contains illegal mapping: codec=113 maps to pt=2
 DLMGCP ptmap contains illegal mapping: codec=0 maps to pt=100
-DLMGCP Failed to parse MGCP response (parameter label: I): the received conn ID is too long: 39, maximum is 32 characters
-DLMGCP Cannot parse MGCP response (head parameters)
 Done
diff --git a/tests/mgcp_client/mgcp_client_test.ok b/tests/mgcp_client/mgcp_client_test.ok
index 40e32ba..65b5298 100644
--- a/tests/mgcp_client/mgcp_client_test.ok
+++ b/tests/mgcp_client/mgcp_client_test.ok
@@ -1,46 +1,4 @@
 
-===== test_crcx =====
-composed:
------
-CRCX 1 17 at mgw MGCP 1.0
-C: 2a
-L: p:20, a:AMR, nt:IN
-M: loopback
-
------
-composed response:
------
-200 1 OK
-I: 1
-
-v=0
-o=- 1 23 IN IP4 10.9.1.120
-s=-
-c=IN IP4 10.9.1.120
-t=0 0
-m=audio 16002 RTP/AVP 110 96
-a=rtpmap:110 AMR/8000
-a=rtpmap:96 GSM-EFR/8000
-a=ptime:20
-
------
-response cb received:
-  head.response_code = 200
-  head.trans_id = 1
-  head.conn_id = 1
-  head.comment = OK
-  audio_port = 16002
-  audio_ip = 10.9.1.120
-  ptime = 20
-  codecs_len = 2
-  codecs[0] = 112
-  codecs[1] = 110
-  ptmap_len = 2
-  ptmap[0].codec = 112
-  ptmap[0].pt = 110
-  ptmap[1].codec = 110
-  ptmap[1].pt = 96
-
 Generated CRCX message:
 CRCX 1 23 at mgw MGCP 1.0
 C: 2f
@@ -196,72 +154,4 @@
  2 <= 2
  100 <= 100
 
-
-===== test_crcx_long_conn_id =====
-composed:
------
-CRCX 1 17 at mgw MGCP 1.0
-C: 2a
-L: p:20, a:AMR, nt:IN
-M: loopback
-
------
-composed response:
------
-200 1 OK
-I: 123456789abcdef0123456789ABCDEF0
-
-v=0
-o=- 1 23 IN IP4 10.9.1.120
-s=-
-c=IN IP4 10.9.1.120
-t=0 0
-m=audio 16002 RTP/AVP 110 96
-a=rtpmap:110 AMR/8000
-a=rtpmap:96 GSM-EFR/8000
-a=ptime:20
-
------
-response cb received:
-  head.response_code = 200
-  head.trans_id = 1
-  head.conn_id = 123456789abcdef0123456789ABCDEF0
-  head.comment = OK
-  audio_port = 16002
-  audio_ip = 10.9.1.120
-  ptime = 20
-  codecs_len = 2
-  codecs[0] = 112
-  codecs[1] = 110
-  ptmap_len = 2
-  ptmap[0].codec = 112
-  ptmap[0].pt = 110
-  ptmap[1].codec = 110
-  ptmap[1].pt = 96
-
-===== test_crcx_too_long_conn_id =====
-composed:
------
-CRCX 1 17 at mgw MGCP 1.0
-C: 2a
-L: p:20, a:AMR, nt:IN
-M: loopback
-
------
-composed response:
------
-200 1 OK
-I: 123456789abcdef0123456789ABCDEF01001029
-
-v=0
-o=- 1 23 IN IP4 10.9.1.120
-s=-
-c=IN IP4 10.9.1.120
-t=0 0
-m=audio 16002 RTP/AVP 110 96
-a=rtpmap:110 AMR/8000
-a=rtpmap:96 GSM-EFR/8000
-a=ptime:20
-
------
 Done

-- 
To view, visit https://gerrit.osmocom.org/12354
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-mgw
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I98a9f1f17a1c4ab20cea3b08c7d21663592134d6
Gerrit-Change-Number: 12354
Gerrit-PatchSet: 3
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder (1000002)
Gerrit-Reviewer: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Pau Espin Pedrol <pespin at sysmocom.de>
Gerrit-Reviewer: dexter <pmaier at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20181219/358bea5f/attachment.htm>


More information about the gerrit-log mailing list