gbproxy: Use a separate regexp for routing

Currently one regexp ('patching') is used for all matching.

This patch adds a second category 'routing' which is exclusively used
for SGSN selection. It also adds a corresponding VTY command:

  - match-imsi patching RE : MS related patching (currently APN)
  - match-imsi routing RE  : Select secondary SGSN on match only
  - no match-imsi          : Clear all filter expressions

Ticket: OW#1258
Sponsored-by: On-Waves ehf
diff --git a/openbsc/src/gprs/gb_proxy.c b/openbsc/src/gprs/gb_proxy.c
index 41ff4a7..c23e718 100644
--- a/openbsc/src/gprs/gb_proxy.c
+++ b/openbsc/src/gprs/gb_proxy.c
@@ -584,7 +584,7 @@
 	if (link_info && cfg->route_to_sgsn2) {
 		if (cfg->acquire_imsi && link_info->imsi_len == 0)
 			sgsn_nsei = 0xffff;
-		else if (gbproxy_imsi_matches(cfg, GBPROX_MATCH_PATCHING,
+		else if (gbproxy_imsi_matches(cfg, GBPROX_MATCH_ROUTING,
 					      link_info))
 			sgsn_nsei = cfg->nsip_sgsn2_nsei;
 	}
diff --git a/openbsc/src/gprs/gb_proxy_vty.c b/openbsc/src/gprs/gb_proxy_vty.c
index fa0b09d..eb7eb60 100644
--- a/openbsc/src/gprs/gb_proxy_vty.c
+++ b/openbsc/src/gprs/gb_proxy_vty.c
@@ -60,6 +60,7 @@
 
 static const struct value_string match_ids[] = {
 	{GBPROX_MATCH_PATCHING, "patching"},
+	{GBPROX_MATCH_ROUTING, "routing"},
 	{0, NULL}
 };
 
@@ -199,15 +200,16 @@
 
 DEFUN(cfg_gbproxy_match_imsi,
       cfg_gbproxy_match_imsi_cmd,
-      "match-imsi patching .REGEXP",
+      "match-imsi (patching|routing) .REGEXP",
       GBPROXY_MATCH_IMSI_STR
-      "Patch MS related information elements or route to secondary SGSN on match only\n"
+      "Patch MS related information elements on match only\n"
+      "Route to the secondary SGSN on match only\n"
       "Regular expression for the IMSI match\n")
 {
-	const char *filter = argv[0];
+	const char *filter = argv[1];
 	const char *err_msg = NULL;
 	struct gbproxy_match *match;
-	enum gbproxy_match_id match_id = get_string_value(match_ids, "patching");
+	enum gbproxy_match_id match_id = get_string_value(match_ids, argv[0]);
 
 	OSMO_ASSERT(match_id >= GBPROX_MATCH_PATCHING &&
 		    match_id < GBPROX_MATCH_LAST);