dect
/
libdect
Archived
13
0
Fork 0

ie: add <<SERVICE-CHANGE>> IE

Signed-off-by: Patrick McHardy <kaber@trash.net>
This commit is contained in:
Patrick McHardy 2010-11-23 15:27:43 +01:00
parent 3dd2f8afdd
commit e9b5827470
2 changed files with 60 additions and 0 deletions

View File

@ -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;
};
/**

View File

@ -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",