Add network unit 27 on wireless networks and Wi-Fi security.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
pepaskopec-blip 2026-09-14 13:16:00 +02:00
commit 6848b22b93
5 changed files with 184 additions and 18 deletions

View file

@ -31,7 +31,7 @@ GTK 4 interface.
German learning path German learning path
- **Správa počítačových sítí / Computer Network Administration** is open too - **Správa počítačových sítí / Computer Network Administration** is open too
(shown with a Wi-Fi icon) and leads to a 30-unit computer-networks path; (shown with a Wi-Fi icon) and leads to a 30-unit computer-networks path;
**units 1–26 are playable**, units 27–30 are locked placeholders **units 1–27 are playable**, units 28–30 are locked placeholders
- **Technické vybavení / Computer Hardware** is open (chip icon) and leads - **Technické vybavení / Computer Hardware** is open (chip icon) and leads
to a 10-unit hardware path; **units 1–3 are playable**, units 4–10 are to a 10-unit hardware path; **units 1–3 are playable**, units 4–10 are
locked placeholders locked placeholders
@ -62,7 +62,7 @@ GTK 4 interface.
- **Hints & model answers** – in exercises where you write or complete a German - **Hints & model answers** – in exercises where you write or complete a German
sentence the Czech meaning is shown right away as a hint, and clicking the sentence the Czech meaning is shown right away as a hint, and clicking the
check button also reveals the correct German sentence so you can compare check button also reveals the correct German sentence so you can compare
- **Computer networks path** – twenty-six unlocked units (theory slides + practice): - **Computer networks path** – twenty-seven unlocked units (theory slides + practice):
1. **Výpočet IP adres / IP Address Calculation** – 4-slide VLSM walkthrough 1. **Výpočet IP adres / IP Address Calculation** – 4-slide VLSM walkthrough
and four interactive subnetting tasks (prefix, network, broadcast, host and four interactive subnetting tasks (prefix, network, broadcast, host
range) with check and “show solution” range) with check and “show solution”
@ -90,7 +90,8 @@ GTK 4 interface.
23. ICMP – slides + quiz 23. ICMP – slides + quiz
24. ARP – slides + quiz 24. ARP – slides + quiz
25. TCP a UDP – slides + quiz 25. TCP a UDP – slides + quiz
26. Aplikační protokoly – slides + quiz 26. Aplikační protokoly – slides + quiz
27. Bezdrátové sítě – slides + quiz
Progress for networks is saved to `progress/net.conf` (one flag per unit); Progress for networks is saved to `progress/net.conf` (one flag per unit);
completed network units show a checkmark on the path and count in Statistics completed network units show a checkmark on the path and count in Statistics
- **Computer hardware path** – three unlocked units (theory slides + quiz): - **Computer hardware path** – three unlocked units (theory slides + quiz):
@ -313,11 +314,11 @@ When launched, the application shows the welcome screen. From there:
unit 2 or **"Bei uns zu Hause"** for unit 3, then pick any bubble to start unit 2 or **"Bei uns zu Hause"** for unit 3, then pick any bubble to start
an exercise. Units 2 and 3 are available even if the earlier units are not an exercise. Units 2 and 3 are available even if the earlier units are not
finished yet. finished yet.
5. On the networks path, units **1–26** are open. Unit 1 (**Výpočet IP adres**) 5. On the networks path, units **1–27** are open. Unit 1 (**Výpočet IP adres**)
walks through four VLSM slides and then four interactive subnetting tasks walks through four VLSM slides and then four interactive subnetting tasks
with check / “show solution”. Units 2–26 each have theory slides followed by with check / “show solution”. Units 2–27 each have theory slides followed by
a multiple-choice quiz (basic concepts through application protocols). a multiple-choice quiz (basic concepts through wireless networks).
Units 27–30 stay locked placeholders. Units 28–30 stay locked placeholders.
6. On the hardware path, units **1–3** are open (architecture / von Neumann, 6. On the hardware path, units **1–3** are open (architecture / von Neumann,
computer history generations, bit & byte), each with slides and a quiz. computer history generations, bit & byte), each with slides and a quiz.
Units 4–10 stay locked. Units 4–10 stay locked.
@ -468,7 +469,7 @@ moderním GTK 4 rozhraním stylovaným přes CSS.
- **Deutsch** je otevřený (bublina s německou vlajkou) a vede na německou - **Deutsch** je otevřený (bublina s německou vlajkou) a vede na německou
učební cestu učební cestu
- **Správa počítačových sítí** je také otevřená (ikona Wi‑Fi) a vede na cestu - **Správa počítačových sítí** je také otevřená (ikona Wi‑Fi) a vede na cestu
s 30 jednotkami; **jednotky 1–26 jsou hratelné**, 27–30 jsou zamčené s 30 jednotkami; **jednotky 1–27 jsou hratelné**, 28–30 jsou zamčené
placeholdery placeholdery
- **Technické vybavení** je otevřené (ikona čipu) a vede na cestu - **Technické vybavení** je otevřené (ikona čipu) a vede na cestu
s 10 jednotkami; **jednotky 1–3 jsou hratelné**, 4–10 jsou zamčené s 10 jednotkami; **jednotky 1–3 jsou hratelné**, 4–10 jsou zamčené
@ -494,7 +495,7 @@ moderním GTK 4 rozhraním stylovaným přes CSS.
„Was siehst du?“, řazení vět, chybějící písmena) „Was siehst du?“, řazení vět, chybějící písmena)
- **Nápovědy a vzorové odpovědi** – u psaných / doplňovaných vět je hned - **Nápovědy a vzorové odpovědi** – u psaných / doplňovaných vět je hned
český význam; po kontrole se ukáže i správná německá věta český význam; po kontrole se ukáže i správná německá věta
- **Cesta počítačových sítí** – šestadvacet odemčených jednotek (snímky + cvičení): - **Cesta počítačových sítí** – sedmadvacet odemčených jednotek (snímky + cvičení):
1. **Výpočet IP adres** – 4 snímky VLSM a čtyři interaktivní úlohy 1. **Výpočet IP adres** – 4 snímky VLSM a čtyři interaktivní úlohy
(prefix, síť, broadcast, rozsah uzlů) s kontrolou a „ukázat řešení“ (prefix, síť, broadcast, rozsah uzlů) s kontrolou a „ukázat řešení“
2. Základní pojmy a rozdělení sítí – snímky + kvíz 2. Základní pojmy a rozdělení sítí – snímky + kvíz
@ -521,7 +522,8 @@ moderním GTK 4 rozhraním stylovaným přes CSS.
23. ICMP – snímky + kvíz 23. ICMP – snímky + kvíz
24. ARP – snímky + kvíz 24. ARP – snímky + kvíz
25. TCP a UDP – snímky + kvíz 25. TCP a UDP – snímky + kvíz
26. Aplikační protokoly – snímky + kvíz 26. Aplikační protokoly – snímky + kvíz
27. Bezdrátové sítě – snímky + kvíz
Postup u sítí se ukládá do `progress/net.conf` (příznak na jednotku); Postup u sítí se ukládá do `progress/net.conf` (příznak na jednotku);
dokončené jednotky mají fajfku na cestě a počítají se ve Statistikách dokončené jednotky mají fajfku na cestě a počítají se ve Statistikách
- **Cesta technického vybavení** – tři odemčené jednotky (snímky + kvíz): - **Cesta technického vybavení** – tři odemčené jednotky (snímky + kvíz):
@ -742,10 +744,10 @@ Po spuštění se zobrazí úvodní obrazovka. Odtud:
4. Otevřete **"Neue Freunde"** (jednotka 1), **"Aus aller Welt"** (2) nebo 4. Otevřete **"Neue Freunde"** (jednotka 1), **"Aus aller Welt"** (2) nebo
**"Bei uns zu Hause"** (3) a vyberte bublinu cvičení. Jednotky 2 a 3 jdou **"Bei uns zu Hause"** (3) a vyberte bublinu cvičení. Jednotky 2 a 3 jdou
otevřít i bez dokončení předchozích. otevřít i bez dokončení předchozích.
5. Na síťové cestě jsou otevřené jednotky **1–26**. Jednotka 1 (**Výpočet IP 5. Na síťové cestě jsou otevřené jednotky **1–27**. Jednotka 1 (**Výpočet IP
adres**) má 4 snímky VLSM a pak 4 interaktivní úlohy s kontrolou / adres**) má 4 snímky VLSM a pak 4 interaktivní úlohy s kontrolou /
„ukázat řešení“. Jednotky 2–26 mají snímky teorie a kvíz s výběrem „ukázat řešení“. Jednotky 2–27 mají snímky teorie a kvíz s výběrem
(od základních pojmů po aplikační protokoly). Jednotky 27–30 zůstávají zamčené. (od základních pojmů po bezdrátové sítě). Jednotky 28–30 zůstávají zamčené.
6. Na cestě technického vybavení jsou otevřené jednotky **1–3** (architektura / 6. Na cestě technického vybavení jsou otevřené jednotky **1–3** (architektura /
von Neumann, historie generací, bit a byte), každá se snímky a kvízem. von Neumann, historie generací, bit a byte), každá se snímky a kvízem.
Jednotky 4–10 zůstávají zamčené. Jednotky 4–10 zůstávají zamčené.
@ -789,8 +791,8 @@ exercise_u1.c cvičení jednotky 1 („Neue Freunde“)
exercise_u2.c cvičení jednotky 2 („Aus aller Welt“) exercise_u2.c cvičení jednotky 2 („Aus aller Welt“)
exercise_u3.c cvičení jednotky 3 („Bei uns zu Hause“) exercise_u3.c cvičení jednotky 3 („Bei uns zu Hause“)
settings.c panel nastavení (režim, téma, jazyk) settings.c panel nastavení (režim, téma, jazyk)
net.c cesta počítačových sítí (30 uzlů), jednotky 1–26 net.c cesta počítačových sítí (30 uzlů), jednotky 1–27
(1: VLSM cvičení; 2–26: kvízy s výběrem) (1: VLSM cvičení; 2–27: kvízy s výběrem)
hw.c cesta technického vybavení (10 uzlů), jednotky 1–3 hw.c cesta technického vybavení (10 uzlů), jednotky 1–3
(architektura, historie, bit/byte + kvízy) (architektura, historie, bit/byte + kvízy)
main.c vstupní bod aplikace a zapojení stránek main.c vstupní bod aplikace a zapojení stránek

