This pattern shows up a lot when working with PFCP. Let's make it easier
to handle IPv4 and v6 at the same time.
Change-Id: I4338a83f26ef2443f90cf835621e73aed5eac521
eUPF sends a short CP Function Features bitmap, which is easy to solve
by just zero padding to the minimum length specified in PFCP (3GPP TS
29.244)
Related: SYS#6590
Change-Id: I40e255fd0b4770e578aea7a10ba88f5eeba087f4
These look like copy+paste issues. We don't generally do AGPL for
library code; libraries are typically under GPLv2+ for maximum
compatibility.
Change-Id: I94d0dda467b2c2b1c61ad1c6cb234cb66db46134
It was requested during code review to make this a function and not a
macro.
One effective change: no longer log "NULL{fi=NULL}" when no
m->ctx.session_fi or .peer_fi are set.
Change-Id: Ic84090c9b1a34185577cfb2ea1efa9c07542df34
By moving *_LIBS to libosmo_pfcp_la_LIBADD, fix linking of
gen__pfcp_ies_auto to prefer the locally built libosmo-gtlv over a
system installed one.
Related: OS#5942
Change-Id: I2e92238b214d8e79bab1095d6093139bad05bc66
Drop this mysterious empty variable. No idea where it came from, there
is nothing here that would set it.
Change-Id: I7f2736366b34e7a15f73fa81ef1d4659ed6e2361
There isn't even an --enable-coverage in the configure.ac, so drop the
always empty COVERAGE_CFLAGS and COVERAGE_LDFLAGS.
Change-Id: Ib256ce7d979aec5c368b19ac2c145f75a9dab0fc
We use osmo_apn_from_str() and osmo_apn_to_str(), defined in libosmogsm,
since this commit:
"fix coding of Network Instance IE"
8368e7d5d5
I9d67464ef0f92b0512cfd6e48d203f8828a82a19
Since libosmo-pfcp merely calls the two functions and none of
libosmogsm is exposed in the libosmo-pfcp API, it suffices to use
Requires.private in the .pc file.
Change-Id: Ie1c92d251af6a3e42759ff0da0d3693356b5e1d3
I recently discovered some use-after-free in osmo-upf by wrong API usage
of osmo_pfcp_endpoint_tx(). Highlight this pitfall in API doc.
Change-Id: I637e7bb5d1296b5ad8db8ab0b8151fdbb9e7be03
This was reported with gcc version 12.2.0:
/git/libosmo-pfcp/src/libosmo-gtlv/gtlv_dec_enc.c: In function
'osmo_gtlvs_decode_unordered':
/git/libosmo-pfcp/src/libosmo-gtlv/gtlv_dec_enc.c:237:42: warning:
'presence_flag_p' may be used uninitialized [-Wmaybe-uninitialized]
237 | *presence_flag_p = true;
| ^
/git/libosmo-pfcp/src/libosmo-gtlv/gtlv_dec_enc.c:113:23: note:
'presence_flag_p' was declared here
113 | bool *presence_flag_p;
| ^~~~~~~~~~~~~~~
There is no actual code path that will use presence_flag_p
uninitialized, but it doesn't hurt to init with NULL.
Change-Id: I8f4c420f2182c607abb1ee5d1c8175eaeda904af
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
Remove braces and spaces from PFCP bits to string conversion.
Instead of "( FOO BAR BAZ )", print "FOO+BAR+BAZ".
Instead of "( FORW )", print "FORW".
Instead of "( )", print "-".
The spaces tend to break up readability of strings logged by osmo-upf.
In particular, this affects UP and CP capability bits, Apply Action,
Outer Header Creation.
Change-Id: I38426d6381e96d4a683e46eba1bdd29c73d3f027
Decode FQDN type Node IDs into "human" dotted notation instead of
storing the DNS type data in the FQDN string.
Related: OS#5806
Change-Id: I25d0f9b095287aa30e24498d8361c0a326ded447
Network instance names should be coded like in DNS, where each label is
preceded by a length byte.
Related: SYS#6192
Change-Id: I9d67464ef0f92b0512cfd6e48d203f8828a82a19
Make osmo_pfcp_enc_to_str_outer_header_creation() as
osmo_pfcp_ie_outer_header_creation_to_str_*() functions.
Used by I0d4d9edcfc94b61bdc74cfd4ff837f151d1c28ae (osmo-upf)
Change-Id: I4ad1570485c8081b82284e4e6b4de4d7eed414b0
struct osmo_pfcp_ip_addrs uses an osmo_sockaddr for storing IP
addresses. Even though osmo_sockaddr contains a port number, no port
number gets encoded in PFCP messages. Hence always set the port to 0.
I noticed that when osmo_pfcp_ip_addrs_set() is invoked with an
osmo_sockaddr that incidentally has a port number set, subsequent
logging of e.g. a PFCP F-TEID shows a port number, which is confusing.
Change-Id: Ib29a123c06d459c99d7c1c0b9a7694fb78cd9fd8
Move static function ip_addrs_to_str_buf() to public API as
osmo_pfcp_ip_addrs_to_str_buf() and osmo_pfcp_ip_addrs_to_str_c().
So far the static function was only used in places where it follows
other strings, so that it made sense to always start with a comma. Move
this comma out of the function to the callers.
Sensibly handle a NULL pointer and an empty address set.
Rationale: osmo-upf would like to print an osmo_pfcp_ip_addrs struct in
logging.
Change-Id: I5f67db8d347690cbb1ce273a2d072636859f1bf6
So far the optional Network Instance IE in PDI IEs was not coded by
libosmo-pfcp. Add it.
Test it by adding Network Instance IEs in pfcp_test.c.
osmo-upf needs this, because we are about to add support for Network
Instance in PDI IEs, to determine which local interface to use for GTP
tunnel mapping and encapsulation/decapsulation.
Related: SYS#6192
Change-Id: I162299e70b4fb0c3fef8039d693ac7d3fe4df16a
When LIBOSMOCORE_LIBS comes before locally built libs, for some reason
libtool puts system lib/ first in LD_LIBRARY_PATH, leading to ABI
breakage in pfcp_test when an older libosmo-pfcp is still installed.
Change-Id: I63880c1b4f326687ce9a35584a55742c1016d72b
When using 'check_PROGRAMS', autoconf/automake generates smarter
Makefiles, so that the test programs are not being compiled during
the normal 'make all', but only during 'make check'.
Change-Id: I62a7b4d76c910b3fa90deb0d35a8fc36146d66e6
test_enc_dec[8] includes a PDI IE in Update PDR. The PDI is optional
here, so it requires setting a presence flag to true. This was missing,
hence the PDI part was not being tested at all. Add this presence flag.
This was probably a copy-paste error from testing the Create PDR IE,
where the PDI is mandatory and has no presence flag.
Change-Id: Idc70ae23f15d3af65f98557cc51a111f2e6d75c9
Initialize logging so that potential errors are shown by the test.
Normally, pfcp_test does not cause any logging. However, I encountered a
linking problem, which caused error logging from libosmo-pfcp, which was
not shown because osmo logging aborted the program first.
Change-Id: I32a99d27ff72edceacb2cf4f4cd996650bc10710
Unfortunately "-std=c99" is not sufficient to make gcc ignore code that
uses constructs of earlier C standards, which were abandoned in C99.
See https://lwn.net/ml/fedora-devel/Y1kvF35WozzGBpc8@redhat.com/ for
some related discussion.
Change-Id: I79c51b78d1b055361f9ef5434361847353791d0d
Test the behavior fixed by Ie37585178ff27306d425b75d8e407b71f92f1cdc
Related: CID#275415
Related: SYS#5599
Change-Id: I994d0fb1f1435d2c27a8630a43fe106652ac6e41
Coverity Scan has brought my attention to a problem with decoding
repeated IEIs, where there are multiple struct members in the decoded
struct that these are decoded to.
Before this patch, gtlv aborts with an error as soon as the first struct
member for a given tag is full, not parsing following IEIs into
subsequent struct members.
After this patch, gtlv continues to look whether subsequent entries in
the message coding also decode the same tag, but to a different struct
member.
First commit without changing the gtlv regression test, to show that all
current tests still succeed. The test for this particular issue follow
in I994d0fb1f1435d2c27a8630a43fe106652ac6e41
Related: CID#275415
Related: SYS#5599
Change-Id: Ie37585178ff27306d425b75d8e407b71f92f1cdc
Introduce a maximum bound of memory access to the osmo_gtlv API.
Properly pass const-ness within the gtlv implementation. This patch adds
membof_const(). The following patch will add the non-const membof()
equivalent, which is not needed in this patch, yet.
Coverity CID#275417 drew my attention to the fact that the gtlv decoding
and encoding does not actually guard against access past the end of the
decoded struct.
We have not yet officially released libosmo-gtlv; also, osmo-upf and
osmo-hnbgw so far only use the libosmo-pfcp API, which "hides" the gtlv
API. Hence just change the API without a backwards compat shim.
Related: CID#275417
Related: SYS#5599
Change-Id: Id8d997c9d5e655ff1842ec69eab6c073875c6330
Tag a new release with all the packaging fixes, so building libosmo-pfcp
for latest isn't failing anymore on obs.osmocom.org.
Related: OS#5654
Change-Id: I9a7be8342754fdbc21b83281c8ebcbf38112c61b
Require the same libosmocore version in configure.ac and rpm spec as
already set in debian/control.
Change-Id: I701f1aacca22a697f35aba0041a71945c5aea107