FreeCalypso > hg > themwi-rtp-lib
diff src/twjit_vty.c @ 14:073b8c7b361f
twjit: port over vty config module
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 06 Jul 2024 17:32:26 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/twjit_vty.c Sat Jul 06 17:32:26 2024 +0000 @@ -0,0 +1,129 @@ +/* + * Themyscira Wireless jitter buffer implementation: vty configuration. + */ + +#include <stdint.h> +#include <stdbool.h> +#include <stdlib.h> +#include <string.h> + +#include <osmocom/core/utils.h> +#include <osmocom/vty/vty.h> +#include <osmocom/vty/command.h> + +#include <themwi/rtp/twjit.h> + +int twrtp_jibuf_config_write(struct vty *vty, + const struct twrtp_jibuf_config *conf, + const char *name, const char *prefix) +{ + vty_out(vty, "%s%s%s", prefix, name ? : "twjit", VTY_NEWLINE); + vty_out(vty, "%s buffer-depth %u %u%s", prefix, conf->bd_start, + conf->bd_hiwat, VTY_NEWLINE); + vty_out(vty, "%s thinning-interval %u%s", prefix, conf->thinning_int, + VTY_NEWLINE); + vty_out(vty, "%s max-future-sec %u%s", prefix, conf->max_future_sec, + VTY_NEWLINE); + + if (conf->start_min_delta) { + vty_out(vty, "%s start-min-delta %u%s", prefix, + conf->start_min_delta, VTY_NEWLINE); + } + if (conf->start_max_delta) { + vty_out(vty, "%s start-max-delta %u%s", prefix, + conf->start_max_delta, VTY_NEWLINE); + } + + return CMD_SUCCESS; +} + +DEFUN(cfg_buffer_depth, cfg_buffer_depth_cmd, + "buffer-depth <2-65535> <2-65535>", + "Buffer depth configuration\n" + "Minimum fill required to start flow\n" + "High water mark fill level\n") +{ + struct twrtp_jibuf_config *conf = vty->index; + unsigned bd_start = atoi(argv[0]); + unsigned bd_hiwat = atoi(argv[1]); + + if (bd_hiwat < bd_start) { + vty_out(vty, "%% Error: high water mark cannot be less than starting level%s", + VTY_NEWLINE); + return CMD_WARNING; + } + + conf->bd_start = bd_start; + conf->bd_hiwat = bd_hiwat; + + return CMD_SUCCESS; +} + +DEFUN(cfg_thinning, cfg_thinning_cmd, + "thinning-interval <2-65535>", + "Standing queue thinning configuration\n" + "Drop every Nth packet\n") +{ + struct twrtp_jibuf_config *conf = vty->index; + conf->thinning_int = atoi(argv[0]); + return CMD_SUCCESS; +} + +DEFUN(cfg_max_future, cfg_max_future_cmd, + "max-future-sec <1-65535>", + "Guard against time traveler packets\n" + "Maximum permissible number of seconds into the future\n") +{ + struct twrtp_jibuf_config *conf = vty->index; + conf->max_future_sec = atoi(argv[0]); + return CMD_SUCCESS; +} + +DEFUN(cfg_start_min_delta, cfg_start_min_delta_cmd, + "start-min-delta <1-65535>", + "Minimum required delta in time-of-arrival to start flow\n" + "Time delta value in ms\n") +{ + struct twrtp_jibuf_config *conf = vty->index; + conf->start_min_delta = atoi(argv[0]); + return CMD_SUCCESS; +} + +DEFUN(cfg_no_start_min_delta, cfg_no_start_min_delta_cmd, + "no start-min-delta", + NO_STR "Minimum required delta in time-of-arrival to start flow\n") +{ + struct twrtp_jibuf_config *conf = vty->index; + conf->start_min_delta = 0; + return CMD_SUCCESS; +} + +DEFUN(cfg_start_max_delta, cfg_start_max_delta_cmd, + "start-max-delta <1-65535>", + "Maximum permitted gap in time-of-arrival in starting state\n" + "Time delta value in ms\n") +{ + struct twrtp_jibuf_config *conf = vty->index; + conf->start_max_delta = atoi(argv[0]); + return CMD_SUCCESS; +} + +DEFUN(cfg_no_start_max_delta, cfg_no_start_max_delta_cmd, + "no start-max-delta", + NO_STR "Maximum permitted gap in time-of-arrival in starting state\n") +{ + struct twrtp_jibuf_config *conf = vty->index; + conf->start_max_delta = 0; + return CMD_SUCCESS; +} + +void twrtp_jibuf_vty_init(int twjit_node) +{ + install_lib_element(twjit_node, &cfg_buffer_depth_cmd); + install_lib_element(twjit_node, &cfg_thinning_cmd); + install_lib_element(twjit_node, &cfg_max_future_cmd); + install_lib_element(twjit_node, &cfg_start_min_delta_cmd); + install_lib_element(twjit_node, &cfg_no_start_min_delta_cmd); + install_lib_element(twjit_node, &cfg_start_max_delta_cmd); + install_lib_element(twjit_node, &cfg_no_start_max_delta_cmd); +}