24
i18n.c
View file

@ -353,6 +353,12 @@ const TrEntry tr_ui[] = {
"7 slides about ports and services, then a quiz."}, "7 slides about ports and services, then a quiz."},
{"net_ex26_title", "Kvíz: Aplikační protokoly", {"net_ex26_title", "Kvíz: Aplikační protokoly",
"Quiz: Application protocols"}, "Quiz: Application protocols"},
{"net_unit27", "Bezdrátové sítě",
"Wireless networks"},
{"net_unit27_sub", "8 snímků o družicích, Wi-Fi a zabezpečení a pak kvíz.",
"8 slides about satellites, Wi-Fi and security, then a quiz."},
{"net_ex27_title", "Kvíz: Bezdrátové sítě",
"Quiz: Wireless networks"},
{"net_quiz_intro", {"net_quiz_intro",
"Vyberte u každé otázky jednu správnou odpověď a stiskněte Zkontrolovat.", "Vyberte u každé otázky jednu správnou odpověď a stiskněte Zkontrolovat.",
"Choose one correct answer for each question and press Check."}, "Choose one correct answer for each question and press Check."},
@ -406,6 +412,8 @@ const TrEntry tr_ui[] = {
"Quiz on TCP and UDP"}, "Quiz on TCP and UDP"},
{"net_quiz26_head", "Kvíz k aplikačním protokolům", {"net_quiz26_head", "Kvíz k aplikačním protokolům",
"Quiz on application protocols"}, "Quiz on application protocols"},
{"net_quiz27_head", "Kvíz k bezdrátovým sítím",
"Quiz on wireless networks"},
{"net_slide_next", "Další", "Next"}, {"net_slide_next", "Další", "Next"},
{"net_slide_prev", "Zpět", "Back"}, {"net_slide_prev", "Zpět", "Back"},
{"net_slide_start", "Přejít na cvičení", "Go to the exercise"}, {"net_slide_start", "Přejít na cvičení", "Go to the exercise"},
@ -808,6 +816,22 @@ const TrEntry tr_content[] = {
"SSH 22, DNS 53"}, "SSH 22, DNS 53"},
{"MySQL 3306, RDP 3389", NULL, {"MySQL 3306, RDP 3389", NULL,
"MySQL 3306, RDP 3389"}, "MySQL 3306, RDP 3389"},
{"Geostacionární družice ~36 000 km", NULL,
"Geostationary satellites ~36,000 km"},
{"Družice: zpoždění stovky ms", NULL,
"Satellites: hundreds of ms delay"},
{"VSAT: jen terminál ↔ hub", NULL,
"VSAT: only terminal ↔ hub"},
{"Mikrovlny: přímá viditelnost ~50 km", NULL,
"Microwaves: line of sight ~50 km"},
{"STA komunikují přes AP", NULL,
"STAs communicate via an AP"},
{"Wi-Fi 6 (ax): OFDMA", NULL,
"Wi-Fi 6 (ax): OFDMA"},
{"WEP prolomen – nepoužívat", NULL,
"WEP is broken – do not use"},
{"Používej WPA2/WPA3 + AES", NULL,
"Use WPA2/WPA3 + AES"},
{"čtrnáct", NULL, "fourteen"}, {"čtrnáct", NULL, "fourteen"},
{"sedmnáct", NULL, "seventeen"}, {"sedmnáct", NULL, "seventeen"},
{"dvacet", NULL, "twenty"}, {"dvacet", NULL, "twenty"},

