<p>Stefan Sperling has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11656">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">use enums consistently instead of falling back to int<br><br>The two existing enums defined in gprs_sndcp_xid.h, for protocol<br>and data compression algorithm numbers respectively, were assigned<br>to 'int' variables when their values were copied to other structures.<br><br>This prevented the compiler from checking the enum value coverage<br>during switch statements and also tripped up Coverity scans looking<br>for enum value mismatch problems.<br><br>So instead of copying enums to ints, make use of the enums throughout.<br>Structures which can contain values from both enums now use a union<br>of both, forcing us to be very explicit about which set of values<br>we are dealing with.<br><br>Change-Id: I3771a5c59f4e6fee24083b3c914965baf192cbd7<br>Related: CID#149102<br>---<br>M include/osmocom/sgsn/gprs_sndcp_comp.h<br>M include/osmocom/sgsn/gprs_sndcp_xid.h<br>M src/gprs/gprs_sndcp.c<br>M src/gprs/gprs_sndcp_comp.c<br>M src/gprs/gprs_sndcp_dcomp.c<br>M src/gprs/gprs_sndcp_pcomp.c<br>M src/gprs/gprs_sndcp_xid.c<br>M tests/sndcp_xid/sndcp_xid_test.c<br>8 files changed, 177 insertions(+), 81 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/56/11656/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/sgsn/gprs_sndcp_comp.h b/include/osmocom/sgsn/gprs_sndcp_comp.h</span><br><span>index c04f7d4..1573132 100644</span><br><span>--- a/include/osmocom/sgsn/gprs_sndcp_comp.h</span><br><span>+++ b/include/osmocom/sgsn/gprs_sndcp_comp.h</span><br><span>@@ -41,9 +41,12 @@</span><br><span>   uint8_t comp[MAX_COMP]; /* see also: 6.5.1.1.5 and 6.6.1.1.5 */</span><br><span> </span><br><span>  /* Algorithm parameters */</span><br><span style="color: hsl(0, 100%, 40%);">-      int algo;               /* Algorithm type (see gprs_sndcp_xid.h) */</span><br><span style="color: hsl(0, 100%, 40%);">-     int compclass;          /* See gprs_sndcp_xid.h/c */</span><br><span style="color: hsl(0, 100%, 40%);">-    void *state;            /* Algorithm status and parameters */</span><br><span style="color: hsl(120, 100%, 40%);">+ union {</span><br><span style="color: hsl(120, 100%, 40%);">+               enum gprs_sndcp_hdr_comp_algo pcomp;</span><br><span style="color: hsl(120, 100%, 40%);">+          enum gprs_sndcp_data_comp_algo dcomp;</span><br><span style="color: hsl(120, 100%, 40%);">+ } algo;                                         /* Algorithm type (see gprs_sndcp_xid.h) */</span><br><span style="color: hsl(120, 100%, 40%);">+   enum gprs_sndcp_xid_param_types compclass;      /* See gprs_sndcp_xid.h/c */</span><br><span style="color: hsl(120, 100%, 40%);">+  void *state;                                    /* Algorithm status and parameters */</span><br><span> };</span><br><span> </span><br><span> #define MAX_COMP 16  /* Maximum number of possible pcomp/dcomp values */</span><br><span>diff --git a/include/osmocom/sgsn/gprs_sndcp_xid.h b/include/osmocom/sgsn/gprs_sndcp_xid.h</span><br><span>index e64bc52..2b63f50 100644</span><br><span>--- a/include/osmocom/sgsn/gprs_sndcp_xid.h</span><br><span>+++ b/include/osmocom/sgsn/gprs_sndcp_xid.h</span><br><span>@@ -32,6 +32,19 @@</span><br><span> #define MAX_NSAPI 11       /* Maximum number usable NSAPIs */</span><br><span> #define MAX_ROHC 16       /* Maximum number of ROHC compression profiles */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* According to: 3GPP TS 44.065, 6.5.1.1.4 Algorithm identifier */</span><br><span style="color: hsl(120, 100%, 40%);">+enum gprs_sndcp_hdr_comp_algo {</span><br><span style="color: hsl(120, 100%, 40%);">+    RFC_1144,               /* TCP/IP header compression, see also 6.5.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+       RFC_2507,               /* TCP/UDP/IP header compression, see also: 6.5.3 */</span><br><span style="color: hsl(120, 100%, 40%);">+  ROHC                    /* Robust Header Compression, see also 6.5.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* According to: 3GPP TS 44.065, 6.5.1.1.4 Algorithm identifier */</span><br><span style="color: hsl(120, 100%, 40%);">+enum gprs_sndcp_data_comp_algo {</span><br><span style="color: hsl(120, 100%, 40%);">+   V42BIS,                 /* V.42bis data compression, see also 6.6.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+        V44                     /* V44 data compression, see also: 6.6.3 */</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* According to: 3GPP TS 44.065, 6.5.1.1 Format of the protocol control</span><br><span>  * information compression field (Figure 7) and 3GPP TS 44.065, </span><br><span>  * 6.6.1.1 Format of the data compression field (Figure 9) */</span><br><span>@@ -45,7 +58,10 @@</span><br><span>       unsigned int entity;</span><br><span> </span><br><span>     /* Algorithm identifier, see also: 6.5.1.1.4 and 6.6.1.1.4 */</span><br><span style="color: hsl(0, 100%, 40%);">-   int algo;</span><br><span style="color: hsl(120, 100%, 40%);">+     union {</span><br><span style="color: hsl(120, 100%, 40%);">+               enum gprs_sndcp_hdr_comp_algo pcomp;</span><br><span style="color: hsl(120, 100%, 40%);">+          enum gprs_sndcp_data_comp_algo dcomp;</span><br><span style="color: hsl(120, 100%, 40%);">+ } algo;</span><br><span> </span><br><span>  /* Number of contained PCOMP / DCOMP values */</span><br><span>       uint8_t comp_len;</span><br><span>@@ -62,24 +78,12 @@</span><br><span>      struct gprs_sndcp_dcomp_v44_params *v44_params;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* According to: 3GPP TS 44.065, 6.5.1.1.4 Algorithm identifier */</span><br><span style="color: hsl(0, 100%, 40%);">-enum gprs_sndcp_hdr_comp_algo {</span><br><span style="color: hsl(0, 100%, 40%);">-      RFC_1144,               /* TCP/IP header compression, see also 6.5.2 */</span><br><span style="color: hsl(0, 100%, 40%);">- RFC_2507,               /* TCP/UDP/IP header compression, see also: 6.5.3 */</span><br><span style="color: hsl(0, 100%, 40%);">-    ROHC                    /* Robust Header Compression, see also 6.5.4 */</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* According to: 3GPP TS 44.065, 6.5.1.1.4 Algorithm identifier */</span><br><span style="color: hsl(0, 100%, 40%);">-enum gprs_sndcp_data_comp_algo {</span><br><span style="color: hsl(0, 100%, 40%);">-     V42BIS,                 /* V.42bis data compression, see also 6.6.2 */</span><br><span style="color: hsl(0, 100%, 40%);">-  V44                     /* V44 data compression, see also: 6.6.3 */</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* According to: 3GPP TS 44.065, 8 SNDCP XID parameters */</span><br><span> enum gprs_sndcp_xid_param_types {</span><br><span>     SNDCP_XID_VERSION_NUMBER,</span><br><span>    SNDCP_XID_DATA_COMPRESSION,     /* See also: subclause 6.6.1 */</span><br><span>      SNDCP_XID_PROTOCOL_COMPRESSION, /* See also: subclause 6.5.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+       SNDCP_XID_INVALID_COMPRESSION   /* Not part of the spec; this means we found an invalid value */</span><br><span> };</span><br><span> </span><br><span> /* According to: 3GPP TS 44.065, 6.5.2.1 Parameters (Table 5) */</span><br><span>@@ -209,7 +213,7 @@</span><br><span> </span><br><span> /* Find out to which compression class the specified comp-field belongs</span><br><span>  * (header compression or data compression?) */</span><br><span style="color: hsl(0, 100%, 40%);">-int gprs_sndcp_get_compression_class(</span><br><span style="color: hsl(120, 100%, 40%);">+enum gprs_sndcp_xid_param_types gprs_sndcp_get_compression_class(</span><br><span>                               const struct gprs_sndcp_comp_field *comp_field);</span><br><span> </span><br><span> /* Dump a list with SNDCP-XID fields (Debug) */</span><br><span>diff --git a/src/gprs/gprs_sndcp.c b/src/gprs/gprs_sndcp.c</span><br><span>index 52eeb75..f0239cb 100644</span><br><span>--- a/src/gprs/gprs_sndcp.c</span><br><span>+++ b/src/gprs/gprs_sndcp.c</span><br><span>@@ -934,7 +934,7 @@</span><br><span>               rfc1144_params.s01 = sgsn->cfg.pcomp_rfc1144.s01;</span><br><span>                 rfc1144_comp_field.p = 1;</span><br><span>            rfc1144_comp_field.entity = entity;</span><br><span style="color: hsl(0, 100%, 40%);">-             rfc1144_comp_field.algo = RFC_1144;</span><br><span style="color: hsl(120, 100%, 40%);">+           rfc1144_comp_field.algo.pcomp = RFC_1144;</span><br><span>            rfc1144_comp_field.comp[RFC1144_PCOMP1] = 1;</span><br><span>                 rfc1144_comp_field.comp[RFC1144_PCOMP2] = 2;</span><br><span>                 rfc1144_comp_field.comp_len = RFC1144_PCOMP_NUM;</span><br><span>@@ -952,7 +952,7 @@</span><br><span>               v42bis_params.p2 = sgsn->cfg.dcomp_v42bis.p2;</span><br><span>             v42bis_comp_field.p = 1;</span><br><span>             v42bis_comp_field.entity = entity;</span><br><span style="color: hsl(0, 100%, 40%);">-              v42bis_comp_field.algo = V42BIS;</span><br><span style="color: hsl(120, 100%, 40%);">+              v42bis_comp_field.algo.dcomp = V42BIS;</span><br><span>               v42bis_comp_field.comp[V42BIS_DCOMP1] = 1;</span><br><span>           v42bis_comp_field.comp_len = V42BIS_DCOMP_NUM;</span><br><span>               v42bis_comp_field.v42bis_params = &v42bis_params;</span><br><span>@@ -1021,7 +1021,7 @@</span><br><span>        comp_field->p = 0;</span><br><span> </span><br><span>    /* Process proposed parameters */</span><br><span style="color: hsl(0, 100%, 40%);">-       switch (comp_field->algo) {</span><br><span style="color: hsl(120, 100%, 40%);">+        switch (comp_field->algo.pcomp) {</span><br><span>         case RFC_1144:</span><br><span>               if (sgsn->cfg.pcomp_rfc1144.passive</span><br><span>                   && comp_field->rfc1144_params->nsapi_len > 0) {</span><br><span>@@ -1068,7 +1068,7 @@</span><br><span>         comp_field->p = 0;</span><br><span> </span><br><span>    /* Process proposed parameters */</span><br><span style="color: hsl(0, 100%, 40%);">-       switch (comp_field->algo) {</span><br><span style="color: hsl(120, 100%, 40%);">+        switch (comp_field->algo.dcomp) {</span><br><span>         case V42BIS:</span><br><span>                 if (sgsn->cfg.dcomp_v42bis.passive &&</span><br><span>                 comp_field->v42bis_params->nsapi_len > 0) {</span><br><span>diff --git a/src/gprs/gprs_sndcp_comp.c b/src/gprs/gprs_sndcp_comp.c</span><br><span>index 60b15b9..0b73de5 100644</span><br><span>--- a/src/gprs/gprs_sndcp_comp.c</span><br><span>+++ b/src/gprs/gprs_sndcp_comp.c</span><br><span>@@ -55,32 +55,36 @@</span><br><span>          memcpy(comp_entity->nsapi,</span><br><span>                       comp_field->rfc1144_params->nsapi,</span><br><span>                     sizeof(comp_entity->nsapi));</span><br><span style="color: hsl(120, 100%, 40%);">+                comp_entity->algo.pcomp = comp_field->algo.pcomp;</span><br><span>      } else if (comp_field->rfc2507_params) {</span><br><span>          comp_entity->nsapi_len = comp_field->rfc2507_params->nsapi_len;</span><br><span>             memcpy(comp_entity->nsapi,</span><br><span>                       comp_field->rfc2507_params->nsapi,</span><br><span>                     sizeof(comp_entity->nsapi));</span><br><span style="color: hsl(120, 100%, 40%);">+                comp_entity->algo.pcomp = comp_field->algo.pcomp;</span><br><span>      } else if (comp_field->rohc_params) {</span><br><span>             comp_entity->nsapi_len = comp_field->rohc_params->nsapi_len;</span><br><span>                memcpy(comp_entity->nsapi, comp_field->rohc_params->nsapi,</span><br><span>                 sizeof(comp_entity->nsapi));</span><br><span style="color: hsl(120, 100%, 40%);">+                comp_entity->algo.pcomp = comp_field->algo.pcomp;</span><br><span>      } else if (comp_field->v42bis_params) {</span><br><span>           comp_entity->nsapi_len = comp_field->v42bis_params->nsapi_len;</span><br><span>              memcpy(comp_entity->nsapi,</span><br><span>                       comp_field->v42bis_params->nsapi,</span><br><span>                      sizeof(comp_entity->nsapi));</span><br><span style="color: hsl(120, 100%, 40%);">+                comp_entity->algo.dcomp = comp_field->algo.dcomp;</span><br><span>      } else if (comp_field->v44_params) {</span><br><span>              comp_entity->nsapi_len = comp_field->v44_params->nsapi_len;</span><br><span>                 memcpy(comp_entity->nsapi,</span><br><span>                       comp_field->v44_params->nsapi,</span><br><span>                 sizeof(comp_entity->nsapi));</span><br><span style="color: hsl(120, 100%, 40%);">+                comp_entity->algo.dcomp = comp_field->algo.dcomp;</span><br><span>      } else {</span><br><span>             /* The caller is expected to check carefully if the all</span><br><span>               * data fields required for compression entity creation</span><br><span>               * are present. Otherwise we blow an assertion here */</span><br><span>               OSMO_ASSERT(false);</span><br><span>  }</span><br><span style="color: hsl(0, 100%, 40%);">-       comp_entity->algo = comp_field->algo;</span><br><span> </span><br><span>      /* Check if an NSAPI is selected, if not, it does not make sense</span><br><span>      * to create the compression entity, since the caller should</span><br><span>@@ -92,7 +96,7 @@</span><br><span>      * (Protocol or Data compresson ?) */</span><br><span>        comp_entity->compclass = gprs_sndcp_get_compression_class(comp_field);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_ASSERT(comp_entity->compclass != -1);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(comp_entity->compclass != SNDCP_XID_INVALID_COMPRESSION);</span><br><span> </span><br><span>         /* Create an algorithm specific compression context */</span><br><span>       if (comp_entity->compclass == SNDCP_XID_PROTOCOL_COMPRESSION) {</span><br><span>diff --git a/src/gprs/gprs_sndcp_dcomp.c b/src/gprs/gprs_sndcp_dcomp.c</span><br><span>index 04ff491..00e40a7 100644</span><br><span>--- a/src/gprs/gprs_sndcp_dcomp.c</span><br><span>+++ b/src/gprs/gprs_sndcp_dcomp.c</span><br><span>@@ -83,7 +83,7 @@</span><br><span>      OSMO_ASSERT(comp_field);</span><br><span> </span><br><span>         if (comp_entity->compclass == SNDCP_XID_DATA_COMPRESSION</span><br><span style="color: hsl(0, 100%, 40%);">-         && comp_entity->algo == V42BIS) {</span><br><span style="color: hsl(120, 100%, 40%);">+          && comp_entity->algo.dcomp == V42BIS) {</span><br><span>               OSMO_ASSERT(comp_field->v42bis_params);</span><br><span>           comp_entity->state =</span><br><span>                  v42bis_init(ctx, NULL, comp_field->v42bis_params->p0,</span><br><span>@@ -114,7 +114,7 @@</span><br><span>        OSMO_ASSERT(comp_entity);</span><br><span> </span><br><span>        if (comp_entity->compclass == SNDCP_XID_DATA_COMPRESSION</span><br><span style="color: hsl(0, 100%, 40%);">-         && comp_entity->algo == V42BIS) {</span><br><span style="color: hsl(120, 100%, 40%);">+          && comp_entity->algo.dcomp == V42BIS) {</span><br><span>               if (comp_entity->state) {</span><br><span>                         v42bis_free((v42bis_state_t *) comp_entity->state);</span><br><span>                       comp_entity->state = NULL;</span><br><span>@@ -293,7 +293,7 @@</span><br><span> </span><br><span>      /* Note: Currently V42BIS is the only compression method we</span><br><span>   * support, so the only allowed algorithm is V42BIS */</span><br><span style="color: hsl(0, 100%, 40%);">-  OSMO_ASSERT(comp_entity->algo == V42BIS);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(comp_entity->algo.dcomp == V42BIS);</span><br><span> </span><br><span>       /* Find pcomp_index */</span><br><span>       pcomp_index = gprs_sndcp_comp_get_idx(comp_entity, pcomp);</span><br><span>@@ -339,7 +339,7 @@</span><br><span> </span><br><span>         /* Note: Currently V42BIS is the only compression method we</span><br><span>   * support, so the only allowed algorithm is V42BIS */</span><br><span style="color: hsl(0, 100%, 40%);">-  OSMO_ASSERT(comp_entity->algo == V42BIS);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_ASSERT(comp_entity->algo.dcomp == V42BIS);</span><br><span> </span><br><span>       /* Run compression algo */</span><br><span>   rc = v42bis_compress_unitdata(&pcomp_index, data, len,</span><br><span>diff --git a/src/gprs/gprs_sndcp_pcomp.c b/src/gprs/gprs_sndcp_pcomp.c</span><br><span>index 2911b5e..5f7f22a 100644</span><br><span>--- a/src/gprs/gprs_sndcp_pcomp.c</span><br><span>+++ b/src/gprs/gprs_sndcp_pcomp.c</span><br><span>@@ -53,7 +53,7 @@</span><br><span>      OSMO_ASSERT(comp_field);</span><br><span> </span><br><span>         if (comp_entity->compclass == SNDCP_XID_PROTOCOL_COMPRESSION</span><br><span style="color: hsl(0, 100%, 40%);">-     && comp_entity->algo == RFC_1144) {</span><br><span style="color: hsl(120, 100%, 40%);">+        && comp_entity->algo.pcomp == RFC_1144) {</span><br><span>             OSMO_ASSERT(comp_field->rfc1144_params);</span><br><span>          comp_entity->state =</span><br><span>                  slhc_init(ctx, comp_field->rfc1144_params->s01 + 1,</span><br><span>@@ -79,7 +79,7 @@</span><br><span>    OSMO_ASSERT(comp_entity);</span><br><span> </span><br><span>        if (comp_entity->compclass == SNDCP_XID_PROTOCOL_COMPRESSION</span><br><span style="color: hsl(0, 100%, 40%);">-     && comp_entity->algo == RFC_1144) {</span><br><span style="color: hsl(120, 100%, 40%);">+        && comp_entity->algo.pcomp == RFC_1144) {</span><br><span>             if (comp_entity->state) {</span><br><span>                         slhc_free((struct slcompress *)comp_entity->state);</span><br><span>                       comp_entity->state = NULL;</span><br><span>@@ -214,7 +214,7 @@</span><br><span> </span><br><span>      /* Note: Currently RFC1144 is the only compression method we</span><br><span>          * support, so the only allowed algorithm is RFC1144 */</span><br><span style="color: hsl(0, 100%, 40%);">- OSMO_ASSERT(comp_entity->algo == RFC_1144);</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_ASSERT(comp_entity->algo.pcomp == RFC_1144);</span><br><span> </span><br><span>     /* Find pcomp_index */</span><br><span>       pcomp_index = gprs_sndcp_comp_get_idx(comp_entity, pcomp);</span><br><span>@@ -263,7 +263,7 @@</span><br><span> </span><br><span>         /* Note: Currently RFC1144 is the only compression method we</span><br><span>          * support, so the only allowed algorithm is RFC1144 */</span><br><span style="color: hsl(0, 100%, 40%);">- OSMO_ASSERT(comp_entity->algo == RFC_1144);</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_ASSERT(comp_entity->algo.pcomp == RFC_1144);</span><br><span> </span><br><span>     /* Run compression algo */</span><br><span>   rc = rfc1144_compress(&pcomp_index, data, len, comp_entity->state);</span><br><span>diff --git a/src/gprs/gprs_sndcp_xid.c b/src/gprs/gprs_sndcp_xid.c</span><br><span>index 8f844b5..44db377 100644</span><br><span>--- a/src/gprs/gprs_sndcp_xid.c</span><br><span>+++ b/src/gprs/gprs_sndcp_xid.c</span><br><span>@@ -42,9 +42,11 @@</span><br><span>  * about the referenced algorithm to the parser. */</span><br><span> struct entity_algo_table {</span><br><span>        unsigned int entity;    /* see also: 6.5.1.1.3 and 6.6.1.1.3 */</span><br><span style="color: hsl(0, 100%, 40%);">- unsigned int algo;      /* see also: 6.5.1.1.4 and 6.6.1.1.4 */</span><br><span style="color: hsl(0, 100%, 40%);">- unsigned int compclass; /* Can be either SNDCP_XID_DATA_COMPRESSION or</span><br><span style="color: hsl(0, 100%, 40%);">-                             SNDCP_XID_PROTOCOL_COMPRESSION */</span><br><span style="color: hsl(120, 100%, 40%);">+  union {</span><br><span style="color: hsl(120, 100%, 40%);">+               enum gprs_sndcp_hdr_comp_algo pcomp;</span><br><span style="color: hsl(120, 100%, 40%);">+          enum gprs_sndcp_data_comp_algo dcomp;</span><br><span style="color: hsl(120, 100%, 40%);">+ } algo; /* see also: 6.5.1.1.4 and 6.6.1.1.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+       enum gprs_sndcp_xid_param_types compclass;</span><br><span> };</span><br><span> </span><br><span> /* FUNCTIONS RELATED TO SNDCP-XID ENCODING */</span><br><span>@@ -386,6 +388,7 @@</span><br><span>  int len;</span><br><span>     int expected_length;</span><br><span>         int i;</span><br><span style="color: hsl(120, 100%, 40%);">+        enum gprs_sndcp_xid_param_types compclass;</span><br><span> </span><br><span>       uint8_t payload_bytes[256];</span><br><span>  int payload_bytes_len = -1;</span><br><span>@@ -443,7 +446,19 @@</span><br><span>   OSMO_ASSERT(comp_field->entity <= 0x1f);</span><br><span> </span><br><span>   /* Check if the algorithm number is within bounds */</span><br><span style="color: hsl(0, 100%, 40%);">-    OSMO_ASSERT(comp_field->algo >= 0 || comp_field->algo <= 0x1f);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ compclass = gprs_sndcp_get_compression_class(comp_field);</span><br><span style="color: hsl(120, 100%, 40%);">+     switch (compclass) {</span><br><span style="color: hsl(120, 100%, 40%);">+  case SNDCP_XID_PROTOCOL_COMPRESSION:</span><br><span style="color: hsl(120, 100%, 40%);">+          OSMO_ASSERT(comp_field->algo.pcomp >= 0 || comp_field->algo.pcomp <= 0x1f);</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case SNDCP_XID_DATA_COMPRESSION:</span><br><span style="color: hsl(120, 100%, 40%);">+              OSMO_ASSERT(comp_field->algo.dcomp >= 0 || comp_field->algo.dcomp <= 0x1f);</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              OSMO_ASSERT(false);</span><br><span style="color: hsl(120, 100%, 40%);">+           break; /* not reached */</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span> </span><br><span>        /* Zero out buffer */</span><br><span>        memset(dst, 0, dst_maxlen);</span><br><span>@@ -459,7 +474,10 @@</span><br><span> </span><br><span>       /* Encode algorithm number */</span><br><span>        if (comp_field->p) {</span><br><span style="color: hsl(0, 100%, 40%);">-         *dst |= comp_field->algo & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+               if (compclass == SNDCP_XID_PROTOCOL_COMPRESSION)</span><br><span style="color: hsl(120, 100%, 40%);">+                      *dst |= comp_field->algo.pcomp & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+         else</span><br><span style="color: hsl(120, 100%, 40%);">+                  *dst |= comp_field->algo.dcomp & 0x1F;</span><br><span>                dst++;</span><br><span>               dst_counter++;</span><br><span>       }</span><br><span>@@ -501,7 +519,7 @@</span><br><span> </span><br><span> /* Find out to which compression class the specified comp-field belongs</span><br><span>  * (header compression or data compression?) */</span><br><span style="color: hsl(0, 100%, 40%);">-int gprs_sndcp_get_compression_class(const struct gprs_sndcp_comp_field</span><br><span style="color: hsl(120, 100%, 40%);">+enum gprs_sndcp_xid_param_types gprs_sndcp_get_compression_class(const struct gprs_sndcp_comp_field</span><br><span>                                     *comp_field)</span><br><span> {</span><br><span>       OSMO_ASSERT(comp_field);</span><br><span>@@ -517,7 +535,7 @@</span><br><span>       else if (comp_field->v44_params)</span><br><span>          return SNDCP_XID_DATA_COMPRESSION;</span><br><span>   else</span><br><span style="color: hsl(0, 100%, 40%);">-            return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+               return SNDCP_XID_INVALID_COMPRESSION;</span><br><span> }</span><br><span> </span><br><span> /* Convert all compression fields to bytstreams */</span><br><span>@@ -1005,10 +1023,10 @@</span><br><span>       return byte_counter;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* Lookup algorithm identfier by entity ID */</span><br><span style="color: hsl(0, 100%, 40%);">-static int lookup_algorithm_identifier(int entity, const struct</span><br><span style="color: hsl(0, 100%, 40%);">-                                      entity_algo_table</span><br><span style="color: hsl(0, 100%, 40%);">-                                       *lt, unsigned int lt_len, int compclass)</span><br><span style="color: hsl(120, 100%, 40%);">+/* Lookup protocol compression algorithm identfier by entity ID */</span><br><span style="color: hsl(120, 100%, 40%);">+static enum gprs_sndcp_hdr_comp_algo lookup_algorithm_identifier_pcomp(int entity,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      const struct entity_algo_table *lt,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   unsigned int lt_len)</span><br><span> {</span><br><span>     int i;</span><br><span> </span><br><span>@@ -1017,26 +1035,46 @@</span><br><span> </span><br><span>     for (i = 0; i < lt_len; i++) {</span><br><span>            if ((lt[i].entity == entity)</span><br><span style="color: hsl(0, 100%, 40%);">-                && (lt[i].compclass == compclass))</span><br><span style="color: hsl(0, 100%, 40%);">-                  return lt[i].algo;</span><br><span style="color: hsl(120, 100%, 40%);">+                && (lt[i].compclass == SNDCP_XID_PROTOCOL_COMPRESSION))</span><br><span style="color: hsl(120, 100%, 40%);">+                   return lt[i].algo.pcomp;</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+    return SNDCP_XID_INVALID_COMPRESSION;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Lookup a data compression algorithm identfier by entity ID */</span><br><span style="color: hsl(120, 100%, 40%);">+static enum gprs_sndcp_data_comp_algo lookup_algorithm_identifier_dcomp(int entity,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    const struct entity_algo_table *lt,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   unsigned int lt_len)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        int i;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!lt)</span><br><span style="color: hsl(120, 100%, 40%);">+              return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  for (i = 0; i < lt_len; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+             if ((lt[i].entity == entity)</span><br><span style="color: hsl(120, 100%, 40%);">+              && (lt[i].compclass == SNDCP_XID_DATA_COMPRESSION))</span><br><span style="color: hsl(120, 100%, 40%);">+                       return lt[i].algo.dcomp;</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return SNDCP_XID_INVALID_COMPRESSION;</span><br><span> }</span><br><span> </span><br><span> /* Helper function for decode_comp_field(), decodes</span><br><span>  * numeric pcomp/dcomp values */</span><br><span> static int decode_comp_values(struct gprs_sndcp_comp_field *comp_field,</span><br><span style="color: hsl(0, 100%, 40%);">-                          const uint8_t *src, int compclass)</span><br><span style="color: hsl(120, 100%, 40%);">+                            const uint8_t *src, enum gprs_sndcp_xid_param_types compclass)</span><br><span> {</span><br><span>    int src_counter = 0;</span><br><span>         int i;</span><br><span> </span><br><span>   if (comp_field->p) {</span><br><span>              /* Determine the number of expected PCOMP/DCOMP values */</span><br><span style="color: hsl(0, 100%, 40%);">-               if (compclass == SNDCP_XID_PROTOCOL_COMPRESSION) {</span><br><span style="color: hsl(120, 100%, 40%);">+            switch (compclass) {</span><br><span style="color: hsl(120, 100%, 40%);">+          case SNDCP_XID_PROTOCOL_COMPRESSION:</span><br><span>                         /* For protocol compression */</span><br><span style="color: hsl(0, 100%, 40%);">-                  switch (comp_field->algo) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        switch (comp_field->algo.pcomp) {</span><br><span>                         case RFC_1144:</span><br><span>                               comp_field->comp_len = RFC1144_PCOMP_NUM;</span><br><span>                                 break;</span><br><span>@@ -1052,9 +1090,10 @@</span><br><span>                      default:</span><br><span>                             return -EINVAL;</span><br><span>                      }</span><br><span style="color: hsl(0, 100%, 40%);">-               } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case SNDCP_XID_DATA_COMPRESSION:</span><br><span>                     /* For data compression */</span><br><span style="color: hsl(0, 100%, 40%);">-                      switch (comp_field->algo) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        switch (comp_field->algo.dcomp) {</span><br><span>                         case V42BIS:</span><br><span>                                 comp_field->comp_len = V42BIS_DCOMP_NUM;</span><br><span>                          break;</span><br><span>@@ -1067,6 +1106,9 @@</span><br><span>                       default:</span><br><span>                             return -EINVAL;</span><br><span>                      }</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</span><br><span style="color: hsl(120, 100%, 40%);">+                default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      return -EINVAL;</span><br><span>              }</span><br><span> </span><br><span>                for (i = 0; i < comp_field->comp_len; i++) {</span><br><span>@@ -1094,7 +1136,7 @@</span><br><span> {</span><br><span>      int rc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     switch (comp_field->algo) {</span><br><span style="color: hsl(120, 100%, 40%);">+        switch (comp_field->algo.pcomp) {</span><br><span>         case RFC_1144:</span><br><span>               comp_field->rfc1144_params = talloc_zero(comp_field, struct</span><br><span>                                       gprs_sndcp_pcomp_rfc1144_params);</span><br><span>@@ -1142,7 +1184,7 @@</span><br><span> {</span><br><span>       int rc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     switch (comp_field->algo) {</span><br><span style="color: hsl(120, 100%, 40%);">+        switch (comp_field->algo.dcomp) {</span><br><span>         case V42BIS:</span><br><span>                 comp_field->v42bis_params = talloc_zero(comp_field, struct</span><br><span>                                        gprs_sndcp_dcomp_v42bis_params);</span><br><span>@@ -1180,7 +1222,8 @@</span><br><span> static int decode_comp_field(struct gprs_sndcp_comp_field *comp_field,</span><br><span>                        const uint8_t *src, unsigned int src_len,</span><br><span>                            const struct entity_algo_table *lt,</span><br><span style="color: hsl(0, 100%, 40%);">-                             unsigned int lt_len, int compclass)</span><br><span style="color: hsl(120, 100%, 40%);">+                           unsigned int lt_len,</span><br><span style="color: hsl(120, 100%, 40%);">+                          enum gprs_sndcp_xid_param_types compclass)</span><br><span> {</span><br><span>         int src_counter = 0;</span><br><span>         unsigned int len;</span><br><span>@@ -1205,15 +1248,34 @@</span><br><span> </span><br><span>      /* Decode algorithm number (if present) */</span><br><span>   if (comp_field->p) {</span><br><span style="color: hsl(0, 100%, 40%);">-         comp_field->algo = (*src) & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+              switch (compclass) {</span><br><span style="color: hsl(120, 100%, 40%);">+          case SNDCP_XID_PROTOCOL_COMPRESSION:</span><br><span style="color: hsl(120, 100%, 40%);">+                  comp_field->algo.pcomp = (*src) & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+                        break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case SNDCP_XID_DATA_COMPRESSION:</span><br><span style="color: hsl(120, 100%, 40%);">+                      comp_field->algo.dcomp = (*src) & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+                        break;</span><br><span style="color: hsl(120, 100%, 40%);">+                default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span>            src_counter++;</span><br><span>               src++;</span><br><span>       }</span><br><span>    /* Alternatively take the information from the lookup table */</span><br><span style="color: hsl(0, 100%, 40%);">-  else</span><br><span style="color: hsl(0, 100%, 40%);">-            comp_field->algo =</span><br><span style="color: hsl(0, 100%, 40%);">-               lookup_algorithm_identifier(comp_field->entity, lt,</span><br><span style="color: hsl(0, 100%, 40%);">-                                              lt_len, compclass);</span><br><span style="color: hsl(120, 100%, 40%);">+   else {</span><br><span style="color: hsl(120, 100%, 40%);">+                switch (compclass) {</span><br><span style="color: hsl(120, 100%, 40%);">+          case SNDCP_XID_PROTOCOL_COMPRESSION:</span><br><span style="color: hsl(120, 100%, 40%);">+                  comp_field->algo.pcomp =</span><br><span style="color: hsl(120, 100%, 40%);">+                       lookup_algorithm_identifier_pcomp(comp_field->entity, lt, lt_len);</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case SNDCP_XID_DATA_COMPRESSION:</span><br><span style="color: hsl(120, 100%, 40%);">+                      comp_field->algo.dcomp =</span><br><span style="color: hsl(120, 100%, 40%);">+                       lookup_algorithm_identifier_dcomp(comp_field->entity, lt, lt_len);</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</span><br><span style="color: hsl(120, 100%, 40%);">+                default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> </span><br><span>        /* Decode length field */</span><br><span>    len = *src;</span><br><span>@@ -1234,7 +1296,7 @@</span><br><span>  else if (compclass == SNDCP_XID_DATA_COMPRESSION)</span><br><span>            rc = decode_dcomp_params(comp_field, src, len);</span><br><span>      else</span><br><span style="color: hsl(0, 100%, 40%);">-            return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+               return SNDCP_XID_INVALID_COMPRESSION;</span><br><span> </span><br><span>    if (rc >= 0)</span><br><span>              src_counter += rc;</span><br><span>@@ -1368,7 +1430,7 @@</span><br><span> {</span><br><span>      struct gprs_sndcp_comp_field *comp_field;</span><br><span>    int i = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-      int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+       enum gprs_sndcp_xid_param_types compclass;</span><br><span> </span><br><span>       if (!comp_fields)</span><br><span>            return -EINVAL;</span><br><span>@@ -1378,17 +1440,22 @@</span><br><span>    memset(lt, 0, sizeof(*lt));</span><br><span> </span><br><span>      llist_for_each_entry(comp_field, comp_fields, list) {</span><br><span style="color: hsl(0, 100%, 40%);">-           if (comp_field->algo >= 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+            compclass = gprs_sndcp_get_compression_class(comp_field);</span><br><span style="color: hsl(120, 100%, 40%);">+             if (compclass != SNDCP_XID_INVALID_COMPRESSION) {</span><br><span>                    lt[i].entity = comp_field->entity;</span><br><span style="color: hsl(0, 100%, 40%);">-                   lt[i].algo = comp_field->algo;</span><br><span style="color: hsl(0, 100%, 40%);">-                       rc = gprs_sndcp_get_compression_class(comp_field);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                      if (rc < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      switch (compclass) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  case SNDCP_XID_PROTOCOL_COMPRESSION:</span><br><span style="color: hsl(120, 100%, 40%);">+                          lt[i].algo.pcomp = comp_field->algo.pcomp;</span><br><span style="color: hsl(120, 100%, 40%);">+                         break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        case SNDCP_XID_DATA_COMPRESSION:</span><br><span style="color: hsl(120, 100%, 40%);">+                              lt[i].algo.dcomp = comp_field->algo.dcomp;</span><br><span style="color: hsl(120, 100%, 40%);">+                         break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        default:</span><br><span>                             memset(lt, 0, sizeof(*lt));</span><br><span>                          return -EINVAL;</span><br><span>                      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                   lt[i].compclass = rc;</span><br><span style="color: hsl(120, 100%, 40%);">+                 lt[i].compclass = compclass;</span><br><span>                         i++;</span><br><span>                 }</span><br><span>    }</span><br><span>@@ -1402,7 +1469,10 @@</span><br><span>                                 *comp_field_dst, const struct</span><br><span>                                gprs_sndcp_comp_field *comp_field_src)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-       if (comp_field_dst->algo < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+   enum gprs_sndcp_xid_param_types compclass;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  compclass = gprs_sndcp_get_compression_class(comp_field_dst);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (compclass == SNDCP_XID_INVALID_COMPRESSION)</span><br><span>              return -EINVAL;</span><br><span> </span><br><span>  if (comp_field_dst->rfc1144_params && comp_field_src->rfc1144_params) {</span><br><span>@@ -1626,7 +1696,7 @@</span><br><span> {</span><br><span>   int i;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      switch (comp_field->algo) {</span><br><span style="color: hsl(120, 100%, 40%);">+        switch (comp_field->algo.pcomp) {</span><br><span>         case RFC_1144:</span><br><span>               if (comp_field->rfc1144_params == NULL) {</span><br><span>                         LOGP(DSNDCP, logl,</span><br><span>@@ -1726,7 +1796,7 @@</span><br><span> {</span><br><span>      int i;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      switch (comp_field->algo) {</span><br><span style="color: hsl(120, 100%, 40%);">+        switch (comp_field->algo.dcomp) {</span><br><span>         case V42BIS:</span><br><span>                 if (comp_field->v42bis_params == NULL) {</span><br><span>                  LOGP(DSNDCP, logl,</span><br><span>@@ -1791,15 +1861,26 @@</span><br><span> {</span><br><span>    struct gprs_sndcp_comp_field *comp_field;</span><br><span>    int i;</span><br><span style="color: hsl(0, 100%, 40%);">-  int compclass;</span><br><span style="color: hsl(120, 100%, 40%);">+        enum gprs_sndcp_xid_param_types compclass;</span><br><span> </span><br><span>       OSMO_ASSERT(comp_fields);</span><br><span> </span><br><span>        llist_for_each_entry(comp_field, comp_fields, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+         compclass = gprs_sndcp_get_compression_class(comp_field);</span><br><span>            LOGP(DSNDCP, logl, "SNDCP-XID:\n");</span><br><span>                LOGP(DSNDCP, logl, "struct gprs_sndcp_comp_field {\n");</span><br><span>            LOGP(DSNDCP, logl, "   entity=%d;\n", comp_field->entity);</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGP(DSNDCP, logl, "   algo=%d;\n", comp_field->algo);</span><br><span style="color: hsl(120, 100%, 40%);">+           switch (compclass) {</span><br><span style="color: hsl(120, 100%, 40%);">+          case SNDCP_XID_PROTOCOL_COMPRESSION:</span><br><span style="color: hsl(120, 100%, 40%);">+                  LOGP(DSNDCP, logl, "   algo=%d;\n", comp_field->algo.pcomp);</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case SNDCP_XID_DATA_COMPRESSION:</span><br><span style="color: hsl(120, 100%, 40%);">+                      LOGP(DSNDCP, logl, "   algo=%d;\n", comp_field->algo.dcomp);</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</span><br><span style="color: hsl(120, 100%, 40%);">+                default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      LOGP(DSNDCP, logl, "   algo invalid!\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                   break;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span>            LOGP(DSNDCP, logl, "   comp_len=%d;\n", comp_field->comp_len);</span><br><span>          if (comp_field->comp_len == 0)</span><br><span>                    LOGP(DSNDCP, logl, "   comp[] = NULL;\n");</span><br><span>@@ -1808,12 +1889,16 @@</span><br><span>                            comp_field->comp[i]);</span><br><span>                }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           compclass = gprs_sndcp_get_compression_class(comp_field);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               if (compclass == SNDCP_XID_PROTOCOL_COMPRESSION) {</span><br><span style="color: hsl(120, 100%, 40%);">+            switch (compclass) {</span><br><span style="color: hsl(120, 100%, 40%);">+          case SNDCP_XID_PROTOCOL_COMPRESSION:</span><br><span>                         dump_pcomp_params(comp_field, logl);</span><br><span style="color: hsl(0, 100%, 40%);">-            } else if (compclass == SNDCP_XID_DATA_COMPRESSION) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case SNDCP_XID_DATA_COMPRESSION:</span><br><span>                     dump_dcomp_params(comp_field, logl);</span><br><span style="color: hsl(120, 100%, 40%);">+                  break;</span><br><span style="color: hsl(120, 100%, 40%);">+                default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      LOGP(DSNDCP, logl, "   compression algorithm invalid!\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                  break;</span><br><span>               }</span><br><span> </span><br><span>                LOGP(DSNDCP, logl, "}\n");</span><br><span>diff --git a/tests/sndcp_xid/sndcp_xid_test.c b/tests/sndcp_xid/sndcp_xid_test.c</span><br><span>index 5ed695c..56b97e3 100644</span><br><span>--- a/tests/sndcp_xid/sndcp_xid_test.c</span><br><span>+++ b/tests/sndcp_xid/sndcp_xid_test.c</span><br><span>@@ -106,7 +106,7 @@</span><br><span>      /* Setup rfc1144 compression field */</span><br><span>        rfc1144_comp_field.p = 1;</span><br><span>    rfc1144_comp_field.entity = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-  rfc1144_comp_field.algo = RFC_1144;</span><br><span style="color: hsl(120, 100%, 40%);">+   rfc1144_comp_field.algo.pcomp = RFC_1144;</span><br><span>    rfc1144_comp_field.comp[RFC1144_PCOMP1] = 1;</span><br><span>         rfc1144_comp_field.comp[RFC1144_PCOMP2] = 2;</span><br><span>         rfc1144_comp_field.comp_len = RFC1144_PCOMP_NUM;</span><br><span>@@ -126,7 +126,7 @@</span><br><span>       /* Setup rfc2507 compression field */</span><br><span>        rfc2507_comp_field.p = 1;</span><br><span>    rfc2507_comp_field.entity = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-  rfc2507_comp_field.algo = RFC_2507;</span><br><span style="color: hsl(120, 100%, 40%);">+   rfc2507_comp_field.algo.pcomp = RFC_2507;</span><br><span>    rfc2507_comp_field.comp[RFC2507_PCOMP1] = 3;</span><br><span>         rfc2507_comp_field.comp[RFC2507_PCOMP2] = 4;</span><br><span>         rfc2507_comp_field.comp[RFC2507_PCOMP3] = 5;</span><br><span>@@ -173,7 +173,7 @@</span><br><span>   /* Setup ROHC compression field */</span><br><span>   rohc_comp_field.p = 1;</span><br><span>       rohc_comp_field.entity = 2;</span><br><span style="color: hsl(0, 100%, 40%);">-     rohc_comp_field.algo = ROHC;</span><br><span style="color: hsl(120, 100%, 40%);">+  rohc_comp_field.algo.pcomp = ROHC;</span><br><span>   rohc_comp_field.comp[ROHC_PCOMP1] = 8;</span><br><span>       rohc_comp_field.comp[ROHC_PCOMP2] = 9;</span><br><span>       rohc_comp_field.comp_len = ROHC_PCOMP_NUM;</span><br><span>@@ -191,7 +191,7 @@</span><br><span>     /* Setup v42bis compression field */</span><br><span>         v42bis_comp_field.p = 1;</span><br><span>     v42bis_comp_field.entity = 3;</span><br><span style="color: hsl(0, 100%, 40%);">-   v42bis_comp_field.algo = V42BIS;</span><br><span style="color: hsl(120, 100%, 40%);">+      v42bis_comp_field.algo.dcomp = V42BIS;</span><br><span>       v42bis_comp_field.comp[V42BIS_DCOMP1] = 10;</span><br><span>  v42bis_comp_field.comp_len = V42BIS_DCOMP_NUM;</span><br><span>       v42bis_comp_field.v42bis_params = &v42bis_params;</span><br><span>@@ -211,7 +211,7 @@</span><br><span>  /* Setup v44 compression field */</span><br><span>    v44_comp_field.p = 1;</span><br><span>        v44_comp_field.entity = 3;</span><br><span style="color: hsl(0, 100%, 40%);">-      v44_comp_field.algo = V44;</span><br><span style="color: hsl(120, 100%, 40%);">+    v44_comp_field.algo.dcomp = V44;</span><br><span>     v44_comp_field.comp[V44_DCOMP1] = 10;</span><br><span>        v44_comp_field.comp[V44_DCOMP2] = 11;</span><br><span>        v44_comp_field.comp_len = V44_DCOMP_NUM;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11656">change 11656</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/11656"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-sgsn </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I3771a5c59f4e6fee24083b3c914965baf192cbd7 </div>
<div style="display:none"> Gerrit-Change-Number: 11656 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Stefan Sperling <ssperling@sysmocom.de> </div>