From acd29192deed0e1a243b35278b030bde7b1662b5 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Tue, 16 Oct 2018 12:58:20 +0200 Subject: remote-BSS neighbors: allow only one cell ID I believe I have initially misinterpreted the idea behind sending a Cell Identifier List in BSSMAP Handover Required messages. Instead of associating N Cell Identifiers with one ARFCN+BSIC, the idea is to add up N separate ARFCN+BSIC's Cell Identifiers into a list. To keep the door open for future code simplification, make sure to allow only one Cell Identifier per remote ARFCN+BSIC on the VTY UI. Related: OS#3656 Change-Id: Ifb9212fede2333ad68db94188b5cda4fcabe02f8 --- src/osmo-bsc/neighbor_ident_vty.c | 10 ++++ tests/neighbor_ident.vty | 123 +++++++++++++++++++++++++++++++------- 2 files changed, 112 insertions(+), 21 deletions(-) diff --git a/src/osmo-bsc/neighbor_ident_vty.c b/src/osmo-bsc/neighbor_ident_vty.c index 409153b3a..203b15057 100644 --- a/src/osmo-bsc/neighbor_ident_vty.c +++ b/src/osmo-bsc/neighbor_ident_vty.c @@ -258,6 +258,7 @@ static int add_remote_or_local_bts(struct vty *vty, const struct gsm0808_cell_id { int rc; struct gsm_bts *local_neigh; + const struct gsm0808_cell_id_list2 *exists; struct gsm0808_cell_id_list2 cil; struct gsm_bts *bts = vty->index; @@ -289,6 +290,15 @@ static int add_remote_or_local_bts(struct vty *vty, const struct gsm0808_cell_id return add_local_bts(vty, local_neigh); } + /* Allow only one cell ID per remote-BSS neighbor, see OS#3656 */ + exists = neighbor_ident_get(g_neighbor_cells, key); + if (exists) { + vty_out(vty, "%% Error: only one Cell Identifier entry is allowed per remote neighbor." + " Already have: %s -> %s%s", neighbor_ident_key_name(key), + gsm0808_cell_id_list_name(exists), VTY_NEWLINE); + return CMD_WARNING; + } + /* The cell_id is not known in this BSS, so it must be a remote cell. */ gsm0808_cell_id_to_list(&cil, cell_id); rc = neighbor_ident_add(g_neighbor_cells, key, &cil); diff --git a/tests/neighbor_ident.vty b/tests/neighbor_ident.vty index 4f8638391..2ce2231f5 100644 --- a/tests/neighbor_ident.vty +++ b/tests/neighbor_ident.vty @@ -211,29 +211,29 @@ OsmoBSC(config-net-bts)# neighbor bts 1 OsmoBSC(config-net-bts)# neighbor lac-ci 21 31 % BTS 0 already had local neighbor BTS 1 with LAC 21 CI 31 and ARFCN 41 BSIC 11 OsmoBSC(config-net-bts)# neighbor cgi 23 42 423 5 arfcn 23 bsic 42 -% BTS 0 to ARFCN 23 BSIC 42 now has 1 remote BSS Cell Identifier List entry +% Error: only one Cell Identifier entry is allowed per remote neighbor. Already have: BTS 0 to ARFCN 23 BSIC 42 -> CGI[1]:{023-42-423-5} OsmoBSC(config-net-bts)# neighbor cgi 23 42 423 5 arfcn 23 bsic 42 -% BTS 0 to ARFCN 23 BSIC 42 now has 1 remote BSS Cell Identifier List entry +% Error: only one Cell Identifier entry is allowed per remote neighbor. Already have: BTS 0 to ARFCN 23 BSIC 42 -> CGI[1]:{023-42-423-5} OsmoBSC(config-net-bts)# neighbor cgi 23 42 423 5 arfcn 23 bsic 42 -% BTS 0 to ARFCN 23 BSIC 42 now has 1 remote BSS Cell Identifier List entry +% Error: only one Cell Identifier entry is allowed per remote neighbor. Already have: BTS 0 to ARFCN 23 BSIC 42 -> CGI[1]:{023-42-423-5} OsmoBSC(config-net-bts)# neighbor cgi 23 042 423 6 arfcn 23 bsic 42 -% BTS 0 to ARFCN 23 BSIC 42 now has 2 remote BSS Cell Identifier List entries +% Error: only one Cell Identifier entry is allowed per remote neighbor. Already have: BTS 0 to ARFCN 23 BSIC 42 -> CGI[1]:{023-42-423-5} OsmoBSC(config-net-bts)# neighbor lac 456 arfcn 123 bsic 45 % BTS 0 to ARFCN 123 BSIC 45 now has 1 remote BSS Cell Identifier List entry OsmoBSC(config-net-bts)# neighbor cgi 23 042 234 56 arfcn 23 bsic 42 -% BTS 0 to ARFCN 23 BSIC 42 now has 3 remote BSS Cell Identifier List entries +% Error: only one Cell Identifier entry is allowed per remote neighbor. Already have: BTS 0 to ARFCN 23 BSIC 42 -> CGI[1]:{023-42-423-5} OsmoBSC(config-net-bts)# neighbor lac-ci 789 10 arfcn 423 bsic any % BTS 0 to ARFCN 423 (any BSIC) now has 1 remote BSS Cell Identifier List entry OsmoBSC(config-net-bts)# neighbor lac-ci 789 10 arfcn 423 bsic 63 -% BTS 0 to ARFCN 423 BSIC 63 now has 1 remote BSS Cell Identifier List entry +% Error: only one Cell Identifier entry is allowed per remote neighbor. Already have: BTS 0 to ARFCN 423 BSIC 63 -> LAC-CI[1]:{789-10} OsmoBSC(config-net-bts)# neighbor lac-ci 789 10 arfcn 423 bsic 1 -% BTS 0 to ARFCN 423 BSIC 1 now has 1 remote BSS Cell Identifier List entry +% Error: only one Cell Identifier entry is allowed per remote neighbor. Already have: BTS 0 to ARFCN 423 BSIC 1 -> LAC-CI[1]:{789-10} OsmoBSC(config-net-bts)# show running-config ... @@ -244,12 +244,8 @@ network neighbor bts 1 neighbor bts 2 neighbor cgi 023 42 423 5 arfcn 23 bsic 42 - neighbor cgi 023 042 423 6 arfcn 23 bsic 42 - neighbor cgi 023 042 234 56 arfcn 23 bsic 42 neighbor lac 456 arfcn 123 bsic 45 neighbor lac-ci 789 10 arfcn 423 bsic any - neighbor lac-ci 789 10 arfcn 423 bsic 63 - neighbor lac-ci 789 10 arfcn 423 bsic 1 ... !neighbor OsmoBSC(config-net-bts)# do show bts 0 neighbor arfcn 99 bsic any @@ -271,13 +267,103 @@ OsmoBSC(config-net-bts)# no neighbor arfcn 23 bsic 42 % Removed remote BSS neighbor BTS 0 to ARFCN 23 BSIC 42 OsmoBSC(config-net-bts)# show running-config -... !neighbor + +Current configuration: +! +! +log stderr + logging filter all 1 + logging color 1 + logging print category 0 + logging timestamp 0 + logging print file 1 + logging level rll notice + logging level mm notice + logging level rr notice + logging level rsl notice + logging level nm info + logging level pag notice + logging level meas notice + logging level msc notice + logging level ho notice + logging level hodec notice + logging level ref notice + logging level nat notice + logging level ctrl notice + logging level filter debug + logging level pcu debug + logging level lcls notice + logging level chan notice + logging level ts notice + logging level as notice + logging level lglobal notice + logging level llapd notice + logging level linp notice + logging level lmux notice + logging level lmi notice + logging level lmib notice + logging level lsms notice + logging level lctrl notice + logging level lgtp notice + logging level lstats notice + logging level lgsup notice + logging level loap notice + logging level lss7 notice + logging level lsccp notice + logging level lsua notice + logging level lm3ua notice + logging level lmgcp notice + logging level ljibuf notice +! +stats interval 5 +! +line vty + no login +! +e1_input + e1_line 0 driver ipa + e1_line 0 port 0 + no e1_line 0 keepalive +cs7 instance 0 + point-code 0.23.3 + asp asp-clnt-msc-0 2905 0 m3ua + as as-clnt-msc-0 m3ua + asp asp-clnt-msc-0 + routing-key 0 0.23.3 +network + network country code 901 + mobile network code 70 + encryption a5 1 3 + neci 0 + paging any use tch 0 + bts 0 + type sysmobts + band DCS1800 + cell_identity 30 + location_area_code 20 + base_station_id_code 10 + ms max power 15 + cell reselection hysteresis 4 + rxlev access min 0 + radio-link-timeout 32 + channel allocator ascending + rach tx integer 9 + rach max transmission 7 + channel-descrption attach 1 + channel-descrption bs-pa-mfrms 5 + channel-descrption bs-ag-blks-res 1 + no access-control-class-ramping + access-control-class-ramping-step-interval dynamic + access-control-class-ramping-step-size 1 + early-classmark-sending forbidden + early-classmark-sending-3g allowed + ip.access unit_id 1800 0 + oml ip.access stream_id 255 line 0 + neighbor-list mode automatic neighbor bts 1 neighbor bts 2 neighbor lac 456 arfcn 123 bsic 45 neighbor lac-ci 789 10 arfcn 423 bsic any - neighbor lac-ci 789 10 arfcn 423 bsic 63 - neighbor lac-ci 789 10 arfcn 423 bsic 1 ... !neighbor OsmoBSC(config-net-bts)# no neighbor arfcn 123 bsic 45 @@ -288,8 +374,6 @@ OsmoBSC(config-net-bts)# show running-config neighbor bts 1 neighbor bts 2 neighbor lac-ci 789 10 arfcn 423 bsic any - neighbor lac-ci 789 10 arfcn 423 bsic 63 - neighbor lac-ci 789 10 arfcn 423 bsic 1 ... !neighbor OsmoBSC(config-net-bts)# no neighbor arfcn 423 bsic any @@ -299,22 +383,19 @@ OsmoBSC(config-net-bts)# show running-config ... !neighbor neighbor bts 1 neighbor bts 2 - neighbor lac-ci 789 10 arfcn 423 bsic 63 - neighbor lac-ci 789 10 arfcn 423 bsic 1 ... !neighbor OsmoBSC(config-net-bts)# no neighbor arfcn 423 bsic 63 -% Removed remote BSS neighbor BTS 0 to ARFCN 423 BSIC 63 +% Cannot remove, no such neighbor: BTS 0 to ARFCN 423 BSIC 63 OsmoBSC(config-net-bts)# show running-config ... !neighbor neighbor bts 1 neighbor bts 2 - neighbor lac-ci 789 10 arfcn 423 bsic 1 ... !neighbor OsmoBSC(config-net-bts)# no neighbor arfcn 423 bsic 1 -% Removed remote BSS neighbor BTS 0 to ARFCN 423 BSIC 1 +% Cannot remove, no such neighbor: BTS 0 to ARFCN 423 BSIC 1 OsmoBSC(config-net-bts)# show running-config ... !neighbor -- cgit v1.2.3