diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2023-08-30 02:08:32 +0200 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2024-03-22 06:14:38 +0100 |
commit | b1ab87e3c09c32800a8d304b841601cd2a16e69f (patch) | |
tree | 9841276b5f370fc4f6f49bdb2447c1a0a406c6e9 | |
parent | fee1806a895716860c7ed15459e2b88e2f996605 (diff) |
ranap RAB: set min/max bitrates dynamically
Change-Id: I003e9f29a57efd30e8cf71b9fbff16b6ab2f979d
-rw-r--r-- | src/ranap_msg_factory.c | 27 | ||||
-rw-r--r-- | tests/test-ranap.ok | 8 |
2 files changed, 28 insertions, 7 deletions
diff --git a/src/ranap_msg_factory.c b/src/ranap_msg_factory.c index a5daae0..53099be 100644 --- a/src/ranap_msg_factory.c +++ b/src/ranap_msg_factory.c @@ -545,6 +545,18 @@ new_format_info_pars(long sdu_size) return fmti; } +static int amr_mode_to_bitrate[OSMO_RANAP_RAB_MODE_COUNT] = { + [OSMO_RANAP_RAB_MODE_AMR_4_75] = 4750, + [OSMO_RANAP_RAB_MODE_AMR_5_15] = 5150, + [OSMO_RANAP_RAB_MODE_AMR_5_90] = 5900, + [OSMO_RANAP_RAB_MODE_AMR_6_70] = 6700, + [OSMO_RANAP_RAB_MODE_AMR_7_40] = 7400, + [OSMO_RANAP_RAB_MODE_AMR_7_95] = 7950, + [OSMO_RANAP_RAB_MODE_AMR_10_2] = 10200, + [OSMO_RANAP_RAB_MODE_AMR_12_2] = 12200, + /* Unset values remain 0 */ +}; + enum sdu_par_profile { SDUPAR_P_VOICE0 = 0, SDUPAR_P_VOICE1 = 1, @@ -702,17 +714,26 @@ static RANAP_RAB_Parameters_t *new_rab_par_voice(uint32_t rab_modes) RANAP_RAB_Parameters_t *rab = CALLOC(1, sizeof(*rab)); RANAP_SDU_ParameterItem_t *sdui; - int bitrate_guaranteed = 6700; - int bitrate_max = 12200; + int bitrate_min = INT_MAX; + int bitrate_max = 0; int sdu_size_max = 0; int i; for (i = 0; i < OSMO_RANAP_RAB_MODE_COUNT && (1 << i) <= rab_modes; i++) { + int bitrate; int sdu_size; /* only add modes that are present in the bitmask */ if ((rab_modes & (1 << i)) == 0) continue; + bitrate = amr_mode_to_bitrate[i]; + if (bitrate) { + if (bitrate < bitrate_min) + bitrate_min = bitrate; + if (bitrate > bitrate_max) + bitrate_max = bitrate; + } + sdu_size = amr_mode_to_sdu_size(i); if (sdu_size > sdu_size_max) sdu_size_max = sdu_size; @@ -723,7 +744,7 @@ static RANAP_RAB_Parameters_t *new_rab_par_voice(uint32_t rab_modes) ASN_SEQUENCE_ADD(&rab->maxBitrate.list, new_long(bitrate_max)); rab->guaranteedBitRate = CALLOC(1, sizeof(*rab->guaranteedBitRate)); - ASN_SEQUENCE_ADD(rab->guaranteedBitRate, new_long(bitrate_guaranteed)); + ASN_SEQUENCE_ADD(rab->guaranteedBitRate, new_long(bitrate_min)); rab->deliveryOrder = RANAP_DeliveryOrder_delivery_order_requested; rab->maxSDU_Size = sdu_size_max; diff --git a/tests/test-ranap.ok b/tests/test-ranap.ok index a0ea521..213085e 100644 --- a/tests/test-ranap.ok +++ b/tests/test-ranap.ok @@ -88,7 +88,7 @@ Decoded Cause Misc=115 <id>53</id> <firstCriticality><reject/></firstCriticality> <firstValue> - 78 02 CD 80 10 2F A7 20 1A 2C 00 00 F4 4C 08 0A + 78 02 CD 80 10 2F A7 20 2F A8 00 00 F4 4C 08 0A 02 80 00 51 40 00 27 20 28 14 00 67 40 00 00 22 28 14 00 3C 40 00 00 00 50 3D 02 00 02 27 C0 35 00 01 0A 0B 0C 0D 00 00 00 00 00 00 00 00 00 00 @@ -101,15 +101,15 @@ Decoded Cause Misc=115 <id>54</id> <criticality><ignore/></criticality> <value> - 00 00 01 00 35 00 48 78 02 CD 80 10 2F A7 20 1A - 2C 00 00 F4 4C 08 0A 02 80 00 51 40 00 27 20 28 + 00 00 01 00 35 00 48 78 02 CD 80 10 2F A7 20 2F + A8 00 00 F4 4C 08 0A 02 80 00 51 40 00 27 20 28 14 00 67 40 00 00 22 28 14 00 3C 40 00 00 00 50 3D 02 00 02 27 C0 35 00 01 0A 0B 0C 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 40 09 26 00 00 40 01 00 </value> </RANAP_IE> -00 00 00 59 00 00 01 00 36 40 52 00 00 01 00 35 00 48 78 02 cd 80 10 2f a7 20 1a 2c 00 00 f4 4c 08 0a 02 80 00 51 40 00 27 20 28 14 00 67 40 00 00 22 28 14 00 3c 40 00 00 00 50 3d 02 00 02 27 c0 35 00 01 0a 0b 0c 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 40 09 26 00 00 40 01 00 +00 00 00 59 00 00 01 00 36 40 52 00 00 01 00 35 00 48 78 02 cd 80 10 2f a7 20 2f a8 00 00 f4 4c 08 0a 02 80 00 51 40 00 27 20 28 14 00 67 40 00 00 22 28 14 00 3c 40 00 00 00 50 3d 02 00 02 27 c0 35 00 01 0a 0b 0c 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 40 09 26 00 00 40 01 00 ==> RAB ASSIGNMENT COMMAND (DATA) <RANAP_ProtocolIE-FieldPair> |