diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2016-10-12 01:39:25 +0200 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2017-03-16 15:32:32 +0100 |
commit | 978e72e500ac5544ee9fbddbac03125f60fceef8 (patch) | |
tree | 4686c60996a1d3666e71487bee74cd37604c3a19 /openbsc/src/libiu | |
parent | 1ad6a2e515bbc3a73a283eb104feb899086a24a3 (diff) |
IuCS and IuPS: add VTY config for RAB Assignment address kind
To accomodate the ip.access nano3G without having to recompile, make the
RAB Assignment's Transport Layer Address IE's format configurable, in both
osmo-msc and osmo-sgsn.
The long term perspective is to somehow detect which address encoding a given
3G cell prefers, but for the time being just configure it globally and set each
ue_conn_ctx to the global setting upon creation.
Add VTY command to iu_vty.c, with args passed to iu_vty_init() to insert
at an arbitrary VTY node, so that it can be used both for osmo-msc and
osmo-sgsn. Add generic iu_vty_config_write() to write out the config.
Call iu_vty_init() from msc_vty_init(); msc_vty_init() is in libmsc,
hence linking of osmo-msc now needs libiu to come after libmsc, so move
that further down.
Change-Id: I93728314742b327336f3fb6de98e6457f687e1f9
Diffstat (limited to 'openbsc/src/libiu')
-rw-r--r-- | openbsc/src/libiu/iu_vty.c | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/openbsc/src/libiu/iu_vty.c b/openbsc/src/libiu/iu_vty.c index cfa02ea6c..73ad126ba 100644 --- a/openbsc/src/libiu/iu_vty.c +++ b/openbsc/src/libiu/iu_vty.c @@ -18,12 +18,16 @@ */ #include <stdlib.h> +#include <string.h> +#include <osmocom/core/logging.h> #include <osmocom/vty/command.h> #include <osmocom/vty/logging.h> #include <openbsc/iu.h> +static enum nsap_addr_enc *g_rab_assign_addr_enc = NULL; + DEFUN(logging_asn_debug, logging_asn_debug_cmd, "logging asn1-debug (1|0)", @@ -48,8 +52,57 @@ DEFUN(logging_asn_xer_print, return CMD_SUCCESS; } -void iu_vty_init(void) +DEFUN(cfg_iu_rab_assign_addr_enc, cfg_iu_rab_assign_addr_enc_cmd, + "iu rab-assign-addr-enc (x213|v4raw)", + "Iu interface protocol options\n" + "Choose RAB Assignment's Transport Layer Address encoding\n" + "ITU-T X.213 compliant address encoding (default)\n" + "32bit length raw IPv4 address (for ip.access nano3G)\n") { + if (!g_rab_assign_addr_enc) { + vty_out(vty, "%%RAB Assignment Transport Layer Address" + " encoding not available%s", VTY_NEWLINE); + return CMD_WARNING; + } + + if (strcmp(argv[0], "v4raw") == 0) + *g_rab_assign_addr_enc = NSAP_ADDR_ENC_V4RAW; + else + *g_rab_assign_addr_enc = NSAP_ADDR_ENC_X213; + return CMD_SUCCESS; +} + +int iu_vty_config_write(struct vty *vty, const char *indent) +{ + if (!g_rab_assign_addr_enc) { + vty_out(vty, "%%RAB Assignment Transport Layer Address" + " encoding not available%s", VTY_NEWLINE); + return CMD_WARNING; + } + + switch (*g_rab_assign_addr_enc) { + case NSAP_ADDR_ENC_V4RAW: + vty_out(vty, "%siu rab-assign-addr-enc v4raw%s", indent, + VTY_NEWLINE); + break; + case NSAP_ADDR_ENC_X213: + /* default value, no need to write anything */ + break; + default: + LOGP(0, LOGL_ERROR, "Invalid value for" + " net.iu.rab_assign_addr_enc: %d\n", + *g_rab_assign_addr_enc); + return CMD_WARNING; + } + + return CMD_SUCCESS; +} + +void iu_vty_init(int iu_parent_node, enum nsap_addr_enc *rab_assign_addr_enc) +{ + g_rab_assign_addr_enc = rab_assign_addr_enc; + install_element(CFG_LOG_NODE, &logging_asn_debug_cmd); install_element(CFG_LOG_NODE, &logging_asn_xer_print_cmd); + install_element(iu_parent_node, &cfg_iu_rab_assign_addr_enc_cmd); } |