initial working osmo-smlc implementation

The lower level Lb/SCCP interface conn handling is essentially a copy of
OsmoMSC's A/SCCP infrastructure (OsmoMSC also connects to multiple BSCs).

The smlc_subscr is mostly a copy of OsmoBSC's bsc_subscr.

smlc_loc_req FSM is the SMLC side of OsmoBSC's new lcs_loc_req FSM.

cell_locations configures geographic coordinates of individual cells.

Change-Id: I917ba8fc51a1f1150be77ae01e12a7b16a853052
diff --git a/tests/cell_locations.vty b/tests/cell_locations.vty
new file mode 100644
index 0000000..51dc00d
--- /dev/null
+++ b/tests/cell_locations.vty
@@ -0,0 +1,92 @@
+OsmoSMLC> enable
+
+OsmoSMLC# show cells
+% No cell locations are configured
+
+OsmoSMLC# configure terminal
+
+OsmoSMLC(config)# cells?
+  cells  Configure cell locations
+
+OsmoSMLC(config)# cells
+OsmoSMLC(config-cells)# list
+...
+  lac-ci <0-65535> <0-65535> lat LATITUDE lon LONGITUDE
+  no lac-ci <0-65535> <0-65535>
+  cgi <0-999> <0-999> <0-65535> <0-65535> lat LATITUDE lon LONGITUDE
+  no cgi <0-999> <0-999> <0-65535> <0-65535>
+
+OsmoSMLC(config-cells)# lac-ci?
+  lac-ci  Cell location by LAC and CI
+OsmoSMLC(config-cells)# lac-ci ?
+  <0-65535>  LAC
+OsmoSMLC(config-cells)# lac-ci 23 ?
+  <0-65535>  CI
+OsmoSMLC(config-cells)# lac-ci 23 42 ?
+  lat  Global latitute coordinate
+OsmoSMLC(config-cells)# lac-ci 23 42 lat ?
+  LATITUDE  Latitude floating-point number, -90.0 (S) to 90.0 (N)
+OsmoSMLC(config-cells)# lac-ci 23 42 lat 23.23 ?
+  lon  Global longitude coordinate
+OsmoSMLC(config-cells)# lac-ci 23 42 lat 23.23 lon ?
+  LONGITUDE  Longitude as floating-point number, -180.0 (W) to 180.0 (E)
+OsmoSMLC(config-cells)# lac-ci 23 42 lat 23.23 lon 42.42 ?
+  <cr>  
+
+OsmoSMLC(config-cells)# cgi?
+  cgi  Cell location by Cell-Global ID
+OsmoSMLC(config-cells)# cgi ?
+  <0-999>  MCC
+OsmoSMLC(config-cells)# cgi 001 ?
+  <0-999>  MNC
+OsmoSMLC(config-cells)# cgi 001 02 ?
+  <0-65535>  LAC
+OsmoSMLC(config-cells)# cgi 001 02 3 ?
+  <0-65535>  CI
+OsmoSMLC(config-cells)# cgi 001 02 3 4 ?
+  lat  Global latitute coordinate
+OsmoSMLC(config-cells)# cgi 001 02 3 4 lat ?
+  LATITUDE  Latitude floating-point number, -90.0 (S) to 90.0 (N)
+OsmoSMLC(config-cells)# cgi 001 02 3 4 lat 1.1 ?
+  lon  Global longitude coordinate
+OsmoSMLC(config-cells)# cgi 001 02 3 4 lat 1.1 lon ?
+  LONGITUDE  Longitude as floating-point number, -180.0 (W) to 180.0 (E)
+OsmoSMLC(config-cells)# cgi 001 02 3 4 lat 1.1 lon 2.2 ?
+  <cr>  
+
+OsmoSMLC(config-cells)# lac-ci 23 42 lat 23.23 lon 42.42
+OsmoSMLC(config-cells)# cgi 001 02 3 4 lat 1.1 lon 2.2
+
+OsmoSMLC(config-cells)# do show cells
+cells
+ lac-ci 23 42 lat 23.23 lon 42.42
+ cgi 001 02 3 4 lat 1.1 lon 2.2
+
+OsmoSMLC(config-cells)# show running-config
+...
+cells
+ lac-ci 23 42 lat 23.23 lon 42.42
+ cgi 001 02 3 4 lat 1.1 lon 2.2
+...
+
+OsmoSMLC(config-cells)# no lac-ci 99 99
+% cannot remove, no such entry
+OsmoSMLC(config-cells)# no cgi 009 08 7 6
+% cannot remove, no such entry
+
+OsmoSMLC(config-cells)# do show cells
+cells
+ lac-ci 23 42 lat 23.23 lon 42.42
+ cgi 001 02 3 4 lat 1.1 lon 2.2
+
+OsmoSMLC(config-cells)# lac-ci 23 42 lat 17.17 lon 18.18
+OsmoSMLC(config-cells)# do show cells
+cells
+ lac-ci 23 42 lat 17.17 lon 18.18
+ cgi 001 02 3 4 lat 1.1 lon 2.2
+
+OsmoSMLC(config-cells)# no lac-ci 23 42
+OsmoSMLC(config-cells)# no cgi 001 02 3 4
+
+OsmoSMLC(config-cells)# do show cells
+% No cell locations are configured