Change in osmo-pcap[master]: server: Add pcap snaplen VTY cmd

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/.

Pau Espin Pedrol gerrit-no-reply at lists.osmocom.org
Tue Oct 9 08:07:55 UTC 2018


Pau Espin Pedrol has submitted this change and it was merged. ( https://gerrit.osmocom.org/11281 )

Change subject: server: Add pcap snaplen VTY cmd
......................................................................

server: Add pcap snaplen VTY cmd

Change-Id: I8fdcdc1a58926ec66a1dc5dc7a5e57ed4dceb4b4
---
M include/osmo-pcap/osmo_pcap_server.h
M src/osmo_server_main.c
M src/osmo_server_network.c
M src/osmo_server_vty.c
4 files changed, 23 insertions(+), 8 deletions(-)

Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved



diff --git a/include/osmo-pcap/osmo_pcap_server.h b/include/osmo-pcap/osmo_pcap_server.h
index cdcdb70..a983ec5 100644
--- a/include/osmo-pcap/osmo_pcap_server.h
+++ b/include/osmo-pcap/osmo_pcap_server.h
@@ -48,8 +48,6 @@
 #define STATE_INITIAL	0
 #define STATE_DATA	1
 
-#define SERVER_MAX_DATA_SIZE 10000
-
 enum {
 	PEER_CTR_CONNECT,
 	PEER_CTR_BYTES,
@@ -91,7 +89,6 @@
 	int state;
 	int pend;
 	int reopen;
-	char buf[sizeof(struct osmo_pcap_data) + sizeof(struct osmo_pcap_pkthdr) + SERVER_MAX_DATA_SIZE];
 	struct osmo_pcap_data *data;
 
 	/* statistics */
@@ -133,6 +130,7 @@
 
 	char *base_path;
 	off_t max_size;
+	int max_snaplen;
 
 	/* statistics */
 	struct rate_ctr_group *ctrg;
diff --git a/src/osmo_server_main.c b/src/osmo_server_main.c
index d95c994..3e399af 100644
--- a/src/osmo_server_main.c
+++ b/src/osmo_server_main.c
@@ -239,6 +239,7 @@
 	INIT_LLIST_HEAD(&pcap_server->conn);
 	pcap_server->base_path = talloc_strdup(pcap_server, "./");
 	pcap_server->max_size = 1073741824;
+	pcap_server->max_snaplen = DEFAULT_SNAPLEN;
 	vty_server_init(pcap_server);
 
 	if (vty_read_config_file(config_file, NULL) < 0) {
diff --git a/src/osmo_server_network.c b/src/osmo_server_network.c
index 8eb7567..55934be 100644
--- a/src/osmo_server_network.c
+++ b/src/osmo_server_network.c
@@ -194,10 +194,10 @@
 
 	hdr = (struct pcap_file_header *) &data->data[0];
 
-	if (hdr->snaplen > SERVER_MAX_DATA_SIZE) {
+	if (hdr->snaplen > conn->server->max_snaplen) {
 		LOGP(DSERVER, LOGL_ERROR,
 		     "The recvd pcap_file_header contains too big snaplen %zu > %zu\n",
-		     (size_t) hdr->snaplen, (size_t) SERVER_MAX_DATA_SIZE);
+		     (size_t) hdr->snaplen, (size_t) conn->server->max_snaplen);
 		return -1;
 	}
 
@@ -266,6 +266,7 @@
 {
 	struct rate_ctr_group_desc *desc;
 	struct osmo_pcap_conn *conn;
+	size_t buf_size;
 
 	llist_for_each_entry(conn, &server->conn, entry) {
 		if (strcmp(conn->name, name) == 0)
@@ -279,6 +280,10 @@
 		return NULL;
 	}
 
+	buf_size = sizeof(struct osmo_pcap_data);
+	buf_size += OSMO_MAX(sizeof(struct pcap_file_header),
+			     sizeof(struct osmo_pcap_pkthdr) + server->max_snaplen);
+	conn->data = talloc_zero_size(conn, buf_size);
 	/* a bit nasty. we do not work with ids but names */
 	desc = talloc_zero(conn, struct rate_ctr_group_desc);
 	if (!desc) {
@@ -318,7 +323,6 @@
 	conn->rem_wq.bfd.fd = -1;
 	conn->local_fd = -1;
 	conn->server = server;
-	conn->data = (struct osmo_pcap_data *) &conn->buf[0];
 	llist_add_tail(&conn->entry, &server->conn);
 	return conn;
 }
@@ -352,7 +356,7 @@
 		break;
 	case PKT_LINK_DATA:
 		min_len = sizeof(struct osmo_pcap_pkthdr);
-		max_len = SERVER_MAX_DATA_SIZE + sizeof(struct osmo_pcap_pkthdr);
+		max_len = conn->server->max_snaplen + sizeof(struct osmo_pcap_pkthdr);
 		if (conn->data->len < min_len || conn->data->len > max_len) {
 			LOGP(DSERVER, LOGL_ERROR,
 			     "Implausible data length: %u < %u <= %u\n",
@@ -372,7 +376,7 @@
 {
 	int rc;
 
-	rc = do_read(conn, &conn->buf[sizeof(*conn->data) - conn->pend], conn->pend);
+	rc = do_read(conn, ((uint8_t*)conn->data) + sizeof(*conn->data) - conn->pend, conn->pend);
 	if (rc <= 0) {
 		LOGP(DSERVER, LOGL_ERROR,
 		     "Too short packet. Got %d, wanted %d\n", rc, conn->data->len);
diff --git a/src/osmo_server_vty.c b/src/osmo_server_vty.c
index d10ff51..e9b54b1 100644
--- a/src/osmo_server_vty.c
+++ b/src/osmo_server_vty.c
@@ -94,6 +94,8 @@
 		vty_out(vty, " server port %d%s", pcap_server->port, VTY_NEWLINE);
 	vty_out(vty, " max-file-size %llu%s",
 		(unsigned long long) pcap_server->max_size, VTY_NEWLINE);
+	if (pcap_server->max_snaplen != DEFAULT_SNAPLEN)
+		vty_out(vty, " server max-snaplen %d%s", pcap_server->max_snaplen, VTY_NEWLINE);
 	if (pcap_server->zmq_port > 0)
 		vty_out(vty, " zeromq-publisher %s %d%s",
 			pcap_server->zmq_ip, pcap_server->zmq_port, VTY_NEWLINE);
@@ -158,6 +160,15 @@
 	return CMD_SUCCESS;
 }
 
+DEFUN(cfg_server_max_snaplen,
+      cfg_server_max_snaplen_cmd,
+      "max-snaplen <1-262144>", /* MAXIMUM_SNAPLEN */
+      "Maximum pcap snapshot length\n" "Bytes\n")
+{
+	pcap_server->max_snaplen = atoi(argv[0]);
+	return CMD_SUCCESS;
+}
+
 static int manage_client(struct osmo_pcap_server *pcap_server,
 			struct vty *vty,
 			const char *name, const char *remote_host,
@@ -511,6 +522,7 @@
 	install_element(SERVER_NODE, &cfg_server_ip_cmd);
 	install_element(SERVER_NODE, &cfg_server_port_cmd);
 	install_element(SERVER_NODE, &cfg_server_max_size_cmd);
+	install_element(SERVER_NODE, &cfg_server_max_snaplen_cmd);
 	install_element(SERVER_NODE, &cfg_server_zmq_ip_port_cmd);
 	install_element(SERVER_NODE, &cfg_no_server_zmq_ip_port_cmd);
 

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

Gerrit-Project: osmo-pcap
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I8fdcdc1a58926ec66a1dc5dc7a5e57ed4dceb4b4
Gerrit-Change-Number: 11281
Gerrit-PatchSet: 1
Gerrit-Owner: Pau Espin Pedrol <pespin at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder (1000002)
Gerrit-Reviewer: Pau Espin Pedrol <pespin at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20181009/5e3a2303/attachment.htm>


More information about the gerrit-log mailing list