neels has uploaded this change for review.

View Change

gtlv: decoding error: log size limited hexdump of IE

When a decoding error is encountered, log the value part of the root
cause as hexdump, but at most 16 bytes (16*3 chars as hexdump).

Contrived example of the change:
before this patch:

<-tx- PFCP seq-4 ASSOC_SETUP_RESP: 0: Invalid FQDN (-22: Invalid argument)
<-tx- PFCP seq-4 ASSOC_SETUP_RESP: 0: tag 0x3c = Node ID: Error while decoding this IE (-22: Invalid argument)

after this patch:

<-tx- PFCP seq-4 ASSOC_SETUP_RESP: 0: Invalid FQDN (-22: Invalid argument)
<-tx- PFCP seq-4 ASSOC_SETUP_RESP: 0: tag 0x3c = Node ID: Error while decoding this IE. L=20 V=[ 02 07 65 78 61 6d 70 6c 65 03 63 6f 6d 01 02 03 ...] (-22: Invalid argument)

Change-Id: Ie814a117db3dfea32cf3f01cf124a2e472cb869f
---
M src/libosmo-gtlv/gtlv_dec_enc.c
1 file changed, 6 insertions(+), 2 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/libosmo-pfcp refs/changes/02/30502/1
diff --git a/src/libosmo-gtlv/gtlv_dec_enc.c b/src/libosmo-gtlv/gtlv_dec_enc.c
index 385ebfa..37e8a51 100644
--- a/src/libosmo-gtlv/gtlv_dec_enc.c
+++ b/src/libosmo-gtlv/gtlv_dec_enc.c
@@ -218,8 +218,12 @@
if (!iec->dec_func)
RETURN_ERROR(-EIO, gtlv->ti, "IE definition lacks a dec_func()");
rc = iec->dec_func(decoded_struct, membof(obj, obj_maxlen, memb_ofs), gtlv);
- if (rc)
- RETURN_ERROR(rc, gtlv->ti, "Error while decoding this IE");
+ if (rc) {
+ const size_t maxlen = 16;
+ RETURN_ERROR(rc, gtlv->ti, "Error while decoding this IE. L=%zu V=[ %s%s]",
+ gtlv->len, osmo_hexdump(gtlv->val, OSMO_MIN(maxlen, gtlv->len)),
+ gtlv->len > maxlen ? "..." : "");
+ }
}

if (multi_count_p) {

To view, visit change 30502. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: libosmo-pfcp
Gerrit-Branch: master
Gerrit-Change-Id: Ie814a117db3dfea32cf3f01cf124a2e472cb869f
Gerrit-Change-Number: 30502
Gerrit-PatchSet: 1
Gerrit-Owner: neels <nhofmeyr@sysmocom.de>
Gerrit-MessageType: newchange