[SGSN] Gb Proxy: Simplify configuration

Almost all parameters about the SGSNs NS-VC can be specified in the NS
protocol node.  All that needs to remain in the gbproxy config node
is "nsip sgsn nsei XXX".
diff --git a/openbsc/include/openbsc/gb_proxy.h b/openbsc/include/openbsc/gb_proxy.h
index 8979aac..ad0405f 100644
--- a/openbsc/include/openbsc/gb_proxy.h
+++ b/openbsc/include/openbsc/gb_proxy.h
@@ -13,11 +13,7 @@
 	u_int32_t nsip_listen_ip;
 	u_int16_t nsip_listen_port;
 
-	u_int32_t nsip_sgsn_ip;
-	u_int16_t nsip_sgsn_port;
-
 	u_int16_t nsip_sgsn_nsei;
-	u_int16_t nsip_sgsn_nsvci;
 
 	/* misc */
 	struct gprs_ns_inst *nsi;
diff --git a/openbsc/src/gprs/gb_proxy_main.c b/openbsc/src/gprs/gb_proxy_main.c
index 02b3181..68d07ae 100644
--- a/openbsc/src/gprs/gb_proxy_main.c
+++ b/openbsc/src/gprs/gb_proxy_main.c
@@ -188,7 +188,6 @@
 int main(int argc, char **argv)
 {
 	struct gsm_network dummy_network;
-	struct sockaddr_in sin;
 	int rc;
 
 	tall_bsc_ctx = talloc_named_const(NULL, 0, "nsip_proxy");
@@ -207,7 +206,7 @@
 
 	vty_init("Osmocom Gb Proxy", PACKAGE_VERSION, openbsc_copyright);
 	logging_vty_add_cmds();
-        gbproxy_vty_init();
+	gbproxy_vty_init();
 
 	handle_options(argc, argv);
 
@@ -232,15 +231,18 @@
 		exit(2);
 	}
 
-	nsip_listen(bssgp_nsi, gbcfg.nsip_listen_port);
+	if (!nsvc_by_nsei(gbcfg.nsi, gbcfg.nsip_sgsn_nsei)) {
+		LOGP(DGPRS, LOGL_FATAL, "You cannot proxy to NSEI %u "
+			"without creating that NSEI before\n",
+			gbcfg.nsip_sgsn_nsei);
+		exit(2);
+	}
 
-	/* 'establish' the outgoing connection to the SGSN */
-	sin.sin_family = AF_INET;
-	sin.sin_port = htons(gbcfg.nsip_sgsn_port);
-	sin.sin_addr.s_addr = htonl(gbcfg.nsip_sgsn_ip);
-	nsip_connect(bssgp_nsi, &sin, gbcfg.nsip_sgsn_nsei,
-			gbcfg.nsip_sgsn_nsvci);
-
+	rc = nsip_listen(bssgp_nsi, gbcfg.nsip_listen_port);
+	if (rc < 0) {
+		LOGP(DGPRS, LOGL_FATAL, "Cannot bind/listen on NSIP socket\n");
+		exit(2);
+	}
 
 	/* Reset all the persistent NS-VCs that we've read from the config */
 	gbprox_reset_persistent_nsvcs(bssgp_nsi);
diff --git a/openbsc/src/gprs/gb_proxy_vty.c b/openbsc/src/gprs/gb_proxy_vty.c
index 7ee2833..4b71b1b 100644
--- a/openbsc/src/gprs/gb_proxy_vty.c
+++ b/openbsc/src/gprs/gb_proxy_vty.c
@@ -58,15 +58,8 @@
 	}
 	vty_out(vty, " nsip bss local port %u%s", g_cfg->nsip_listen_port,
 		VTY_NEWLINE);
