summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2010-11-23 15:27:43 +0100
committerPatrick McHardy <kaber@trash.net>2010-11-23 15:27:43 +0100
commite9b582747015e463fc0cdf692f4eb4e8b0f4b35f (patch)
treeed9de8b868209755bc3eee6f87d88fae193486a6
parent3dd2f8afdddf22687c4d8dc2639191119818c860 (diff)
ie: add <<SERVICE-CHANGE>> IE
Signed-off-by: Patrick McHardy <kaber@trash.net>
-rw-r--r--include/dect/ie.h20
-rw-r--r--src/s_msg.c40
2 files changed, 60 insertions, 0 deletions
diff --git a/include/dect/ie.h b/include/dect/ie.h
index 3d0a7f2..e05bb67 100644
--- a/include/dect/ie.h
+++ b/include/dect/ie.h
@@ -1596,9 +1596,29 @@ struct dect_ie_segmented_info {
* @{
*/
+enum dect_service_change_modes {
+ DECT_SERVICE_CHANGE_NONE = 0x0,
+ DECT_SERVICE_CHANGE_CONNECTION_REVERSAL = 0x1,
+ DECT_SERVICE_CHANGE_BANDWIDTH = 0x2,
+ DECT_SERVICE_CHANGE_MODULATION = 0x3,
+ DECT_SERVICE_CHANGE_REROUTING = 0x4,
+ DECT_SERVICE_CHANGE_BANDWIDTH_PLUS_MODULATION = 0x5,
+ DECT_SERVICE_CHANGE_REROUTING_PLUS_BANDWIDTH = 0x6,
+ DECT_SERVICE_CHANGE_BANDWIDTH_OR_MODULATION = 0x7,
+ DECT_SERVICE_CHANGE_SUSPEND = 0x8,
+ DECT_SERVICE_CHANGE_RESUME = 0x9,
+ DECT_SERVICE_CHANGE_VOICE_DATA_TO_DATA = 0xa,
+ DECT_SERVICE_CHANGE_VOICE_DATA_TO_VOICE = 0xb,
+ DECT_SERVICE_CHANGE_IWU_ATTRIBUTES = 0xc,
+ DECT_SERVICE_CHANGE_AUDIO_CODEC = 0xd,
+ DECT_SERVICE_CHANGE_BASIC_SERVICE_AND_IWU_ATTRIBUTES = 0xe,
+};
+
/** <<SERVICE-CHANGE-INFO>> IE */
struct dect_ie_service_change_info {
struct dect_ie_common common;
+ bool master;
+ enum dect_service_change_modes mode;
};
/**
diff --git a/src/s_msg.c b/src/s_msg.c
index 2e0923c..3358f92 100644
--- a/src/s_msg.c
+++ b/src/s_msg.c
@@ -852,6 +852,44 @@ static int dect_sfmt_build_auth_res(struct dect_sfmt_ie *dst,
return 0;
}
+static const struct dect_trans_tbl dect_service_change_modes[] = {
+ TRANS_TBL(DECT_SERVICE_CHANGE_NONE, "None"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_CONNECTION_REVERSAL, "Connection Reversal"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_BANDWIDTH, "Bandwidth change"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_MODULATION, "Modulation scheme change"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_REROUTING, "Rerouting of U-plane links"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_BANDWIDTH_PLUS_MODULATION, "Bandwidth plus modulation scheme change"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_REROUTING_PLUS_BANDWIDTH, "Rerouting plus bandwidth change"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_BANDWIDTH_OR_MODULATION, "Bandwidth or modulation scheme change"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_SUSPEND, "Suspend"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_RESUME, "Resume"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_VOICE_DATA_TO_DATA, "Voice/data change to data"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_VOICE_DATA_TO_VOICE, "Voice/data change to voice"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_IWU_ATTRIBUTES, "IWU attribute change"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_AUDIO_CODEC, "Audio Codec change"),
+ TRANS_TBL(DECT_SERVICE_CHANGE_BASIC_SERVICE_AND_IWU_ATTRIBUTES, "Profile/Basic service and IWU attributes change"),
+};
+
+static void dect_sfmt_dump_service_change_info(const struct dect_ie_common *_ie)
+{
+ const struct dect_ie_service_change_info *ie = dect_ie_container(ie, _ie);
+ char buf[128];
+
+ sfmt_debug("\tmaster: %d\n", ie->master);
+ sfmt_debug("\tmode: %s\n", dect_val2str(dect_service_change_modes, buf, ie->mode));
+}
+
+static int dect_sfmt_parse_service_change_info(const struct dect_handle *dh,
+ struct dect_ie_common **ie,
+ const struct dect_sfmt_ie *src)
+{
+ struct dect_ie_service_change_info *dst = dect_ie_container(dst, *ie);
+
+ dst->master = src->data[2] & 0x40;
+ dst->mode = src->data[2] & 0x0f;
+ return 0;
+}
+
static const struct dect_trans_tbl dect_cipher_algs[] = {
TRANS_TBL(DECT_CIPHER_STANDARD_1, "DECT Standard Cipher 1"),
TRANS_TBL(DECT_CIPHER_GPRS_NO_CIPHERING, "GPRS ciphering not used"),
@@ -2253,6 +2291,8 @@ static const struct dect_ie_handler {
[DECT_IE_SERVICE_CHANGE_INFO] = {
.name = "SERVICE-CHANGE-INFO",
.size = sizeof(struct dect_ie_service_change_info),
+ .parse = dect_sfmt_parse_service_change_info,
+ .dump = dect_sfmt_dump_service_change_info,
},
[DECT_IE_CONNECTION_ATTRIBUTES] = {
.name = "CONNECTION-ATTRIBUTES",