diff options
author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2015-04-21 12:56:48 +0200 |
---|---|---|
committer | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2015-05-06 15:20:35 +0200 |
commit | 87d7341fbe290582ac4a03f67349496e5306eb04 (patch) | |
tree | 453e943c92b5e0758481e856fe2da0b4d1d0357a /src/pcu_vty.c | |
parent | 29d91e92715945f53aff4530602add765d63946e (diff) |
bssgp: Make BVC bucket size / leak rate configurable
Currently the FLOW-CONTROL_BVC message contains fixed values: The tag
is 1, the BVC bucket size is 6MB, the BVC bucket leak rate is
820kbit/s, the MS bucket size is 50kB, and the MS leak rate is
50kbit/s.
This commit makes the BVC parameters configurable and adds the
following VTY commands:
- flow-control force-bvc-bucket-size <1-6553500>
- no flow-control force-bvc-bucket-size
- flow-control force-bvc-leak-rate <1-6553500>
- no flow-control force-bvc-leak-rate
- flow-control force-ms-bucket-size <1-6553500>
- no flow-control force-ms-bucket-size
- flow-control force-ms-leak-rate <1-6553500>
- no flow-control force-ms-leak-rate
The 'no' variants restore the default behaviour.
Sponsored-by: On-Waves ehf
Diffstat (limited to 'src/pcu_vty.c')
-rw-r--r-- | src/pcu_vty.c | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/pcu_vty.c b/src/pcu_vty.c index a8fdaa93..bddcaccb 100644 --- a/src/pcu_vty.c +++ b/src/pcu_vty.c @@ -53,6 +53,18 @@ static int config_write_pcu(struct vty *vty) vty_out(vty, "pcu%s", VTY_NEWLINE); vty_out(vty, " flow-control-interval %d%s", bts->fc_interval, VTY_NEWLINE); + if (bts->fc_bvc_bucket_size) + vty_out(vty, " flow-control force-bvc-bucket-size %d%s", + bts->fc_bvc_bucket_size, VTY_NEWLINE); + if (bts->fc_bvc_leak_rate) + vty_out(vty, " flow-control force-bvc-leak-rate %d%s", + bts->fc_bvc_leak_rate, VTY_NEWLINE); + if (bts->fc_ms_bucket_size) + vty_out(vty, " flow-control force-ms-bucket-size %d%s", + bts->fc_ms_bucket_size, VTY_NEWLINE); + if (bts->fc_ms_leak_rate) + vty_out(vty, " flow-control force-ms-leak-rate %d%s", + bts->fc_ms_leak_rate, VTY_NEWLINE); if (bts->force_cs) { if (bts->initial_cs_ul == bts->initial_cs_dl) vty_out(vty, " cs %d%s", bts->initial_cs_dl, @@ -110,6 +122,105 @@ DEFUN(cfg_pcu_fc_interval, return CMD_SUCCESS; } +#define FC_STR "BSSGP Flow Control configuration\n" +#define FC_BMAX_STR(who) "Force a fixed value for the " who " bucket size\n" +#define FC_LR_STR(who) "Force a fixed value for the " who " leak rate\n" + +DEFUN(cfg_pcu_fc_bvc_bucket_size, + cfg_pcu_fc_bvc_bucket_size_cmd, + "flow-control force-bvc-bucket-size <1-6553500>", + FC_STR FC_BMAX_STR("BVC") "Bucket size in octets\n") +{ + struct gprs_rlcmac_bts *bts = bts_main_data(); + + bts->fc_bvc_bucket_size = atoi(argv[0]); + + return CMD_SUCCESS; +} + +DEFUN(cfg_pcu_no_fc_bvc_bucket_size, + cfg_pcu_no_fc_bvc_bucket_size_cmd, + "no flow-control force-bvc-bucket-size", + NO_STR FC_STR FC_BMAX_STR("BVC")) +{ + struct gprs_rlcmac_bts *bts = bts_main_data(); + + bts->fc_bvc_bucket_size = 0; + + return CMD_SUCCESS; +} + +DEFUN(cfg_pcu_fc_bvc_leak_rate, + cfg_pcu_fc_bvc_leak_rate_cmd, + "flow-control force-bvc-leak-rate <1-6553500>", + FC_STR FC_LR_STR("BVC") "Leak rate in bit/s\n") +{ + struct gprs_rlcmac_bts *bts = bts_main_data(); + + bts->fc_bvc_leak_rate = atoi(argv[0]); + + return CMD_SUCCESS; +} + +DEFUN(cfg_pcu_no_fc_bvc_leak_rate, + cfg_pcu_no_fc_bvc_leak_rate_cmd, + "no flow-control force-bvc-leak-rate", + NO_STR FC_STR FC_LR_STR("BVC")) +{ + struct gprs_rlcmac_bts *bts = bts_main_data(); + + bts->fc_bvc_leak_rate = 0; + + return CMD_SUCCESS; +} + +DEFUN(cfg_pcu_fc_ms_bucket_size, + cfg_pcu_fc_ms_bucket_size_cmd, + "flow-control force-ms-bucket-size <1-6553500>", + FC_STR FC_BMAX_STR("default MS") "Bucket size in octets\n") +{ + struct gprs_rlcmac_bts *bts = bts_main_data(); + + bts->fc_ms_bucket_size = atoi(argv[0]); + + return CMD_SUCCESS; +} + +DEFUN(cfg_pcu_no_fc_ms_bucket_size, + cfg_pcu_no_fc_ms_bucket_size_cmd, + "no flow-control force-ms-bucket-size", + NO_STR FC_STR FC_BMAX_STR("default MS")) +{ + struct gprs_rlcmac_bts *bts = bts_main_data(); + + bts->fc_ms_bucket_size = 0; + + return CMD_SUCCESS; +} + +DEFUN(cfg_pcu_fc_ms_leak_rate, + cfg_pcu_fc_ms_leak_rate_cmd, + "flow-control force-ms-leak-rate <1-6553500>", + FC_STR FC_LR_STR("default MS") "Leak rate in bit/s\n") +{ + struct gprs_rlcmac_bts *bts = bts_main_data(); + + bts->fc_ms_leak_rate = atoi(argv[0]); + + return CMD_SUCCESS; +} + +DEFUN(cfg_pcu_no_fc_ms_leak_rate, + cfg_pcu_no_fc_ms_leak_rate_cmd, + "no flow-control force-ms-leak-rate", + NO_STR FC_STR FC_LR_STR("default MS")) +{ + struct gprs_rlcmac_bts *bts = bts_main_data(); + + bts->fc_ms_leak_rate = 0; + + return CMD_SUCCESS; +} DEFUN(cfg_pcu_cs, cfg_pcu_cs_cmd, @@ -404,6 +515,14 @@ int pcu_vty_init(const struct log_info *cat) install_element(PCU_NODE, &cfg_pcu_alloc_cmd); install_element(PCU_NODE, &cfg_pcu_two_phase_cmd); install_element(PCU_NODE, &cfg_pcu_fc_interval_cmd); + install_element(PCU_NODE, &cfg_pcu_fc_bvc_bucket_size_cmd); + install_element(PCU_NODE, &cfg_pcu_no_fc_bvc_bucket_size_cmd); + install_element(PCU_NODE, &cfg_pcu_fc_bvc_leak_rate_cmd); + install_element(PCU_NODE, &cfg_pcu_no_fc_bvc_leak_rate_cmd); + install_element(PCU_NODE, &cfg_pcu_fc_ms_bucket_size_cmd); + install_element(PCU_NODE, &cfg_pcu_no_fc_ms_bucket_size_cmd); + install_element(PCU_NODE, &cfg_pcu_fc_ms_leak_rate_cmd); + install_element(PCU_NODE, &cfg_pcu_no_fc_ms_leak_rate_cmd); install_element(PCU_NODE, &cfg_pcu_alpha_cmd); install_element(PCU_NODE, &cfg_pcu_gamma_cmd); install_element(PCU_NODE, &cfg_pcu_dl_tbf_idle_time_cmd); |