Commit Graph

96 Commits

Author SHA1 Message Date
Oliver Smith d186d59aa2 osmo_pfcp_tool: fix osmo_pfcp_tool_copyright error
Fix for building on opensuse 15.4 with GCC 7.5.0+r278197:
  osmo_pfcp_tool_main.c:219:15: error: initializer element is not constant
    .copyright = osmo_pfcp_tool_copyright,

The variable is only used once, so move its contents directly into the
struct vty_app_info, like it is done in osmo_upf_main.c.

Fixes: OS#5655
Change-Id: Iff273283a082bb6d07c4c98d421b17b54457abe1
2022-08-26 11:02:19 +02:00
Neels Hofmeyr 803c1968e6 example cfg: tweak logging
Related: SYS#5599
Change-Id: I6b767b2e9f023cdbe5d2ea014e2d41878e848d24
2022-08-24 17:16:04 +02:00
Neels Hofmeyr 436c165f1c improve manual: PFCP and GTP interfaces
Related: SYS#5599
Change-Id: Iccb3f0f52bd5006bc94d0ca06ac5d3271ea89eb9
2022-08-24 17:16:04 +02:00
Neels Hofmeyr 4ee2a4be5e Bump version: 0.1.0 → 0.1.1
Change-Id: I1d73255f8cc30feabd3c251bdc3af1682ed4694a
2022-08-24 16:50:56 +02:00
Neels Hofmeyr b78cc91e4a configure: set libosmocore >= 1.6.0 like in packaging
Change-Id: Ib31f96ffca844c2b62361cc4ff1fbb98bbe3258c
2022-08-24 16:49:08 +02:00
Neels Hofmeyr 22006ba039 debian,RPM,configure: fix packaging (deps etc)
Related: SYS#5599
Change-Id: I068736d513ddb54b9a62c1d7970a0fbff3095b4b
2022-08-24 16:11:21 +02:00
Neels Hofmeyr 9fd081534c add missing COPYING file
Came to my attention because the RPM build complained about it.

Change-Id: If3443ef22625f17b1e75f7f53e21eeffda8d90c8
2022-08-24 16:10:56 +02:00
Harald Welte 581f5c63dc add missing dependencies to libosmo-{gtlv,pfcp} to rpm + dpkg
This should hopefully fix the many daily build error mails about
failed package builds on a dozen of distributions/architectures:

[  148s] No package 'libosmo-gtlv' found
[  148s] configure:12570: error: Package requirements (libosmo-gtlv >= 0.1.0) were not met:

Change-Id: Iac551616a9831dfd9e3203d1f40e312c4dd286b6
2022-08-21 12:59:10 +02:00
Vadim Yanitskiy 0db788aecd Fix missing dash in Redmine project URL
Change-Id: I2e3fd2ec734799098fed1ea361b8236746c97812
2022-08-18 03:41:45 +07:00
Vadim Yanitskiy 183ff5c0a9 configure.ac: do not require unused dlopen
Change-Id: Ied459216cc13f1481e8b0db978a284363197f32a
2022-08-17 08:29:44 +00:00
Neels Hofmeyr 4c823221c6 debian: add missing changelog
Change-Id: I53551ce1a6d3176d480a56f8f5d2441da7346711
2022-08-16 23:17:32 +02:00
Neels Hofmeyr 2442ccd673 vty doc tweaks
Clarify "Add" and "Delete" of GTP devices.
Clarify GTP device in config vs. real GTP device.
Clarify s/kernel/Linux kernel

Related: SYS#5599
Change-Id: I918e0a9a332e4dd4b71965614c19481eb41004d6
2022-08-10 02:12:06 +02:00
Neels Hofmeyr 8c29080dde add comment about fd cleanup
Clarify that calling osmo_fd_close() is fine if no fd is open.

Related: SYS#5599
Change-Id: Ibd471485fde90a14fe19f558b38a49b0b7d62909
2022-08-09 14:14:25 +02:00
Neels Hofmeyr 9f8dd6f043 main: show just a brief talloc report for vty
Upon ^C, do not barf a huge amount of full talloc report for the entire
VTY config tree. Show a brief report on VTY instead.

