<p>Pau Espin Pedrol <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/11281">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;">server: Add pcap snaplen VTY cmd<br><br>Change-Id: I8fdcdc1a58926ec66a1dc5dc7a5e57ed4dceb4b4<br>---<br>M include/osmo-pcap/osmo_pcap_server.h<br>M src/osmo_server_main.c<br>M src/osmo_server_network.c<br>M src/osmo_server_vty.c<br>4 files changed, 23 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-pcap/osmo_pcap_server.h b/include/osmo-pcap/osmo_pcap_server.h</span><br><span>index cdcdb70..a983ec5 100644</span><br><span>--- a/include/osmo-pcap/osmo_pcap_server.h</span><br><span>+++ b/include/osmo-pcap/osmo_pcap_server.h</span><br><span>@@ -48,8 +48,6 @@</span><br><span> #define STATE_INITIAL     0</span><br><span> #define STATE_DATA 1</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define SERVER_MAX_DATA_SIZE 10000</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> enum {</span><br><span>    PEER_CTR_CONNECT,</span><br><span>    PEER_CTR_BYTES,</span><br><span>@@ -91,7 +89,6 @@</span><br><span>  int state;</span><br><span>   int pend;</span><br><span>    int reopen;</span><br><span style="color: hsl(0, 100%, 40%);">-     char buf[sizeof(struct osmo_pcap_data) + sizeof(struct osmo_pcap_pkthdr) + SERVER_MAX_DATA_SIZE];</span><br><span>    struct osmo_pcap_data *data;</span><br><span> </span><br><span>     /* statistics */</span><br><span>@@ -133,6 +130,7 @@</span><br><span> </span><br><span>   char *base_path;</span><br><span>     off_t max_size;</span><br><span style="color: hsl(120, 100%, 40%);">+       int max_snaplen;</span><br><span> </span><br><span>         /* statistics */</span><br><span>     struct rate_ctr_group *ctrg;</span><br><span>diff --git a/src/osmo_server_main.c b/src/osmo_server_main.c</span><br><span>index d95c994..3e399af 100644</span><br><span>--- a/src/osmo_server_main.c</span><br><span>+++ b/src/osmo_server_main.c</span><br><span>@@ -239,6 +239,7 @@</span><br><span>      INIT_LLIST_HEAD(&pcap_server->conn);</span><br><span>  pcap_server->base_path = talloc_strdup(pcap_server, "./");</span><br><span>      pcap_server->max_size = 1073741824;</span><br><span style="color: hsl(120, 100%, 40%);">+        pcap_server->max_snaplen = DEFAULT_SNAPLEN;</span><br><span>       vty_server_init(pcap_server);</span><br><span> </span><br><span>    if (vty_read_config_file(config_file, NULL) < 0) {</span><br><span>diff --git a/src/osmo_server_network.c b/src/osmo_server_network.c</span><br><span>index 8eb7567..55934be 100644</span><br><span>--- a/src/osmo_server_network.c</span><br><span>+++ b/src/osmo_server_network.c</span><br><span>@@ -194,10 +194,10 @@</span><br><span> </span><br><span>   hdr = (struct pcap_file_header *) &data->data[0];</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (hdr->snaplen > SERVER_MAX_DATA_SIZE) {</span><br><span style="color: hsl(120, 100%, 40%);">+      if (hdr->snaplen > conn->server->max_snaplen) {</span><br><span>          LOGP(DSERVER, LOGL_ERROR,</span><br><span>                 "The recvd pcap_file_header contains too big snaplen %zu > %zu\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                 (size_t) hdr->snaplen, (size_t) SERVER_MAX_DATA_SIZE);</span><br><span style="color: hsl(120, 100%, 40%);">+                     (size_t) hdr->snaplen, (size_t) conn->server->max_snaplen);</span><br><span>            return -1;</span><br><span>   }</span><br><span> </span><br><span>@@ -266,6 +266,7 @@</span><br><span> {</span><br><span>     struct rate_ctr_group_desc *desc;</span><br><span>    struct osmo_pcap_conn *conn;</span><br><span style="color: hsl(120, 100%, 40%);">+  size_t buf_size;</span><br><span> </span><br><span>         llist_for_each_entry(conn, &server->conn, entry) {</span><br><span>            if (strcmp(conn->name, name) == 0)</span><br><span>@@ -279,6 +280,10 @@</span><br><span>                 return NULL;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ buf_size = sizeof(struct osmo_pcap_data);</span><br><span style="color: hsl(120, 100%, 40%);">+     buf_size += OSMO_MAX(sizeof(struct pcap_file_header),</span><br><span style="color: hsl(120, 100%, 40%);">+                      sizeof(struct osmo_pcap_pkthdr) + server->max_snaplen);</span><br><span style="color: hsl(120, 100%, 40%);">+       conn->data = talloc_zero_size(conn, buf_size);</span><br><span>    /* a bit nasty. we do not work with ids but names */</span><br><span>         desc = talloc_zero(conn, struct rate_ctr_group_desc);</span><br><span>        if (!desc) {</span><br><span>@@ -318,7 +323,6 @@</span><br><span>   conn->rem_wq.bfd.fd = -1;</span><br><span>         conn->local_fd = -1;</span><br><span>      conn->server = server;</span><br><span style="color: hsl(0, 100%, 40%);">-       conn->data = (struct osmo_pcap_data *) &conn->buf[0];</span><br><span>      llist_add_tail(&conn->entry, &server->conn);</span><br><span>   return conn;</span><br><span> }</span><br><span>@@ -352,7 +356,7 @@</span><br><span>              break;</span><br><span>       case PKT_LINK_DATA:</span><br><span>          min_len = sizeof(struct osmo_pcap_pkthdr);</span><br><span style="color: hsl(0, 100%, 40%);">-              max_len = SERVER_MAX_DATA_SIZE + sizeof(struct osmo_pcap_pkthdr);</span><br><span style="color: hsl(120, 100%, 40%);">+             max_len = conn->server->max_snaplen + sizeof(struct osmo_pcap_pkthdr);</span><br><span>                 if (conn->data->len < min_len || conn->data->len > max_len) {</span><br><span>                      LOGP(DSERVER, LOGL_ERROR,</span><br><span>                         "Implausible data length: %u < %u <= %u\n",</span><br><span>@@ -372,7 +376,7 @@</span><br><span> {</span><br><span>  int rc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     rc = do_read(conn, &conn->buf[sizeof(*conn->data) - conn->pend], conn->pend);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = do_read(conn, ((uint8_t*)conn->data) + sizeof(*conn->data) - conn->pend, conn->pend);</span><br><span>       if (rc <= 0) {</span><br><span>            LOGP(DSERVER, LOGL_ERROR,</span><br><span>                 "Too short packet. Got %d, wanted %d\n", rc, conn->data->len);</span><br><span>diff --git a/src/osmo_server_vty.c b/src/osmo_server_vty.c</span><br><span>index d10ff51..e9b54b1 100644</span><br><span>--- a/src/osmo_server_vty.c</span><br><span>+++ b/src/osmo_server_vty.c</span><br><span>@@ -94,6 +94,8 @@</span><br><span>             vty_out(vty, " server port %d%s", pcap_server->port, VTY_NEWLINE);</span><br><span>      vty_out(vty, " max-file-size %llu%s",</span><br><span>              (unsigned long long) pcap_server->max_size, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (pcap_server->max_snaplen != DEFAULT_SNAPLEN)</span><br><span style="color: hsl(120, 100%, 40%);">+           vty_out(vty, " server max-snaplen %d%s", pcap_server->max_snaplen, VTY_NEWLINE);</span><br><span>        if (pcap_server->zmq_port > 0)</span><br><span>                 vty_out(vty, " zeromq-publisher %s %d%s",</span><br><span>                  pcap_server->zmq_ip, pcap_server->zmq_port, VTY_NEWLINE);</span><br><span>@@ -158,6 +160,15 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_server_max_snaplen,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_server_max_snaplen_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "max-snaplen <1-262144>", /* MAXIMUM_SNAPLEN */</span><br><span style="color: hsl(120, 100%, 40%);">+      "Maximum pcap snapshot length\n" "Bytes\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       pcap_server->max_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> static int manage_client(struct osmo_pcap_server *pcap_server,</span><br><span>                   struct vty *vty,</span><br><span>                     const char *name, const char *remote_host,</span><br><span>@@ -511,6 +522,7 @@</span><br><span>     install_element(SERVER_NODE, &cfg_server_ip_cmd);</span><br><span>        install_element(SERVER_NODE, &cfg_server_port_cmd);</span><br><span>      install_element(SERVER_NODE, &cfg_server_max_size_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+   install_element(SERVER_NODE, &cfg_server_max_snaplen_cmd);</span><br><span>       install_element(SERVER_NODE, &cfg_server_zmq_ip_port_cmd);</span><br><span>       install_element(SERVER_NODE, &cfg_no_server_zmq_ip_port_cmd);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11281">change 11281</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/11281"/><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: I8fdcdc1a58926ec66a1dc5dc7a5e57ed4dceb4b4 </div>
<div style="display:none"> Gerrit-Change-Number: 11281 </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>