cnetz(1)

πŸ“¦ version 0.0~git20251206.0c72677, in debian trixie, ubuntu questing, ubuntu resolute, ubuntu stonking

πŸ’– cnetz β€” the manual page, but make it make sense πŸ’–

cnetz(1) Β· General Commands Manual Β· section 1

okay bestie, sit down, grab a strawberry, because we're about to get deep into cnetz. This is the osmocom-analog base station situation and it is lowkey iconic. Homepage vibe: http://osmocom-analog.eversberg.eu/docs/. Yes, that's the whole NAME section. It's giving minimalism. πŸŽ€


✨ SYNOPSIS ✨

cnetz -k <kanal/channel> [-M] -S <rx ppm>,<tx ppm> -p -d [options]
[station_id]

Okay so real talk, that's the shape of it. Now let's get into every single option because we do not skip, ever. πŸ’…


🌸 Global options 🌸

  • -h, --help β€” the classic. This is literally just the help. It tells you things. Slay.
  • --config [~/]<path to config file> β€” hand it a config file to use. If the path starts with ~/, the path lives in your home dir. Every line in the config file is one option, and heads up: you must not put - or -- in there. Default: ~/.osmocom/analog/cnetz.conf
  • --no-config β€” even if a config file is sitting right there existing, don't touch it. We're ignoring it. Periodt.
  • -v, --verbose <level> | <level>,<category>[,<category>[,...]] | list β€” the verbose dial. Throw in list to get a full list of all the levels and categories, because knowledge is power. Verbose level alone: just a digit for the debug level (default = 3). Verbose level + category: the level digit followed by one or more categories β†’ and if you specify no category, then all categories get selected. Generous of it honestly.
  • -v, --verbose date β€” show the date alongside your debug output. Time stamps! We love context. πŸ•°οΈ
  • -k, --kanal <channel>
  • -k, --channel <channel> β€” the channel number of the "Sender" (which is German for Transceiver). Two flags, one job, bilingual king.
  • -a, --audio-device hw:<card>,<device>[/hw:<card>.<rec-device>] β€” sound card and device number (default = hw:0,0). You may specify a different recording device by using a /. But listen: don't set it for SDR! 🚫
  • -s, --samplerate <rate> β€” sample rate of the sound device (default = 48000).
  • -i, --interval 0.1..25 β€” interval of the processing loop, in ms (default = 1.0 ms). Use 10 to drastically reduce CPU usage. And if you hit buffer underrun, just increase the buffer accordingly. Teamwork. 🫢
  • -b, --buffer <ms> β€” how many milliseconds get processed in advance (default = 50). A buffer below 10 ms needs a low interval like 0.1 ms. Tiny buffer, tiny interval, that's the deal.
  • -p, --pre-emphasis β€” enable pre-emphasis, for when you're connected directly to the oscillator of the transmitter. (Because the transmitter isn't doing any pre-emphasis itself. It's not that kind of transmitter.)
  • -d, --de-emphasis β€” enable de-emphasis, for when you're connected directly to the discriminator of the receiver. (No de-emphasis done by the receiver, so you do it. Main character energy.)
  • --rx-gain <dB> β€” raise or lower the receiver's RX level by the given gain in dB. (Works with sound card only.)
  • --tx-gain <dB> β€” raise or lower the transmitter's RX level by the given gain in dB. (Works with sound card only.) Yes it says "transmitters's RX level", we're reporting faithfully, don't @ me. 😭
  • -e, --echo-test β€” use echo test, which sends audio from the mobile phone's microphone back to the speaker. (German: 'Blasprobe'.) hearing your own voice but make it radio πŸ’€
  • -c, --call-device hw:<card>,<device>[/hw:<card>.<rec-device>] β€” sound card and device number for the headset (default = ''). You may specify a different recording device by using a /.
  • --call-samplerate <rate> β€” sample rate of the sound device for the headset (default = 48000).
  • --call-buffer <ms> β€” how many milliseconds get processed in advance (default = 50).
  • -x, --osmocc-cross β€” enable the built-in call forwarding between mobiles. Be sure you have at least one control channel and two voice channels. Alternatively: use one combined control+voice channel and one voice channel. Choose your fighter. πŸ”₯
  • -o, --osmocc-sock β€” disable the built-in call control and offer a socket instead.
  • --cc "<osmo-cc arg>" [--cc ...] β€” pass arguments to the Osmo-CC endpoint. Use -cc help for the description. Chain it, bestie.
  • --no-l16 β€” disable the L16 (linear 16 bit) codec. bye L16 πŸ¦‹
  • -t, --tones 0 | 1 β€” connect the call on setup/release to provide classic tones toward the fixed network (default = 1). retro vibes only.
  • -l, --loopback <type> β€” loopback test. 1 = internal | 2 = external | 3 = echo. Pick your loop. πŸ”
  • -r, --realtime <prio> β€” set prio. 0 disables it, 99 is maximum (default = 0). Go big or go home.
  • --fast-math β€” use the fast math approximation, for slow CPU / ARM based systems. We're being efficient. ✨
  • --write-rx-wave <file> β€” write the received audio to the given wave file.
  • --write-tx-wave <file> β€” write the transmitted audio to the given wave file.
  • --read-rx-wave <file> β€” replace the received audio with the given wave file.
  • --read-tx-wave <file> β€” replace the transmitted audio with the given wave file.
  • --limesdr β€” auto-selects several required options for LimeSDR. Convenience queen.
  • --limesdr-mini β€” auto-selects several required options for LimeSDR Mini. Her smaller sister, also slaying.

