PFCP: refactor dissecting of enterprise IEs

The code for dissecting enterprise IEs has been reworked.

Previously, each enterprise was registered by its enterprise-ie in a
dissector-table. The per-enterprise dissector would index into an array
of IEs in order to find the correct IE-dissector.

Using this method has following drawbacks:
- IEs had to be defined in two arrays (value_string and dissector),
  possibly causing these two arrays becoming out-of-sync,
- the array only can be indexed if all IE-types are contiguous or gaps
  are maintained, which would be wasteful in case of bigger gaps
- individual IEs cannot easily be added outside of the source of this
  file

This commit implements a new approach that addresses above drawbacks by:
- defining all IE information together in one array,
- using per-vendor dissector_tables containing per-IE dissector handles,
  allowing both for arbitrary ie-types and adding individual
  enterprise-IEs separately from external code

This method does a two-level lookup for the IES:
- first looking up a vendor-dissector in the pfcp.enterprise_ies table
- if using the generic-ie-dissector a lookup in the per-vendor table to
  find the IE-dissector

A vendor-dissector receives the whole IE including header and has to do
all the work. An IE-dissector receives only the data-part and
a tree + header-fields have already been created.

The code for registering the per-IE tree-types has been modified as
well, because these tree-types are now stored together with the
IE-definitions. (Getting rid of the hardcoded indexes is also a plus.)

The 3GPP example enterprise dissector has been removed, as there are two
other enterprises which can serve as example.
This commit is contained in:
Joris Peeraer 2023-01-10 11:21:56 +01:00 committed by AndersBroman
parent b782c599ae
commit 6281ad450b
1 changed files with 359 additions and 463 deletions

File diff suppressed because it is too large Load Diff