Files
openbts/apps/GetConfigurationKeys.cpp

2774 lines
76 KiB
C++

/*
* Copyright 2008, 2009, 2010 Free Software Foundation, Inc.
* Copyright 2010 Kestrel Signal Processing, Inc.
* Copyright 2011, 2012 Range Networks, Inc.
*
* This software is distributed under multiple licenses;
* see the COPYING file in the main directory for licensing
* information for this specific distribuion.
*
* This use of this software may be subject to additional restrictions.
* See the LEGAL file in the main directory for details.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <Configuration.h>
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 : crossCheck possibility here: GSM.CellOptions.RADIO-LINK-TIMEOUT should be coordinated with T3109.
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
- GPRS.SGSN.External
- GPRS.SGSN.Host
- 'GPRS.TBF.Downlink.NStuck','250',0,0,'Maximum number of blocks sent to non-advancing TBF'
- 'GPRS.MS.ResponseTime','4',0,0,'Allow the MS this much processing time to respond to an assignment message, specified as a count of RLC blocks. The MS must send its response this many blocks after receiving the message. Can also add an arbitrary additional delay if necessary.'
- ...
*/
ConfigurationKeyMap map;
ConfigurationKey *tmp;
tmp = new ConfigurationKey("CLI.SocketPath","/var/run/command",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::FILEPATH,
"",
false,
"Path for Unix domain datagram socket used for the OpenBTS console interface."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.Call.QueryRRLP.Early","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,
"",
false,
"Query every MS for its location via RRLP during the setup of a call."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.Call.QueryRRLP.Late","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,
"",
false,
"Query every MS for its location via RRLP during the teardown of a call."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.GSMTAP.GPRS","0",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::BOOLEAN,
"",
false,
"Capture GPRS signaling and traffic at L1/L2 interface via GSMTAP."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.GSMTAP.GSM","0",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::BOOLEAN,
"",
false,
"Capture GSM signaling at L1/L2 interface via GSMTAP."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.GSMTAP.TargetIP","127.0.0.1",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::IPADDRESS,
"",
false,
"Target IP address for GSMTAP packets; the IP address of Wireshark, if you use it for real time traces."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.AttachDetach","1",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,
"",
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,// audited
"^[[:print:]]+$",
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,// audited
"^[[:print:]]+$",
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,// audited
"",
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,
"^[[:print:]]+$",
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.Reject","",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::REGEX_OPT,// audited
"",
false,
"This is value is a regular expression. "
"Any unprovisioned handset with an IMSI matching the regular expression is rejected for registration, even if it matches Control.LUR.OpenRegistration. "
"By default, this feature is disabled. "
"To enable this filter, specify a regular expression e.g. ^460 (which matches any IMSI starting with 460, the MCC for China). "
"To disable this filter again, execute \"unconfig Control.LUR.OpenRegistration.Reject\". "
"If Control.LUR.OpenRegistration is disabled, this parameter has no effect."
);
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,
"",
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,
"",
false,
"Query every MS for IMEI during LUR."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.QueryRRLP","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,
"",
false,
"Query every MS for its location via RRLP during LUR."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.SendTMSIs","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,
"",
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.LUR.WhiteList","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,
"",
false,
"Whitelist checking is performed."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.WhiteListing.Message","Your handset needs to be added to the whitelist.",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::STRING,
"^[[:print:]]+$",
false,
"The whitelisting notification message."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.LUR.WhiteListing.RejectCause","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 handset not in the whitelist, when whitelisting is enforced. "
"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.LUR.WhiteListing.ShortCode","1000",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::STRING,
"^[0-9]+$",
false,
"The return address for the whitelisting notificiation message."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.Reporting.PhysStatusTable","/var/run/ChannelTable.db",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::FILEPATH,
"",
true,
"File path for channel status reporting database."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.Reporting.StatsTable","/var/log/OpenBTSStats.db",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::FILEPATH,
"",
true,
"File path for statistics reporting database."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.Reporting.TMSITable","/var/run/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/TransactionTable.db",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::FILEPATH,
"",
true,
"File path for transaction table database."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.SACCHTimeout.BumpDown","1",
"dB",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"1:3",// educated guess
false,
"Decrease the RSSI by this amount to induce more power in the MS each time we fail to receive a response from it."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.SMS.QueryRRLP","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,
"",
false,
"Query every MS for its location via RRLP during an SMS."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.SMSCB.Table","",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::FILEPATH_OPT,// audited
"",
true,
"File path for SMSCB scheduling database. "
"By default, this feature is disabled. "
"To enable, specify a file path for the database e.g. /var/run/SMSCB.db. "
"To disable again, execute \"unconfig Control.SMSCB.Table\"."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.TestCall.AutomaticModeChange","0",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::BOOLEAN,
"",
false,
"Automatically change the channel mode of a TCH/FACCH from signaling-only to speech-V1 before starting the fuzzing interface."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.TestCall.LocalPort","24020",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::PORT,
"",
false,
"Port number part of source for L3 payloads received from the handset in fuzzing interface."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.TestCall.PollTime","100",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"50:200(10)",// educated guess
false,
"Polling time of the fuzzing interface in milliseconds."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.TestCall.RemoteHost","127.0.0.1",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::IPADDRESS,
"",
false,
"Host part of destination for L3 payloads received from the handset in fuzzing interface."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.TestCall.RemotePort","24021",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::PORT,
"",
false,
"Port number part of destination for L3 payloads received from the handset in fuzzing interface."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Control.VEA","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,
"",
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("Control.WatchdogMinutes","60",
"minutes",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:6000",// educated guess
false,
"Number of minutes before the radio watchdog expires and OpenBTS is restarted."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GGSN.DNS","",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::MIPADDRESS_OPT,// audited
"",
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 and Other MS,"
"2|Block All Private IP Addresses",
true,
"0=no firewall; 1=block MS attempted access to OpenBTS 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,
"",
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,// audited
"",
true,
"A route address to be used for downstream clients. "
"By default, OpenBTS 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,// audited
"",
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.advanceblocks","10",
"blocks",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"5:15",// educated guess
false,
"Number of advance blocks to use in the CCCH reservation."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.CellOptions.T3168Code","5",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::CHOICE,
"0|500ms,"
"1|1000ms,"
"2|1500ms,"
"3|2000ms,"
"4|2500ms,"
"5|3000ms,"
"6|3500ms,"
"7|4000ms",
true,
"Timer 3168 in the MS controls the wait time after sending a Packet Resource Request to initiate a TBF before giving up or reattempting a Packet Access Procedure, which may imply sending a new RACH. "
"This code is broadcast to the MS in the C0T0 beacon in the GPRS Cell Options IE. "
"See GSM 04.60 12.24. "
"Range 0..7 to represent 0.5sec to 4sec in 0.5sec steps."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.CellOptions.T3192Code","0",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::CHOICE,
"0|500ms,"
"1|1000ms,"
"2|1500ms,"
"3|0ms,"
"4|80ms,"
"5|120ms,"
"6|160ms,"
"7|200ms",
true,
"Timer 3192 in the MS specifies the time MS continues to listen on PDCH after all downlink TBFs are finished, and is used to reduce unnecessary RACH traffic. "
"This code is broadcast to the MS in the C0T0 beacon in the GPRS Cell Options IE. "
"The value must be one of the codes described in GSM 04.60 12.24. "
"Value 0 implies 500msec; 2 implies 1500msec; 3 imples 0msec."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.ChannelCodingControl.RSSI","-40",
"dB",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"-65:-15",// educated guess
false,
"If the initial unlink signal strength is less than this amount in DB GPRS uses a lower bandwidth but more robust encoding CS-1. "
"This value should normally be GSM.Radio.RSSITarget + 10 dB."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Channels.Congestion.Threshold","200",
"probability in %",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"100:300(5)",// educated guess
false,
"The GPRS channel is considered congested if the desired bandwidth exceeds available bandwidth by this amount, specified in percent."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Channels.Congestion.Timer","60",
"seconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"30:90(5)",// educated guess
false,
"How long in seconds GPRS congestion exceeds the Congestion.Threshold before we attempt to allocate another channel for GPRS."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Channels.Min.C0","2",
"channels",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"0:7",
false,
"Minimum number of channels allocated for GPRS service on ARFCN C0."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Channels.Min.CN","0",
"channels",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"0:100",
false,
"Minimum number of channels allocated for GPRS service on ARFCNs other than C0."
);
map[tmp->getName()] = *tmp;
delete tmp;
#if GPRS_CHANNELS_MAX_SUPPORTED
tmp = new ConfigurationKey("GPRS.Channels.Max","4",
"channels",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"0:10",// educated guess
false,
"Maximum number of channels allocated for GPRS service."
);
map[tmp->getName()] = *tmp;
delete tmp;
#endif
tmp = new ConfigurationKey("GPRS.Codecs.Downlink","14",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::STRING,
"^1{0,1}2{0,1}3{0,1}4{0,1}$",// "1234" with each number optional
false,
"List of allowed GPRS downlink codecs 1..4 for CS-1..CS-4. Currently, only 1 and 4 are supported e.g. 14."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Codecs.Uplink","14",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::STRING,
"^1{0,1}2{0,1}3{0,1}4{0,1}$",// "1234" with each number optional
false,
"List of allowed GPRS uplink codecs 1..4 for CS-1..CS-4. Currently, only 1 and 4 are supported e.g. 14."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Counters.Assign","10",
"messages",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"5:15",// educated guess
false,
"Maximum number of assign messages sent"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Counters.N3101","20",
"responses",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"8:32",// educated guess
false,
"Counts unused USF responses to detect nonresponsive MS. "
"Should be > 8. "
"See GSM04.60 sec 13."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Counters.N3103","8",
"attempts",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"4:12",// educated guess
false,
"Counts ACK/NACK attempts to detect nonresponsive MS. "
"See GSM04.60 sec 13."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Counters.N3105","12",
"responses",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"6:18",// educated guess
false,
"Counts unused RRBP responses to detect nonresponsive MS. "
"See GSM04.60 sec 13."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Counters.Reassign","6",
"messages",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"3:9",// educated guess
false,
"Maximum number of reassign messages sent"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Counters.TbfRelease","5",
"messages",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"3:8",// educated guess
false,
"Maximum number of TBF release messages sent"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Debug","0",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::BOOLEAN,
"",
false,
"Toggle GPRS debugging."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Downlink.KeepAlive","300",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"200:5000(100)",// educated guess
false,
"How often to send keep-alive messages for persistent TBFs in milliseconds; must be long enough to avoid simultaneous in-flight duplicates, and short enough that MS gets one every 5 seconds. "
"GSM 5.08 10.2.2 indicates MS must get a block every 360ms"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Downlink.Persist","0",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:10000(100)",// educated guess
false,
"After completion, downlink TBFs are held open for this time in milliseconds. "
"If non-zero, must be greater than GPRS.Downlink.KeepAlive."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Enable","1",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,
"",
false,
"If enabled, GPRS service is advertised in the C0T0 beacon, and GPRS service may be started on demand. "
"See also GPRS.Channels.*."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.LocalTLLI.Enable","1",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::BOOLEAN,
"",
false,
"Enable recognition of local TLLI"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.MS.KeepExpiredCount","20",
"structs",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"10:30",// eduated guess
false,
"How many expired MS structs to retain; they can be viewed with gprs list ms -x"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.MS.Power.Alpha","10",
"alpha",
ConfigurationKey::DEVELOPER,
ConfigurationKey::CHOICE,
"0|0.0,"
"1|0.1,"
"2|0.2,"
"3|0.3,"
"4|0.4,"
"5|0.5,"
"6|0.6,"
"7|0.7,"
"8|0.8,"
"9|0.9,"
"10|1.0",
false,
"MS power control parameter, unitless, in steps of 0.1, so a parameter of 5 is an alpha value of 0.5. "
"Determines sensitivity of handset to variations in downlink RSSI. "
"Valid range is 0...10 for alpha values of 0...1.0. "
"See GSM 05.08 10.2.1."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.MS.Power.Gamma","31",
"2 dB steps",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:31",
false,
"MS power control parameter, in 2 dB steps. "
"Determines baseline of handset uplink power relative to downlink RSSI. "
"The optimum value will tend to be lower for BTS units with higher power output. "
"This default assumes a balanced link with a BTS output of 2-4 W/ARFCN. "
"Valid range is 0...31 for gamma values of 0...62 dB. "
"See GSM 05.08 10.2.1."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.MS.Power.T_AVG_T","15",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:25",
true,
"MS power control parameter; see GSM 05.08 10.2.1."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.MS.Power.T_AVG_W","15",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:25",
true,
"MS power control parameter; see GSM 05.08 10.2.1."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Multislot.Max.Downlink","3",
"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","2",
"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;
tmp = new ConfigurationKey("GPRS.NC.NetworkControlOrder","2",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:3",
true,
"Controls measurement reports and cell reselection mode (MS autonomous or under network control); should not be changed. "
"See GSM 5.08 10.1.4."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.NMO","2",
"",
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.PRIORITY-ACCESS-THR","6",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::CHOICE,
"0|Packet access not allowed in the cell,"
"3|Packet access allowed for priority level 1,"
"4|Packet access allowed for priority level 1 to 2,"
"5|Packet access allowed for priority level 1 to 3,"
"6|Packet access allowed for priority level 1 to 4",
true,
"Code contols GPRS packet access priorities allowed. "
"See GSM04.08 table 10.5.76."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.RAC","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("GPRS.RA_COLOUR","0",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:7",
false,
"GPRS Routing Area Color as advertised in the C0T0 beacon."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.RRBP.Min","0",
"?",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:3",
false,
"Minimum value for RRBP reservations, range 0..3. "
"Should normally be 0. "
"A non-zero value gives the MS more time to respond to the RRBP request."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Reassign.Enable","1",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::BOOLEAN,
"",
false,
"Enable TBF Reassignment"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.SendIdleFrames","0",
"",
ConfigurationKey::FACTORY,
ConfigurationKey::BOOLEAN,
"",
false,
"Should be 0 for current transceiver or 1 for deprecated version of transceiver."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.SGSN.port","1920",
"",
ConfigurationKey::DEVELOPER,
ConfigurationKey::PORT,
"",
false,
"Port number of the SGSN required for GPRS service. This must match the port specified in the SGSN config file, currently osmo_sgsn.cfg."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.TBF.Downlink.Poll1","10",
"blocks",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"5:15",// educated guess
false,
"When the first poll is sent for a downlink tbf, measured in blocks sent."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.TBF.EST","1",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::BOOLEAN,
"",
false,
"Allow MS to request another uplink assignment at end up of uplink TBF. "
"See GSM 4.60 9.2.3.4"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.TBF.Expire","30000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"20000:40000",// educated guess
false,
"How long to try before giving up on a TBF."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.TBF.KeepExpiredCount","20",
"structs",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"15:25",// educated guess
false,
"How many expired TBF structs to retain; they can be viewed with gprs list tbf -x"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.TBF.Retry","1",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::CHOICE,
"0|Do Not Retry,"
"1|Codec 1,"
"2|Codec 2,"
"3|Codec 3,"
"4|Codec 4",
false,
"If 0, no tbf retry, otherwise if a tbf fails it will be retried with this codec, numbered 1..4"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Timers.Channels.Idle","6000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"3000:6000(100)",// educated guess
false,
"How long in milliseconds a GPRS channel is idle before being returned to the pool of channels. "
"Also depends on Channels.Min. "
"Currently the channel cannot be returned to the pool while there is any GPRS activity on any channel."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Timers.MS.Idle","600",
"seconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"300:900(10)",// educated guess
false,
"How long in seconds an MS is idle before the BTS forgets about it."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Timers.MS.NonResponsive","6000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"3000:9000(100)",// educated guess
false,
"How long in milliseconds a TBF is non-responsive before the BTS kills it."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Timers.T3169","5000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"2500:7500(100)",// educated guess
false,
"Nonresponsive uplink TBF resource release timer, in milliseconds. "
"See GSM04.60 sec 13."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Timers.T3191","5000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"2500:7500(100)",// educated guess
false,
"Nonresponsive downlink TBF resource release timer, in milliseconds. "
"See GSM04.60 Section 13."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Timers.T3193","0",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:5000(100)",// educated guess
false,
"Timer T3193 (in milliseconds) in the base station corresponds to T3192 in the MS, which is set by GPRS.CellOptions.T3192Code. "
"The T3193 value should be slightly longer than that specified by the T3192Code. "
"If 0, the BTS will fill in a default value based on T3192Code."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Timers.T3195","5000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"2500:7500(100)",// educated guess
false,
"Nonresponsive downlink TBF resource release timer, in milliseconds. "
"See GSM04.60 Section 13."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Uplink.KeepAlive","300",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"200:5000(100)",// educated guess
false,
"How often to send keep-alive messages for persistent TBFs in milliseconds; must be long enough to avoid simultaneous in-flight duplicates, and short enough that MS gets one every 5 seconds."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GPRS.Uplink.Persist","4000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:6000(100)",// educated guess
true,
"After completion, uplink TBFs are held open for this time in milliseconds. "
"If non-zero, must be greater than GPRS.Uplink.KeepAlive. "
"This is broadcast in the beacon and it cannot be changed once BTS is started."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.CCCH.AGCH.QMax","5",
"queued access grants",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"3:8",// educated guess
false,
"Maximum number of access grants to be queued for transmission on AGCH before declaring congestion."
);
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.CellOptions.RADIO-LINK-TIMEOUT","15",
"seconds",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"10:20",// educated guess
true,
"Seconds before declaring a physical link dead."
);
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.Channels.C1sFirst","0",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::BOOLEAN,
"",
true,
"Allocate C-I slots first, starting at C0T1. "
"Otherwise, allocate C-VII slots first."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Channels.NumC1s","7",
"timeslots",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"0:100",// this is crap, calc from arfcns
true,
"Number of Combination-I timeslots to configure. "
"The C-I slot carries a single full-rate TCH, used for speech calling."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Channels.NumC7s","0",
"timeslots",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"0:100",// this is crap, calc from arfcns
true,
"Number of Combination-VII timeslots to configure. "
"The C-VII slot carries 8 SDCCHs, useful to handle high registration loads or SMS. "
"If C0T0 is C-IV, which it always is in C2.9 and earlier,, you must have at least one C-VII also."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Channels.SDCCHReserve","0",
"SDCCHs",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"0:10",// educated guess
false,
"Number of SDCCHs to reserve for non-LUR operations. "
"This can be used to force LUR transactions into a lower priority."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Cipher.CCHBER","0",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::VALRANGE,
"0.0:1.0",
false,
"Probability of a bit getting toggled in a control channel burst for cracking protection."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Cipher.Encrypt","0",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::BOOLEAN,
"",
false,
"Encrypt traffic between phone and OpenBTS."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Cipher.RandomNeighbor","0",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::VALRANGE,
"0.0:1.0",
false,
"Probability of a random neighbor being added to SI5 for cracking protection."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Cipher.ScrambleFiller","0",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::BOOLEAN,
"",
false,
"Scramble filler in layer 2 for cracking protection."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Control.GPRSMaxIgnore","5",
"messages",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"3:8",// educated guess
false,
"Ignore GPRS messages on GSM control channels. "
"Value is number of consecutive messages to ignore."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Handover.FailureHoldoff","5",
"seconds",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"2:7",// educated guess
false,
"The number of seconds to wait before attempting another handover with a given neighbor BTS."
);
map[tmp->getName()] = *tmp;
delete tmp;
// (pat) This value interacts with "GPRS.ChannelCodingControl.RSSI" which selects the GPRS codec.
// In my opinion, if GPRS is enabled, we should handover to try to get the RSSI above GPRS.ChannelCodingControl.RSSI.
tmp = new ConfigurationKey("GSM.Handover.LocalRSSIMin","-80",
"dBm",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"-100:-60",// educated guess
false,
"Do not handover if downlink RSSI is above this level (in dBm), regardless of power difference."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Handover.ThresholdDelta","10",
"dB",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"5:20",// educated guess
false,
"A neighbor downlink signal must be this much stronger (in dB) than this downlink signal for handover to occur."
);
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."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Identity.BSIC.NCC","0",
"",
ConfigurationKey::CUSTOMERSITE,
ConfigurationKey::VALRANGE,
"0:7",
false,
"GSM network color code; upper 3 bits of the BSIC. "
"Assigned by your national regulator. "
"Must be distinct from NCCs of other GSM operators in your area."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Identity.CI","10",
"",
ConfigurationKey::CUSTOMERSITE,
ConfigurationKey::VALRANGE,
"0:65535",
false,
"Cell ID, 16 bits. "
"Should be unique."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Identity.LAC","1000",
"",
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 networks.)"
);
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."
);
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."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Identity.ShortName","Range",
"",
ConfigurationKey::CUSTOMERSITE,
ConfigurationKey::STRING,
"^[[:alnum:]]+$",
false,
"Network short name, displayed on some phones. "
"Optional but must be defined if you also want the network to send time-of-day."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.MS.Power.Damping","50",
"?damping value",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"25:75",// educated guess
false,
"Damping value for MS power control loop."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.MS.Power.Max","33",
"dBm",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"5:100",// educated guess
false,
"Maximum commanded MS power level in dBm."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.MS.Power.Min","5",
"dBm",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"5:100",// educated guess
false,
"Minimum commanded MS power level in dBm."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.MS.TA.Damping","50",
"?damping value",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"25:75",// educated guess
false,
"Damping value for timing advance control loop."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.MS.TA.Max","62",
"symbol periods",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"1:62",
false,
"Maximum allowed timing advance in symbol periods. "
"One symbol period of round-trip delay is about 0.55 km of distance. "
"Ignore RACH bursts with delays greater than this. "
"Can be used to limit service range. "
"Valid range is 1..62."
);
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.Neighbors","",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::MIPADDRESS_OPT,// audited
"",
false,
"A list of IP addresses of neighbor BTSs available for handover. "
"By default, this feature is disabled. "
"To enable, specify a space-separated list of the BTS IP addresses, in IP dotted notation, eg: 1.2.3.4 5.6.7.8. "
"To disable again, execute \"unconfig GSM.Neighbors\"."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Neighbors.NumToSend","8",
"neighbors",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"1:10",// educated guess
false,
"Maximum number of neighbors to send to handset in a neighbor list."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Ny1","5",
"repeats",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"1:10",// educated guess
true,
"Maximum number of repeats of the Physical Information Message during handover procedure, GSM 04.08 11.1.3."
);
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.ACCURACY","40",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"20:60",// educated guess
false,
"Requested accuracy of location request. "
"K in r=10(1.1**K-1), where r is the accuracy in meters. "
"See 3GPP 03.32, sect 6.2"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.RRLP.ALMANAC.ASSIST.PRESENT","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,
"",
false,
"Send almanac info to mobile"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.RRLP.ALMANAC.REFRESH.TIME","24.0",
"hours",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"18.0:30.0(0.1)",// educated guess
false,
"How often the almanac is refreshed, in hours"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.RRLP.ALMANAC.URL","http://www.navcen.uscg.gov/?pageName=currentAlmanac&format=yuma",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::STRING,
"^(http|ftp)://[[:alnum:]_.-]",
false,
"URL of almanac source."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.RRLP.EPHEMERIS.ASSIST.COUNT","9",
"satellites",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"6:12",// educated guess
false,
"number of satellites to include in navigation model"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.RRLP.EPHEMERIS.REFRESH.TIME","1.0",
"hours",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"0.5:1.5(0.1)",// educated guess
false,
"How often the ephemeris is refreshed, in hours."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.RRLP.EPHEMERIS.URL","ftp://ftp.trimble.com/pub/eph/CurRnxN.nav",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::STRING,
"^(http|ftp)://[[:alnum:]_.-]",
false,
"URL of ephemeris source."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.RRLP.RESPONSETIME","4",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"2:6",// educated guess
false,
"Mobile timeout. "
"(OpenBTS timeout is 130 sec = max response time + 2.) N in 2**N. "
"See 3GPP 04.31 sect A.2.2.1"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.RRLP.SEED.ALTITUDE","0",
"meters",
ConfigurationKey::CUSTOMERSITE,
ConfigurationKey::VALRANGE,
"-420:8850(5)",
false,
"Seed altitude in meters wrt geoidal surface."
);
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.RRLP.SERVER.URL","",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::STRING_OPT,// audited
"^(http|ftp)://[[:alnum:]_.-]",
false,
"URL of RRLP server. "
"By default, this feature is disabled. "
"To enable, specify a server URL eg: http://localhost/cgi/rrlpserver.cgi. "
"To disable again, execute \"unconfig GSM.RRLP.SERVER.URL\"."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Radio.ARFCNs","1",
"ARFCNs",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::VALRANGE,
"1:10",// educated guess
true,
"The number of ARFCNs to use. "
"The ARFCN set will be C0, C0+2, C0+4, etc."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Radio.Band","900",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::CHOICE,
"850|GSM850,"
"900|PGSM900,"
"1800|DCS1800,"
"1900|PCS1900",
true,
"The GSM operating band. "
"Valid values are 850 (GSM850), 900 (PGSM900), 1800 (DCS1800) and 1900 (PCS1900). "
"For non-multiband units, this value is dictated by the hardware and should not be changed."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Radio.C0","51",
"",
ConfigurationKey::CUSTOMERSITE,
ConfigurationKey::CHOICE,
ConfigurationKey::getARFCNsString(),
true,
"The C0 ARFCN. "
"Also the base ARFCN for a multi-ARFCN configuration."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Radio.MaxExpectedDelaySpread","4",
"symbol periods",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"1:4",
false,
"Expected worst-case delay spread in symbol periods, roughly 3.7 us or 1.1 km per unit. "
"This parameter is dependent on the terrain type in the installation area. "
"Typical values are 1 for open terrain and small coverage areas. "
"For large coverage areas, a value of 4 is strongly recommended. "
"This parameter has a large effect on computational requirements of the software radio; values greater than 4 should be avoided."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Radio.NeedBSIC","0",
"",
ConfigurationKey::FACTORY,
ConfigurationKey::BOOLEAN,
"",
false,
"Does the Radio type require the full BSIC"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Radio.PowerManager.MaxAttenDB","10",
"dB",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"0:80",// educated guess
false,
"Maximum transmitter attenuation level, in dB wrt full scale on the D/A output. "
"This sets the minimum power output level in the output power control loop."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Radio.PowerManager.MinAttenDB","0",
"dB",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"0:80",// educated guess
false,
"Minimum transmitter attenuation level, in dB wrt full scale on the D/A output. "
"This sets the maximum power output level in the output power control loop."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Radio.PowerManager.NumSamples","10",
"sample count",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"5:20",// educated guess
false,
"Number of samples averaged by the output power control loop."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Radio.PowerManager.Period","6000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"4500:7500(100)",// educated guess
false,
"Power manager control loop master period, in milliseconds."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Radio.PowerManager.SamplePeriod","2000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"1500:2500(100)",// educated guess
false,
"Sample period for the output power control loopm in milliseconds."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Radio.PowerManager.TargetT3122","5000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"3750:6250(100)",// educated guess
false,
"Target value for T3122, the random access hold-off timer, for the power control loop."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Radio.RSSITarget","-50",
"dB",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"-75:-25",// educated guess
false,
"Target uplink RSSI for MS power control loop, in dB wrt to A/D full scale. "
"Should be 6-10 dB above the noise floor."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Radio.RxGain","0",
"dB",
ConfigurationKey::FACTORY,
ConfigurationKey::VALRANGE,
"0:75",// educated guess
true,
"Receiver gain setting in dB. "
"Ideal value is dictated by the hardware; 47 dB for RAD1, less for USRPs "
"This database parameter is static but the receiver gain can be modified in real time with the CLI rxgain command."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.ShowCountry","0",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::BOOLEAN,
"",
false,
"Tell the phone to show the country name based on the MCC."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Timer.T3103","5000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"2500:7500(100)",// educated guess
true,
"Handover timeout in milliseconds, GSM 04.08 11.1.2. "
"This is the timeout for a handset to sieze a channel during handover."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Timer.T3105","50",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"25:75(5)",// educated guess
true,
"Milliseconds for handset to respond to physical information. "
"GSM 04.08 11.1.2."
);
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.T3122Max","255000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"127500:382500(1000)",// educated guess
false,
"Maximum allowed value for T3122, the RACH holdoff timer, in milliseconds."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Timer.T3122Min","2000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"1000:3000(100)",// educated guess
false,
"Minimum allowed value for T3122, the RACH holdoff timer, in milliseconds."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("GSM.Timer.T3212","30",
"minutes",
ConfigurationKey::DEVELOPER,
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("Peering.Neighbor.RefreshAge","60000",
"milliseconds",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"30000:90000(1000)",// educated guess
false,
"Milliseconds before refreshing parameters from a neighbor."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Peering.NeighborTable.Path","/var/run/NeighborTable.db",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::FILEPATH,
"",
true,
"File path for neighbor information database."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Peering.Port","16001",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::PORT,
"",
true,
"The UDP port used by the peer interface for handover."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Peering.ResendCount","5",
"attempts",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"3:8",// educated guess
false,
"Number of tries to send message over the peer interface before giving up"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Peering.ResendTimeout","100",
"milliseconds",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::VALRANGE,
"50:100(10)",// educated guess
false,
"Milliseconds before resending a message on the peer interface"
);
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,
"",
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)", // This is the allowed range of times expressed by the dopey GPRS Timer IE. Max is 31 deci-hours.
false,
"Also known as T3312, 3GPP 24.008 4.7.2.2. "
"How often the 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;
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;
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 machine as seen by its proxies. "
"If these are all local, this can be localhost."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.Local.Port","5062",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::PORT,
"",
true,
"IP port that OpenBTS 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::IPANDPORT,
"",
false,
"The IP host and port of the proxy to be used for registration and authentication. "
"This should normally be the subscriber registry SIP interface, not Asterisk."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.Proxy.SMS","127.0.0.1:5063",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::IPANDPORT,
"",
false,
"The IP host and port of the proxy to be used for text messaging. "
"This is smqueue, for example."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.Proxy.Speech","127.0.0.1:5060",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::IPANDPORT,
"",
false,
"The IP host and port of the proxy to be used for normal speech calls. "
"This is Asterisk, for example."
);
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.RFC3428.NoTrying","0",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::BOOLEAN,
"",
false,
"Send 100 Trying response to SIP MESSAGE, even though that violates RFC-3428."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.SMSC","smsc",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::CHOICE_OPT,// audited
"smsc",
false,
"The SMSC handler in smqueue. "
"This is the entity that handles full 3GPP MIME-encapsulted TPDUs. "
"If not defined, use direct numeric addressing. "
"The value should be disabled with \"unconfig SIP.SMSC\" if SMS.MIMEType is \"text/plain\" or set to \"smsc\" if SMS.MIMEType is \"application/vnd.3gpp\"."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.Timer.A","2000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"1500:2500(100)",// educated guess
false,
"SIP timer A, the INVITE retry period, RFC-3261 Section 17.1.1.2, in milliseconds."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.Timer.B","10000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"5000:15000(100)",// educated guess
false,
"INVITE transaction timeout in milliseconds. "
"This value should usually match GSM.Timer.T3113."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.Timer.E","500",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"250:750(10)",// educated guess
false,
"Non-INVITE initial request retransmit period in milliseconds."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.Timer.F","5000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"2500:7500(100)",// educated guess
false,
"Non-INVITE initial request timeout in milliseconds."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SIP.Timer.H","5000",
"milliseconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"2500:7500(100)",// educated guess
false,
"ACK timeout period in milliseconds."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SMS.FakeSrcSMSC","0000",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::STRING,
"^[0-9]+$",
false,
"Use this to fill in L4 SMSC address in SMS delivery."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SMS.MIMEType","application/vnd.3gpp.sms",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::CHOICE,
"application/vnd.3gpp.sms,"
"text/plain",
false,
"This is the MIME Type that OpenBTS will use for RFC-3428 SIP MESSAGE payloads. "
"Valid values are \"application/vnd.3gpp.sms\" and \"text/plain\"."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SubscriberRegistry.A3A8","/OpenBTS/comp128",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::FILEPATH,
"",
false,
"Path to the program that implements the A3/A8 algorithm."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SubscriberRegistry.db","/var/lib/asterisk/sqlite3dir/sqlite3.db",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::FILEPATH,
"",
false,
"The location of the sqlite3 database holding the subscriber registry."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SubscriberRegistry.Manager.Title","Subscriber Registry",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::STRING,
"^[[:print:]]+$",
false,
"Title text to be displayed on the subscriber registry manager."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SubscriberRegistry.Manager.VisibleColumns","name username type context host",
"",
ConfigurationKey::CUSTOMERTUNE,
ConfigurationKey::STRING,
"^(name){0,1} (username){0,1} (type){0,1} (context){0,1} (host){0,1}$",
false,
"A space separated list of columns to display in the subscriber registry manager."
);
tmp = new ConfigurationKey("SubscriberRegistry.Port","5064",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::PORT,
"",
false,
"Port used by the SIP Authentication Server. NOTE: In some older releases (pre-2.8.1) this is called SIP.myPort."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("SubscriberRegistry.UpstreamServer","",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::STRING_OPT,// audited
"",
false,
"URL of the subscriber registry HTTP interface on the upstream server. "
"By default, this feature is disabled. "
"To enable, specify a server URL eg: http://localhost/cgi/subreg.cgi. "
"To disable again, execute \"unconfig SubscriberRegistry.UpstreamServer\"."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("TRX.IP","127.0.0.1",
"",
ConfigurationKey::CUSTOMERWARN,
ConfigurationKey::IPADDRESS,
"",
true,
"IP address of the transceiver application."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("TRX.MinimumRxRSSI","-63",
"dB",
ConfigurationKey::FACTORY,
ConfigurationKey::VALRANGE,
"-90:90",// educated guess
false,
"Bursts received at the physical layer below this threshold are automatically ignored. "
"Values in dB. "
"Set at the factory. "
"Do not adjust without proper calibration."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("TRX.Port","5700",
"",
ConfigurationKey::FACTORY,
ConfigurationKey::PORT,
"",
true,
"IP port of the transceiver application."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("TRX.RadioFrequencyOffset","128",
"~170Hz steps",
ConfigurationKey::FACTORY,
ConfigurationKey::VALRANGE,
"64:192",
true,
"Fine-tuning adjustment for the transceiver master clock. "
"Roughly 170 Hz/step. "
"Set at the factory. "
"Do not adjust without proper calibration."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("TRX.Timeout.Clock","10",
"seconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"5:15",// educated guess
false,
"How long to wait during a read operation from the transceiver before giving up."
);
map[tmp->getName()] = *tmp;
delete tmp;
// unused?
tmp = new ConfigurationKey("TRX.Timeout.Start","2",
"seconds",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"1:3",// educated guess
false,
"How long to wait during system startup before checking to see if the transceiver can be reached."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("TRX.TxAttenOffset","0",
"dB of attenuation",
ConfigurationKey::FACTORY,
ConfigurationKey::VALRANGE,
"0:100",// educated guess
true,
"Hardware-specific gain adjustment for transmitter, matched to the power amplifier, expessed as an attenuationi in dB. "
"Set at the factory. "
"Do not adjust without proper calibration."
);
map[tmp->getName()] = *tmp;
delete tmp;
//kurtis
tmp = new ConfigurationKey("TRX.Args","",
"",
ConfigurationKey::CUSTOMER,
ConfigurationKey::STRING,
"",
false,
"Extra arguments for the Transceiver"
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Test.GSM.SimulatedFER.Downlink","0",
"probability in %",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:100(5)",// educated guess
true,
"Probability (0-100) of dropping any downlink frame to test robustness."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Test.GSM.SimulatedFER.Uplink","0",
"probability in %",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:100(5)",// educated guess
true,
"Probability (0-100) of dropping any uplink frame to test robustness."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Test.GSM.UplinkFuzzingRate","0",
"probability in %",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:100(5)",// educated guess
true,
"Probability (0-100) of flipping a bit in any uplink frame to test robustness."
);
map[tmp->getName()] = *tmp;
delete tmp;
tmp = new ConfigurationKey("Test.SIP.SimulatedPacketLoss","0",
"probability in %",
ConfigurationKey::DEVELOPER,
ConfigurationKey::VALRANGE,
"0:100(5)",// educated guess
true,
"Probability (0-100) of dropping any inbound or outbound SIP packet to test robustness."
);
map[tmp->getName()] = *tmp;
delete tmp;
return map;
}