1xBTS 1xBTS

Configuration Reference

Run the integrated runtime with a config directory:

Terminal window
cargo run --release -p cdma-nib -- --config-dir config

Runtime Flags

FlagPurpose
--config-dir <DIR>Directory containing per-node JSON config files (CDMA_CONFIG_DIR can also be used)
--bts-config <FILE>Replace bts.json with a complete custom BTS configuration
--bts-profile <PROFILE>Apply bts.<profile>.json from the config directory. sprint selects the included Sprint settings.
--radio-config <FILE>Override the radio config embedded in bts.json
--null-radioRun without SDR hardware (TX drops, no RX)
--msc-mgmt-addr <ADDR>MSC management gRPC listen address (default 127.0.0.1:17017)
--component <NAME>Run only the named component (repeatable). Defaults to all of them: cdma-hlr, cdma-smsc, cdma-events, cdma-pdsn, cdma-pcf, cdma-msc, cdma-bts, cdma-bsc.

The launcher starts every component as a separate process. Each one reads its own file from the config directory, so a component can also run on its own host with just that file.

Defaults in this reference

The Default column shows the value in the shipped config/*.json. Where the shipped file omits a key, the column shows the built-in default that applies when the key is absent.


Local Overrides

Every per-node config in config/ supports a sibling <name>.local.json file that is merged on top of the base file at load time:

config/bts.json # shared default (checked into git)
config/bts.local.json # your overrides (gitignored)

The runtime reads the base file, deep-merges the local file on top, and validates the result. The local file only needs the fields you are changing.

Applies to: bts.json, bsc.json, msc.json, pcf.json, pdsn.json, hlr.json, smsc.json, management.json, voice-gw.json, and standalone radio profile files (e.g. radio_bladerf_micro2.local.json). events.json has no local override.

Merge behavior:

  • Nested objects merge field by field; omitted fields keep the base value.
  • Arrays in the local file replace the base array (no append).
  • Setting a field to null removes it, falling back to the struct default.

Example config/bts.local.json retuning to a different CDMA channel and raising TX gain:

{
"channel": {
"band_class": "bc0",
"cdma_channel": 283
},
"radio": {
"tx_gain_db": 60
}
}

See Configuration → Local Overrides for the introductory walkthrough.

See Carrier Profiles for the Verizon and Sprint startup commands, local override order, and Sprint-specific tuning. Profile names may contain lowercase letters, digits, and hyphens. A profile also supports a sibling bts.<profile>.local.json override.


bts.json

BTS radio and PHY configuration. One file per cell.

Top-level

FieldTypeDefaultDescription
pilot_offsetinteger0Pilot PN offset (0–511, in units of 64 chips)
sectorinteger1Sector number this BTS operates (1–255). With overhead.base_id it forms the cell identity the BTS enrolls under. Required.
channelobject{ "band_class": "bc0", "band_subclass": 0, "cdma_channel": 691 }CDMA band class + channel number. Drives TX/RX frequencies and the broadcast CDMA_FREQ / BAND_CLASS overhead fields.
radioobjectnot set (null radio)Inline radio profile, same format as the standalone radio configs. When absent and no --radio-config is given, the BTS runs on the null radio.
iq_capture_dirstring"captures"Directory IQ captures requested from the web UI are written to. Built-in default when absent: capture-iq-wav.
evdoobjectdisabledOptional EV-DO / HRPD Rev 0/Rev A carrier, AN and overhead configuration.
events_endpointstring | null"http://127.0.0.1:17023"Event bus the HRPD access network publishes session events to. null stops publishing.
hlr_endpointstring | null"http://127.0.0.1:17019"HLR the HRPD access network resolves subscriber identities against. null leaves HRPD identities unresolved.

channel

Single source of truth for the BTS’s RF tuning, per C.S0057-F. The BTS derives TX/RX center frequencies and the broadcast CDMA_FREQ / BAND_CLASS fields from this triple.

FieldTypeDefaultDescription
band_classstring"bc0"One of "bc0" through "bc22"
band_subclassinteger05-bit BAND_SUBCLASS; selects the channel-validity profile within the band. Required.
cdma_channelinteger691CDMA channel number N

See Channel Planning for the full band-class table, valid channel ranges, and recommended channels, or use the CDMA Channel Calculator to look up the TX/RX frequencies for any (band, subclass, N).

Overrides for loopback or development work:

  • runtime.tx_freq_hz_override (integer, optional) — force the TX center frequency.

evdo

Optional EV-DO / HRPD Rev 0/Rev A carrier configuration. The HRPD access network (AN) runs inside the BTS, so enabling EV-DO on a cell also starts that cell’s AN and its A8/A9 link to the PCF. See the EV-DO guide.

FieldTypeDefaultDescription
enabledbooleanfalseTurn on the EV-DO carrier and HRPD packet-data path.
channelinteger630HRPD band-class channel number. Required when enabled. For EV-DO-only deployments, channels 589, 630, and 770 are good starting points.
modestring"composite"Carrier mode: "composite" for 1x + HRPD on one tuned RF span, or "hrpd_only" for an EV-DO-only deployment.
advertise_on_1xbooleantrueAdvertise the HRPD carrier on the 1x paging channel for hybrid devices.
gainfloat1.0HRPD forward-carrier amplitude relative to the 1x carrier in composite mode. In HRPD-only mode the carrier level comes from tx_digital_backoff and this value has no effect.
an_grpc_bind_addrstring | nullnull (127.0.0.1:17030)Address this cell’s AN serves its session API on. Each EV-DO cell on a host needs its own address.
an_grpc_advertise_addrstring | nullnull (same as bind)Address the AN reports at enrollment for peers to dial. Set it when the BSC runs on another host and the bind address is loopback or 0.0.0.0.
a9.pcf_addrstring"127.0.0.1:17046"PCF A9 signaling address this AN sends bearer setup and release to. Required when enabled.
a9.pcf_a8_addrstring"127.0.0.1:17041"PCF-side A8 bearer address.
a9.a8_bind_addrstring"127.0.0.1:17040"Address this AN binds for its A8 bearer. Each EV-DO cell needs its own.
overhead.sector_idstringrequired when enabled16-byte HRPD sector ID, encoded as 32 hex characters.
overhead.subnet_maskinteger26UATI subnet mask advertised by the HRPD sector.
overhead.color_codeinteger26HRPD color code used by devices to distinguish the sector.
overhead.sector_signatureinteger1HRPD sector signature advertised in overhead.
overhead.access_signatureinteger1HRPD access signature advertised in overhead.

Use a normal SDR radio profile with this section. The old HRPD-specific radio profiles and dual-RF evdo_rf settings have been removed.

Derived RF profile

The BTS derives TX/RX SDR sample rates and RF bandwidths at startup from channel and evdo.

Carrier modeDerived sample rateDerived RF bandwidth
1x only (evdo.enabled: false)4x chip rate (4915200 Hz for SR1)1500000 Hz
1x + HRPD (evdo.enabled: true, mode: "composite")Smallest 4x, 8x, or 16x chip-rate span that fits the 1x and HRPD carriersCarrier separation plus occupied bandwidth
HRPD only (mode: "hrpd_only")4x chip rate (4915200 Hz for SR1)1500000 Hz

HRPD-only mode also selects the HRPD reverse carrier automatically and omits all 1x receiver correlator and traffic chains.

Composite mode validates both forward and reverse carrier spacing. If the configured 1x and HRPD channels do not fit within the 16x cap, startup fails with a configuration error.

overhead

Cell identity and system parameters broadcast on the paging channel.

FieldTypeDefaultDescription
sidinteger22System ID
nidinteger65535Network ID
base_idinteger1Base station ID
reg_zoneinteger0Registration zone
total_zonesinteger2Total number of registration zones
zone_timerinteger0Zone timer index
max_slot_cycle_indexinteger0Maximum slot cycle index
page_chaninteger1Paging channel number (1–7)
config_seqinteger5Configuration sequence number
acc_config_seqinteger5Access configuration sequence number
power_up_regbooleantrueRequire power-up registration
parameter_regbooleantrueRequire parameter-change registration
auth_modeinteger0Authentication mode (0–3)
p_revinteger6Protocol revision
min_p_revinteger3Minimum protocol revision accepted
lp_secinteger18Leap seconds offset between UTC and CDMA System Time (GPS-UTC)
ltm_offinteger-14Local time offset from UTC, half-hour units, 6-bit signed (-32..=+31, i.e. -16h..+15.5h)
dayltinteger0Daylight saving time indicator (0 or 1)
pratinteger0Paging rate
cdma_freqinteger | nullnullBroadcast CDMA_FREQ (11-bit). When null, derived from channel.cdma_channel. Set explicitly only to advertise a different channel than the BTS is operating on.
ext_cdma_freqinteger | nullnullBroadcast EXT_CDMA_FREQ. When null, derived from channel.cdma_channel.
band_classinteger | nullnullBroadcast BAND_CLASS (5-bit) emitted in ECAMs. When null, derived from channel.band_class.

timezone

Optional. Controls the local time broadcast on both 1x and EV-DO. Use source = "system" for the host timezone, source = "user" for a named IANA timezone, or source = "overhead" for the static overhead values. System and user timezones pick up DST changes without a restart.

FieldTypeDefaultDescription
sourcestring"system"One of "overhead", "system", "user". Built-in default when the section is absent: "overhead".
tzstring(none)IANA zone name; required when source = "user"

source = "system" reads the host’s IANA zone. The BTS refuses to start if the host has no IANA zone configured and source = "system" is selected.

source = "user" requires a parseable IANA name (e.g. "America/Los_Angeles"). Invalid names are rejected at config load.

DAYLT tells a 1x phone that daylight saving time is active. It does not tell the phone to add or subtract another hour. The UTC offset already includes the DST adjustment.

LP_SEC is not driven by this section. It lives on overhead.lp_sec and is broadcast as the leap-second value on both 1x and HRPD regardless of source.

Examples:

"timezone": { "source": "overhead" }
"timezone": { "source": "system" }
"timezone": { "source": "user", "tz": "America/Los_Angeles" }

runtime

PHY/MAC/LAC runtime settings.

FieldTypeDefaultDescription
spreading_ratestring"sr1"Spreading rate: "sr1" or "sr3"
orthogonal_code_lengthinteger64Walsh code length
chip_rate_hzinteger1228800Chip rate in Hz
tx_freq_hz_overrideinteger | nullnullWhen set, overrides the TX center frequency derived from channel for loopback or development use.
tx_lo_offset_hzinteger200000TX LO hardware offset in Hz
tx_digital_backofffloat0.3Scales the composite before pulse shaping (0.0–1.0) and means the same at every TX sample rate. Sets the total transmit level; the channel power fractions below decide how it is shared. Above 0.3 a fully loaded carrier starts clipping.
block_size_chipsinteger512Internal processing block size in chips
tx_batch_chipsinteger6144TX batch size in chips (one PCG is 1536 chips for SR1)
short_code_length_chipsinteger32768Short PN code period in chips
max_tx_lookahead_msinteger3Maximum TX lookahead in milliseconds

runtime.realtime

Controls scheduling for the BTS TX, RX, and radio-driver threads. Failures are reported in the logs and radio metrics; the BTS continues with the scheduling policy the operating system permits.

FieldTypeDefaultDescription
enabledbooleantrueRequest real-time scheduling for radio and baseband threads
tx_priorityinteger80Linux SCHED_FIFO priority for the TX thread, 1–99
rx_priorityinteger75Linux SCHED_FIFO priority for the RX thread, 1–99
driver_priorityinteger70Linux SCHED_FIFO priority used while radio-driver workers start, 1–99
tx_cpuinteger | nullnullOptional valid, online Linux CPU index for the TX thread
rx_cpuinteger | nullnullOptional valid, online Linux CPU index for the RX thread
driver_cpuinteger | nullnullOptional valid, online Linux CPU index inherited by radio-driver workers

Linux requires permission to select SCHED_FIFO, normally through the process’s real-time priority resource limit or CAP_SYS_NICE. On macOS the priority numbers and CPU fields do not apply; the runtime requests the platform’s time-constraint or interactive QoS classes instead.

runtime.downlink.pilot

FieldTypeDefaultDescription
walsh_codeinteger0Walsh code for pilot channel (always W0)
power_fractionfloat0.2Pilot share of total forward power (20%, −7 dB)

runtime.downlink.sync

FieldTypeDefaultDescription
walsh_codeinteger32Walsh code for sync channel (always W32)
walsh_repetitioninteger4Walsh repetition factor
data_rate_bpsinteger1200Sync channel data rate
symbol_repeatinteger2Symbol repetition count
interleaver.block_sizeinteger128Interleaver block size
interleaver.minteger7Interleaver M parameter
interleaver.jinteger1Interleaver J parameter
power_fractionfloat0.0471Sync share of total forward power (−13.3 dB)
availability_max_size_bitsinteger32Max bits in sync availability buffer

runtime.downlink.paging

FieldTypeDefaultDescription
walsh_codeinteger1Walsh code for paging channel (W1)
paging_channel_numberinteger1Paging channel number (1–7)
data_rate_bpsinteger9600Paging channel data rate
interleaver.block_sizeinteger384Interleaver block size
interleaver.minteger6Interleaver M parameter
interleaver.jinteger6Interleaver J parameter
power_fractionfloat0.1882Paging share of total forward power (−7.3 dB)
availability_max_size_bitsinteger96Max bits in paging availability buffer

runtime.downlink.traffic

FieldTypeDefaultDescription
power_fractionfloat0.5647Share of total forward power available to all traffic channels together. Active calls split it evenly and forward power control moves each one inside it.
max_channel_power_fractionfloat0.2Upper bound on one traffic channel’s share, so a single call does not take the whole allotment.

The four power_fraction values follow the C.S0010 base station test model and must not sum to more than 1.0. Pilot, sync, and paging power stay fixed as calls come and go. The BTS logs the split in percent and dB at startup.

runtime.downlink.paging.message_defaults

Overhead messages broadcast on the paging channel. schedule controls which messages are transmitted and in what order.

The serving band chooses the neighbor-list format automatically. Band Class 0 uses neighbor_list. Every other band uses extended_neighbor_list. Band Class 1 and Band Class 4 also receive the required base-class indicator. The runtime adds the appropriate neighbor message if it is missing from schedule.

extended_system_parameters — IMSI defaults and soft-handoff thresholds:

FieldTypeDefaultDescription
mccstring"310"Mobile country code (3-digit string)
imsi_11_12string"55"IMSI digits 11–12 (2-digit string)
pref_msid_typeinteger3Preferred mobile ID type
ext_pref_msid_typeinteger | nullnullEXT_PREF_MSID_TYPE (P_REV 11). Set with meid_reqd when p_rev is 11.
meid_reqdboolean | nullnullMEID_REQD (P_REV 11). Whether mobiles must include their MEID.
tmsi_zoneinteger array[0]TMSI zone bytes
bcast_indexinteger0Broadcast slot cycle index
imsi_t_supportedbooleanfalseWhether true IMSI (IMSI_T) is supported
p_revinteger6Protocol revision
min_p_revinteger3Minimum protocol revision
soft_slopeinteger16Soft handoff slope
add_interceptinteger8T_ADD intercept
drop_interceptinteger6T_DROP intercept
packet_zone_idinteger0Packet zone ID
max_num_alt_sointeger0Maximum alternative service options a mobile may propose
reselect_includedbooleanfalseInclude the system reselection thresholds
pilot_reportbooleanfalseAsk mobiles to report pilots in access messages
nghbr_set_entry_infobooleanfalseInclude neighbor set entry handoff information
nghbr_set_access_infobooleanfalseInclude neighbor set access handoff information
broadcast_gps_asstbooleanfalseBroadcast GPS assistance
qpch_supportedbooleanfalseQuick paging channel supported
sdb_supportedbooleanfalseShort data burst supported
rlgain_traffic_pilotinteger0Reverse traffic-to-pilot gain adjustment
rev_pwr_cntl_delay_inclbooleanfalseInclude the reverse power control delay
auto_msg_supportedbooleanfalseAutonomous message supported
mob_qosbooleanfalseMobile QoS requests allowed
enc_supportedbooleanfalseEncryption supported
use_sync_idbooleanfalseSync ID supported
cs_supportedbooleanfalseConcurrent services supported
bcch_supportedbooleanfalseBroadcast control channel supported
ms_init_pos_loc_sup_indbooleanfalseMobile-initiated position location supported
pilot_info_req_supportedbooleanfalsePilot information request supported
use_tmsibooleanfalseTMSI assignment enabled
delete_for_tmsibooleanfalseDelete TMSI on reassignment

system_parameters — core cell parameters:

FieldTypeDefaultDescription
mult_sidsbooleanfalseWhether mobiles may store multiple SIDs
mult_nidsbooleantrueWhether mobiles may store multiple NIDs
base_classinteger0Base station class
home_regbooleantrueHome registration enabled
for_sid_regbooleantrueForeign SID registration enabled
for_nid_regbooleantrueForeign NID registration enabled
power_down_regbooleanfalsePower-down registration enabled
reg_prdinteger35Registration period (timer index)
base_latinteger514084Base station latitude (0.25-second units)
base_longinteger2012407Base station longitude (0.25-second units)
reg_distinteger0Registration distance
srch_win_ainteger6Active set search window
srch_win_ninteger8Neighbor set search window
srch_win_rinteger9Remaining set search window
nghbr_max_ageinteger0Maximum age a neighbor stays in the neighbor set
rescanbooleanfalseTell mobiles to rescan for a system
t_addinteger18Pilot T_ADD threshold (0.5 dB units)
t_dropinteger28Pilot T_DROP threshold
t_compinteger8T_COMP comparison threshold
t_tdropinteger3T_TDROP timer index
pwr_rep_threshinteger2Power report threshold
pwr_rep_framesinteger9Power report frame count
pwr_thresh_enablebooleantrueThreshold-based power reporting
pwr_period_enablebooleantruePeriodic power reporting
pwr_rep_delayinteger2Power report delay
ext_sys_parameterbooleantrueAnnounce that the Extended System Parameters Message is sent
ext_nghbr_lstbooleanfalseAnnounce that the Extended Neighbor List Message is sent
gen_nghbr_lstbooleanfalseAnnounce that the General Neighbor List Message is sent
global_redirectbooleanfalseAnnounce that a Global Service Redirection Message is sent
pri_nghbr_lstbooleanfalseAnnounce that a Private Neighbor List Message is sent
user_zone_idbooleanfalseAnnounce that a User Zone Identification Message is sent
ext_global_redirectbooleanfalseAnnounce that an Extended Global Service Redirection Message is sent
ext_chan_lstbooleanfalseAnnounce that an Extended CDMA Channel List Message is sent

access_parameters — reverse access channel configuration:

FieldTypeDefaultDescription
acc_chaninteger0Access channel number
nom_pwrinteger-4Nominal TX power adjustment (dB)
init_pwrinteger-4Initial power offset (dB)
pwr_stepinteger3Power step size (dB)
num_stepinteger3Number of power steps per probe
max_cap_szinteger4Maximum access capsule size
pam_szinteger5Preamble length
psist_0_9integer0Persistence value for access overload classes 0–9
psist_10 … psist_15integer0Persistence values for access overload classes 10–15
msg_psistinteger0Persistence modifier for message transmissions
reg_psistinteger0Persistence modifier for registrations
probe_pn_raninteger9Time randomization for access probes
acc_tmointeger3Access timeout
probe_bkoffinteger0Probe backoff
bkoffinteger0Sequence backoff
max_req_seqinteger3Maximum request sequences
max_rsp_seqinteger3Maximum response sequences
authinteger0Authentication mode
randinteger0Random challenge value
nom_pwr_extinteger0Extended nominal power
psist_emg_inclbooleanfalseInclude the emergency persistence value
acct_inclbooleanfalseInclude access control based on call type

neighbor_list — Band Class 0 neighbor pilots:

FieldTypeDefaultDescription
pilot_incinteger4Pilot increment advertised with the list
neighborsinteger array[]Neighbor pilot PN offsets

extended_neighbor_list — neighbor records for other bands:

FieldTypeDefaultDescription
pilot_incinteger4Pilot increment, from 1 through 15
neighborsobject array[]Up to 40 extended neighbor records

Each extended record contains nghbr_config (0..3), nghbr_pn (0..511), and search_priority (0..3). To put a neighbor on another carrier, provide both nghbr_band (0..31) and nghbr_freq (0..2047). Omit both for a neighbor on the current carrier.

cdma_channel_list — channels (integer array, []): extra CDMA channel numbers advertised in the CDMA Channel List Message. The serving channel is always included.

general_page and order hold the defaults for General Page and Order messages the BTS builds. Leave them at their shipped values.

Reverse link configuration.

FieldTypeDefaultDescription
access_channels_per_paging_channelinteger1R-ACH channels per paging channel
access_channel_numbersarray[0]Access channel number list
access_channel_rate_bpsinteger4800Access channel data rate
access_frame_msinteger20Access frame duration in ms
require_r_csch_f_csch_arq_ackbooleantrueRequire ACK on access channel messages
arq_ack_timeout_msinteger400ARQ ACK timeout (T1m)
reverse_access_finger_pool_sizeinteger8Number of RAKE fingers for access channel
global_finger_pool_sizeinteger1Global RAKE finger pool size

runtime.overhead

Overhead channel scheduling.

FieldTypeDefaultDescription
fragment_availability_interval_chipsinteger32768Paging fragment scheduling interval
sync_superframe_interval_chipsinteger98304Sync superframe interval
t1b_msinteger1280T1b timer period in ms
require_spmbooleantrueRequire System Parameters Message
require_apmbooleantrueRequire Access Parameters Message
require_cclmbooleantrueRequire CDMA Channel List Message
require_espmbooleantrueRequire Extended System Parameters Message

abis

Abis TCP signaling address (BTS side).

FieldTypeDefaultDescription
bind_addrstring"127.0.0.1:5604"Local TCP bind address for the BTS Abis signaling listener

bearer

Abis UDP bearer addressing (BTS side).

FieldTypeDefaultDescription
bind_addrstring"127.0.0.1:17014"Local UDP bind address
remote_addrstring"127.0.0.1:17022"BSC bearer address

management

The operations endpoint the BSC enrolls this cell through. See the Multiple Cells guide.

FieldTypeDefaultDescription
bind_addrstring"127.0.0.1:17024"Management and enrollment gRPC listener. Each cell on a host needs its own.

paging_retry

Page retransmission budget. The BTS supplies these values to the BSC at enrollment.

FieldTypeDefaultDescription
ack_timeout_msinteger15000How long to wait for the mobile’s acknowledgement before reporting the page failed
max_retriesinteger0Slot-aligned over-the-air retransmissions of an unacknowledged page

abis_timers

BTS-side Abis timers per A.S0003-A §8 Table 8-1, in milliseconds. Not present in the shipped file.

FieldTypeDefaultDescription
tconnb_msinteger100§8.1 — Abis Connect timer
tdisconb_msinteger100§8.4 — Abis Remove Ack timer
tbstcomb_msinteger500§8.7 — Abis Burst Commit timer
trelreqb_msinteger100§8.8 — Abis BTS Release timer

bsc.json

BSC radio access control and paging policy.

traffic_assignment

FieldTypeDefaultDescription
supported_for_rcsarray[1, 2, 3]Supported forward radio configurations
supported_rev_rcsarray[1, 2, 3]Supported reverse radio configurations
preferred_pairsarray[{for_rc:3, rev_rc:3}]Preferred forward/reverse RC pairs, tried in order
idle_timeout_sinteger15Traffic channel idle timeout before release
ms_ack_timeout_msinteger5000TCH bringup timeout after the BS Ack Order while waiting for the MS Ack
packet_service_connect_timeout_msinteger5000Packet-data timeout while waiting for Service Connect Completion
rev_fch_gating_modebooleanfalseReverse FCH gating mode
enable_f_schbooleantrueEnable Forward Supplemental Channel assignment for eligible SO33/RC3 packet sessions
f_sch_rate_bpsinteger153600F-SCH rate when enabled; valid values are 19200, 38400, 76800, and 153600

f_sch_rate_bps is only used when enable_f_sch is true. 9600 is the fundamental-channel data rate, not a valid F-SCH rate.

This is a carrier-wide packet-data setting: every eligible SO33 packet session gets the configured F-SCH rate.

traffic_retry

FieldTypeDefaultDescription
ack_timeout_msinteger3000Traffic assignment ACK timeout
max_retriesinteger5Maximum retransmissions

paging_retry no longer belongs here. Set it in bts.json. The BSC takes the value from each cell at enrollment.

abis_timers

BSC-side Abis timers per A.S0003-A §8 Table 8-1. Granularity is 100 ms and ranges are 0–1000 ms except tsetupb_ms (0–500). Not present in the shipped file.

FieldTypeDefaultDescription
tsetupb_msinteger100§8.2 — Abis BTS Setup timer (range 0–500)
tchanstatb_msinteger500§8.3 — Abis Traffic Channel Status timer
tdrptgtb_msinteger500§8.5 — Abis BTS Release Ack timer
tbstreqb_msinteger500§8.6 — Abis Burst Response timer

bts_peers

The cells this BSC serves — one entry per BTS. The BSC enrolls each peer over its operations endpoint, then brings up Abis to it. See the Multiple Cells guide.

FieldTypeDefaultDescription
oam_endpointstring"http://127.0.0.1:17024"BTS operations gRPC endpoint the BSC enrolls through
abis_addrstring"127.0.0.1:5604"BTS Abis TCP signaling address the BSC connects to
bearer_bind_addrstring"127.0.0.1:17022"Local UDP address the BSC binds for this peer’s Abis bearer
bearer_remote_addrstring"127.0.0.1:17014"BTS Abis bearer address the BSC sends to
idstringoam_endpointOptional stable id the management API and web UI address this cell by, kept whether or not the cell is up. Unique across peers.

voice_timeouts

FieldTypeDefaultDescription
service_connect_timeout_msinteger20000Timeout waiting for Service Connect Completion on a voice call
release_timeout_msinteger5000Timeout waiting for the release handshake to complete

Other top-level fields

FieldTypeDefaultDescription
a1_bind_addrstring"127.0.0.1:17013"Address the BSC listens for the MSC’s A1 signaling on. The MSC dials this after it enrolls the base station.
hlr_endpointstring"http://127.0.0.1:17019"HLR gRPC endpoint used for subscriber lookups and registration bindings
smsc_endpointstring"http://127.0.0.1:17020"SMSC gRPC endpoint used for SMS coordination
packet_endpointstring"http://127.0.0.1:17021"Packet service gRPC endpoint the packet-data path drives sessions through
mobile_idle_timeout_sinteger3600Evict idle registered mobiles with no access activity and no active traffic channel after this many seconds. Set to 0 to disable.
voice_bearer_bind_ipstring"127.0.0.1"Local IP that voice bearer UDP sockets bind to. Set to the host’s network-facing IP when BSC and voice gateway are on separate hosts.
node_idstring"bsc"Stable identifier for this BSC node, written to the HLR on every registration and included in management events. Must be unique across BSC instances.

msc.json

MSC call control and voice policy.

Top-level

FieldTypeDefaultDescription
mgmt_grpc_addrstring"0.0.0.0:17017"MSC management gRPC listen address. The web and management API use this single endpoint.
hlr_endpointstring"http://127.0.0.1:17019"HLR gRPC endpoint used for subscriber lookups
smsc_endpointstring"http://127.0.0.1:17020"SMSC gRPC endpoint used for SMS submission and delivery tracking
packet_endpointstring"http://127.0.0.1:17021"Packet core (PDSN) gRPC endpoint the management interface reads packet sessions from
base_stationsarrayone entry, bts-1 at http://127.0.0.1:17016The base stations this MSC serves — one entry per BSC. See base_stations. Required.

base_stations

The base stations the MSC serves, one entry per BSC. The MSC dials each base station’s management endpoint to enroll it, then connects A1. See the Multiple Base Stations guide.

FieldTypeDefaultDescription
management_endpointstring"http://127.0.0.1:17016"The base station’s management gRPC endpoint the MSC enrolls it through
idstringmanagement_endpointOptional stable id the management API and web UI address this base station by. Unique across base stations.

voice

FieldTypeDefaultDescription
supported_service_optionsarray[32768, 3, 17, 68, 73]Voice options the MSC accepts and may propose for mobile-terminated calls. Implemented codecs are SO1, SO3, SO68, SO70 and SO32768; the first implemented entry is the default. SO17 and SO73 are listed in the shipped file but have no codec yet, so they are never proposed and originations with them are rejected. See Voice Calls.
wav_filestring"config/sample-sound.wav"WAV audio file path for fallback playback
media_ringback_enabledbooleantrueGenerate ringback tone in media path
media_ringback_typestring"nanp"Ringback tone type: "nanp" or "etsi"
sip_ringback_disablebooleanfalseWho plays the ringback the caller hears on outbound SIP calls. false = your network; true = the SIP trunk (the trunk must send early-media ringback).
inbound_sip_msc_ringbackbooleantrueWhen true, your network plays the ringback the SIP caller hears (subscriber’s custom ringtone, or the default tone) while the handset is being rung. Set to false to let the trunk play it.
generate_ringbackbooleantrueSend ringback audio to the calling handset over the call’s audio channel.
send_tones_alertbooleanfalseTell the calling handset to play its own ringback tone. Independent of generate_ringback; either, both, or neither are valid.
failure_tone_duration_msinteger3000How long the caller hears the busy tone on a failed call before it ends. 0 ends the call immediately.
page_retry_cooldown_msinteger1000Time between ring attempts when the called handset hasn’t answered yet.
page_retry_max_duration_msinteger60000How long the network keeps trying to reach the called handset before giving up. Must be > 0. SIP callers get 480 Temporarily Unavailable on giveup.
answer_delay_msinteger3000Delay before automatic answer in local simulation paths
voice_bearer_bind_ipstring"127.0.0.1"Local IP that voice bearer UDP sockets bind to. Set to the host’s network-facing IP when MSC and voice gateway run on separate hosts.

voice.release_timeout_ms and voice.service_connect_timeout_ms moved to voice_timeouts in bsc.json.

voice.gateway

FieldTypeDefaultDescription
enabledbooleantrueEnable external SIP voice gateway
endpointstring"http://127.0.0.1:17015"Voice gateway gRPC endpoint
fallback_to_wavbooleantruePlay WAV audio if gateway is unreachable

welcome_sms

FieldTypeDefaultDescription
enabledbooleantrueEnable welcome SMS on registration
textstring"Welcome! You are now connected to a live CDMA2000 1X base station. …"SMS body text
originating_numberstring"0000"Originating number shown to subscriber
inactive_days_thresholdinteger30Days of inactivity before re-sending

sms_retry

Delivery retry settings now belong to sweep in smsc.json. Move sms_retry.enabled and sms_retry.retry_after_secs there, and rename sms_retry.sweep_interval_secs to sweep.interval_secs. The MSC’s legacy sms_retry settings no longer control the retry scan.

otasp

Over-the-air provisioning (*228). See the OTASP guide for end-to-end behavior.

FieldTypeDefaultDescription
enabledbooleantrueMaster switch. When false, *228 originations are not handled by the OTASP coordinator.
feature_codesarray["*228"]Dialed digit strings that start an OTASP session.
spc_policystring"leave_default"Use "leave_default" to present the subscriber’s stored SPC (or "000000") during Verify SPC without changing the SPC on the device.

otasp.home_network

FieldTypeDefaultDescription
sidinteger22Home SID written into the handset’s NAM. Must match overhead.sid in bts.json, or provisioned handsets will show roaming.
nidinteger65535Home NID written into the handset’s NAM. Must match overhead.nid in bts.json.

otasp.system_tag

FieldTypeDefaultDescription
namestring"1xBTS"Home System Tag banner shown on the handset status bar. ASCII only; max 31 characters.
tag_p_revinteger1TAG_P_REV value.

otasp.nam_defaults

Mobile-terminated call acceptance bits written into every CDMA/Analog NAM and CDMA NAM block.

FieldTypeDefaultDescription
mob_term_homebooleantrueAccept MT calls when camped on the home SID.
mob_term_for_sidbooleantrueAccept MT calls when roaming under a foreign SID in the NAM’s SID/NID list.
mob_term_for_nidbooleantrueAccept MT calls when roaming under a foreign NID.

otasp.mms

FieldTypeDefaultDescription
uristring"http://mmsc.local.1xbts.org/"MMSC URL written to handsets when otasp.writes.mms_uri = true. Must be a valid HTTP/HTTPS URL when used. Not present in the shipped file.

otasp.writes

Per-block opt-in for what *228 overwrites on the handset. Every flag defaults to false so a freshly-installed system reads each block back, shows it on the session detail page, but never changes anything.

FieldTypeDefaultDescription
cdma_analog_nambooleanfalseWrite the analog NAM block: phone identity (IMSI), access class, home system, paging channel, roaming permissions.
mdnbooleanfalseWrite the Mobile Directory Number — the handset’s stored phone number.
cdma_nambooleanfalseWrite the CDMA NAM block: same identity / roaming fields as the analog block, for modern CDMA-only handsets.
home_system_tagbooleanfalseWrite the Home System Tag — uses otasp.system_tag.name.
mms_uribooleanfalseWrite the MMS URL — uses otasp.mms.uri. Skipped on handsets that don’t advertise MMS provisioning support.
prlbooleanfalsePush the per-subscriber or system-default PRL to the handset. Skipped on handsets that don’t advertise SSPR support, or when no PRL has been uploaded.

voice-gw.json

cdma-voice-gw SIP/RTP bridge configuration. See the Voice Gateway Setup guide for end-to-end deployment instructions.

grpc

FieldTypeDefaultDescription
listen_addrstring"127.0.0.1:17015"gRPC server address the MSC connects to.

sip

FieldTypeDefaultDescription
listen_addrstring"127.0.0.1:5060"Concrete local IP:port; libre rejects 0.0.0.0 / ::.
transportstring"udp"udp, tcp, or tls.
request_uri_templatestring"sip:{called}@127.0.0.1:5060"Request-URI; {called} is replaced with dialed digits.
from_domainstring"bts.local"Domain placed in the From URI. Must match what the trunk expects.
caller_id_overridestring|nullnullDID (E.164) used as the From user. null → handset MDN.
user_agentstring"1XBTS-VoiceGW/0.1"User-Agent header value.
keepalive_interval_secsinteger0SIP OPTIONS keepalive cadence. Requires registration.enabled=true.
inbound_decision_timeout_msinteger30000Auto-reject inbound INVITEs with 408 if MSC hasn’t decided in this many ms; 0 disables.
auth.usernamestring""SIP digest username.
auth.passwordstring|nullnullInline password — works but never commit it.
auth.password_envstring|nullnullEnv var holding the SIP password. Preferred. Mutually exclusive with auth.password.
registration.enabledbooleanfalseSend REGISTER to the trunk.
registration.registrar_uristring""Required when registration.enabled=true.
registration.to_uristring|nullnullTo URI in REGISTER. null → sip:<contact_user>@<registrar domain>.
registration.from_uristring|nullnullFrom URI in REGISTER. null → same as to_uri.
registration.from_namestring|nullnullDisplay name in the From header.
registration.contact_userstring|nullnullUser part of the Contact URI. null → auth.username. One of the two is required when registration is enabled.
registration.expires_secsinteger300Registration lifetime; gateway re-registers before expiry.
registration.allow_unauthenticatedbooleanfalseAllow REGISTER without auth.

rtp

FieldTypeDefaultDescription
listen_addrstring"0.0.0.0"IP for RTP bind. Use the LAN IP behind NAT. 0.0.0.0 requires advertise_addr.
port_range[int, int][17100, 17200]UDP port range for RTP sessions.
advertise_addrstring|null"192.0.2.1"Public IP placed in outgoing SDP. Set when behind NAT without STUN. The shipped placeholder must be replaced.
preferred_codecsarray["PCMU", "PCMA"]G.711 variants. Must include PCMU or PCMA.
telephone_event_payload_typeinteger|null101Dynamic RTP payload type advertised for RFC 4733 telephone-event (DTMF). Set to null to omit telephone-event from SDP. Required when dtmf_mode = "rfc2833".

nat

FieldTypeDefaultDescription
modestring"disabled""disabled" or "stun_latch".
stun_serverstring|nullnullhost:port. Required when mode = stun_latch.
stun_timeout_msinteger1000STUN binding timeout. Must be > 0 when stun_latch is enabled.
rtp_latch_packetsinteger5Inbound RTP source packets to observe before latching the return path.
rtp_latch_interval_msinteger20Spacing for outgoing latch packets.

calls

FieldTypeDefaultDescription
max_concurrent_callsinteger32Hard cap on active calls. Must be ≤ RTP port-range capacity.
setup_timeout_msinteger30000Outbound INVITE→answer timeout.
ringing_timeout_msinteger120000Maximum alerting duration before cancel.
media_idle_timeout_msinteger30000Idle period (no RTP) before tearing down a call.

queues

FieldTypeDefaultDescription
gateway_voice_framesinteger512Voice frames buffered between the MSC and the gateway per call.
media_stream_framesinteger256RTP frames buffered per media stream.

logging

FieldTypeDefaultDescription
summarybooleantrueLog a summary line per call.
control_eventsbooleantrueLog call control events.
media_framesbooleanfalseLog every media frame (very chatty).
media_summarybooleantrueLog periodic media statistics.
sip_eventsbooleantrueLog SIP transaction events.
sip_tracebooleanfalseLog full SIP messages.
sip_sdpbooleanfalseLog SDP bodies.

Media

FieldTypeDefaultDescription
jitter_buffer_msinteger60Adaptive buffer (40–80 ms) for inbound RTP reordering.
dtmf_modestring"rfc2833""rfc2833" to forward DTMF the mobile pressed during a call as RFC 4733 telephone-event RTP packets. "disabled" to drop them.

pdsn.json

Packet data transport configuration.

Top-level

FieldTypeDefaultDescription
packet_grpc_listen_addrstring"127.0.0.1:17021"Packet service gRPC listen address
a10_bearerobjectUDP-encapsulated GRE bound on 127.0.0.1:17043A10 bearer transport toward the PCFs. udp_peer_addr may be omitted: the PDSN serves several PCFs and learns each one’s bearer address from its A11 registration.
a11object127.0.0.1:17045 ↔ 127.0.0.1:17044A11 UDP signaling endpoint toward the PCF
a11_securityobjectrequiredPCF/PDSN A11 security association. The stock JSON includes matching local values; keep PCF and PDSN in sync.
ppp_session_timeout_secsinteger1800Idle lifetime for cached open PPP/LCP/IPCP state across packet traffic-channel changes. Cached sessions reserve the mobile IP until they resume or expire.
events_endpointstring"http://127.0.0.1:17023"Aggregated event bus endpoint. When set, PDSN publishes packet-session bind/unbind events to the bus.

a11_security

FieldTypeDefaultDescription
spiintegerrequiredA11 Security Parameter Index. Must be greater than 255; 0..=255 are reserved by A.S0017.
shared_secret_hexstringrequiredHex-encoded PCF/PDSN shared secret. Must match pcf.json:a11_security.shared_secret_hex.

packet

FieldTypeDefaultDescription
transportstring"fou_tcp"Transport mode: "tun", "fou", or "fou_tcp". Built-in default when absent: "tun".
fou_remotestring"127.0.0.1:17012"FOU or FOU-TCP remote endpoint (host:port)
fou_local_portinteger17011Local FOU receive port
tun_nat_interfacestringnullNetwork interface name for TUN NAT (required when transport="tun")
gateway_ipstring"10.55.0.1"Packet-data gateway IP advertised/used for the mobile /24
primary_dnsstring"10.55.0.1"Primary DNS server supplied through IPCP or Mobile IPv4 registration
secondary_dnsstring"10.55.0.1"Secondary DNS server supplied through IPCP or Mobile IPv4 registration
enable_uplink_vj_compressionbooleanfalseAsk mobiles to use Van Jacobson TCP/IP header compression for traffic sent to the PDSN.
enable_downlink_vj_compressionbooleanfalseAccept mobile requests to use Van Jacobson TCP/IP header compression for traffic sent to the mobile.
mobile_ipobjectsee belowMobile IPv4 registration for phones that open IPCP without requesting a Simple IP address.

packet.mobile_ip

FieldTypeDefaultDescription
enabledbooleantrueEnables Mobile IPv4 registration for handsets that open IPCP without an IP-Address option. Simple IP is always available. Built-in default when absent: false.
fa_addressstring"10.55.0.1"Foreign Agent address advertised to the handset.
home_agent_addressstring"10.55.0.1"Home Agent address returned in local Registration Replies.
advertisement_countinteger3Unsolicited Agent Advertisements sent after IPCP opens in Mobile IPv4 mode.
advertisement_lifetime_secsinteger9000ICMP Router Advertisement lifetime.
registration_lifetime_secsinteger1200Maximum accepted Mobile IPv4 registration lifetime. Must be less than ppp_session_timeout_secs.
auth_modestring"mn_ha""insecure" accepts unauthenticated requests. "mn_ha" validates the configured MN-HA association. Built-in default when absent: "insecure".
mn_ha_spiinteger | null1234MN-HA SPI. Required with auth_mode="mn_ha" and must be greater than 255.
mn_ha_secret_base64string | null"c2VjcmV0"Nonempty binary MN-HA shared secret encoded as base64. Required with auth_mode="mn_ha".
allow_unverified_mn_aaabooleantrueAccept MN-AAA without an external AAA check after MN-HA succeeds. Intended only for compatibility with phones that require it.
home_address_poolstringnullOptional home-address pool. null uses the packet /24; custom pools are not yet supported.

Mobile IPv4 is selected only when it is enabled and the peer IPCP request omits the IP-Address option. A peer request containing IP=0.0.0.0 or another IP-Address option follows the normal Simple IP negotiation.

In insecure mode, a phone that asks for authenticated registration returns to Simple IP negotiation. In mn_ha mode, the SPI and secret must match the phone. If the request also includes MN-AAA and allow_unverified_mn_aaa is false, the PDSN tries Simple IP instead.

The checked-in pdsn.json enables mn_ha with compatibility values used by tested legacy Sprint phones. These are not secure, general-purpose credentials. Change them only when the phone is provisioned with matching values.

By default, DNS points phones at the packet gateway resolver. In the compose stack this resolves speed and speed.local.1xbts.org to the local speed test. Simple IP supplies these values through IPCP. Mobile IPv4 supplies them after a successful registration. Set primary_dns and secondary_dns to external resolvers if you do not want gateway-local DNS.

Transport modes:

  • tun — kernel TUN device; packets routed via NAT on tun_nat_interface
  • fou — FOU (Foo-over-UDP) tunnel; direct UDP encapsulation
  • fou_tcp — FOU with TCP relay (for NAT traversal); connects to fou_remote

hlr.json

HLR subscriber database configuration.

FieldTypeDefaultDescription
grpc_listen_addrstring"0.0.0.0:17019"HLR service gRPC listen address. Binds all interfaces so the web dashboard container can reach it.
postgres_dsnstring | null"postgres://1xbts:1xbts@localhost:45432/1xbts"PostgreSQL connection string. When unset, HLR runs without persistence.

smsc.json

SMS storage, routing, retry, and optional SMPP hub configuration. See the SMS guide for setup and testing.

FieldTypeDefaultDescription
grpc_listen_addrstring"0.0.0.0:17020"SMSC gRPC listen address.
postgres_dsnstring"postgres://1xbts:1xbts@localhost:45432/1xbts"Required PostgreSQL connection string for message storage.
hlr_endpointstring"http://127.0.0.1:17019"HLR endpoint for subscriber numbers and registration status.
smppobject | nullnullOptional connection to an SMPP hub. Omit for local-only messaging.

sweep

FieldTypeDefaultDescription
enabledbooleantrueEnables retry scans and recovery of interrupted delivery attempts.
retry_after_secsinteger10Minimum wait after a failed attempt before retrying.
interval_secsinteger10Time between retry scans.
stale_after_secsinteger120Time without an outcome before an in-flight attempt can be recovered.

smpp

FieldTypeDefaultDescription
rolestringRequired"client" connects to the hub. "server" listens for the hub.
hub_addrstringNoneRequired for client: hub IP address and TCP port.
bind_addrstringNoneRequired for server: local IP address and TCP port to listen on.
system_idstringRequiredSMPP system ID used for the bind.
passwordstringRequiredSMPP bind password.

Keep credentials in config/smsc.local.json. The link uses plain TCP and reconnects automatically. It is independent of the voice gateway’s SIP configuration.


management.json

BSC management endpoint configuration. This is the address the MSC enrolls the base station through (base_stations[].management_endpoint in msc.json).

FieldTypeDefaultDescription
grpc_listen_addrstring"0.0.0.0:17016"BSC management gRPC listen address. Binds all interfaces so the packet-data gateway container can reach it.
iq_capture_dirstring"capture-iq-wav"No longer read. IQ captures use iq_capture_dir in bts.json.
mtlsobjectnullmTLS config (see below); omit for plaintext

mtls (optional)

FieldTypeDescription
cert_pathstringPath to PEM-encoded server certificate
key_pathstringPath to PEM-encoded server private key
client_ca_pathstringPath to PEM-encoded CA bundle for client certificate verification

events.json

Aggregated event bus configuration. The BTS, PDSN and other components publish to it through their events_endpoint, and the web dashboard subscribes to the unified stream.

FieldTypeDefaultDescription
grpc_listen_addrstring"127.0.0.1:17023"Event bus gRPC listen address. Required.
subscriber_queue_capacityinteger1024Per-subscriber buffered queue size. Subscribers that fall behind beyond this depth are disconnected.
hlr_endpointstring | null"http://127.0.0.1:17019"HLR used to attach subscriber details to events.

pcf.json

PCF-side packet service client configuration.

FieldTypeDefaultDescription
packet_grpc_endpointstring"http://127.0.0.1:17021"Packet service endpoint consumed by the BSC-facing PCF client
a9_bind_addrstring"127.0.0.1:17046"A9 signaling bind address the EV-DO cells send bearer setup requests to
a8_bearerobjectUDP-encapsulated GRE on 127.0.0.1:17041 ↔ 127.0.0.1:17040A8 bearer transport toward the EV-DO cell’s access network (evdo.a9 in bts.json)
a10_bearerobjectUDP-encapsulated GRE on 127.0.0.1:17042 ↔ 127.0.0.1:17043A10 bearer transport toward the PDSN
a11object127.0.0.1:17044 ↔ 127.0.0.1:17045A11 UDP signaling endpoint toward the PDSN
a11_securityobjectrequiredPCF/PDSN A11 security association. Must match pdsn.json:a11_security.

a11_security

FieldTypeDefaultDescription
spiintegerrequiredA11 Security Parameter Index. Must be greater than 255; 0..=255 are reserved by A.S0017.
shared_secret_hexstringrequiredHex-encoded PCF/PDSN shared secret. Must match pdsn.json:a11_security.shared_secret_hex.

The checked-in pcf.json and pdsn.json include matching A11 credentials for local operation. Override both sides together with pcf.local.json and pdsn.local.json for a deployment-specific association.


Radio Configs

Radio config files are standalone JSON passed via --radio-config, or placed inline under radio in bts.json. The shipped profiles are radio_uhd_b210_native.json, radio_limesdr_mini2_native.json, radio_bladerf_micro2.json, radio_soapydr_example.json and radio_network.json. The mobile station and cdma-radiod take the same files with --radio.

Common Fields

FieldTypeDescription
kindstringBackend: "uhd", "lime", "blade_rf", "soapy", "network"
devicestringDevice selector string (empty = first found)
channelintegerRF channel index
tx_antenna / antennastringTX antenna port name (antenna for uhd and soapy)
tx_gain_dbfloatTX gain in dB
rx_antennastringRX antenna port name
rx_gain_dbfloatRX gain in dB
rx_reference_dbmfloat | nullOptional RX reference level in dBm, shown with received power in the web UI. null leaves it uncalibrated.
rx_power_adjfloatRadio-specific dBFS threshold adjustment for reverse-link power control
rx_sample_delayintegerRX timing compensation in samples
tx_sample_delayinteger | nullTX timing compensation in samples, used by the mobile station. The shipped profiles include a starting value
rx_batch_pcgsintegerRX batch size in PCGs (default: 2)
traffic_rx_continuitybooleanConceal sample discontinuities on active reverse traffic channels (default false; the UHD and Soapy profiles enable it)

TX/RX sample rates and RF bandwidths are not radio-config fields. They are derived from bts.json carrier mode at startup.

UHD (kind: "uhd")

{
"kind": "uhd",
"device": "type=b200,num_recv_frames=1024,num_send_frames=1024",
"channel": 0,
"antenna": "TX/RX",
"tx_gain_db": 65.0,
"master_clock_rate": 39321600,
"clock_source": null,
"time_source": null,
"rx_antenna": "RX2",
"rx_gain_db": 30.0,
"rx_reference_dbm": null,
"rx_power_adj": 0.0,
"rx_sample_delay": 50,
"traffic_rx_continuity": true,
"rx_batch_pcgs": 2
}
FieldDescription
master_clock_rateUSRP master clock in Hz. The default is 32× the chip rate so TX ticks align with samples.
clock_sourceReference clock source ("external", "gpsdo", …); null uses the internal reference
time_sourceTime source; null uses the internal clock

LimeSDR Native (kind: "lime")

{
"kind": "lime",
"device": "",
"channel": 0,
"tx_antenna": "BAND1",
"tx_gain_db": 80,
"rx_antenna": "LNAW",
"rx_gain_db": 50,
"rx_reference_dbm": null,
"rx_power_adj": 5.0,
"rx_sample_delay": 97,
"oversample": 0
}

rx_sample_delay compensates for LimeSDR hardware timing offset in the receive path. oversample is the LimeSDR oversampling ratio (0 lets the driver choose).

bladeRF Native (kind: "blade_rf")

{
"kind": "blade_rf",
"device": "",
"channel": 0,
"tx_antenna": "TXA",
"rx_antenna": "A_BALANCED",
"tx_gain_db": 65,
"rx_gain_db": 20,
"rx_reference_dbm": null,
"rx_power_adj": 0.0,
"rx_sample_delay": 82,
"rx_batch_pcgs": 2,
"num_buffers": 16,
"buffer_size": 8192,
"num_transfers": 8,
"stream_timeout_ms": 3500
}
FieldDescription
num_buffersStream buffer count
buffer_sizeSamples per buffer
num_transfersConcurrent USB transfers
stream_timeout_msStream transfer timeout

SoapySDR (kind: "soapy")

{
"kind": "soapy",
"device": "driver=lime",
"channel": 0,
"antenna": "BAND1",
"tx_gain_db": 60.0,
"rx_antenna": "LNAW",
"rx_gain_db": 32.0,
"rx_reference_dbm": null,
"rx_power_adj": 0.0,
"rx_sample_delay": 0,
"rx_batch_pcgs": 2,
"traffic_rx_continuity": true
}

Network (kind: "network")

Uses a radio served by cdma-radiod on another machine.

{
"kind": "network",
"addr": "radio-host:50710",
"data_host": "radio-host",
"samples_per_packet": 2200,
"tx_transport": "tcp",
"rx_enabled": true
}
FieldDefaultDescription
addrrequiredcdma-radiod control address
data_hosthost of addrcdma-radiod host for the sample stream
samples_per_packet350Samples per network packet, up to 2200 with jumbo frames
tx_transport"udp""udp" or "tcp" for transmit samples
rx_enabledtrueStream received samples back

Device, antenna, TX gain and stream settings stay in the radio config cdma-radiod runs with.


ms.json

Mobile station identity, channel and transmit calibration. See Mobile Station for every key.

radiod_network.json

cdma-radiod listeners. See Remote Radio.


Default Ports

PortProtocolOwnerPurpose
5604TCPBTSAbis signaling listener (the BSC connects)
17013TCPBSCA1 signaling listener (the MSC connects after enrolling the base station)
17014UDPBTSAbis bearer (BTS side)
17015gRPCVoice gatewayMSC-controlled SIP/RTP bridge
17016gRPCBSCBase station management (the MSC enrolls the BSC here)
17017gRPCMSCNetwork management: the web dashboard’s endpoint
17019gRPCHLRSubscriber and registration persistence
17020gRPCSMSCSMS submission and delivery persistence
17021gRPCPDSNPacket sessions
17022UDPBSCAbis bearer (BSC side)
17023gRPCEvent busAggregated event stream
17024gRPCBTSCell management and enrollment (the BSC enrolls each cell here)
17030gRPCBTSHRPD access network session API for an EV-DO cell
17040UDP/GREBTSA8 bearer for an EV-DO cell, toward the PCF
17041UDP/GREPCFA8 bearer toward the EV-DO cell
17042UDP/GREPCFA10 bearer toward the PDSN
17043UDP/GREPDSNA10 bearer toward the PCFs
17044UDPPCFA11 signaling toward the PDSN
17045UDPPDSNA11 signaling toward the PCFs
17046UDPPCFA9 signaling from the EV-DO cells
17010UDPPacket gatewayFOU tunnel endpoint (fou-nat container)
17011UDPPDSNFOU local port
50052gRPCMobile stationcdma-ms control API (loopback by default)
50710gRPCcdma-radiodRemote radio control
50711UDPcdma-radiodRemote radio samples
17012TCPPacket gatewayFOU-TCP relay (fou-nat container)
45432TCPPostgreSQLHLR and SMSC database (Docker service)
3000HTTPWeb dashboard1xbts-web (Docker service)
5656HTTPPacket gatewaySpeed test, host side (SPEEDTEST_PORT)

Ports the handsets see on the packet-data tunnel (10.55.0.1):

PortProtocolPurpose
53DNSCaptive resolver for packet-data sessions
80HTTPSpeed test and MMSC proxy
1905UDPUP.Link (HDTP) browser gateway
9200, 9201UDPWAP 1.x browser gateway
Esc