mgcp/rtp: Add flag to disable RTP output

This patch make it possible to have a valid endpoint that drops all
outgoing RTP packets. The number of dropped packets is shown by the
VTY 'show mgcp' command. By default, this feature is disabled. To
enable packet dropping, the corresponding output_enabled field must
be set to 0.

Ticket: OW#1044
Sponsored-by: On-Waves ehf
diff --git a/openbsc/src/libmgcp/mgcp_network.c b/openbsc/src/libmgcp/mgcp_network.c
index 1c7c3da..21d52b5 100644
--- a/openbsc/src/libmgcp/mgcp_network.c
+++ b/openbsc/src/libmgcp/mgcp_network.c
@@ -559,7 +559,9 @@
 		tap_idx = MGCP_TAP_BTS_OUT;
 	}
 
-	if (is_rtp) {
+	if (!rtp_end->output_enabled)
+		rtp_end->dropped_packets += 1;
+	else if (is_rtp) {
 		mgcp_patch_and_count(endp, rtp_state, rtp_end, addr, buf, rc);
 		forward_data(rtp_end->rtp.fd, &endp->taps[tap_idx], buf, rc);
 		return mgcp_udp_send(rtp_end->rtp.fd,
diff --git a/openbsc/src/libmgcp/mgcp_protocol.c b/openbsc/src/libmgcp/mgcp_protocol.c
index ddec44d..95f3910 100644
--- a/openbsc/src/libmgcp/mgcp_protocol.c
+++ b/openbsc/src/libmgcp/mgcp_protocol.c
@@ -1178,6 +1178,7 @@
 
 	end->packets = 0;
 	end->octets = 0;
+	end->dropped_packets = 0;
 	memset(&end->addr, 0, sizeof(end->addr));
 	end->rtp_port = end->rtcp_port = 0;
 	end->payload_type = -1;
@@ -1191,6 +1192,7 @@
 	end->frames_per_packet  = 0; /* unknown */
 	end->packet_duration_ms = DEFAULT_RTP_AUDIO_PACKET_DURATION_MS;
 	end->rate               = DEFAULT_RTP_AUDIO_DEFAULT_RATE;
+	end->output_enabled	= 1;
 }
 
 static void mgcp_rtp_end_init(struct mgcp_rtp_end *end)
diff --git a/openbsc/src/libmgcp/mgcp_vty.c b/openbsc/src/libmgcp/mgcp_vty.c
index 8411b4a..3f1ebeb 100644
--- a/openbsc/src/libmgcp/mgcp_vty.c
+++ b/openbsc/src/libmgcp/mgcp_vty.c
@@ -150,7 +150,7 @@
 			endp->trans_net.packets, endp->trans_bts.packets,
 			VTY_NEWLINE);
 
-		if (verbose)
+		if (verbose) {
 			vty_out(vty,
 				"  Timestamp Errs: BTS %d->%d, Net %d->%d%s",
 				endp->bts_state.in_stream.err_ts_counter,
@@ -158,6 +158,12 @@
 				endp->net_state.in_stream.err_ts_counter,
 				endp->net_state.out_stream.err_ts_counter,
 				VTY_NEWLINE);
+			vty_out(vty,
+				"  Dropped Packets: Net->BTS %d, BTS->Net %d%s",
+				endp->bts_end.dropped_packets,
+				endp->net_end.dropped_packets,
+				VTY_NEWLINE);
+		}
 	}
 }