1
main.c
View file

@ -272,6 +272,7 @@ void activate(GtkApplication *app, gpointer user_data) {
{"netunit24", "netex24", build_net_unit24_page, build_net_unit24_exercise_page}, {"netunit24", "netex24", build_net_unit24_page, build_net_unit24_exercise_page},
{"netunit25", "netex25", build_net_unit25_page, build_net_unit25_exercise_page}, {"netunit25", "netex25", build_net_unit25_page, build_net_unit25_exercise_page},
{"netunit26", "netex26", build_net_unit26_page, build_net_unit26_exercise_page}, {"netunit26", "netex26", build_net_unit26_page, build_net_unit26_exercise_page},
{"netunit27", "netex27", build_net_unit27_page, build_net_unit27_exercise_page},
}; };
for (guint i = 0; i < G_N_ELEMENTS(net_pages); i++) { for (guint i = 0; i < G_N_ELEMENTS(net_pages); i++) {

View file

@ -75,7 +75,8 @@
#define NET24_SLIDES 5 #define NET24_SLIDES 5
#define NET25_SLIDES 6 #define NET25_SLIDES 6
#define NET26_SLIDES 7 #define NET26_SLIDES 7
#define NET_LESSONS 26 #define NET27_SLIDES 8
#define NET_LESSONS 27
#define HW_UNITS 10 #define HW_UNITS 10
#define HW_LESSONS 3 #define HW_LESSONS 3
#define HW_SLIDES 3 #define HW_SLIDES 3
@ -1115,6 +1116,7 @@ GtkWidget *build_net_unit23_page(void);
GtkWidget *build_net_unit24_page(void); GtkWidget *build_net_unit24_page(void);
GtkWidget *build_net_unit25_page(void); GtkWidget *build_net_unit25_page(void);
GtkWidget *build_net_unit26_page(void); GtkWidget *build_net_unit26_page(void);
GtkWidget *build_net_unit27_page(void);
GtkWidget *net_qz_combo(void); GtkWidget *net_qz_combo(void);
void net_qz_set_prefix(GtkComboBoxText *c, int pfx); void net_qz_set_prefix(GtkComboBoxText *c, int pfx);
int net_qz_prefix(GtkComboBoxText *c); int net_qz_prefix(GtkComboBoxText *c);
@ -1154,6 +1156,7 @@ GtkWidget *build_net_unit23_exercise_page(void);
GtkWidget *build_net_unit24_exercise_page(void); GtkWidget *build_net_unit24_exercise_page(void);
GtkWidget *build_net_unit25_exercise_page(void); GtkWidget *build_net_unit25_exercise_page(void);
GtkWidget *build_net_unit26_exercise_page(void); GtkWidget *build_net_unit26_exercise_page(void);
GtkWidget *build_net_unit27_exercise_page(void);
void activate(GtkApplication *app, gpointer user_data); void activate(GtkApplication *app, gpointer user_data);
int main(int argc, char **argv); int main(int argc, char **argv);

140
net.c
View file

@ -5,7 +5,7 @@
NetLesson net_lessons[NET_LESSONS] = { NetLesson net_lessons[NET_LESSONS] = {
/* UI unit N maps to lesson content: unit 1 = IP/VLSM (extra); /* UI unit N maps to lesson content: unit 1 = IP/VLSM (extra);
* units 2–26 = source topics (Základní pojmy … aplikační protokoly). */ * units 2–27 = source topics (Základní pojmy … bezdrátové sítě). */
{ .n_slides = NET_SLIDES, .unit_page = "netunit1", .ex_page = "netex1" }, { .n_slides = NET_SLIDES, .unit_page = "netunit1", .ex_page = "netex1" },
{ .n_slides = NET2_SLIDES, .unit_page = "netunit2", .ex_page = "netex2" }, { .n_slides = NET2_SLIDES, .unit_page = "netunit2", .ex_page = "netex2" },
{ .n_slides = NET3_SLIDES, .unit_page = "netunit3", .ex_page = "netex3" }, { .n_slides = NET3_SLIDES, .unit_page = "netunit3", .ex_page = "netex3" },
@ -32,6 +32,7 @@ NetLesson net_lessons[NET_LESSONS] = {
{ .n_slides = NET24_SLIDES, .unit_page = "netunit24", .ex_page = "netex24" }, { .n_slides = NET24_SLIDES, .unit_page = "netunit24", .ex_page = "netex24" },
{ .n_slides = NET25_SLIDES, .unit_page = "netunit25", .ex_page = "netex25" }, { .n_slides = NET25_SLIDES, .unit_page = "netunit25", .ex_page = "netex25" },
{ .n_slides = NET26_SLIDES, .unit_page = "netunit26", .ex_page = "netex26" }, { .n_slides = NET26_SLIDES, .unit_page = "netunit26", .ex_page = "netex26" },
{ .n_slides = NET27_SLIDES, .unit_page = "netunit27", .ex_page = "netex27" },
}; };
void net_paragraph(GtkWidget *box, const char *text) { void net_paragraph(GtkWidget *box, const char *text) {
@ -475,7 +476,7 @@ void net_add_node(GtkFixed *fixed, int index) {
"net_unit11", "net_unit12", "net_unit13", "net_unit14", "net_unit15", "net_unit11", "net_unit12", "net_unit13", "net_unit14", "net_unit15",
"net_unit16", "net_unit17", "net_unit18", "net_unit19", "net_unit20", "net_unit16", "net_unit17", "net_unit18", "net_unit19", "net_unit20",
"net_unit21", "net_unit22", "net_unit23", "net_unit24", "net_unit25", "net_unit21", "net_unit22", "net_unit23", "net_unit24", "net_unit25",
"net_unit26" "net_unit26", "net_unit27"
}; };
card = gtk_button_new(); card = gtk_button_new();
@ -2248,6 +2249,96 @@ GtkWidget *build_net_unit26_page(void) {
slides, NET26_SLIDES); slides, NET26_SLIDES);
} }
GtkWidget *build_net_unit27_page(void) {
static const NetSlide slides[NET27_SLIDES] = {
{
"1 / 8 • Úvod", "Bezdrátové sítě",
NULL,
{
"Patří sem hlavně: družicové, mikrovlnné a optické spoje.",
"Dále Wi-Fi (LAN), WiMAX/LTE (MAN/WAN) a další.",
NULL,
},
},
{
"2 / 8 • Družice", "Geostacionární spoje",
NULL,
{
"Geostacionární družice: ~36 000 km, stále nad stejným bodem.",
"Pasivní odrážejí; aktivní mají transpondéry (převod + zisk).",
"C-band ~6/4 GHz; KU-band 12–14 GHz (menší antény).",
"Nevýhoda: zpoždění ~250–300 ms (RTT až ~600 ms).",
NULL,
},
},
{
"3 / 8 • VSAT", "Přístup a topologie",
NULL,
{
"Bod–bod, broadcast (TV) i multiple access.",
"VSAT: terminály + centrální hub.",
"Komunikace jen terminál ↔ hub (ne přímo mezi terminály).",
NULL,
},
},
{
"4 / 8 • Mikrovlny", "Pozemní spoje",
"Tip: přímá viditelnost",
{
"Frekvence 1–12 GHz, směrování parabolou, malý rozptyl.",
"Dosah typicky do ~50 km; retranslační stanice.",
"Troposférické spoje: odraz ve ~16 km, dosah až ~500 km.",
NULL,
},
},
{
"5 / 8 • Wi-Fi pojmy", "AP, BSS, ESS",
NULL,
{
"AP = přístupový bod; STA komunikují přes AP (ne přímo).",
"BSS = stanice v buňce BSA; ESS = více buněk přes DS.",
"Roaming při překrytí; ad-hoc = P2P bez AP; hotspot = Wi-Fi.",
"ESSID identifikuje síť při přístupu k AP.",
NULL,
},
},
{
"6 / 8 • Standardy", "802.11 a … ax",
NULL,
{
"b: 11 Mb/s, 2,4 GHz; a/g: 54 Mb/s; n: MIMO, až 600 Mb/s.",
"ac (Wi-Fi 5): 256-QAM, široké kanály; ax (Wi-Fi 6): OFDMA.",
"OFDM: mnoho ortogonálních subnosných v kanálu.",
NULL,
},
},
{
"7 / 8 • Zabezpečení", "WEP → WPA3",
NULL,
{
"WEP: RC4, krátký IV – prolomeno (2001), nepoužívat.",
"WPA: TKIP; WPA2: AES (doporučený základ).",
"WPA3: SAE místo PSK, silnější ochrana hesla.",
"802.1X/EAP: ověření klienta přes AP (RADIUS).",
NULL,
},
},
{
"8 / 8 • Shrnutí", "Dosahy a další",
NULL,
{
"PAN <10 m (Bluetooth); LAN = Wi-Fi; MAN = WiMAX.",
"WAN/mobilita: 802.16e, LTE; licencovaná pásma = méně rušení.",
"Používej WPA2/WPA3 + AES, ne WEP.",
NULL,
},
},
};
return build_net_unit_page(&net_lessons[26], "net_unit27", "net_unit27_sub",
slides, NET27_SLIDES);
}
/* Solutions below are the canonical "largest subnet first, in order A–D" /* Solutions below are the canonical "largest subnet first, in order A–D"
* allocation. Scenario 3 does not fit into a /24 as written, which is why * allocation. Scenario 3 does not fit into a /24 as written, which is why
* its "solution" explains that instead. */ * its "solution" explains that instead. */
@ -3769,3 +3860,48 @@ GtkWidget *build_net_unit26_exercise_page(void) {
(int)G_N_ELEMENTS(net26_qs)); (int)G_N_ELEMENTS(net26_qs));
} }
const ChoiceQ net27_qs[] = {
{"Geostacionární družice létají asi:",
{"36 000 km nad Zemí", "16 km v troposféře", "50 km nad povrchem",
"Jen v nízké orbitě LEO"}, 4, 0},
{"Hlavní nevýhoda družicového spoje je:",
{"Velké zpoždění (~250–300 ms)", "Žádný broadcast",
"Jen kabelové médium", "Absence portů"}, 4, 0},
{"V síti VSAT komunikace probíhá:",
{"Jen mezi terminálem a hubem", "Přímo mezi dvěma terminály",
"Jen přes ARP", "Jen přes WEP"}, 4, 0},
{"Mikrovlnný spoj typicky vyžaduje:",
{"Přímou viditelnost (dosah ~50 km)", "Jen metalický kabel",
"Jen port 80", "Jen WEP klíč"}, 4, 0},
{"V infrastruktuře Wi-Fi stanice (STA):",
{"Komunikují přes AP, ne přímo mezi sebou",
"Vždy jen ad-hoc bez AP", "Nepoužívají ESSID",
"Běží jen na 36 000 km"}, 4, 0},
{"802.11ax (Wi-Fi 6) přináší zejména:",
{"OFDMA a vysokou kapacitu", "Jen WEP", "Jen C-band 4/6 GHz",
"Jen troposférický odraz"}, 4, 0},
{"WEP je dnes:",
{"Prolomený a nevhodný", "Nejbezpečnější volba",
"Totéž co WPA3-SAE", "Povinný od roku 2006"}, 4, 0},
{"Doporučené zabezpečení Wi-Fi je:",
{"WPA2/WPA3 s AES (ne WEP)", "Jen Open system WEP",
"Jen Shared key WEP", "Bez hesla vždy"}, 4, 0},
};
const char *net27_hints[] = {
"Geostacionární družice ~36 000 km",
"Družice: zpoždění stovky ms",
"VSAT: jen terminál ↔ hub",
"Mikrovlny: přímá viditelnost ~50 km",
"STA komunikují přes AP",
"Wi-Fi 6 (ax): OFDMA",
"WEP prolomen – nepoužívat",
"Používej WPA2/WPA3 + AES",
};
GtkWidget *build_net_unit27_exercise_page(void) {
return build_net_mcq_page(26, "netunit27", "net_ex27_title", "net_quiz27_head",
net27_qs, net27_hints,
(int)G_N_ELEMENTS(net27_qs));
}