diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2015-11-18 18:11:32 +0100 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2015-12-03 11:39:33 +0100 |
commit | b6c2db569f03bf5eb0f9a12a9bca5c0d7637beca (patch) | |
tree | 268d08306d97f2907b2bad2af813180cbb5ef1a4 /openbsc/src/gprs/gtphub_vty.c | |
parent | d9b1d49485195a79095bae162f8bd8d0abc04781 (diff) |
gtphub: ares vty and init
From sgsn_vty.c, copy the cfg_grx_ggsn_cmd to add an ares server to the static
sgsn_instance.
This is sort of preliminary. As described in comments, the sgsn_ares functions
should actually be separated from the static sgsn structure. gtphub keeps such
an sgsn structure just for the sgsn_ares functions.
Sponsored-by: On-Waves ehi
Diffstat (limited to 'openbsc/src/gprs/gtphub_vty.c')
-rw-r--r-- | openbsc/src/gprs/gtphub_vty.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/openbsc/src/gprs/gtphub_vty.c b/openbsc/src/gprs/gtphub_vty.c index aead17878..29a731600 100644 --- a/openbsc/src/gprs/gtphub_vty.c +++ b/openbsc/src/gprs/gtphub_vty.c @@ -20,12 +20,22 @@ #include <string.h> +#include <ares.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> + #include <osmocom/core/talloc.h> #include <osmocom/vty/command.h> #include <openbsc/vty.h> #include <openbsc/gtphub.h> +/* TODO split GRX ares from sgsn into a separate struct and allow use without + * globals. */ +#include <openbsc/sgsn.h> +extern struct sgsn_instance *sgsn; + static struct gtphub_cfg *g_cfg = 0; static struct cmd_node gtphub_node = { @@ -57,6 +67,10 @@ static void write_addrs(struct vty *vty, const char *name, c->addr_str, (int)c->port, u->addr_str, (int)u->port, VTY_NEWLINE); + + struct ares_addr_node *server; + for (server = sgsn->ares_servers; server; server = server->next) + vty_out(vty, " grx-dns-add %s%s", inet_ntoa(server->addr.addr4), VTY_NEWLINE); } static int config_write_gtphub(struct vty *vty) @@ -214,6 +228,22 @@ DEFUN(cfg_gtphub_sgsn_proxy, cfg_gtphub_sgsn_proxy_cmd, return CMD_SUCCESS; } + +/* Copied from sgsn_vty.h */ +DEFUN(cfg_grx_ggsn, cfg_grx_ggsn_cmd, + "grx-dns-add A.B.C.D", + "Add DNS server\nIPv4 address\n") +{ + struct ares_addr_node *node = talloc_zero(tall_bsc_ctx, struct ares_addr_node); + node->family = AF_INET; + inet_aton(argv[0], &node->addr.addr4); + + node->next = sgsn->ares_servers; + sgsn->ares_servers = node; + return CMD_SUCCESS; +} + + DEFUN(show_gtphub, show_gtphub_cmd, "show gtphub", SHOW_STR "Display information about the GTP hub") { @@ -238,6 +268,7 @@ int gtphub_vty_init(void) install_element(GTPHUB_NODE, &cfg_gtphub_ggsn_proxy_cmd); install_element(GTPHUB_NODE, &cfg_gtphub_sgsn_proxy_short_cmd); install_element(GTPHUB_NODE, &cfg_gtphub_sgsn_proxy_cmd); + install_element(GTPHUB_NODE, &cfg_grx_ggsn_cmd); return 0; } |