-	ia.s_addr = htonl(g_cfg->nsip_sgsn_ip);
-	vty_out(vty, " nsip sgsn remote ip %s%s", inet_ntoa(ia),
-		VTY_NEWLINE);
-	vty_out(vty, " nsip sgsn remote port %u%s", g_cfg->nsip_sgsn_port,
-		VTY_NEWLINE);
 	vty_out(vty, " nsip sgsn nsei %u%s", g_cfg->nsip_sgsn_nsei,
 		VTY_NEWLINE);
-	vty_out(vty, " nsip sgsn nsvci %u%s", g_cfg->nsip_sgsn_nsvci,
-		VTY_NEWLINE);
 
 	return CMD_SUCCESS;
 }
@@ -104,31 +97,6 @@
 	return CMD_SUCCESS;
 }
 
-
-DEFUN(cfg_nsip_sgsn_ip,
-      cfg_nsip_sgsn_ip_cmd,
-      "nsip sgsn remote ip A.B.C.D",
-      "Set the IP of the SGSN to which the proxy shall connect")
-{
-	struct in_addr ia;
-
-	inet_aton(argv[0], &ia);
-	g_cfg->nsip_sgsn_ip = ntohl(ia.s_addr);
-
-	return CMD_SUCCESS;
-}
-
-DEFUN(cfg_nsip_sgsn_port,
-      cfg_nsip_sgsn_port_cmd,
-      "nsip sgsn remote port <0-65534>",
-      "Set the UDP port of the SGSN to which the proxy shall connect")
-{
-	unsigned int port = atoi(argv[0]);
-
-	g_cfg->nsip_sgsn_port = port;
-	return CMD_SUCCESS;
-}
-
 DEFUN(cfg_nsip_sgsn_nsei,
       cfg_nsip_sgsn_nsei_cmd,
       "nsip sgsn nsei <0-65534>",
@@ -140,17 +108,6 @@
 	return CMD_SUCCESS;
 }
 
-DEFUN(cfg_nsip_sgsn_nsvci,
-      cfg_nsip_sgsn_nsvci_cmd,
-      "nsip sgsn nsvci <0-65534>",
-      "Set the NSVCI to be used in the connection with the SGSN")
-{
-	unsigned int port = atoi(argv[0]);
-
-	g_cfg->nsip_sgsn_nsvci = port;
-	return CMD_SUCCESS;
-}
-
 int gbproxy_vty_init(void)
 {
 	install_element_ve(&show_gbproxy_cmd);
@@ -162,10 +119,7 @@
 	install_element(GBPROXY_NODE, &ournode_end_cmd);
 	install_element(GBPROXY_NODE, &cfg_nsip_bss_local_ip_cmd);
 	install_element(GBPROXY_NODE, &cfg_nsip_bss_local_port_cmd);
-	install_element(GBPROXY_NODE, &cfg_nsip_sgsn_ip_cmd);
-	install_element(GBPROXY_NODE, &cfg_nsip_sgsn_port_cmd);
 	install_element(GBPROXY_NODE, &cfg_nsip_sgsn_nsei_cmd);
-	install_element(GBPROXY_NODE, &cfg_nsip_sgsn_nsvci_cmd);
 
 	return 0;
 }
diff --git a/openbsc/src/gprs/osmo_gbproxy.cfg b/openbsc/src/gprs/osmo_gbproxy.cfg
index d51b04a..29dbe93 100644
--- a/openbsc/src/gprs/osmo_gbproxy.cfg
+++ b/openbsc/src/gprs/osmo_gbproxy.cfg
@@ -6,8 +6,10 @@
  no login
 !
 gbproxy
-  nsip bss local port 23000
-  nsip sgsn remote ip 127.0.0.1
-  nsip sgsn remote port 7777
-  nsip sgsn nsei 101
-  nsip sgsn nsvci 101
+ nsip bss local port 23000
+ nsip sgsn nsei 101
+ns
+ nse 101 nsvci 101
+ nse 101 remote-ip 192.168.100.239
+ nse 101 remote-port 7777
+ nse 101 remote-role sgsn