πŸ¦‹ SDR options πŸ¦‹

  • --sdr-soapy β€” force the SoapySDR driver. no debate.
  • --sdr-channel <channel #> β€” give the channel number for a multi channel SDR device (default = 0).
  • --sdr-device-args <args>
  • --sdr-stream-args <args>
  • --sdr-tune-args <args> β€” optional SDR device arguments, separated by comma, e.g. --sdr-device-args <key>=<value>[,<key>=<value>[,...]]. Three flags, same energy, three different jobs.
  • --sdr-samplerate <samplerate> β€” sample rate to use with SDR. By default it equals the regular sample rate. It's giving consistency.
  • --sdr-lo-offset <Hz> β€” give a frequency offset in Hz to move the local oscillator away from the target frequency. (default = -1000000)
  • --sdr-bandwidth <bandwidth> β€” give the IF filter bandwidth to use. If you don't, the sample rate gets used instead.
  • --sdr-rx-antenna <name> β€” the SDR device's RX antenna name. Use list to get a list. πŸ‘‘
  • --sdr-tx-antenna <name> β€” the SDR device's TX antenna name. Use list to get a list.
  • --sdr-clock-source <name> β€” the SDR device's clock sourc name. Use list to get a list. (Yes, "sourc". We copy exactly. character for character. that's the rule bestie πŸ’€)
  • --sdr-rx-gain <gain> β€” the SDR device's RX gain in dB (default = 0.0).
  • --sdr-tx-gain <gain> β€” the SDR device's TX gain in dB (default = 0.0).
  • --write-iq-rx-wave <file> β€” write the received IQ data to the given wave file.
  • --write-iq-tx-wave <file> β€” write the transmitted IQ data to the given wave file.
  • --read-iq-rx-wave <file> β€” replace the received IQ data with the given wave file.
  • --read-iq-tx-wave <file> β€” replace the transmitted IQ data with the given wave file.
  • --sdr-swap-links β€” swap the RX and TX frequencies, for loopback tests over the air. 🌈
  • --sdr-timestamps 1 | 0 β€” use TX timestamps on the UHD device. (default = 1)

