hnbgw: parameterize IuCS and IuPS ips and ports: add vty cmds
Basically copy-paste the Iuh local-ip and local-port code to provide parameterization of the IuCS and IuPS remote addresses. Add IUCS and IUPS nodes, enhance go_parent_cb and config writing accordingly. Change-Id: I2c28977011009df4e1fa472290bbbc359e406971
This commit is contained in:
parent
c510fc29fc
commit
5ee050c1e7
|
@ -20,6 +20,8 @@ enum {
|
|||
|
||||
|
||||
#define HNBGW_LOCAL_IP_DEFAULT "0.0.0.0"
|
||||
#define HNBGW_IUCS_REMOTE_IP_DEFAULT "127.0.0.1"
|
||||
#define HNBGW_IUPS_REMOTE_IP_DEFAULT "127.0.0.2"
|
||||
|
||||
/* 25.467 Section 7.1 */
|
||||
#define IUH_DEFAULT_SCTP_PORT 29169
|
||||
|
@ -116,6 +118,10 @@ struct hnb_gw {
|
|||
/*! The UDP port where we receive multiplexed CS user
|
||||
* plane traffic from HNBs */
|
||||
uint16_t iuh_cs_mux_port;
|
||||
const char *iucs_remote_ip;
|
||||
uint16_t iucs_remote_port;
|
||||
const char *iups_remote_ip;
|
||||
uint16_t iups_remote_port;
|
||||
uint16_t rnc_id;
|
||||
bool hnbap_allow_tmsi;
|
||||
} config;
|
||||
|
|
|
@ -5,5 +5,7 @@
|
|||
enum osmo_iuh_vty_node {
|
||||
HNBGW_NODE = _LAST_OSMOVTY_NODE + 1,
|
||||
IUH_NODE,
|
||||
IUCS_NODE,
|
||||
IUPS_NODE,
|
||||
};
|
||||
|
||||
|
|
20
src/hnbgw.c
20
src/hnbgw.c
|
@ -80,6 +80,14 @@ static struct hnb_gw *hnb_gw_create(void *ctx)
|
|||
gw->config.iuh_local_ip = talloc_strdup(gw, HNBGW_LOCAL_IP_DEFAULT);
|
||||
gw->config.iuh_local_port = IUH_DEFAULT_SCTP_PORT;
|
||||
|
||||
gw->config.iucs_remote_ip = talloc_strdup(gw,
|
||||
HNBGW_IUCS_REMOTE_IP_DEFAULT);
|
||||
gw->config.iucs_remote_port = SUA_PORT;
|
||||
|
||||
gw->config.iups_remote_ip = talloc_strdup(gw,
|
||||
HNBGW_IUPS_REMOTE_IP_DEFAULT);
|
||||
gw->config.iups_remote_port = SUA_PORT;
|
||||
|
||||
gw->next_ue_ctx_id = 23;
|
||||
INIT_LLIST_HEAD(&gw->hnb_list);
|
||||
INIT_LLIST_HEAD(&gw->ue_list);
|
||||
|
@ -498,8 +506,16 @@ int main(int argc, char **argv)
|
|||
osmo_sua_set_log_area(DSUA);
|
||||
ranap_set_log_area(DRANAP);
|
||||
|
||||
g_hnb_gw->cnlink_cs = hnbgw_cnlink_init(g_hnb_gw, "127.0.0.1", SUA_PORT, 0);
|
||||
g_hnb_gw->cnlink_ps = hnbgw_cnlink_init(g_hnb_gw, "127.0.0.2", SUA_PORT, 1);
|
||||
OSMO_ASSERT(g_hnb_gw->config.iucs_remote_ip);
|
||||
g_hnb_gw->cnlink_cs = hnbgw_cnlink_init(g_hnb_gw,
|
||||
g_hnb_gw->config.iucs_remote_ip,
|
||||
g_hnb_gw->config.iucs_remote_port,
|
||||
0);
|
||||
OSMO_ASSERT(g_hnb_gw->config.iups_remote_ip);
|
||||
g_hnb_gw->cnlink_ps = hnbgw_cnlink_init(g_hnb_gw,
|
||||
g_hnb_gw->config.iups_remote_ip,
|
||||
g_hnb_gw->config.iups_remote_port,
|
||||
1);
|
||||
|
||||
OSMO_ASSERT(g_hnb_gw->config.iuh_local_ip);
|
||||
LOGP(DMAIN, LOGL_NOTICE, "Listening for Iuh at %s %d\n",
|
||||
|
|
113
src/hnbgw_vty.c
113
src/hnbgw_vty.c
|
@ -24,6 +24,7 @@
|
|||
|
||||
#include <osmocom/iuh/hnbgw.h>
|
||||
#include <osmocom/iuh/context_map.h>
|
||||
#include <osmocom/sigtran/protocol/sua.h>
|
||||
|
||||
static void *tall_hnb_ctx = NULL;
|
||||
static struct hnb_gw *g_hnb_gw = NULL;
|
||||
|
@ -54,10 +55,38 @@ DEFUN(cfg_hnbgw_iuh, cfg_hnbgw_iuh_cmd,
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
static struct cmd_node iucs_node = {
|
||||
IUCS_NODE,
|
||||
"%s(config-hnbgw-iucs)# ",
|
||||
1,
|
||||
};
|
||||
|
||||
DEFUN(cfg_hnbgw_iucs, cfg_hnbgw_iucs_cmd,
|
||||
"iucs", "Configure IuCS options")
|
||||
{
|
||||
vty->node = IUCS_NODE;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
static struct cmd_node iups_node = {
|
||||
IUPS_NODE,
|
||||
"%s(config-hnbgw-iups)# ",
|
||||
1,
|
||||
};
|
||||
|
||||
DEFUN(cfg_hnbgw_iups, cfg_hnbgw_iups_cmd,
|
||||
"iups", "Configure IuPS options")
|
||||
{
|
||||
vty->node = IUPS_NODE;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
int hnbgw_vty_go_parent(struct vty *vty)
|
||||
{
|
||||
switch (vty->node) {
|
||||
case IUH_NODE:
|
||||
case IUCS_NODE:
|
||||
case IUPS_NODE:
|
||||
vty->node = HNBGW_NODE;
|
||||
vty->index = NULL;
|
||||
break;
|
||||
|
@ -153,6 +182,40 @@ DEFUN(cfg_hnbgw_iuh_hnbap_allow_tmsi, cfg_hnbgw_iuh_hnbap_allow_tmsi_cmd,
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN(cfg_hnbgw_iucs_remote_ip, cfg_hnbgw_iucs_remote_ip_cmd, "remote-ip A.B.C.D",
|
||||
"Address to establish IuCS core network link to\n"
|
||||
"Remote IuCS IP address (default: " HNBGW_IUCS_REMOTE_IP_DEFAULT ")")
|
||||
{
|
||||
talloc_free((void*)g_hnb_gw->config.iucs_remote_ip);
|
||||
g_hnb_gw->config.iucs_remote_ip = talloc_strdup(tall_hnb_ctx, argv[0]);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN(cfg_hnbgw_iucs_remote_port, cfg_hnbgw_iucs_remote_port_cmd, "remote-port <1-65535>",
|
||||
"Remote port to establish IuCS core network link to\n"
|
||||
"Remote IuCS port (default: 14001)")
|
||||
{
|
||||
g_hnb_gw->config.iucs_remote_port = atoi(argv[0]);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN(cfg_hnbgw_iups_remote_ip, cfg_hnbgw_iups_remote_ip_cmd, "remote-ip A.B.C.D",
|
||||
"Address to establish IuPS core network link to\n"
|
||||
"Remote IuPS IP address (default: " HNBGW_IUPS_REMOTE_IP_DEFAULT ")")
|
||||
{
|
||||
talloc_free((void*)g_hnb_gw->config.iups_remote_ip);
|
||||
g_hnb_gw->config.iups_remote_ip = talloc_strdup(tall_hnb_ctx, argv[0]);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN(cfg_hnbgw_iups_remote_port, cfg_hnbgw_iups_remote_port_cmd, "remote-port <1-65535>",
|
||||
"Remote port to establish IuPS core network link to\n"
|
||||
"Remote IuPS port (default: 14001)")
|
||||
{
|
||||
g_hnb_gw->config.iups_remote_port = atoi(argv[0]);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
static int config_write_hnbgw(struct vty *vty)
|
||||
{
|
||||
vty_out(vty, "hnbgw%s", VTY_NEWLINE);
|
||||
|
@ -180,6 +243,42 @@ static int config_write_hnbgw_iuh(struct vty *vty)
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
static int config_write_hnbgw_iucs(struct vty *vty)
|
||||
{
|
||||
const char *addr;
|
||||
uint16_t port;
|
||||
|
||||
vty_out(vty, " iucs%s", VTY_NEWLINE);
|
||||
|
||||
addr = g_hnb_gw->config.iucs_remote_ip;
|
||||
if (addr && (strcmp(addr, HNBGW_IUCS_REMOTE_IP_DEFAULT) != 0))
|
||||
vty_out(vty, " remote-ip %s%s", addr, VTY_NEWLINE);
|
||||
|
||||
port = g_hnb_gw->config.iucs_remote_port;
|
||||
if (port && port != SUA_PORT)
|
||||
vty_out(vty, " remote-port %u%s", port, VTY_NEWLINE);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
static int config_write_hnbgw_iups(struct vty *vty)
|
||||
{
|
||||
const char *addr;
|
||||
uint16_t port;
|
||||
|
||||
vty_out(vty, " iups%s", VTY_NEWLINE);
|
||||
|
||||
addr = g_hnb_gw->config.iups_remote_ip;
|
||||
if (addr && (strcmp(addr, HNBGW_IUPS_REMOTE_IP_DEFAULT) != 0))
|
||||
vty_out(vty, " remote-ip %s%s", addr, VTY_NEWLINE);
|
||||
|
||||
port = g_hnb_gw->config.iups_remote_port;
|
||||
if (port && port != SUA_PORT)
|
||||
vty_out(vty, " remote-port %u%s", port, VTY_NEWLINE);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
void hnbgw_vty_init(struct hnb_gw *gw, void *tall_ctx)
|
||||
{
|
||||
g_hnb_gw = gw;
|
||||
|
@ -197,6 +296,20 @@ void hnbgw_vty_init(struct hnb_gw *gw, void *tall_ctx)
|
|||
install_element(IUH_NODE, &cfg_hnbgw_iuh_local_port_cmd);
|
||||
install_element(IUH_NODE, &cfg_hnbgw_iuh_hnbap_allow_tmsi_cmd);
|
||||
|
||||
install_element(HNBGW_NODE, &cfg_hnbgw_iucs_cmd);
|
||||
install_node(&iucs_node, config_write_hnbgw_iucs);
|
||||
vty_install_default(IUCS_NODE);
|
||||
|
||||
install_element(IUCS_NODE, &cfg_hnbgw_iucs_remote_ip_cmd);
|
||||
install_element(IUCS_NODE, &cfg_hnbgw_iucs_remote_port_cmd);
|
||||
|
||||
install_element(HNBGW_NODE, &cfg_hnbgw_iups_cmd);
|
||||
install_node(&iups_node, config_write_hnbgw_iups);
|
||||
vty_install_default(IUPS_NODE);
|
||||
|
||||
install_element(IUPS_NODE, &cfg_hnbgw_iups_remote_ip_cmd);
|
||||
install_element(IUPS_NODE, &cfg_hnbgw_iups_remote_port_cmd);
|
||||
|
||||
install_element_ve(&show_hnb_cmd);
|
||||
install_element_ve(&show_ue_cmd);
|
||||
install_element_ve(&show_talloc_cmd);
|
||||
|
|
Loading…
Reference in New Issue