fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-sgsn/+/40822?usp=email )
Change subject: VTY: make max-sdu-size for GPRS SM QoS configurable ......................................................................
VTY: make max-sdu-size for GPRS SM QoS configurable
Change-Id: I0819da18dafecf322f8902643dae8dbcaa5dc98b --- M src/sgsn/gprs_sm.c M src/sgsn/sgsn_vty.c 2 files changed, 72 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/22/40822/1
diff --git a/src/sgsn/gprs_sm.c b/src/sgsn/gprs_sm.c index bcf2923..c292505 100644 --- a/src/sgsn/gprs_sm.c +++ b/src/sgsn/gprs_sm.c @@ -63,7 +63,7 @@ }, };
-static struct gsm48_qos default_qos = { +struct gsm48_qos gprs_sm_default_qos = { .delay_class = 4, /* best effort */ .reliab_class = GSM48_QOS_RC_LLC_UN_RLC_ACK_DATA_PROT, .peak_tput = GSM48_QOS_PEAK_TPUT_32000bps, @@ -206,7 +206,7 @@
/* FIXME: copy QoS parameters from original request */ //msgb_lv_put(msg, pdp->lib->qos_neg.l, pdp->lib->qos_neg.v); - msgb_lv_put(msg, sizeof(default_qos), (uint8_t *)&default_qos); + msgb_lv_put(msg, sizeof(gprs_sm_default_qos), (uint8_t *)&gprs_sm_default_qos);
/* Radio priority 10.5.7.2 */ msgb_v_put(msg, pdp->lib->radio_pri); diff --git a/src/sgsn/sgsn_vty.c b/src/sgsn/sgsn_vty.c index 7279167..37d966f 100644 --- a/src/sgsn/sgsn_vty.c +++ b/src/sgsn/sgsn_vty.c @@ -66,6 +66,8 @@ #include <osmocom/ranap/iu_client.h> #endif
+extern struct gsm48_qos gprs_sm_default_qos; + static struct sgsn_config *g_cfg = NULL;
const struct value_string sgsn_auth_pol_strs[] = { @@ -382,6 +384,28 @@ } else vty_out(vty, " no compression v42bis%s", VTY_NEWLINE);
+#define QOS_SM_DEFAULT_CMD "qos-sm default" +#define QOS_SM_DEFAULT_CMD_DOC \ + "QoS (Quality of Service) configuration for the GPRS SM layer\n" \ + "Default QoS parameters\n" + + /* QoS defaults */ + switch (gprs_sm_default_qos.max_sdu_size) { + case GSM48_QOS_MAXSDU_1502: + vty_out(vty, " " QOS_SM_DEFAULT_CMD " max-sdu-size 1502%s", VTY_NEWLINE); + break; + case GSM48_QOS_MAXSDU_1510: + vty_out(vty, " " QOS_SM_DEFAULT_CMD " max-sdu-size 1510%s", VTY_NEWLINE); + break; + case GSM48_QOS_MAXSDU_1520: + vty_out(vty, " " QOS_SM_DEFAULT_CMD " max-sdu-size 1520%s", VTY_NEWLINE); + break; + default: + vty_out(vty, " " QOS_SM_DEFAULT_CMD " max-sdu-size %u%s", + gprs_sm_default_qos.max_sdu_size * 10, VTY_NEWLINE); + break; + } + llist_for_each_entry(mme, &sgsn->mme_list, list) { config_write_mme(vty, mme, " "); } @@ -1621,6 +1645,49 @@ return CMD_SUCCESS; }
+DEFUN(cfg_qos_sm_default_max_sdu_size, + cfg_qos_sm_default_max_sdu_size_cmd, + QOS_SM_DEFAULT_CMD " max-sdu-size (<10-1500>)", + QOS_SM_DEFAULT_CMD_DOC + "Maximum SDU (Service Data Unit) size\n" + "SDU size (must be a multiple of 10)\n") +{ + int size = atoi(argv[0]); + + switch (size) { + case 1502: + gprs_sm_default_qos.max_sdu_size = GSM48_QOS_MAXSDU_1502; + break; + case 1510: + gprs_sm_default_qos.max_sdu_size = GSM48_QOS_MAXSDU_1510; + break; + case 1520: + gprs_sm_default_qos.max_sdu_size = GSM48_QOS_MAXSDU_1520; + break; + default: + if (size < 1 || size > 1500) + return CMD_WARNING; + if (size % 10 != 0) { + vty_out(vty, "%% SDU size in range 1..1500 " + "must be a multiple of 10%s", VTY_NEWLINE); + return CMD_WARNING; + } + gprs_sm_default_qos.max_sdu_size = size / 10; + break; + } + + return CMD_SUCCESS; +} + +ALIAS(cfg_qos_sm_default_max_sdu_size, + cfg_qos_sm_default_max_sdu_size_15xx_cmd, + QOS_SM_DEFAULT_CMD " max-sdu-size (1502|1510|1520)", + QOS_SM_DEFAULT_CMD_DOC + "Maximum SDU (Service Data Unit) size\n" + "1502 octets\n" + "1510 octets\n" + "1520 octets\n"); + #if BUILD_IU DEFUN(cfg_sgsn_cs7_instance_iu, cfg_sgsn_cs7_instance_iu_cmd, @@ -1895,6 +1962,9 @@ install_element(SGSN_NODE, &cfg_comp_v42bis_cmd); install_element(SGSN_NODE, &cfg_comp_v42bisp_cmd);
+ install_element(SGSN_NODE, &cfg_qos_sm_default_max_sdu_size_cmd); + install_element(SGSN_NODE, &cfg_qos_sm_default_max_sdu_size_15xx_cmd); + install_element(SGSN_NODE, &cfg_sgsn_mme_cmd); install_element(SGSN_NODE, &cfg_sgsn_no_mme_cmd); install_node(&mme_node, NULL);