From 5078148829920b7e7b8269b5a6420c0a999cc877 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 10 Jan 2010 17:45:23 +0100 Subject: [PATCH] TLV: add function to patch a tlv definition table --- openbsc/include/openbsc/tlv.h | 3 +++ openbsc/src/tlv_parser.c | 13 +++++++++++++ 2 files changed, 16 insertions(+) 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;