forked from RangeNetworks/OpenBTS-UMTS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGetConfigurationKeys.cpp
1747 lines (1602 loc) · 47.9 KB
/
GetConfigurationKeys.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*
* OpenBTS provides an open source alternative to legacy telco protocols and
* traditionally complex, proprietary hardware systems.
*
* Copyright 2008, 2009, 2010 Free Software Foundation, Inc.
* Copyright 2010 Kestrel Signal Processing, Inc.
* Copyright 2011, 2012, 2013, 2014 Range Networks, Inc.
*
* This software is distributed under the terms of the GNU Affero General
* See the COPYING and NOTICE files in the current or main directory for
* directory for licensing information.
*
* This use of this software may be subject to additional restrictions.
* See the LEGAL file in the main directory for details.
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <Configuration.h>
std::string getARFCNsString(unsigned band) {
std::stringstream ss;
int i;
float downlink;
float uplink;
if (band == 850) {
// 128:251 GSM850
downlink = 869.2;
uplink = 824.2;
for (i = 128; i <= 251; i++) {
ss << i << "|GSM850 #" << i << " : " << downlink << " MHz downlink / " << uplink << " MHz uplink,";
downlink += 0.2;
uplink += 0.2;
}
} else if (band == 900) {
// 1:124 PGSM900
downlink = 935.2;
uplink = 890.2;
for (i = 1; i <= 124; i++) {
ss << i << "|PGSM900 #" << i << " : " << downlink << " MHz downlink / " << uplink << " MHz uplink,";
downlink += 0.2;
uplink += 0.2;
}
// 975:1023 EGSM900
downlink = 1130;
uplink = 1085;
for (i = 975; i <= 1023; i++) {
ss << i << "|EGSM900 #" << i << " : " << downlink << " MHz downlink / " << uplink << " MHz uplink,";
downlink += 0.2;
uplink += 0.2;
}
} else if (band == 1800) {
// 512:885 DCS1800
downlink = 1805.2;
uplink = 1710.2;
for (i = 512; i <= 885; i++) {
ss << i << "|DCS1800 #" << i << " : " << downlink << " MHz downlink / " << uplink << " MHz uplink,";
downlink += 0.2;
uplink += 0.2;
}
} else if (band == 1900) {
// 512:810 PCS1900
downlink = 1930.2;
uplink = 1850.2;
for (i = 512; i <= 810; i++) {
ss << i << "|PCS1900 #" << i << " : " << downlink << " MHz downlink / " << uplink << " MHz uplink,";
downlink += 0.2;
uplink += 0.2;
}
}
std::string tmp = ss.str();
return tmp.substr(0, tmp.size()-1);
}
ConfigurationKeyMap getConfigurationKeys()
{
//VALIDVALUES NOTATION:
// * A:B : range from A to B in steps of 1
// * A:B(C) : range from A to B in steps of C
// * A:B,D:E : range from A to B and from D to E
// * A,B : multiple choices of value A and B
// * X|A,Y|B : multiple choices of string "A" with value X and string "B" with value Y
// * ^REGEX$ : string must match regular expression
/*
TODO : double check: sometimes symbol periods == 0.55km and other times 1.1km?
TODO : .defines() vs sql audit
TODO : Optional vs *_OPT audit
TODO : configGetNumQ()
TODO : description contains "if specified" == key is optional
TODO : These things exist but aren't defined as keys.
- GSM.SI3RO
- GSM.SI3RO.CBQ
- GSM.SI3RO.CRO
- GSM.SI3RO.TEMPORARY_OFFSET
- GSM.SI3RO.PENALTY_TIME
TODO : BOOLEAN from isDefined() to isBool()
*/
ConfigurationKeyMap map;
ConfigurationKey *tmp;
tmp = new ConfigurationKey("CLI.SocketPath","/var/run/OpenBTS-UMTS-command",
"",
ConfigurationKey::FACTORY,
ConfigurationKey::FILEPATH,
"",
false,
"Path for Unix domain datagram socket used for the OpenBTS-UMTS console interface."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.AttachDetach","1",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,// audited
"",
false,
"Use attach/detach procedure. "
"This will make initial LUR more prompt. "
"It will also cause an un-regstration if the handset powers off and really heavy LUR loads in areas with spotty coverage."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.FailedRegistration.Message","Your handset is not provisioned for this network. ",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::STRING_OPT,
"^[ -~]+$",
false,
"Send this text message, followed by the IMSI, to unprovisioned handsets that are denied registration."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.FailedRegistration.ShortCode","1000",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::STRING,
"^[0-9]+$",
false,
"The return address for the failed registration message."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.NormalRegistration.Message","",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::STRING_OPT,
"^[ -~]+$",
false,
"The text message (followed by the IMSI) to be sent to provisioned handsets when they attach on Um. "
"By default, no message is sent. "
"To have a message sent, specify one. "
"To stop sending messages again, execute \"unconfig Control.LUR.NormalRegistration.Message\"."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.NormalRegistration.ShortCode","0000",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::STRING,
"^[0-9]+$",
false,
"The return address for the normal registration message."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.OpenRegistration","",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::REGEX_OPT,
"",
false,
"This is value is a regular expression. "
"Any handset with an IMSI matching the regular expression is allowed to register, even if it is not provisioned. "
"By default, this feature is disabled. "
"To enable open registration, specify a regular expression e.g. ^460 (which matches any IMSI starting with 460, the MCC for China). "
"To disable open registration again, execute \"unconfig Control.LUR.OpenRegistration\"."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.OpenRegistration.Message","Welcome to the test network. Your IMSI is ",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::STRING,
"^[ -~]+$",
false,
"Send this text message, followed by the IMSI, to unprovisioned handsets when they attach on Um due to open registration."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.OpenRegistration.ShortCode","101",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::STRING,
"^[0-9]+$",
false,
"The return address for the open registration message."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.QueryClassmark","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,// audited
"",
false,
"Query every MS for classmark during LUR."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.QueryIMEI","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,// audited
"",
false,
"Query every MS for IMEI during LUR."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.SendTMSIs","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,// audited
"",
false,
"Send new TMSI assignments to handsets that are allowed to attach."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.UnprovisionedRejectCause","0x04",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::CHOICE,
"0x02|IMSI unknown in HLR,"
//"0x03|Illegal MS,"
"0x04|IMSI unknown in VLR,"
"0x05|IMEI not accepted,"
//"0x06|Illegal ME,"
"0x0B|PLMN not allowed,"
"0x0C|Location Area not allowed,"
"0x0D|Roaming not allowed in this location area,"
"0x11|Network failure,"
"0x16|Congestion,"
"0x20|Service option not supported,"
"0x21|Requested service option not subscribed,"
"0x22|Service option temporarily out of order,"
"0x26|Call cannot be identified,"
"0x30|Retry upon entry into a new cell,"
"0x5F|Semantically incorrect message,"
"0x60|Invalid mandatory information,"
"0x61|Message type non-existent or not implemented,"
"0x62|Message type not compatible with the protocol state,"
"0x63|Information element non-existent or not implemented,"
"0x64|Conditional IE error,"
"0x65|Message not compatible with the protocol state,"
"0x6F|Unspecified protocol error",
false,
"Reject cause for location updating failures for unprovisioned phones. "
"Reject causes come from GSM 04.08 10.5.3.6. "
"Reject cause 0x04, IMSI not in VLR, is usually the right one."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.Reporting.TMSITable","/var/run/OpenBTS-UMTS-TMSITable.db",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::FILEPATH,
"",
true,
"File path for TMSITable database."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.Reporting.TransactionTable","/var/run/OpenBTS-UMTS-TransactionTable.db",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::FILEPATH,
"",
true,
"File path for transaction table database."
);
map[tmp->getName()] = *tmp;
delete tmp;
// TODO : this setting doesn't exist in C3.1, SMSCB incomplete: INSERT OR IGNORE INTO "CONFIG" VALUES('Control.SMSCB','1',0,1,'If not NULL, enable SMSCB. If defined, ControlSMSCB.Table must also be defined.');
// TODO : no reference to this table yet, SMSCB incomplete: INSERT OR IGNORE INTO "CONFIG" VALUES('Control.SMSCB.Table','/var/run/OpenBTS-UMTS-SMSCB.db',1,1,'File path for SMSCB scheduling database. Static.');
tmp = new ConfigurationKey("Control.VEA","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,// audited
"",
false,
"Use very early assignment for speech call establishment. "
"See GSM 04.08 Section 7.3.2 for a detailed explanation of assignment types. "
"If VEA is selected, GSM.CellSelection.NECI should be set to 1. "
"See GSM 04.08 Sections 9.1.8 and 10.5.2.4 for an explanation of the NECI bit. "
"Note that some handset models exhibit bugs when VEA is used and these bugs may affect performance."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GGSN.DNS","",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::MIPADDRESS_OPT,
"",
true,
"The list of DNS servers to be used by downstream clients. "
"By default, DNS servers are taken from the host system. "
"To override, specify a space-separated list of the DNS servers, in IP dotted notation, eg: 1.2.3.4 5.6.7.8. "
"To use the host system DNS servers again, execute \"unconfig GGSN.DNS\"."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GGSN.Firewall.Enable","1",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::CHOICE,
"0|Disable Firewall,"
"1|Block MS Access to OpenBTS-UMTS and Other MS,"
"2|Block All Private IP Addresses",
true,
"0=no firewall; 1=block MS attempted access to OpenBTS-UMTS or other MS; 2=block all private IP addresses."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GGSN.IP.MaxPacketSize","1520",
"bytes",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"1492:9000",// educated guess
true,
"Maximum size of an IP packet. "
"Should normally be 1520."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GGSN.IP.ReuseTimeout","180",
"seconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"120:240",// educated guess,
true,
"How long IP addresses are reserved after a session ends."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GGSN.IP.TossDuplicatePackets","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,// audited
"",
true,
"Toss duplicate TCP/IP packets to prevent unnecessary traffic on the radio."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GGSN.Logfile.Name","",
"",
ConfigurationKey::FACTORY,
ConfigurationKey::FILEPATH_OPT,
"",
true,
"If specified, internet traffic is logged to this file e.g. ggsn.log"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GGSN.MS.IP.Base","192.168.99.1",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::IPADDRESS,
"",
true,
"Base IP address assigned to MS."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GGSN.MS.IP.MaxCount","254",
"addresses",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"1:254",// educated guess
true,
"Number of IP addresses to use for MS."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GGSN.MS.IP.Route","",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::CIDR_OPT,
"",
true,
"A route address to be used for downstream clients. "
"By default, OpenBTS-UMTS manufactures this value from the GGSN.MS.IP.Base assuming a 24 bit mask. "
"To override, specify a route address in the form xxx.xxx.xxx.xxx/yy. "
"The address must encompass all MS IP addresses. "
"To use the auto-generated value again, execute \"unconfig GGSN.MS.IP.Route\"."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GGSN.ShellScript","",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::FILEPATH_OPT,
"",
false,
"A shell script to be invoked when MS devices attach or create IP connections. "
"By default, this feature is disabled. "
"To enable, specify an absolute path to the script you wish to execute e.g. /usr/bin/ms-attach.sh. "
"To disable again, execute \"unconfig GGSN.ShellScript\"."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GGSN.TunName","sgsntun",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::STRING,
"^[a-z0-9]+$",
true,
"Tunnel device name for GGSN."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Multislot.Max.Downlink","1",
"channels",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"0:10",// educated guess
false,
"Maximum number of channels used for a single MS in downlink."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Multislot.Max.Uplink","1",
"channels",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"0:10",// educated guess
false,
"Maximum number of channels used for a single MS in uplink."
);
map[tmp->getName()] = *tmp;
delete tmp;
//DEFAULT of 1 in UMTSConfig.cpp:930
//DEFAULT of 2 in Sgsn.cpp:455
tmp = new ConfigurationKey("GPRS.NMO","1",// USED SQL DEFAULT
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::CHOICE,
"1|Mode I,"
"2|Mode II,"
"3|Mode III",
false,
"Network Mode of Operation. "
"See GSM 03.60 Section 6.3.3.1 and 24.008 4.7.1.6. "
"Allowed values are 1, 2, 3 for modes I, II, III. "
"Mode II (2) is recommended. "
"Mode I implies combined routing updating procedures."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.RAC","100",// DEFAULT INLINE WAS 0
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:255",
true,
"GPRS Routing Area Code, advertised in the C0T0 beacon."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.CCCH.CCCH-CONF","1",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::CHOICE,
"1|C-V Beacon,"
"2|C-IV Beacon",
true,
"CCCH configuration type. "
"See GSM 10.5.2.11 for encoding. "
"Value of 1 means we are using a C-V beacon. "
"Any other value selects a C-IV beacon. "
"In C2.9 and earlier, the only allowed value is 1."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.CellSelection.CELL-RESELECT-HYSTERESIS","3",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::CHOICE,
"0|0dB,"
"1|2dB,"
"2|4dB,"
"3|6dB,"
"4|8dB,"
"5|10dB,"
"6|12dB,"
"7|14dB",
false,
"Cell Reselection Hysteresis. "
"See GSM 04.08 10.5.2.4, Table 10.5.23 for encoding. "
"Encoding is $2N$ dB, values of $N$ are 0...7 for 0...14 dB."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.CellSelection.MS-TXPWR-MAX-CCH","0",
"dB",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:31",
false,
"Cell selection parameters. "
"See GSM 04.08 10.5.2.4."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.CellSelection.NCCsPermitted","1",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::VALRANGE,
"0:255",
false,
"NCCs Permitted. "
"An 8-bit mask of allowed NCCs. "
"Unless you are coordinating with another carrier, this should probably just select your own NCC."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.CellSelection.NECI","1",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::CHOICE,
"0|New establishment causes are not supported,"
"1|New establishment causes are supported",
false,
"NECI, New Establishment Causes. "
"This must be set to 1 if you want to support very early assignment (VEA). "
"It can be set to 1 even if you do not use VEA, so you might as well leave it as 1. "
"See GSM 04.08 10.5.2.4, Table 10.5.23 and 04.08 9.1.8, Table 9.9 and the Control.VEA parameter."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.CellSelection.RXLEV-ACCESS-MIN","0",
"dB",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:63",
false,
"Cell selection parameters. "
"See GSM 04.08 10.5.2.4."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Identity.BSIC.BCC","2",
"",
ConfigurationKey::CUSTOMERSITE,
ConfigurationKey::VALRANGE,
"0:7",
false,
"GSM basestation color code; lower 3 bits of the BSIC. "
"BCC values in a multi-BTS network should be assigned so that BTS units with overlapping coverage do not share a BCC. "
"This value will also select the training sequence used for all slots on this unit.",
ConfigurationKey::NEIGHBORSUNIQUE
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Identity.LAC","1000",//DEFAULT INLINE WAS 0
"",
ConfigurationKey::CUSTOMERSITE,
ConfigurationKey::VALRANGE,
"0:65280",
false,
"Location area code, 16 bits, values 0xFFxx are reserved. "
"For multi-BTS networks, assign a unique LAC to each BTS unit. "
"(That is not the normal procedure in conventional GSM networks, but is the correct procedure in OpenBTS-UMTS networks.)",
ConfigurationKey::GLOBALLYUNIQUE
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Identity.MCC","001",
"",
ConfigurationKey::CUSTOMERSITE,
ConfigurationKey::STRING,
"^[0-9]{3}$",
false,
"Mobile country code; must be three digits. "
"Defined in ITU-T E.212. 001 for test networks.",
ConfigurationKey::GLOBALLYSAME
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Identity.MNC","01",
"",
ConfigurationKey::CUSTOMERSITE,
ConfigurationKey::STRING,
"^[0-9]{2,3}$",
false,
"Mobile network code, two or three digits. "
"Assigned by your national regulator. "
"01 for test networks.",
ConfigurationKey::GLOBALLYSAME
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.MaxSpeechLatency","2",
"20 millisecond frames",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"1:5",// educated guess
false,
"Maximum allowed speech buffering latency, in 20 millisecond frames. "
"If the jitter is larger than this delay, frames will be lost."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.RACH.AC","0x0400",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::CHOICE,
"0|Full Access,"
"0x0400|Emergency Calls Not Supported",
false,
"Access class flags. "
"This is the raw parameter sent on the BCCH. "
"See GSM 04.08 10.5.2.29 for encoding. "
"Set to 0 to allow full access. "
"Set to 0x0400 to indicate no support for emergency calls."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.RACH.MaxRetrans","1",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::CHOICE,
"0|1 retransmission,"
"1|2 retransmissions,"
"2|4 retransmissions,"
"3|7 retransmissions",
false,
"Maximum RACH retransmission attempts. "
"This is the raw parameter sent on the BCCH. "
"See GSM 04.08 10.5.2.29 for encoding."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.RACH.TxInteger","14",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::CHOICE,
"0|3 slots,"
"1|4 slots,"
"2|5 slots,"
"3|6 slots,"
"4|7 slots,"
"5|8 slots,"
"6|9 slots,"
"7|10 slots,"
"8|11 slots,"
"9|12 slots,"
"10|14 slots,"
"11|16 slots,"
"12|20 slots,"
"13|25 slots,"
"14|32 slots,"
"15|50 slots",
false,
"Parameter to spread RACH busts over time. "
"This is the raw parameter sent on the BCCH. "
"See GSM 04.08 10.5.2.29 for encoding."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.RRLP.SEED.LATITUDE","37.777423",
"degrees",
ConfigurationKey::CUSTOMERSITE,
ConfigurationKey::VALRANGE,
"-90.000000:90.000000",
false,
"Seed latitude in degrees. "
"-90 (south pole) .. +90 (north pole)"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.RRLP.SEED.LONGITUDE","-122.39807",
"degrees",
ConfigurationKey::CUSTOMERSITE,
ConfigurationKey::VALRANGE,
"-180.000000:180.000000",
false,
"Seed longitude in degrees. "
"-180 (west of greenwich) .. 180 (east)"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.ShowCountry","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,// audited
"",
false,
"Tell the phone to show the country name based on the MCC."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Timer.T3113","10000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"5000:15000(500)",// educated guess
false,
"Paging timer T3113 in milliseconds. "
"This is the timeout for a handset to respond to a paging request. "
"This should usually be the same as SIP.Timer.B in your VoIP network."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Timer.T3212","0",
"minutes",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"0:1530(6)",
false,
"Registration timer T3212 period in minutes. "
"Should be a factor of 6. "
"Set to 0 to disable periodic registration. "
"Should be smaller than SIP registration period."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("RTP.Range","98",
"ports",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"25:200",// educated guess
true,
"Range of RTP port pool. "
"Pool is RTP.Start to RTP.Range-1."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("RTP.Start","16484",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::PORT,
"",
true,
"Base of RTP port pool. "
"Pool is RTP.Start to RTP.Range-1."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SGSN.Debug","0",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::BOOLEAN,// audited
"",
false,
"Add layer-3 messages to the GGSN.Logfile, if any."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SGSN.Timer.ImplicitDetach","3480",
"seconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"2000:4000(10)",// educated guess
false,
"3GPP 24.008 11.2.2. "
"GPRS attached MS is implicitly detached in seconds. "
"Should be at least 240 seconds greater than SGSN.Timer.RAUpdate.");
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SGSN.Timer.MS.Idle","600",
"?seconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"300:900(10)",// educated guess
false,
"How long an MS is idle before the SGSN forgets TLLI specific information."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SGSN.Timer.RAUpdate","3240",
"seconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:11160(2)", // (pat) 0 deactivates, up to 31 deci-hours which is 11160 seconds. Minimum increment is 2 seconds.
false,
"Also known as T3312, 3GPP 24.008 4.7.2.2. "
"How often MS reports into the SGSN when it is idle, in seconds. "
"Setting to 0 or >12000 deactivates entirely, i.e., sets the timer to effective infinity. "
"Note: to prevent GPRS Routing Area Updates you must set both this and GSM.Timer.T3212 to 0. "
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SGSN.Timer.Ready","44",
"seconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"30:90",// educated guess
false,
"Also known as T3314, 3GPP 24.008 4.7.2.1. "
"Inactivity period required before MS may perform another routing area or cell update, in seconds."
);
map[tmp->getName()] = *tmp;
delete tmp;
// BUG : this is still using .defines() in C3.1!
tmp = new ConfigurationKey("SIP.DTMF.RFC2833","1",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::BOOLEAN,
"",
false,
"Use RFC-2833 (RTP event signalling) for in-call DTMF."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.DTMF.RFC2833.PayloadType","101",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::VALRANGE,
"96:127",
false,
"Payload type to use for RFC-2833 telephone event packets."
);
map[tmp->getName()] = *tmp;
delete tmp;
// BUG : this is still using .defines() in C3.1!
tmp = new ConfigurationKey("SIP.DTMF.RFC2967","0",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::BOOLEAN,
"",
false,
"Use RFC-2967 (SIP INFO method) for in-call DTMF."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.Local.IP","127.0.0.1",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::IPADDRESS,
"",
true,
"IP address of the OpenBTS-UMTS machine as seen by its proxies. "
"If these are all local, this can be localhost.",
ConfigurationKey::NODESPECIFIC
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.Local.Port","5062",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::PORT,
"",
true,
"IP port that OpenBTS-UMTS uses for its SIP interface."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.MaxForwards","70",
"referrals",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"1:100",
false,
"Maximum allowed number of referrals."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.Proxy.Registration","127.0.0.1:5064",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::HOSTANDPORT,
"",
false,
"The hostname or IP address and port of the proxy to be used for registration and authentication. "
"This should normally be the subscriber registry SIP interface, not Asterisk.",
ConfigurationKey::GLOBALLYSAME
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.Proxy.SMS","127.0.0.1:5063",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::HOSTANDPORT,
"",
false,
"The hostname or IP address and port of the proxy to be used for text messaging. "
"This is smqueue, for example.",
ConfigurationKey::GLOBALLYSAME
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.Proxy.Speech","127.0.0.1:5060",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::HOSTANDPORT,
"",
false,
"The hostname or IP address and port of the proxy to be used for normal speech calls. "
"This is Asterisk, for example.",
ConfigurationKey::GLOBALLYSAME
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.RegistrationPeriod","90",
"minutes",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"6:2298",// educated guess
false,
"Registration period in minutes for MS SIP users. "
"Should be longer than GSM T3212."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.SMSC","smsc",
"",
ConfigurationKey::CUSTOMERWARN,