neels has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-upf/+/37828?usp=email )


Change subject: upf gtp-u echo: improve loging
......................................................................

upf gtp-u echo: improve loging

Tweak GTPv1-U Echo logging to more consistently show logging like:

DGTP INFO apn11 [23] 127.0.0.11:2152: <- 127.0.0.12:2152: rx GTPv1-U Echo 
Request: seq_nr=123 recovery_count=131
DGTP INFO apn11 [23] 127.0.0.11:2152: -> 127.0.0.12:2152: tx GTPv1-U Echo 
Response: seq_nr=123 recovery_count=570

Change-Id: I3c7fe7c3eb1467ae34085da6bbf26a935a6c927b
---
M src/osmo-upf/upf_gtpu_echo.c
1 file changed, 27 insertions(+), 16 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-upf refs/changes/28/37828/1

diff --git a/src/osmo-upf/upf_gtpu_echo.c b/src/osmo-upf/upf_gtpu_echo.c
index cbf804b..d8958e8 100644
--- a/src/osmo-upf/upf_gtpu_echo.c
+++ b/src/osmo-upf/upf_gtpu_echo.c
@@ -50,12 +50,17 @@

 static int tx_echo_resp(struct upf_gtp_dev *dev, const struct osmo_sockaddr 
*remote, uint16_t seq_nr);

-static int rx_echo_req(struct upf_gtp_dev *dev, const struct osmo_sockaddr 
*remote, const struct gtp1u_hdr *rx_h)
+static int rx_echo_req(struct upf_gtp_dev *dev, const struct osmo_sockaddr 
*remote, const struct gtp1u_hdr *rx_h,
+                      size_t msg_len)
 {
-       if (!rx_h->s) {
-               LOG_GTP_DEV(dev, LOGL_ERROR, "rx GTPv1-U ECHO REQ without 
sequence nr\n");
-               return -1;
-       }
+       uint16_t seq_nr = 0;
+       uint8_t recovery_count = 0;
+       if (msg_len >= (sizeof(*rx_h) + 2) && rx_h->data2[0] == 
GTP1U_IEI_RECOVERY)
+               recovery_count = rx_h->data2[1];
+
+       seq_nr = rx_h->s;
+       LOG_GTP_DEV(dev, LOGL_INFO, "<- %s: rx GTPv1-U Echo Request: seq_nr=%u 
recovery_count=%u\n",
+                   osmo_sockaddr_to_str(remote), seq_nr, recovery_count);

        return tx_echo_resp(dev, remote, rx_h->ext.seq_nr);
 }
@@ -66,7 +71,7 @@
        struct gtp1u_hdr *tx_h;
        int rc;

-       msg = msgb_alloc_headroom(1024, 128, "GTP-echo-resp");
+       msg = msgb_alloc_headroom(1024, 128, "GTPv1-U-echo-resp");
        tx_h = (void *)msgb_put(msg, sizeof(*tx_h));

        *tx_h = (struct gtp1u_hdr){
@@ -90,9 +95,13 @@

        rc = sendto(dev->gtpv1.ofd.fd, msgb_data(msg), msgb_length(msg), 0, 
&remote->u.sa, sizeof(*remote));
        if (rc < 0) {
-               int err = errno;
-               LOG_GTP_DEV(dev, LOGL_ERROR, "GTP1-U sendto(len=%d, to=%s): 
%s\n", msgb_length(msg),
-                           osmo_sockaddr_to_str(remote), strerror(err));
+               rc = -errno;
+               LOG_GTP_DEV(dev, LOGL_ERROR, "-> %s: tx GTPv1-U Echo Response: 
sendto(len=%d): %s\n",
+                           osmo_sockaddr_to_str(remote), msgb_length(msg), 
strerror(-rc));
+       } else {
+               LOG_GTP_DEV(dev, LOGL_INFO, "-> %s: tx GTPv1-U Echo Response: 
seq_nr=%u recovery_count=%u\n",
+                           osmo_sockaddr_to_str(remote), seq_nr, 
g_upf->tunend.recovery_count);
+               rc = 0;
        }
        msgb_free(msg);
        return rc;
@@ -121,27 +130,29 @@
        /* A GTPv1-U header of size 8 is valid, but this code expects to handle 
only ECHO REQUEST messages. These are
         * required to have a sequence number, hence this check here 
consciously uses the full sizeof(*h) == 12. */
        if (sz < sizeof(*h)) {
-               LOG_GTP_DEV(dev, LOGL_ERROR, "rx GTP packet smaller than the 
GTPv1-U header + sequence nr: %zd < %zu\n",
-                           sz, sizeof(*h));
+               LOG_GTP_DEV(dev, LOGL_ERROR,
+                           "<- %s: rx GTPv1-U packet smaller than the GTPv1-U 
header + sequence nr: %zd < %zu\n",
+                           osmo_sockaddr_to_str(&remote), sz, sizeof(*h));
                return -1;
        }

        h = (const struct gtp1u_hdr *)buf;
        if (h->version != 1) {
-               LOG_GTP_DEV(dev, LOGL_ERROR, "rx GTP v%u: only GTP version 1 
supported\n", h->version);
+               LOG_GTP_DEV(dev, LOGL_ERROR, "<- %s: rx GTPv1-U v%u: only GTP 
version 1 supported\n",
+                           osmo_sockaddr_to_str(&remote), h->version);
                return -1;
        }

        h_length = osmo_load16be(&h->length);
        if (offsetof(struct gtp1u_hdr, data1) + h_length > sz) {
-               LOG_GTP_DEV(dev, LOGL_ERROR, "rx GTP: header + h.length = %zu > 
received bytes = %zd\n",
-                           offsetof(struct gtp1u_hdr, data1) + h_length, sz);
+               LOG_GTP_DEV(dev, LOGL_ERROR, "<- %s: rx GTPv1-U: header + 
h.length = %zu > received bytes = %zd\n",
+                           osmo_sockaddr_to_str(&remote), offsetof(struct 
gtp1u_hdr, data1) + h_length, sz);
                return -1;
        }

        switch (h->msg_type) {
        case GTP1U_MSGTYPE_ECHO_REQ:
-               return rx_echo_req(dev, &remote, h);
+               return rx_echo_req(dev, &remote, h, sz);
        default:
                LOG_GTP_DEV(dev, LOGL_ERROR, "rx: GTPv1-U message type %u not 
supported\n", h->msg_type);
                return -1;
@@ -151,7 +162,7 @@
 int upf_gtpu_echo_setup(struct upf_gtp_dev *dev)
 {
        if (dev->gtpv1.ofd.fd == -1) {
-               LOGP(DGTP, LOGL_ERROR, "Cannot setup GTP-U ECHO: GTP-v1 socket 
not initialized\n");
+               LOGP(DGTP, LOGL_ERROR, "Cannot setup GTPv1-U ECHO: socket not 
initialized\n");
                return -EINVAL;
        }


--
To view, visit https://gerrit.osmocom.org/c/osmo-upf/+/37828?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: osmo-upf
Gerrit-Branch: master
Gerrit-Change-Id: I3c7fe7c3eb1467ae34085da6bbf26a935a6c927b
Gerrit-Change-Number: 37828
Gerrit-PatchSet: 1
Gerrit-Owner: neels <[email protected]>

Reply via email to