cnetz(1)
π 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 inlistto 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.0ms). Use10to 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 like0.1ms. 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 helpfor 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.0disables it,99is 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. Uselistto get a list. π--sdr-tx-antenna <name>β the SDR device's TX antenna name. Uselistto get a list.--sdr-clock-source <name>β the SDR device's clock sourc name. Uselistto 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. Uselistto get a list. (default =OgK/SpK) Now listen, this part matters: you must define at least oneOgKat channel 131. This channel may be a combinedOgK+SpKchannel, but that only works with older phones. You must additionally define one or moreSpKin order to make calls. You may also define an alternativeOgK, 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-Mto 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+- 1ppmor 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. Ifyes, the sound card generates a negative signal rather than a positive one. Ifauto, 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:0x0123456789abcdefNote: 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, use0. (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. Uselistto 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 to0(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. π
β¨
π¦ where this page comes from
- debian trixie: osmocom-analog 0.0~git20250208.4ebf64f-1 Β· GPL-3.0-or-later
- ubuntu questing: osmocom-analog 0.0~git20250208.4ebf64f-1build1
- ubuntu resolute: osmocom-analog 0.0~git20250208.4ebf64f-1build2 Β· GPL-3.0-or-later
- ubuntu stonking: osmocom-analog 0.0~git20251206.0c72677-1 Β· GPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms