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:
parent
b782c599ae
commit
6281ad450b