πŸ’œ Network specific options πŸ’œ

  • -T, --channel-type <channel type> | list β€” give the channel type. Use list to get a list. (default = OgK/SpK) Now listen, this part matters: you must define at least one OgK at channel 131. This channel may be a combined OgK+SpK channel, but that only works with older phones. You must additionally define one or more SpK in order to make calls. You may also define an alternative OgK, and the phones will attach to it then. So many musts. So much structure. πŸ’…
  • -M, --measure-speed β€” measures clock speed. THIS IS REQUIRED! See documentation! Like, genuinely, go read it. 🚨
  • -C, --clock-speed <rx ppm>,<tx ppm> β€” correct the speed of the sound card's clock. Use -M to measure the speed for some hours after the temperature has settled. Then use those results to correct the signal processing speed. After adjustment, the clock must match +- 1ppm or better. CORRECTING CLOCK SPEED IS REQUIRED! See the documentation on how to measure the correct value. This one is not a vibe, it's a necessity.
  • -F, --flip-polarity no | yes | auto β€” flip the polarity of the transmitted FSK signal. If yes, the sound card generates a negative signal rather than a positive one. If auto, the base station uses double time slots with alternating polarity β€” and once a mobile registers, the correct polarity is selected and used. (default = auto) Note: correct polarity is selected for SDR by default. ✨
  • -P, --ms-power <power level> β€” give the power level of the mobile station: 1, 2, 4, 6, 8 (default = 6). So: 1 = 7.5-20 W; 2 = 4-8 W; 4 = 0.5-1 W; 6 = 50-125 mW; 8 = 2-10 mW. Power level 8 starts with level 6 and is then reduced on SpK. A whole journey for level 8. 😭
  • -A, --authentication <challenge> β€” enable the authorization flag on the base station and use the given challenge as the authorization random. Depending on the key inside the card you'll get a response, and any response is accepted. The phone must have a smart card! The challenge can be any 64 bit (hex) number like: 0x0123456789abcdef Note: authentication is automatically enabled for the base station. πŸ”
  • -A, --authentication <challenge>,<response> β€” same as above, but now the given response must match the response from the smart card. The response can be any 64 bit (hex) number. Note: authentication is automatically enabled for the base station. Strict mode activated. no cap.
  • -Q, --queue | --warteschlange 1 | 0 β€” enable queue support. If no channel is available, calls get kept in a queue for a maximum of 60 seconds. (default = 1) German flag name, because of course. πŸŽ€
  • -G, --gebuehren <seconds> | 0 β€” increment the metering counter every given number of seconds. To turn it off, use 0. (default = 20) If metering pulses are sent via the Osmo-CC interface, pulses always increment the metering counter β€” and that overrides this option. Override alert! ⚠️
  • -V, --voice-deviation <2400..4000 Hz> β€” honestly it's unclear what the actual voice deviation is. Please increase it if the mobile's earpiece is too quiet and the microphone is too loud. (default = 2400)
  • -S, --sysinfo timeslots=1|2|4|8 β€” set the number of timeslots of the OgK broadcast. There are 32 time slots per frame, but only up to 8 slots can be used, because of processing delay. (default = 4) 32 exist, only 8 can come out to play. πŸ’€
  • -S, --sysinfo fuz-nat=<nat> β€” set the country ID of the base station. All IDs were used inside Germany only. (default = 1) πŸ‡©πŸ‡ͺ
  • -S, --sysinfo fuz-fuvst=<id> β€” set the switching center ID of the base station. (default = 4)
  • -S, --sysinfo fuz-rest=<id> β€” set the cell ID of the base station. (default = 66)
  • -S, --sysinfo fuz=<nat>,<fuvst>,<rest> β€” set the country, switching center and cell ID of the base station all at once. one line, three IDs, efficiency icon. πŸ‘‘
  • -S, --sysinfo fuz-name=<name> β€” set the country, switching center and cell ID by providing a name or prefix. Use list to get a list of all base sstation names. (yes, "sstation" β€” verbatim, bestie, we don't fix typos, we honor them πŸ’…)
  • -S, --sysinfo kennung-fufst=<id> β€” set the priority for selecting the base station. (default = 1) 0 = Test (only special mobile stations may register.) 1 = Normal priority base station. 2 = Higher priority base station. 3 = Highest priority base station. Note: priority has no effect, because there is only one base station. Iconic honesty. 😭
  • -S, --sysinfo bahn-bs=<value> β€” set the special tunnel base station mode for train mobile phones only. (default = 1) 0 = Disable (every phone is allowed) 1 = Enable (only train phones are allowed) Note: enabling this will force the priority to 0 (Test base station). πŸš‚
  • -S, --sysinfo auth=<auth>

to be continued, because this page is long and we have more parts coming πŸ’–βœ¨

So for that base-station auth flag: it enables the authentication flag on the base station. But bestie, we literally cannot authenticate, because we don’t know the secret key and the algorithm, so we just accept any card. It’s useful to get the vendor IDs of the phone. 0 = Disable β€” even chip card phones behave like magnetic card phones. 1 = Enable β€” chip card phones send their card ID. (default = 0) πŸ’…

  • -S --sysinfo ws-kennung=<value> β€” queue setting of the base station. (default = 0) 0 = no queue, calls will be handled directly. 1 = queue on outgoing calls. 2 = queue blocked, no calls allowed. 3 = reserved, don’t use! πŸ’€
  • -S --sysinfo fuvst-sperren=<value> β€” blocking registration and outgoing calls. (default = 0) 0 = registration and outgoing calls allowed. 1 = only registration alloweed. 2 = only outgoing calls allowed. (Cannot work without registration!) 3 = no registration and no outgoing calls allowed. 🚫
  • -S --sysinfo grenz-einbuchen=<value> β€” minimum SNR to allow registration of mobile. (default = 1) 0 = no limit; 1 = >15 dB; 2 = >17 dB; 3 = >19 dB; 4 = >21 dB; 5 = >25 dB; 6 = >28 dB; 7 = >32 dB. ✨
  • -S --sysinfo grenz-umschalten=<value> β€” minimum SNR before phone requests handover. (default = 15) 15 = 18 dB ... 0 = 26 dB (external); 13 = 16 dB ... 0 = 22 dB (internal). πŸ¦‹
  • -S --sysinfo grenz-ausloesen=<value> β€” minimum SNR before phone releases of call. (default = 15) 15 = 18 dB ... 0 = 26 dB. 🌸
  • -S --sysinfo mittel-umschalten=<value> β€” number of frames to measure for handover criterium. (default = 5) 0 = 2 measurements; 1 = 4 measurements; 2 = 8 measurememnts; 3 = 16 measurements; 4 = 32 measurements; 5 = 64 measurememnts. πŸŽ€
  • -S --sysinfo mittel-ausloesen=<value> β€” number of frames to measure for release criterium. (default = 5) 0 = 2 measurements; 1 = 4 measurements; 2 = 8 measurememnts; 3 = 16 measurements; 4 = 32 measurements; 5 = 64 measurememnts. πŸ’–
  • -S --sysinfo genauigkeit=<value> β€” accuracy of base station. (default = 1) 0 = full accuracy; 1 = limited accuracy. Note: this has no effect, because there is only one base station. πŸ™ˆ
  • -S --sysinfo bewertung=<value> β€” rating of base station. (default = 1) 0 = by relative distance; 1 = by received level. Note: this has no effect, because there is only one base station. ⭐
  • -S --sysinfo entfernung=<value> β€” base station size. (default = 3) 0 = 1.5km; 1 = 2km; 2 = 2.5km; 3 = 3km; 4 = 5km; 5 = 5km; 6 = 6km; 7 = 7km; 8 = 8km; 9 = 10km; 10 = 12km; 11 = 14km; 12 = 16km; 13 = 17km; 14 = 23km; 15 = 30km. Note: this has no effect, because there is only one base station. 🌈
  • -S --sysinfo reduzierung=<value> β€” see specs value 'y'. (default = 0) 0 = 4; 1 = 3; 2 = 2; 3 = 1. Note: this has no effect, because there is only one base station. πŸ“
  • -S --sysinfo nachbar-prio=<value> β€” see specs value 'g'. (default = 0) Note: this has no effect, because there is only one base station. 🧚
  • -S --sysinfo futln-sperre=<value>[-<value>] β€” blocking registration and outgoing calls for selected mobile stations. The 4 least significant bits of the subscriber number can be given to block all matching phones. Alternatively the phone number may be given here, so that the 4 bits get calculated automatically. The optional second value can be given, to define a range β€” in the same way. (default = no value given) πŸ”₯
  • -S --sysinfo meldeinterval=<seconds> β€” time to wait until pinging the phone whether it is still available. (default = 120) ⏳
  • -S --sysinfo meldeaufrufe=<count> β€” number of times we try to ping mobile until we assume it is gone. Use '0' for infinite tries. (default = 3) πŸ“ž
  • -D --demod auto | slope | level β€” adjust demodulation algorithm. Use 'slope' to detect a level change by finding the highest slope of a bit transition. It is useful, if the receiver drifts to 0 after a while, due to DC decoupling. This happens in every analog receiver and in every sound card input. Use 'level' to detect a level change by passing zero level. This requires a DC coupled signal, which is produced by SDR. Use 'auto' to select 'slope' for sound card input and 'level' for SDR input. (default = 'auto') πŸ“‘
  • station_id: β€” give 7 or 8 digits of station ID, so you don’t need to enter it for every start of this application. Give 7 digits for regular number format. Give 8 digits for extended number format. You may use '0161xxxxxxx' as prefix. You may use '0161xxxxxxxx' as prefix. You may use '+49161xxxxxxx' as prefix. You may use '+49161xxxxxxxx' as prefix. πŸ‘‘

Okay and now the keyboard controls, because you’re basically the main character at the console:

  • Press digits '0'..'9' and then 'd' key to dial towards mobile station.
  • Press 'h' key to hangup.
  • Press 'w' key to toggle display of RX wave form.
  • Press 'c' key to toggle display of channel status.
  • Press 'm' key to toggle display of measurement value.
  • Press 'q' key to toggle display of RX I/Q vector.
  • Press 's' key to toggle display of RX spectrum.
  • Press 'b' key to remove DC level.
  • Press 'i' key to dump list of currently attached subscribers.

and that’s the whole cnetz(1) manual, bestie β€” footer vibes were just cnetz(1), so shoutout to that source/version/date energy. periodt. πŸ’…βœ¨