Added single octet TV (type + value) to libosmocore.
authorAndreas Eversberg <jolly@eversberg.eu>
Mon, 12 Jul 2010 06:55:14 +0000 (08:55 +0200)
committerHarald Welte <laforge@gnumonks.org>
Mon, 12 Jul 2010 06:55:14 +0000 (08:55 +0200)
In case of a single octet, the upper nibble is the type, the lower nibble
carries the value.

[import from accidentially committed changes to osmocom-bb.git]
diff --git a/src/shared/libosmocore/include/osmocore/tlv.h b/src/shared/libosmocore/include/osmocore/tlv.h
index c733dbc..4cfce87 100644
--- a/src/shared/libosmocore/include/osmocore/tlv.h
+++ b/src/shared/libosmocore/include/osmocore/tlv.h
@@ -212,6 +212,7 @@ enum tlv_type {
  TLV_TYPE_TLV,
  TLV_TYPE_TL16V,
  TLV_TYPE_TvLV,
+ TLV_TYPE_SINGLE_TV
 };

 struct tlv_def {
diff --git a/src/shared/libosmocore/src/tlv_parser.c b/src/shared/libosmocore/src/tlv_parser.c
index 407e57a..bbef7a9 100644
--- a/src/shared/libosmocore/src/tlv_parser.c
+++ b/src/shared/libosmocore/src/tlv_parser.c
@@ -36,6 +36,14 @@ int tlv_parse_one(uint8_t *o_tag, uint16_t *o_len, const uint8_t **o_val,
  tag = *buf;
  *o_tag = tag;

+ /* single octet TV IE */
+ if (def->def[tag & 0xf0].type == TLV_TYPE_SINGLE_TV) {
+ *o_tag = tag & 0xf0;
+ *o_val = buf;
+ *o_len = 1;
+ return 1;
+ }
+
  /* FIXME: use tables for knwon IEI */
  switch (def->def[tag].type) {
  case TLV_TYPE_T:

include/osmocore/tlv.h
src/tlv_parser.c

index c733dbc..4cfce87 100644 (file)
@@ -212,6 +212,7 @@ enum tlv_type {
        TLV_TYPE_TLV,
        TLV_TYPE_TL16V,
        TLV_TYPE_TvLV,
+       TLV_TYPE_SINGLE_TV
 };
 
 struct tlv_def {
index 407e57a..bbef7a9 100644 (file)
@@ -36,6 +36,14 @@ int tlv_parse_one(uint8_t *o_tag, uint16_t *o_len, const uint8_t **o_val,
        tag = *buf;
        *o_tag = tag;
 
+       /* single octet TV IE */
+       if (def->def[tag & 0xf0].type == TLV_TYPE_SINGLE_TV) {
+               *o_tag = tag & 0xf0;
+               *o_val = buf;
+               *o_len = 1;
+               return 1;
+       }
+
        /* FIXME: use tables for knwon IEI */
        switch (def->def[tag].type) {
        case TLV_TYPE_T: