FreeCalypso > hg > themwi-rtp-lib
view src/twjit_vty.c @ 40:d73b6ec27ae6
twjit: allow starting fill level to be 1
In most use cases, the smallest useful setting for starting fill level
is 2. However, our job is to provide mechanism rather than policy,
and the theoretical minimum is 1 - so let's support the latter
configuration.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 20 Dec 2024 20:07:01 +0000 |
parents | 073b8c7b361f |
children |
line wrap: on
line source
/* * 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 <1-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); }