wip
Change-Id: I4fdcebf3b006a72c5318a9105a2be2cc7057dca1
diff --git a/include/osmocom/mgcp/iuup_protocol.h b/include/osmocom/mgcp/iuup_protocol.h
index 108bcaa..f4aec1f 100644
--- a/include/osmocom/mgcp/iuup_protocol.h
+++ b/include/osmocom/mgcp/iuup_protocol.h
@@ -21,6 +21,9 @@
enum osmo_iuup_procedure {
OSMO_IUUP_PROC_INITIALIZATION = 0,
+ OSMO_IUUP_PROC_RATE_CONTROL = 1,
+ OSMO_IUUP_PROC_TIME_ALIGNMENT = 2,
+ OSMO_IUUP_PROC_ERROR_EVENT = 3,
};
enum osmo_iuup_frame_good {
@@ -40,10 +43,6 @@
payload_crc_hi:2;
uint8_t payload_crc_lo;
uint8_t payload[0];
- uint8_t spare:3,
- iptis_present:1,
- subflows:3,
- chain:1;
#elif OSMO_IS_LITTLE_ENDIAN
uint8_t frame_nr:2,
ack_nack:2,
@@ -54,12 +53,38 @@
header_crc:6;
uint8_t payload_crc_lo;
uint8_t payload[0];
+#endif
+} __attribute__((packed));
+
+union osmo_iuup_hdr_ctrl_payload {
+ struct {
+#if OSMO_IS_BIG_ENDIAN
+ uint8_t spare:3,
+ iptis_present:1,
+ subflows:3,
+ chain:1;
+#elif OSMO_IS_LITTLE_ENDIAN
uint8_t spare:3,
iptis_present:1,
subflows:3,
chain:1;
#endif
-} __attribute__((packed));
+ } initialization;
+
+ struct {
+#if OSMO_IS_BIG_ENDIAN
+ uint8_t error_distance:2,
+ error_cause:6;
+#elif OSMO_IS_LITTLE_ENDIAN
+ uint8_t error_cause:6,
+ error_distance:2;
+#endif
+ } error_event;
+};
+
+extern const struct value_string osmo_iuup_error_cause_names[];
+static inline const char *osmo_iuup_error_cause_name(uint8_t val)
+{ return get_value_string(osmo_iuup_error_cause_names, val); }
struct osmo_iuup_hdr_data {
#if OSMO_IS_BIG_ENDIAN