<p>Pau Espin Pedrol <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/11278">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Jenkins Builder: Verified
Harald Welte: Looks good to me, approved
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">client: Add pcap snaplen VTY cmd<br><br>Change-Id: I84fda9f27b725e031c218187ab679392dfa7ec3d<br>---<br>M include/osmo-pcap/common.h<br>M include/osmo-pcap/osmo_pcap_client.h<br>M src/osmo_client_core.c<br>M src/osmo_client_main.c<br>M src/osmo_client_network.c<br>M src/osmo_client_vty.c<br>6 files changed, 41 insertions(+), 10 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-pcap/common.h b/include/osmo-pcap/common.h</span><br><span>index 5d977f1..79080a2 100644</span><br><span>--- a/include/osmo-pcap/common.h</span><br><span>+++ b/include/osmo-pcap/common.h</span><br><span>@@ -63,4 +63,6 @@</span><br><span> #define MAXIMUM_SNAPLEN 262144</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define DEFAULT_SNAPLEN 9000</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #endif</span><br><span>diff --git a/include/osmo-pcap/osmo_pcap_client.h b/include/osmo-pcap/osmo_pcap_client.h</span><br><span>index 7888dfe..70be8db 100644</span><br><span>--- a/include/osmo-pcap/osmo_pcap_client.h</span><br><span>+++ b/include/osmo-pcap/osmo_pcap_client.h</span><br><span>@@ -94,6 +94,7 @@</span><br><span> char *filter_string;</span><br><span> int filter_itself;</span><br><span> int gprs_filtering;</span><br><span style="color: hsl(120, 100%, 40%);">+ int snaplen;</span><br><span> struct osmo_fd fd;</span><br><span> </span><br><span> struct osmo_pcap_client_conn conn;</span><br><span>@@ -105,6 +106,7 @@</span><br><span> </span><br><span> extern struct osmo_pcap_client *pcap_client;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+struct osmo_pcap_client *osmo_pcap_client_alloc(void *tall_ctx);</span><br><span> int vty_client_init(struct osmo_pcap_client *);</span><br><span> </span><br><span> int osmo_client_capture(struct osmo_pcap_client *client, const char *device);</span><br><span>diff --git a/src/osmo_client_core.c b/src/osmo_client_core.c</span><br><span>index e19ae89..6414552 100644</span><br><span>--- a/src/osmo_client_core.c</span><br><span>+++ b/src/osmo_client_core.c</span><br><span>@@ -287,7 +287,9 @@</span><br><span> return 1;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- client->handle = pcap_open_live(client->device, 9000, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DCLIENT, LOGL_INFO, "Opening device %s for capture with snaplen %zu\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ client->device, (size_t) client->snaplen);</span><br><span style="color: hsl(120, 100%, 40%);">+ client->handle = pcap_open_live(client->device, client->snaplen, 0,</span><br><span> 1000, client->errbuf);</span><br><span> if (!client->handle) {</span><br><span> LOGP(DCLIENT, LOGL_ERROR,</span><br><span>@@ -346,6 +348,16 @@</span><br><span> conn->wqueue.bfd.fd = -1;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+struct osmo_pcap_client *osmo_pcap_client_alloc(void *tall_ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct osmo_pcap_client *client;</span><br><span style="color: hsl(120, 100%, 40%);">+ client = talloc_zero(tall_ctx, struct osmo_pcap_client);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!client)</span><br><span style="color: hsl(120, 100%, 40%);">+ return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ client->fd.fd = -1;</span><br><span style="color: hsl(120, 100%, 40%);">+ client->snaplen = DEFAULT_SNAPLEN;</span><br><span style="color: hsl(120, 100%, 40%);">+ return client;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> void osmo_client_free(struct osmo_pcap_client_conn *conn)</span><br><span> {</span><br><span>diff --git a/src/osmo_client_main.c b/src/osmo_client_main.c</span><br><span>index f571b96..a28c4b7 100644</span><br><span>--- a/src/osmo_client_main.c</span><br><span>+++ b/src/osmo_client_main.c</span><br><span>@@ -212,12 +212,11 @@</span><br><span> exit(1);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- pcap_client = talloc_zero(tall_cli_ctx, struct osmo_pcap_client);</span><br><span style="color: hsl(120, 100%, 40%);">+ pcap_client = osmo_pcap_client_alloc(tall_cli_ctx);</span><br><span> if (!pcap_client) {</span><br><span> LOGP(DCLIENT, LOGL_ERROR, "Failed to allocate osmo_pcap_client.\n");</span><br><span> exit(1);</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- pcap_client->fd.fd = -1;</span><br><span> vty_client_init(pcap_client);</span><br><span> </span><br><span> /* initialize the queue */</span><br><span>diff --git a/src/osmo_client_network.c b/src/osmo_client_network.c</span><br><span>index e900ef4..7073d6c 100644</span><br><span>--- a/src/osmo_client_network.c</span><br><span>+++ b/src/osmo_client_network.c</span><br><span>@@ -169,14 +169,14 @@</span><br><span> struct msgb *msg;</span><br><span> int offset, ip_len;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (in_hdr->caplen > 9000) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (in_hdr->len > in_hdr->caplen) {</span><br><span> LOGP(DCLIENT, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">- "Capture len too big %zu\n", (size_t) in_hdr->caplen);</span><br><span style="color: hsl(120, 100%, 40%);">+ "Recording truncated packet, len %zu > snaplen %zu\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ (size_t) in_hdr->len, (size_t) in_hdr->caplen);</span><br><span> rate_ctr_inc(&conn->client->ctrg->ctr[CLIENT_CTR_2BIG]);</span><br><span style="color: hsl(0, 100%, 40%);">- return;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- msg = msgb_alloc(9000 + sizeof(*om_hdr) + sizeof(*hdr), "data-data");</span><br><span style="color: hsl(120, 100%, 40%);">+ msg = msgb_alloc(in_hdr->caplen + sizeof(*om_hdr) + sizeof(*hdr), "data-data");</span><br><span> if (!msg) {</span><br><span> LOGP(DCLIENT, LOGL_ERROR, "Failed to allocate.\n");</span><br><span> rate_ctr_inc(&conn->client->ctrg->ctr[CLIENT_CTR_NOMEM]);</span><br><span>@@ -239,7 +239,7 @@</span><br><span> return;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- msg = msgb_alloc(9000 + sizeof(*om_hdr) + sizeof(*hdr), "link-data");</span><br><span style="color: hsl(120, 100%, 40%);">+ msg = msgb_alloc(conn->client->snaplen + sizeof(*om_hdr) + sizeof(*hdr), "link-data");</span><br><span> if (!msg) {</span><br><span> LOGP(DCLIENT, LOGL_ERROR, "Failed to allocate data.\n");</span><br><span> return;</span><br><span>@@ -256,7 +256,7 @@</span><br><span> hdr->version_minor = 4;</span><br><span> hdr->thiszone = 0;</span><br><span> hdr->sigfigs = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- hdr->snaplen = MAXIMUM_SNAPLEN;</span><br><span style="color: hsl(120, 100%, 40%);">+ hdr->snaplen = conn->client->snaplen;</span><br><span> hdr->linktype = pcap_datalink(conn->client->handle);</span><br><span> </span><br><span> write_data(conn, msg);</span><br><span>diff --git a/src/osmo_client_vty.c b/src/osmo_client_vty.c</span><br><span>index e50099f..30158c5 100644</span><br><span>--- a/src/osmo_client_vty.c</span><br><span>+++ b/src/osmo_client_vty.c</span><br><span>@@ -125,7 +125,9 @@</span><br><span> if (pcap_client->device)</span><br><span> vty_out(vty, " pcap device %s%s",</span><br><span> pcap_client->device, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+ if (pcap_client->snaplen != DEFAULT_SNAPLEN)</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, " pcap snaplen %d%s",</span><br><span style="color: hsl(120, 100%, 40%);">+ pcap_client->snaplen, VTY_NEWLINE);</span><br><span> if (pcap_client->filter_string)</span><br><span> vty_out(vty, " pcap filter %s%s",</span><br><span> pcap_client->filter_string, VTY_NEWLINE);</span><br><span>@@ -148,6 +150,19 @@</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_client_snaplen,</span><br><span style="color: hsl(120, 100%, 40%);">+ cfg_client_snaplen_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "pcap snaplen <1-262144>", /* MAXIMUM_SNAPLEN */</span><br><span style="color: hsl(120, 100%, 40%);">+ PCAP_STRING "snapshot length\n" "Bytes\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ if (pcap_client->handle) {</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, "'pcap snaplen' must be set before 'pcap device' to take effect!%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ return CMD_WARNING;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ pcap_client->snaplen = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DEFUN(cfg_client_add_gprs,</span><br><span> cfg_client_add_gprs_cmd,</span><br><span> "pcap add-filter gprs",</span><br><span>@@ -512,6 +527,7 @@</span><br><span> install_node(&server_node, config_write_server);</span><br><span> </span><br><span> install_element(CLIENT_NODE, &cfg_client_device_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(CLIENT_NODE, &cfg_client_snaplen_cmd);</span><br><span> install_element(CLIENT_NODE, &cfg_client_filter_cmd);</span><br><span> install_element(CLIENT_NODE, &cfg_client_loop_cmd);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11278">change 11278</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/11278"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-pcap </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I84fda9f27b725e031c218187ab679392dfa7ec3d </div>
<div style="display:none"> Gerrit-Change-Number: 11278 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>