diff options
author | Patrick McHardy <kaber@trash.net> | 2010-11-23 15:27:43 +0100 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2010-11-23 15:27:43 +0100 |
commit | e9b582747015e463fc0cdf692f4eb4e8b0f4b35f (patch) | |
tree | ed9de8b868209755bc3eee6f87d88fae193486a6 | |
parent | 3dd2f8afdddf22687c4d8dc2639191119818c860 (diff) |
ie: add <<SERVICE-CHANGE>> IE
Signed-off-by: Patrick McHardy <kaber@trash.net>
-rw-r--r-- | include/dect/ie.h | 20 | ||||
-rw-r--r-- | src/s_msg.c | 40 |
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", |