Related: SYS#5599
Change-Id: I038951c6d62679e3cfcda51512768d1fbacaa0d1
2022-08-09 14:14:25 +02:00
Neels Hofmeyr e35c12454a log: fix/tweak log msg about nft/mockup
There is no cmdline option --mockup-nft, that was an earlier stage of
the nftables mockup patch.

Related: SYS#5599
Change-Id: I2f77cfe727649bbdcebb4a656ebf97b186134ee8
2022-08-09 14:14:25 +02:00
Neels Hofmeyr 1b3e2711cd add contrib/set_cap_net_admin.sh
Related: SYS#5599
Change-Id: If31c304e2602d3c37d5d8a5a2705417b2fc4686c
2022-08-08 20:23:51 +00:00
Neels Hofmeyr 506b763094 apply refactoring of osmo_pfcp_endpoint API
libosmo-pfcp If80c35c6a942bf9593781b5a6bc28ba37323ce5e changes the
osmo_pfcp_endpoint API, apply the necessary changes here.

Related: SYS#5599
Depends: If80c35c6a942bf9593781b5a6bc28ba37323ce5e (libosmo-pfcp)
Change-Id: I01deb3f347435c9fa1c49e9a0c5ef70742444ad4
2022-07-28 15:02:06 +02:00
Neels Hofmeyr 665e8874f4 apply refactoring of osmo_pfcp_msg_alloc API
libosmo-pfcp I0d71134e42932cc72992eba73a15e82bc7cd11bd clarifies the
osmo_pfcp_msg_alloc functions, apply the necessary changes here.

Related: SYS#5599
Depends: I0d71134e42932cc72992eba73a15e82bc7cd11bd (libosmo-pfcp)
Change-Id: I73e6da3b80f05e9408c81f41ac05d6578b8e31cf
2022-07-27 11:42:34 +00:00
Neels Hofmeyr 5b87376ba5 constify local var in upf_gtp.c
Related: SYS#5599
Change-Id: I08085a6e777175b97b9c32d4c302c9863c6f6f59
2022-07-22 17:18:24 +02:00
Neels Hofmeyr 77cf6ccf21 add some comments in upf_gtp.c
Related: SYS#5599
Change-Id: I58f86cd84207a74e078ae4758bbed76bb1595d95
2022-07-22 17:18:24 +02:00
Neels Hofmeyr 0388579be9 implement GTPv1-U ECHO response
Accept data on the GTPv1-U socket and respond to GTPv1-U ECHO REQUEST
messages.

We should keep a deterministic recovery counter that increases with
every restart. As a quick and dirty way just use the current time at
startup for now, until osmo-upf reaches production maturity.

Related: OS#5599
Change-Id: I135370a7723e2c667ec681f50c21107cde63ea5b
2022-07-22 17:18:24 +02:00
Neels Hofmeyr 7493d6db71 add osmo-pfcp-tool
A tool for quick testing of PFCP interaction with a UPF, based on VTY
scripts / interaction.

The main motivation to create this tool was to test both the CPF and UPF
sides of the new PFCP protocol encoding and decoding, and then to test
interaction of osmo-upf with the kernel modules. It may also come in
handy as a fast way to verify basic operation in a production
environment.

Related: SYS#5599
Change-Id: I34a80d43a14c7b68952c7d337d8042d6f28ceae7
2022-07-22 12:18:29 +02:00
Neels Hofmeyr 06482c6554 implement GTP tunnel mapping via netfilter
Implement support for PFCP rulesets that ask for mapping a GTP tunnel:
forwarding GTP payload between two GTP tunnels.

For a GTP tunnel mapping, dispatch netfilter rules that detect GTP
packets with a given source address and TEID, and replace the TEID and
destination address according to the PFCP ruleset.

The netfilter implementation is chosen to effect the packet rewriting
and forwarding to take place directly in the kernel, for high throughput
of GTP packets.

Related: SYS#5599
Change-Id: Ic0d319eb4f98cd51a5999c804c4203ab0bdda650
2022-07-20 17:08:53 +02:00
Neels Hofmeyr bee02fc34f add VTY option gtp/mockup, for VTY tests
To avoid actions that require cap_net_admin permissions on build
servers, add this option to "dry run" all kernel GTP actions. Same will
be added for netfilter rules.

On startup, osmo-upf opens sockets to GTP kernel module / NFT ctx.
However, on build servers, this would require giving cap_net_admin
permissions just to run the VTY tests.

Related: SYS#5599
Change-Id: I3b9c796186307fd8562abcff3f0ccfab0e88b6c8
2022-07-20 17:07:48 +02:00
Neels Hofmeyr d87748957a add netfilter deps: libnftnl, libnftables
Will be used by subsequent patch to implement GTP tunnel mapping via
netfilter.

Related: SYS#5599
Change-Id: Ia8be861fe1303e82e57fe83a50cfa4ff0280db02
2022-06-19 14:13:28 +02:00
Neels Hofmeyr 2eeec08d1e add osmo-upf
Related: SYS#5599
Change-Id: I745bcbde6859004c41ddbfd2558036bf9a2d1de2
2022-06-19 14:13:28 +02:00
Neels Hofmeyr 6c7261640f add libgtpnl dependency
Related: SYS#5599
Change-Id: I9928be6f62f5a89d98bdac63428f7a046c95c855
2022-06-18 13:52:36 +02:00
Neels Hofmeyr f93859548f move libosmo-pfcp to libosmo-pfcp.git
The first user of this is osmo-hnbgw, to implement GTP mapping via a
UPF.

Related: SYS#5895
Change-Id: I1464cdd846b00707b0abba9126aa5bb784b7caf1
2022-06-17 16:59:15 +02:00
Neels Hofmeyr 3574c79194 move libosmo-gtlv to libosmo-pfcp.git
Related: SYS#5599
Change-Id: Id72cdf94da60d4b6d09d0044c74e672c4412c15d
2022-06-17 16:59:15 +02:00
Neels Hofmeyr bff9378f25 add pfcp_endpoint
Related: SYS#5599
Change-Id: Ic8d42e201b63064a71b40ca45a5a40e29941e8ac
2022-06-09 23:40:20 +02:00
Neels Hofmeyr 38ce6deeea add initial FSM design charts
Related: SYS#5599
Change-Id: I55474daa6bb204a0fe7da0a3bf888bb7d1c46677
2022-06-08 18:09:31 +02:00
Neels Hofmeyr d5b98172f9 add pfcp msg test
Related: SYS#5599
Change-Id: I30bdfc66a8f96c0639513ef406e9b66525dced6d
2022-06-08 18:08:20 +02:00
Neels Hofmeyr d212f0ac7b libosmo-pfcp: implement PFCP header and msg handling
Related: SYS#5599
Change-Id: I3f85ea052a6b7c064244a8093777e53a47c8c61e
2022-06-07 02:23:07 +02:00
Neels Hofmeyr 3274cc3398 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-07 02:13:28 +02:00
Neels Hofmeyr bd9747a591 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-07 02:08:29 +02:00
Neels Hofmeyr 897581e06d pfcp/Makefile.am: add missing pfcp_ies_auto.h entry
Even though it is a generated header, it must still be listed in
pfcp_HEADERS.

Related: SYS#5599
Change-Id: I6fbfe1fcd084f2d16334bb3e44d9891d9485d59f
2022-06-07 02:08:19 +02:00
Neels Hofmeyr 9267debbeb libosmo-pfcp: implement/generate TLV and IE value coding
Related: SYS#5599
Change-Id: I3069045b2d42dac88d955c636230adc64a7a4aa7
2022-04-01 12:17:34 +02:00
Neels Hofmeyr e1abe10cfa libosmo-pfcp: add pfcp_proto.h pfcp_strs.h
Related: SYS#5599
Change-Id: I568b821e89007ed52eeefcdbcb6edd8052a8b5be
2022-04-01 12:17:34 +02:00
Neels Hofmeyr c8898587f3 contrib: add PFCP cause and IEI string maps
These help to build enums and value_strings using regexes. They are a
verbatim copy from 3GPP TS 29.244 version 16.6.0 Release 16, paired with
C-compatible and possibly abbreviated name strings.

Related: SYS#5599
Change-Id: I7f37efd3cfc4c7b0ae49740ac15e461c52fae6e8
2022-03-22 00:27:08 +01:00
Neels Hofmeyr d879afd381 libosmo-gtlv: add TLIV capability
During code review, it was indicated that some TLV protocols that we
will likely deal with in the near future also employ an I, and instance
value of a tag. Add TLIV support.

A usage example for a manually implemented TLIV structure is found in
tests/libosmo-gtlv/gtlv_test.c.

A usage example for a generated TLIV protocol is found in
tests/libosmo-gtlv/test_tliv/.

Related: SYS#5599
Change-Id: I0a076e54dfba6038cc779cb7c8f3967d212226aa
2022-03-22 00:27:08 +01:00
Neels Hofmeyr a92d57422d libosmo-gtlv: add C code generator for IE structs and arrays
Defining a protocol of message types with lists of IEs bears a lot of
repetitive, copy-paste-error-prone writing out of data structures.
Add a third layer to libosmo-gtlv, which allows helpful code generation.

By non-repetitive data structures that briefly describe the protocol's
messages and IEs, generate possibly repetitive IE list arrays and
decoded-struct definitions automatically, avoiding grunt work errors.

I tried C macros for this at first, but it became too convoluted.
Generating C code that can be read and grepped makes things easier.

A usage example is found in tests/libosmo-gtlv/test_gtlv_gen/.

Related: SYS#5599
Change-Id: Ifb3ea54d2797ce060b95834aa117725ec2d6c4cf
2022-03-22 00:27:08 +01:00
Neels Hofmeyr 7507e44905 libosmo-gtlv: add auto dec/enc to/from structs
Add osmo_gtlv_coding: describe the value part of a TLV (decode and
encode), describe a struct with its members, and get/put readily decoded
structs from/to a raw PDU, directly.

With osmo_gtlv_coding defined for a protocol's tags, we only deal with
encoded PDUs or fully decoded C structs, no TLV related
re-implementations clutter up the message handling code.

A usage example is given in gtlv_dec_enc_test. The first real use will be
the PFCP protocol in osmo-upf.git.

With osmo_gtlv_coding, there still is a lot of monkey work involved in
describing the decoded structs. A subsequent patch adds a generator for
osmo_gtlv_coding and message structs from tag value lists.

Related: SYS#5599
Change-Id: I65de793105882a452124ee58adb0e58469e6e796
2022-03-22 00:27:08 +01:00
Neels Hofmeyr f927727f61 libosmo-gtlv: add generic TLV de- and encoder
An all new TLV parser supporting:

- Any size of T and L (determined by callback function),
- "Grouped IEs", so that an IE payload is a nested IE structure,
- optional/mandatory/multi-occurence IEs,
- decoding unordered tags (or enforcing strict order).

Will be used for PFCP message decoding and encoding, a T16L16V protocol
which requires above features.

Upcoming patches add
- translating PDUs to plain C structs and vice versa
- TLV generator to reduce repetition a in protocol definition
- TLIV capability

Previously, the way we deal with TLVs causes a lot of code
re-implementation: the TL decoding is taken care of by the API, but for
encoding, we essentially re-implement each protocol and each encoded
message in the individual programs. This API is an improvement in that
we only once implement the TL coding (or just use osmo_t8l8v_cfg /
osmo_t16l16v_cfg), get symmetric de- and encoding of the TL, and only
need to deal with the value part of each IE.

The common pattern of
- store TL preliminarily,
- write V data and
- update L after V is complete
is conveniently done by osmo_gtlv_put_update_tl().

Related: SYS#5599
Change-Id: Ib0fd00d9f288ffe13b7e67701f3e47073587404a
2022-03-22 00:17:08 +01:00
Neels Hofmeyr 7495c21674 tweak license headers
I wrote a simple tool that puts the same license headers in all .[hc]
files. These tweaks are the result of running that tool on already
merged files.

Related: SYS#5599
Change-Id: I1f542534903fce9d68fce11f16822e9fbead89ec
2022-03-17 18:10:49 +01:00
Neels Hofmeyr 103b69d99c initial osmocom boilerplate source tree
Related: SYS#5599
Depends: I0a46b147ec6a76d909df28136cfd2b764b2c75ea (libosmocore)
Change-Id: I4352dd8738a1a9de6ba2fc250ee8eef69c65ff1e
2022-01-21 01:45:44 +01:00
Neels Hofmeyr 275e4cd2ac initial commit
Change-Id: If9045304c5a2a9a1f20eeba81cdcd8e7df8e0314
2021-11-23 12:35:09 +01:00