Commit Graph

60 Commits

Author SHA1 Message Date
Neels Hofmeyr 65c72dbe61 gtlv: fix repeated IEIs to several struct members
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
2022-08-24 17:04:42 +02:00
Neels Hofmeyr 035b692673 gtlv: check memory bounds 3/3: encoding to str
See Id8d997c9d5e655ff1842ec69eab6c073875c6330

Related: CID#275417
Related: SYS#5599
Change-Id: I63d52a4f5dba32d3a3887dd9c5e42e1695fb2aa3
2022-08-24 17:04:42 +02:00
Neels Hofmeyr 92860a29cd gtlv: check memory bounds 2/3: decoding TLV
See Id8d997c9d5e655ff1842ec69eab6c073875c6330

Related: CID#275417
Related: SYS#5599
Change-Id: I841da89112ccf70fcd0f60eb902445fb1712eb48
2022-08-24 17:04:42 +02:00
Neels Hofmeyr cb724a3484 gtlv: check memory bounds 1/3: encoding TLV
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
2022-08-24 17:04:42 +02:00
Neels Hofmeyr ced68154d2 pfcp_msg: check use count correctness
Related: CID#275414
Related: SYS#5599
Change-Id: I685855da8b6f373fdc62a3c75f7f2e0af2839617
2022-08-24 17:04:42 +02:00
Neels Hofmeyr 096c2eb2dd Bump version: 0.1.1.1-2904 → 0.1.2
Fix packaging, only.

Change-Id: I6ae6cf59e769214e11447107316d38fe5fad583d
2022-08-24 16:39:11 +02:00
Neels Hofmeyr 2904ba36bd pkgconfig: add missing 'Requires:'
Change-Id: I018caa584cb1f5fa1b2a7e6e6f9ec26e5b54eea7
2022-08-23 18:46:25 +02:00
Oliver Smith a6eba99ab0 Bump version: 0.1.0.32-823b → 0.1.1
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
2022-08-22 11:39:51 +02:00
Oliver Smith 823b88873c packaging: depend on libosmocore >= 1.7.0
Require the same libosmocore version in configure.ac and rpm spec as
already set in debian/control.

Change-Id: I701f1aacca22a697f35aba0041a71945c5aea107
2022-08-22 11:37:07 +02:00
Oliver Smith 5af922f249 debian/control: move -dev deps of libosmo-gtlv-dev
Only the -dev package of libosmo-gtlv should depend on other -dev
packages.

Change-Id: I4a7ba317e54f7f19d0947e95f7ab0b4f1e8fd43a
2022-08-22 11:33:44 +02:00
Oliver Smith 9ea4e4a1d6 rpm spec: use --disable-static
Follow what we are doing in other Osmocom rpm packaging by not building
and packaging static libraries.

Fix for rpmlint errors when building for OpenSUSE:
  libosmo-gtlv-devel.x86_64: E: static-library-without-debuginfo /usr/lib64/libosmo-gtlv.a
  libosmo-pfcp-devel.x86_64: E: static-library-without-debuginfo /usr/lib64/libosmo-pfcp.a
  libosmo-gtlv-devel.x86_64: E: lto-no-text-in-archive (Badness: 10000) /usr/lib64/libosmo-gtlv.a
  libosmo-pfcp-devel.x86_64: E: lto-no-text-in-archive (Badness: 10000) /usr/lib64/libosmo-pfcp.a

(If we wanted to build with static libraries, we would need to use
 -ffat-lto-objects to get rid of the second error.)

Related: https://github.com/rpm-software-management/rpmlint/issues/458
Change-Id: I49dd454afd8bd3473bcadbc8cd8724574011f886
2022-08-22 11:23:30 +02:00
Harald Welte 98774e224e rpm spec: reduce summary line length
Fixes the following rpmlint error:

[   17s] libosmo-pfcp.src: E: summary-too-long (Badness: 200) libosmo-pfcp: PFCP protocol encoding and decoding, and generic PFCP endpoint implementation
[   17s] The 'Summary:' must not exceed 79 characters.

also, coincidentally it fixes:

[   17s] libosmo-pfcp.src: E: summary-not-capitalized (Badness: 20) libosmo-pfcp: PFCP protocol encoding and decoding, and generic PFCP endpoint implementation
[   17s] Summary doesn't begin with a capital letter.

and the non-critical warning:

[   17s] libosmo-pfcp.src: W: name-repeated-in-summary libosmo-pfcp
[   17s] The name of the package is repeated in its summary. Make the summary brief and
[   17s] to the point without including redundant information in it.

Related: OS#5653
Change-Id: I293f77849d50e68753b82d7b5476c19217ecc2de
2022-08-21 12:47:27 +02:00
Oliver Smith 8e30663b57 gitreview: fix project
Change-Id: I97245dd141c185b35ccfb5b262c1057a18eef07e
2022-08-19 13:26:21 +00:00
Neels Hofmeyr 5b996fe8cd RPM: fix configure and typo "gltv" in .spec.in
Change-Id: Ideff7942a3250fa6541cfa6252a1c2927afdfc45
2022-08-19 10:17:51 +00:00
Vadim Yanitskiy 6ec51e63e7 configure.ac: do not require unused dlopen
Change-Id: Ic012f7b19a46ee38db0172b07bad2098567192b0
2022-08-16 23:47:53 +07:00
Neels Hofmeyr e4b550cdcf pfcp_cp_peer: check use count correctness
Related: CID#275418
Change-Id: Id79a84312b3ff8d562e26a525866b8bb09f9d0bf
2022-08-13 00:35:49 +00:00
Neels Hofmeyr 8b06f1a36f doc: minor fix in pfcp_cp_peer_fsm.dot
Change-Id: I0de10d5331df128081d6b875e3ba9c0c3c32bd9f
2022-08-13 00:35:49 +00:00
Neels Hofmeyr 2e773354d6 .gitignore fixes: generated sources, .spec file
Change-Id: Id8f6c80f13a09a3dedd4577fd1460f2f72faa8f8
2022-08-12 04:48:08 +02:00
Neels Hofmeyr d4cd0a8960 fix warnings: 'uninitialized'
Though these can never be used uninitialized, initialize to NULL to
avoid compiler warnings like:

 pfcp_msg.c:188:66: warning: 'h_no_seid' may be used uninitialized

Change-Id: Icb338b200fe3186ccd7fd3f502c1723f60947190
2022-08-12 04:47:34 +02:00
Neels Hofmeyr 5da6dbf14b libosmo-gtlv.pc.in: tweak Description
Change-Id: Idcdffe4528370b8580a30fbdde6645ec5d814021
2022-08-12 04:44:52 +02:00
Neels Hofmeyr 0105e13531 debian: fix missing dep gtlv0 <- pfcp0
Change-Id: I8af60305543b06b74859e83b840b171d29af1abd
2022-08-12 04:44:48 +02:00
Neels Hofmeyr 5341e046a7 debian/control: fix confusion in description
Change-Id: I380b1dd626b3e6a35f17ae09a6758bef59f51c84
2022-08-12 04:44:48 +02:00
Neels Hofmeyr c0f760790e debian: add missing *-dev.install files
Change-Id: I6b03624f3d93ad6b2551fb3ff673e7c7cb246f4c
2022-08-12 04:44:45 +02:00
Neels Hofmeyr 610eec3b7c RPM: fix .spec file
Change-Id: Ie2fa0770b94af8637483434068b7c0df4b4272c6
2022-08-12 04:44:27 +02:00
Neels Hofmeyr 2eca9989be configure.ac: drop dependencies on vty and ctrl
Change-Id: Idea223e9b039241dd35c735922b8794573730fc3
2022-08-12 01:19:55 +02:00
Neels Hofmeyr 733c734a6d README.md: tweak clone URL
Change-Id: Idcfd4421189c711f95926f7e66da3402c059dfff
2022-08-10 14:30:04 +02:00
Neels Hofmeyr 2c6dec19fa debian packaging of libosmo-gtlv and libosmo-pfcp
Fix debian packaging, so far a copy-paste from osmo-upf.git crept in
here by accident.

Related: SYS#5895
Change-Id: Id7169fc67b4f8f77dfbeff9f199e6557ced67a53
2022-08-10 14:30:04 +02:00
Neels Hofmeyr 4714560466 comment / whitespace tweaks in pfcp_endpoint.c
Related: SYS#5599
Change-Id: Ia2818106fe257a237d1875034b77c1d4cb136fa1
2022-08-09 20:42:39 +00:00
Neels Hofmeyr a85fd36037 set LIBVERSION=0:0:0
I wrote '1:0:0', but we should start with '0:0:0', according to
https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html

Since the packaging for this repository is not functional yet, i.e. it
was never packaged by anyone anywhere, i assume it is safe to go back
from '1:0:0' to '0:0:0'.

