summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-05-15 12:45:59 +0200
committerHarald Welte <laforge@gnumonks.org>2017-05-15 13:42:03 +0200
commit50ef73377cb9235adafe673c2bfa7a9dc02c0c02 (patch)
treee9aa58405bed62fd9427df03642f3a3831c37015
parent95871dadbd92048b0dc2ceb2d631a53e062a7420 (diff)
tlv: Add tlvp_val{16,32}be() to get TLV values in unaligned host byte order
Change-Id: I3749e1e4974742bc8c32722e0e998775b5394829
-rw-r--r--include/osmocom/gsm/tlv.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/include/osmocom/gsm/tlv.h b/include/osmocom/gsm/tlv.h
index 701fe688..8caddae8 100644
--- a/include/osmocom/gsm/tlv.h
+++ b/include/osmocom/gsm/tlv.h
@@ -4,6 +4,8 @@
#include <string.h>
#include <osmocom/core/msgb.h>
+#include <osmocom/core/bit16gen.h>
+#include <osmocom/core/bit32gen.h>
/*! \defgroup tlv GSM L3 compatible TLV parser
* @{
@@ -436,6 +438,27 @@ static inline uint32_t tlvp_val32_unal(const struct tlv_parsed *tp, int pos)
return res;
}
+/*! \brief Retrieve (possibly unaligned) TLV element and convert to host byte order
+ * \param[in] tp pointer to \ref tlv_parsed
+ * \param[in] pos element to return
+ * \returns aligned 16 bit value in host byte order
+ */
+static inline uint16_t tlvp_val16be(const struct tlv_parsed *tp, int pos)
+{
+ return osmo_load16be(TLVP_VAL(tp, pos));
+}
+
+/*! \brief Retrieve (possibly unaligned) TLV element and convert to host byte order
+ * \param[in] tp pointer to \ref tlv_parsed
+ * \param[in] pos element to return
+ * \returns aligned 32 bit value in host byte order
+ */
+static inline uint32_t tlvp_val32be(const struct tlv_parsed *tp, int pos)
+{
+ return osmo_load32be(TLVP_VAL(tp, pos));
+}
+
+
struct tlv_parsed *osmo_tlvp_copy(const struct tlv_parsed *tp_orig, void *ctx);
int osmo_tlvp_merge(struct tlv_parsed *dst, const struct tlv_parsed *src);
int osmo_shift_v_fixed(uint8_t **data, size_t *data_len,