aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorHarald Welte <laflocal@goeller.de.gnumonks.org>2010-01-10 17:45:23 +0100
committerHarald Welte <laflocal@goeller.de.gnumonks.org>2010-01-10 17:45:23 +0100
commit5078148829920b7e7b8269b5a6420c0a999cc877 (patch)
treee9c2e7e77956ad57f0fd0f1c2b6b5a9717967600 /openbsc
parent6e670aab5af6a355ea69edafb5d4f8adf387557a (diff)
TLV: add function to patch a tlv definition table
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/include/openbsc/tlv.h3
-rw-r--r--openbsc/src/tlv_parser.c13
2 files changed, 16 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/tlv.h b/openbsc/include/openbsc/tlv.h
index e970ce468..c90643eed 100644
--- a/openbsc/include/openbsc/tlv.h
+++ b/openbsc/include/openbsc/tlv.h
@@ -185,6 +185,7 @@ struct tlv_p_entry {
};
enum tlv_type {
+ TLV_TYPE_NONE,
TLV_TYPE_FIXED,
TLV_TYPE_T,
TLV_TYPE_TV,
@@ -213,6 +214,8 @@ int tlv_parse_one(u_int8_t *o_tag, u_int16_t *o_len, const u_int8_t **o_val,
const u_int8_t *buf, int buf_len);
int tlv_parse(struct tlv_parsed *dec, const struct tlv_definition *def,
const u_int8_t *buf, int buf_len, u_int8_t lv_tag, u_int8_t lv_tag2);
+/* take a master (src) tlvdev and fill up all empty slots in 'dst' */
+void tlv_def_patch(struct tlv_definition *dst, const struct tlv_definition *src);
#define TLVP_PRESENT(x, y) ((x)->lv[y].val)
#define TLVP_LEN(x, y) (x)->lv[y].len
diff --git a/openbsc/src/tlv_parser.c b/openbsc/src/tlv_parser.c
index fd0045f97..13ca7b14b 100644
--- a/openbsc/src/tlv_parser.c
+++ b/openbsc/src/tlv_parser.c
@@ -149,6 +149,19 @@ int tlv_parse(struct tlv_parsed *dec, const struct tlv_definition *def,
return num_parsed;
}
+/* take a master (src) tlvdev and fill up all empty slots in 'dst' */
+void tlv_def_patch(struct tlv_definition *dst, const struct tlv_definition *src)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(dst->def); i++) {
+ if (src->def[i].type == TLV_TYPE_NONE)
+ continue;
+ if (dst->def[i].type == TLV_TYPE_NONE)
+ dst->def[i] = src->def[i];
+ }
+}
+
static __attribute__((constructor)) void on_dso_load_tlv(void)
{
int i;