Related: SYS#5895
Change-Id: I5b80de2f486fdae62f0da1b74cb70dc9de7bb9cc
2022-08-09 19:40:11 +02:00
Vadim Yanitskiy 6cb622593e contrib/libosmo-pfcp.spec.in: do not disable LTO
AFAICT, everything compiles just fine with -flto=auto.

Change-Id: I632cfd8deaaaa50f0ffba04aca4d422b7b51034e
2022-08-06 06:09:16 +07:00
Vadim Yanitskiy 1275ad9ea1 contrib/libosmo-pfcp.spec.in: do not depend on systemd
There is no need to do so, this project has nothing to do with systemd.

Change-Id: I57d6c46a6b9aab161f7ccfa663c26ea2e7f05e7b
2022-08-06 06:02:37 +07:00
Vadim Yanitskiy 29e2095f88 gitignore: ignore *.la objects: libosmo-{gtlv,pfcp}.la
Change-Id: I72b2b62cfa232accb4f8ae114be40058ccd512c7
2022-08-05 04:49:15 +07:00
Vadim Yanitskiy a6fabf75b5 configure: fix warning: AC_OUTPUT should be used without arguments
Change-Id: I71fc8dc78b8b10628ef0533c69e42c0298fb27df
2022-08-03 03:16:11 +07:00
Vadim Yanitskiy 5d5597d104 configure: fix AC_CONFIG_MACRO_DIRS related warnings
Create m4/.gitkeep to eliminate the following warning:

  aclocal: warning: couldn't open directory 'm4': No such file or directory

Add 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac to as suggested:

  libtoolize: Consider adding 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac

Change-Id: Id9d605490c4b403b99ed54745838cc9f242030c3
2022-08-03 03:13:18 +07:00
Neels Hofmeyr d6168a8103 pfcp_endpoint: fix final PFCP retrans resp_cb
After the final retransmission of a sent request, still keep the message
in the queue for its expiry period, so that a later response is matched
to the request.

The osmo_pfcp_msg.resp_cb() depends on the sent message to remain in the
queue until it times out. That was not the case in an earlier stage of
libosmo-pfcp development.

I noticed this during ttcn3 testing, where osmo-hnbgw continuously
resends PFCP Association Setup Requests, and fails to associate if ttcn3
happens to respond to the final retransmission of a request.

Related: SYS#5599
Change-Id: Iaca396891921f7057015ce6e1e4528b955757809
2022-07-28 13:52:17 +02:00
Neels Hofmeyr 1a9a3ad342 apply code review: refactor pfcp_endpoint API
Code review requested that the API should use functions instead of
direct access to a struct.

I have moved all user provided config to a separate struct
osmo_pfcp_endpoint_cfg, to be passed to osmo_pfcp_endpoint_create().
Halfway through those changes, I am not so certain whether that is what
reviewers had in mind. It makes sense from the point of view to keep nr
of arguments passed to osmo_pfcp_endpoint_create() small, and to allow
changing the user provided config without requiring a new
osmo_pfcp_endpoint_create2() API function. Though that again has ABI
compat problems, and makes no sense from the point of view that all
access should be done via API functions.

Personally I don't really agree with this change, which is probably the
reason why this patch ended up this way.

Related: SYS#5599
Change-Id: If80c35c6a942bf9593781b5a6bc28ba37323ce5e
2022-07-28 13:52:17 +02:00
Neels Hofmeyr 6dc91a4411 clarify osmo_pfcp_msg alloc API
Looking at the osmo_pfcp_msg_alloc API with a bit of distance now, I
found that:

- it is confusing to have a single function for req and resp. A resp
  may pass remote_addr as NULL, and a req may pass in_reply_to as NULL.
  Make this much more obvious with separate req/resp functions.

- the osmo_pfcp_endpoint_tx() implicitly puts the local Node ID into
  sent PFCP messages, so the local_node_id arg for msg alloc is
  redundant. Drop that.

Refactor without backwards compat, because we have not yet officially
released this API. This requires a fixup patch to osmo-upf.git (and
affects unmerged patches to osmo-hnbgw.git).

Related: SYS#5599
Related: I73e6da3b80f05e9408c81f41ac05d6578b8e31cf (osmo-upf)
Change-Id: I0d71134e42932cc72992eba73a15e82bc7cd11bd
2022-07-23 16:15:57 +02:00
Neels Hofmeyr 4a2509c669 fix wrong constants used in osmo_pfcp_tdefs (typo)
s/MSGT/TIMER

Related: SYS#5599
Change-Id: Iaecce86064b65aa003e9903d09f60d760e0689c3
2022-07-23 16:13:24 +02:00
Neels Hofmeyr 2e52636958 separate pfcp_queue_timer_cb() in req and resp
Having separate callbacks for request and response messages makes for
an easier read. No functional change.

This applies code review from
https://gerrit.osmocom.org/c/osmo-upf/+/28244
Ic8d42e201b63064a71b40ca45a5a40e29941e8ac (osmo-upf.git)

Related: SYS#5599
Change-Id: Ic8ab71f5efd4cf669689a0b075f9a52ce66bdd5d
2022-07-20 12:38:30 +02:00
Vadim Yanitskiy 3f002b3d06 fix incorrect timeout values: milliseconds vs microseconds
osmo_timer_schedule() takes (*timer, seconds, microseconds), so
the last argument must be in microseconds, not milliseconds.

Change-Id: I1e0b319033415e42ca7f4da9bae348c5cb1da38c
2022-07-19 19:33:53 +07:00
Neels Hofmeyr 6b458fa060 add generic PFCP CP peer implementation
Will be used by osmo-hnbgw, our first PFCP Control Plane entity. The
implementation is generic enough that it can be re-used by other CP
entities.

Related: SYS#5895
Change-Id: If8c5f69f596ea6ba8bd1723f4dc57b91d3799795
2022-06-17 18:15:43 +02:00
Neels Hofmeyr 3b8fc0d694 add osmo_pfcp_ie_f_seid_cmp
Related: SYS#5599
Change-Id: Iacaeebfad0fe77788da40c3ed7da2ffa3b27043c
2022-06-17 13:34:14 +02:00
Neels Hofmeyr 2f102058ca install libosmo-pfcp
The first user of this is osmo-hnbgw, to implement GTP mapping via a
UPF.

Related: SYS#5895
Change-Id: If4465095000a898296d69d5b725507f909c87aa3
2022-06-17 12:09:25 +02:00
Neels Hofmeyr d39783cd17 install libosmo-gtlv
Related: SYS#5895
Change-Id: I9f4651b6bee457583aba99052dc82bbf675515e6
2022-06-17 12:09:25 +02:00
Neels Hofmeyr c8a90d83ef add pfcp_endpoint
Related: SYS#5599
Change-Id: Ic8d42e201b63064a71b40ca45a5a40e29941e8ac
2022-06-16 13:04:33 +02:00
Neels Hofmeyr 5d8bff6ba0 add initial FSM design charts
Related: SYS#5599
Change-Id: I55474daa6bb204a0fe7da0a3bf888bb7d1c46677
2022-06-16 13:04:33 +02:00
Neels Hofmeyr d6ac69d6f6 add pfcp msg test
Related: SYS#5599
Change-Id: I30bdfc66a8f96c0639513ef406e9b66525dced6d
2022-06-16 13:04:33 +02:00
Neels Hofmeyr 8bcc7faa62 libosmo-pfcp: implement PFCP header and msg handling
Related: SYS#5599
Change-Id: I3f85ea052a6b7c064244a8093777e53a47c8c61e
2022-06-16 13:04:33 +02:00
Neels Hofmeyr ace6adb548 api: add osmo_pfcp_ie_node_id_to_str_c()
So far we had only osmo_pfcp_enc_to_str_node_id(), used for PFCP message
to string conversion. It behaves like a common _to_str_buf() function,
but has an inconvenient void* arg (for use with libosmo-tlv).

Implement the string conversion as common _to_str_buf() and _to_str_c()
functions, and call that from osmo_pfcp_enc_to_str_node_id(). That's
useful for log messages coming up in a subsequent patch.

Related: SYS#5599
Change-Id: I5c580bc510afce58a03dea0861db9630b063b2ae
2022-06-16 13:04:33 +02:00
Neels Hofmeyr 184360f3b7 pfcp ie: tweak CP Function Features
The spec indicates three bytes of CP Function Features, but both
wireshark and ttcn3 expect only one byte. This makes sense because only
eight CP F.F. flags are defined.

Drop those two always-zero bytes, hence pass the wireshark dissector and
ttcn3 parsing without warnings.

Related: SYS#5599
Change-Id: Icda891a2f3401e58f142f229465403d5dc8befe5
2022-06-16 13:04:33 +02:00