aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2023-07-26 19:00:30 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2023-07-26 19:00:32 +0200
commitf4fca416e2f619b37146e2a026afa83d0f5eae90 (patch)
tree10f762671d1790d46cf878a7b20967e6e52b84f6
parent678daf22cace561d0a0af5e393702ad451fa766c (diff)
llc: xid: Introduce some helper internal functions to make code easier to follow
Take the chance to fix wrong indentation on related function parameter. Change-Id: I8c0163583efc2720a4b2675ce93293c184f80d0c
-rw-r--r--include/osmocom/gprs/llc/llc_private.h4
-rw-r--r--src/llc/llc_xid.c33
2 files changed, 26 insertions, 11 deletions
diff --git a/include/osmocom/gprs/llc/llc_private.h b/include/osmocom/gprs/llc/llc_private.h
index 44d32e2..b2b9047 100644
--- a/include/osmocom/gprs/llc/llc_private.h
+++ b/include/osmocom/gprs/llc/llc_private.h
@@ -343,8 +343,8 @@ int gprs_llc_xid_encode(uint8_t *data, size_t data_len,
const struct gprs_llc_xid_field *fields,
unsigned int num_fields);
struct gprs_llc_xid_field *gprs_llc_xid_deepcopy(void *ctx,
- const struct gprs_llc_xid_field *src_xid,
- size_t src_xid_len);
+ const struct gprs_llc_xid_field *src_xid,
+ size_t src_xid_len);
/* llc_pdu.c: */
int gprs_llc_pdu_decode(struct gprs_llc_pdu_decoded *pdu,
diff --git a/src/llc/llc_xid.c b/src/llc/llc_xid.c
index deeeaa7..9280416 100644
--- a/src/llc/llc_xid.c
+++ b/src/llc/llc_xid.c
@@ -76,6 +76,24 @@ static const struct {
[OSMO_GPRS_LLC_XID_T_MAC_IOV_UI] = { .len = 4, .min = 0, .max = UINT32_MAX },
};
+static inline bool gprs_llc_xid_type_is_variable_len(enum gprs_llc_xid_type t)
+{
+ return gprs_llc_xid_desc[t].var_len;
+}
+
+static inline bool gprs_llc_xid_type_is_fixed_len(enum gprs_llc_xid_type t)
+{
+ return !gprs_llc_xid_desc[t].var_len;
+}
+
+static inline uint8_t gprs_llc_xid_field_get_len(const struct gprs_llc_xid_field *field)
+{
+ if (gprs_llc_xid_type_is_variable_len(field->type))
+ return field->var.val_len;
+ else
+ return gprs_llc_xid_desc[field->type].len;
+}
+
bool gprs_llc_xid_field_is_valid(const struct gprs_llc_xid_field *field)
{
if (field->type >= ARRAY_SIZE(gprs_llc_xid_desc)) {
@@ -84,7 +102,7 @@ bool gprs_llc_xid_field_is_valid(const struct gprs_llc_xid_field *field)
return false;
}
- if (gprs_llc_xid_desc[field->type].var_len)
+ if (gprs_llc_xid_type_is_variable_len(field->type))
return true;
if (field->var.val_len > 0) {
@@ -139,10 +157,7 @@ int gprs_llc_xid_encode(uint8_t *data, size_t data_len,
hdr[0] = (field->type & 0x1f) << 2;
/* XID field length */
- if (gprs_llc_xid_desc[field->type].var_len)
- len = field->var.val_len;
- else
- len = gprs_llc_xid_desc[field->type].len;
+ len = gprs_llc_xid_field_get_len(field);
if (len == 0)
continue;
@@ -158,7 +173,7 @@ int gprs_llc_xid_encode(uint8_t *data, size_t data_len,
}
/* XID field value (variable length) */
- if (gprs_llc_xid_desc[field->type].var_len) {
+ if (gprs_llc_xid_type_is_variable_len(field->type)) {
if (wptr + len - data > data_len)
return -EINVAL;
memcpy(wptr, field->var.val, len);
@@ -240,7 +255,7 @@ int gprs_llc_xid_decode(struct gprs_llc_xid_field *fields,
data_len -= len;
/* XID field value (variable length) */
- if (gprs_llc_xid_desc[field->type].var_len) {
+ if (gprs_llc_xid_type_is_variable_len(field->type)) {
field->var.val = len ? ptr : NULL;
field->var.val_len = len;
} else {
@@ -285,8 +300,8 @@ int gprs_llc_xid_decode(struct gprs_llc_xid_field *fields,
/* Return Deep copy of a xid_field array allocated using talloc ctx. */
struct gprs_llc_xid_field *gprs_llc_xid_deepcopy(void *ctx,
- const struct gprs_llc_xid_field *src_xid,
- size_t src_xid_len)
+ const struct gprs_llc_xid_field *src_xid,
+ size_t src_xid_len)
{
size_t bytes_len = sizeof(*src_xid) * src_xid_len;
struct gprs_llc_xid_field *dst_xid;