From cb9c85adb59db0005bb74ca37e00f932e2ab3072 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sat, 11 Jun 2022 14:59:13 +0200 Subject: [PATCH] C-Netz: Add capability of special tunnel base station (bahn-bs) Totally useless, if you don't have a train phone - don't you? --- src/cnetz/cnetz.c | 2 ++ src/cnetz/main.c | 12 +++++++++++- src/cnetz/sysinfo.c | 7 +++++-- src/cnetz/sysinfo.h | 3 ++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/cnetz/cnetz.c b/src/cnetz/cnetz.c index 79dd055..a5b81ac 100644 --- a/src/cnetz/cnetz.c +++ b/src/cnetz/cnetz.c @@ -990,6 +990,7 @@ const telegramm_t *cnetz_transmit_telegramm_rufblock(cnetz_t *cnetz) telegramm.fuz_fuvst_nr = si.fuz_fuvst; telegramm.fuz_rest_nr = si.fuz_rest; telegramm.kennung_fufst = si.kennung_fufst; + telegramm.bahn_bs = si.bahn_bs; telegramm.nachbarschafts_prioritaets_bit = si.nachbar_prio; telegramm.bewertung_nach_pegel_und_entfernung = si.bewertung; telegramm.entfernungsangabe_der_fufst = si.entfernung; @@ -1348,6 +1349,7 @@ const telegramm_t *cnetz_transmit_telegramm_spk_k(cnetz_t *cnetz) telegramm.frequenz_nr = cnetz->kanal; telegramm.bedingte_genauigkeit_der_fufst = si.genauigkeit; telegramm.zufallszahl = cnetz->challenge; + telegramm.bahn_bs = si.bahn_bs; switch (trans->state) { case TRANS_BQ: diff --git a/src/cnetz/main.c b/src/cnetz/main.c index 88830bb..cdd3c83 100644 --- a/src/cnetz/main.c +++ b/src/cnetz/main.c @@ -57,6 +57,7 @@ uint8_t fuz_fuvst = 4; uint8_t fuz_rest = 66; const char *fuz_name = NULL; uint8_t kennung_fufst = 1; /* normal prio */ +uint8_t bahn_bs = 0; /* normal */ uint8_t authentifikationsbit = 0; uint8_t ws_kennung = 0; /* no queue */ uint8_t fuvst_sperren = 0; /* no blocking registration/calls */ @@ -148,6 +149,12 @@ void print_help(const char *arg0) printf(" 2 = Higher priority base station.\n"); printf(" 3 = Highest priority base station.\n"); printf(" Note: Priority has no effect, because there is only one base station.\n"); + printf(" -S --sysinfo bahn-bs=\n"); + printf(" Set special tunnel base station mode for train mobile phones only.\n"); + printf(" (default = %d)\n", kennung_fufst); + printf(" 0 = Disable (every phone is allowed)\n"); + printf(" 1 = Enable (only train phones are allowed)\n"); + printf(" Note: Enableing this will force priority to 0 (Test base station).\n"); printf(" -S --sysinfo auth=\n"); printf(" Enable authentication flag on the base station. Since we cannot\n"); printf(" authenticate, because we don't know the secret key and the algorithm,\n"); @@ -383,6 +390,9 @@ error_fuz: if (!strncasecmp(argv[argi], "kennung-fufst=", p - argv[argi])) { kennung_fufst = atoi_limit(p, 0, 3); } else + if (!strncasecmp(argv[argi], "bahn-bs=", p - argv[argi])) { + bahn_bs = atoi_limit(p, 0, 1); + } else if (!strncasecmp(argv[argi], "auth=", p - argv[argi])) { authentifikationsbit = atoi_limit(p, 0, 1); } else @@ -584,7 +594,7 @@ int main(int argc, char *argv[]) case 4: timeslots=0x01010101; break; default: timeslots=0x11111111; } - init_sysinfo(timeslots, fuz_nat, fuz_fuvst, fuz_rest, kennung_fufst, authentifikationsbit, ws_kennung, fuvst_sperren, grenz_einbuchen, grenz_umschalten, grenz_ausloesen, mittel_umschalten, mittel_ausloesen, genauigkeit, bewertung, entfernung, reduzierung, nachbar_prio, teilnehmergruppensperre, anzahl_gesperrter_teilnehmergruppen); + init_sysinfo(timeslots, fuz_nat, fuz_fuvst, fuz_rest, kennung_fufst, bahn_bs, authentifikationsbit, ws_kennung, fuvst_sperren, grenz_einbuchen, grenz_umschalten, grenz_ausloesen, mittel_umschalten, mittel_ausloesen, genauigkeit, bewertung, entfernung, reduzierung, nachbar_prio, teilnehmergruppensperre, anzahl_gesperrter_teilnehmergruppen); dsp_init(); rc = init_telegramm(); if (rc < 0) { diff --git a/src/cnetz/sysinfo.c b/src/cnetz/sysinfo.c index 02eeae3..59205d5 100644 --- a/src/cnetz/sysinfo.c +++ b/src/cnetz/sysinfo.c @@ -4,12 +4,12 @@ cnetz_si si; -void init_sysinfo(uint8_t timeslot, uint8_t fuz_nat, uint8_t fuz_fuvst, uint8_t fuz_rest, uint8_t kennung_fufst, uint8_t authentifikationsbit, uint8_t ws_kennung, uint8_t vermittlungstechnische_sperren, uint8_t grenz_einbuchen, uint8_t grenz_umschalten, uint8_t grenz_ausloesen, uint8_t mittel_umschalten, uint8_t mittel_ausloesen, uint8_t genauigkeit, uint8_t bewertung, uint8_t entfernung, uint8_t reduzierung, uint8_t nachbar_prio, int8_t teilnehmergruppensperre, uint8_t anzahl_gesperrter_teilnehmergruppen) +void init_sysinfo(uint32_t timeslots, uint8_t fuz_nat, uint8_t fuz_fuvst, uint8_t fuz_rest, uint8_t kennung_fufst, uint8_t bahn_bs, uint8_t authentifikationsbit, uint8_t ws_kennung, uint8_t vermittlungstechnische_sperren, uint8_t grenz_einbuchen, uint8_t grenz_umschalten, uint8_t grenz_ausloesen, uint8_t mittel_umschalten, uint8_t mittel_ausloesen, uint8_t genauigkeit, uint8_t bewertung, uint8_t entfernung, uint8_t reduzierung, uint8_t nachbar_prio, int8_t teilnehmergruppensperre, uint8_t anzahl_gesperrter_teilnehmergruppen) { memset(&si, 0, sizeof(si)); /* timeslot to use */ - si.timeslot = timeslot; + si.timeslots = timeslots; /* ID of base station */ si.fuz_nat = fuz_nat; @@ -37,7 +37,10 @@ void init_sysinfo(uint8_t timeslot, uint8_t fuz_nat, uint8_t fuz_fuvst, uint8_t /* a low value is tollerant to bad quality */ si.grenz_einbuchen = grenz_einbuchen; /* 1..7 */ + if (bahn_bs) + kennung_fufst = 0; si.kennung_fufst = kennung_fufst; + si.bahn_bs = bahn_bs; si.authentifikationsbit = authentifikationsbit; diff --git a/src/cnetz/sysinfo.h b/src/cnetz/sysinfo.h index b7905e6..0474dcd 100644 --- a/src/cnetz/sysinfo.h +++ b/src/cnetz/sysinfo.h @@ -13,6 +13,7 @@ typedef struct system_information { uint8_t entfernung; uint8_t grenz_einbuchen; uint8_t kennung_fufst; /* prio of base station */ + uint8_t bahn_bs; /* special train base station */ uint8_t authentifikationsbit; /* base station suppoerts authentication */ uint8_t ws_kennung; /* queue setting sof base station */ uint8_t nachbar_prio; @@ -24,5 +25,5 @@ typedef struct system_information { extern cnetz_si si; -void init_sysinfo(uint32_t timeslots, uint8_t fuz_nat, uint8_t fuz_fuvst, uint8_t fuz_rest, uint8_t kennung_fufst, uint8_t authentifikationsbit, uint8_t ws_kennung, uint8_t vermittlungstechnische_sperren, uint8_t grenz_einbuchen, uint8_t grenz_umschalten, uint8_t grenz_ausloesen, uint8_t mittel_umschalten, uint8_t mittel_ausloesen, uint8_t genauigkeit, uint8_t bewertung, uint8_t entfernung, uint8_t reduzierung, uint8_t nachbar_prio, int8_t teilnehmergruppensperre, uint8_t anzahl_gesperrter_teilnehmergruppen); +void init_sysinfo(uint32_t timeslots, uint8_t fuz_nat, uint8_t fuz_fuvst, uint8_t fuz_rest, uint8_t kennung_fufst, uint8_t bahn_bs, uint8_t authentifikationsbit, uint8_t ws_kennung, uint8_t vermittlungstechnische_sperren, uint8_t grenz_einbuchen, uint8_t grenz_umschalten, uint8_t grenz_ausloesen, uint8_t mittel_umschalten, uint8_t mittel_ausloesen, uint8_t genauigkeit, uint8_t bewertung, uint8_t entfernung, uint8_t reduzierung, uint8_t nachbar_prio, int8_t teilnehmergruppensperre, uint8_t anzahl_gesperrter_teilnehmergruppen);