summaryrefslogtreecommitdiffstats
path: root/src/host
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2011-06-26 10:53:28 +0200
committerAndreas Eversberg <jolly@eversberg.eu>2011-07-17 12:15:04 +0200
commit051dedd23551854ceecc0241af2edad07e15df88 (patch)
tree4a8a7e892667e19935b8be560a4ed56aa85235f7 /src/host
parent9cfc0964771d2d3f0e47251124c3d8c60be8104f (diff)
[layer23] Added special return value for invalid MCC/MNC input
This way an MNC of 000 can be entered.
Diffstat (limited to 'src/host')
-rw-r--r--src/host/layer23/include/osmocom/bb/common/networks.h2
-rw-r--r--src/host/layer23/src/common/networks.c11
-rw-r--r--src/host/layer23/src/mobile/vty_interface.c24
3 files changed, 21 insertions, 16 deletions
diff --git a/src/host/layer23/include/osmocom/bb/common/networks.h b/src/host/layer23/include/osmocom/bb/common/networks.h
index e8c1b18e..e681216f 100644
--- a/src/host/layer23/include/osmocom/bb/common/networks.h
+++ b/src/host/layer23/include/osmocom/bb/common/networks.h
@@ -1,6 +1,8 @@
#ifndef _NETWORKS_H
#define _NETWORKS_H
+#define GSM_INPUT_INVALID 0xffff
+
struct gsm_networks {
uint16_t mcc;
int16_t mnc;
diff --git a/src/host/layer23/src/common/networks.c b/src/host/layer23/src/common/networks.c
index f35dcb15..63221f09 100644
--- a/src/host/layer23/src/common/networks.c
+++ b/src/host/layer23/src/common/networks.c
@@ -1857,16 +1857,19 @@ const uint16_t gsm_input_mcc(char *string)
uint16_t mcc;
if (strlen(string) != 3)
- return 0;
+ return GSM_INPUT_INVALID;
if (string[0] < '0' || string [0] > '9'
|| string[1] < '0' || string [1] > '9'
|| string[2] < '0' || string [2] > '9')
- return 0;
+ return GSM_INPUT_INVALID;
mcc = ((string[0] - '0') << 8)
| ((string[1] - '0') << 4)
| ((string[2] - '0'));
+ if (mcc == 0x000)
+ return GSM_INPUT_INVALID;
+
return mcc;
}
@@ -1877,7 +1880,7 @@ const uint16_t gsm_input_mnc(char *string)
if (strlen(string) == 2) {
if (string[0] < '0' || string [0] > '9'
|| string[1] < '0' || string [1] > '9')
- return 0;
+ return GSM_INPUT_INVALID;
mnc = ((string[0] - '0') << 8)
| ((string[1] - '0') << 4)
@@ -1887,7 +1890,7 @@ const uint16_t gsm_input_mnc(char *string)
if (string[0] < '0' || string [0] > '9'
|| string[1] < '0' || string [1] > '9'
|| string[2] < '0' || string [2] > '9')
- return 0;
+ return GSM_INPUT_INVALID;
mnc = ((string[0] - '0') << 8)
| ((string[1] - '0') << 4)
diff --git a/src/host/layer23/src/mobile/vty_interface.c b/src/host/layer23/src/mobile/vty_interface.c
index f5ccac33..5fe34411 100644
--- a/src/host/layer23/src/mobile/vty_interface.c
+++ b/src/host/layer23/src/mobile/vty_interface.c
@@ -391,11 +391,11 @@ DEFUN(show_ba, show_ba_cmd, "show ba MS_NAME [MCC] [MNC]",
if (argc >= 3) {
mcc = gsm_input_mcc((char *)argv[1]);
mnc = gsm_input_mnc((char *)argv[2]);
- if (!mcc) {
+ if (mcc == GSM_INPUT_INVALID) {
vty_out(vty, "Given MCC invalid%s", VTY_NEWLINE);
return CMD_WARNING;
}
- if (!mnc) {
+ if (mnc == GSM_INPUT_INVALID) {
vty_out(vty, "Given MNC invalid%s", VTY_NEWLINE);
return CMD_WARNING;
}
@@ -487,11 +487,11 @@ DEFUN(sim_test, sim_test_cmd, "sim testcard MS_NAME [MCC] [MNC] [LAC] [TMSI]",
if (argc >= 3) {
mcc = gsm_input_mcc((char *)argv[1]);
mnc = gsm_input_mnc((char *)argv[2]);
- if (!mcc) {
+ if (mcc == GSM_INPUT_INVALID) {
vty_out(vty, "Given MCC invalid%s", VTY_NEWLINE);
return CMD_WARNING;
}
- if (!mnc) {
+ if (mnc == GSM_INPUT_INVALID) {
vty_out(vty, "Given MNC invalid%s", VTY_NEWLINE);
return CMD_WARNING;
}
@@ -674,11 +674,11 @@ DEFUN(sim_lai, sim_lai_cmd, "sim lai MS_NAME MCC MNC LAC",
if (!ms)
return CMD_WARNING;
- if (!mcc) {
+ if (mcc == GSM_INPUT_INVALID) {
vty_out(vty, "Given MCC invalid%s", VTY_NEWLINE);
return CMD_WARNING;
}
- if (!mnc) {
+ if (mnc == GSM_INPUT_INVALID) {
vty_out(vty, "Given MNC invalid%s", VTY_NEWLINE);
return CMD_WARNING;
}
@@ -719,11 +719,11 @@ DEFUN(network_select, network_select_cmd,
return CMD_WARNING;
}
- if (!mcc) {
+ if (mcc == GSM_INPUT_INVALID) {
vty_out(vty, "Given MCC invalid%s", VTY_NEWLINE);
return CMD_WARNING;
}
- if (!mnc) {
+ if (mnc == GSM_INPUT_INVALID) {
vty_out(vty, "Given MNC invalid%s", VTY_NEWLINE);
return CMD_WARNING;
}
@@ -877,11 +877,11 @@ DEFUN(delete_forbidden_plmn, delete_forbidden_plmn_cmd,
if (!ms)
return CMD_WARNING;
- if (!mcc) {
+ if (mcc == GSM_INPUT_INVALID) {
vty_out(vty, "Given MCC invalid%s", VTY_NEWLINE);
return CMD_WARNING;
}
- if (!mnc) {
+ if (mnc == GSM_INPUT_INVALID) {
vty_out(vty, "Given MNC invalid%s", VTY_NEWLINE);
return CMD_WARNING;
}
@@ -2410,11 +2410,11 @@ DEFUN(cfg_test_rplmn, cfg_test_rplmn_cmd, "rplmn MCC MNC [LAC] [TMSI]",
uint16_t mcc = gsm_input_mcc((char *)argv[0]),
mnc = gsm_input_mnc((char *)argv[1]);
- if (!mcc) {
+ if (mcc == GSM_INPUT_INVALID) {
vty_out(vty, "Given MCC invalid%s", VTY_NEWLINE);
return CMD_WARNING;
}
- if (!mnc) {
+ if (mnc == GSM_INPUT_INVALID) {
vty_out(vty, "Given MNC invalid%s", VTY_NEWLINE);
return CMD_WARNING;
}