C Temelleri
Control Flow ve Loop'lar
Control flow ve loop’lar - BPF’teki loop kısıtlamaları özellikle önemlidir.
1.4 Control Flow
if/else if/elseswitch/case- Ternary operator (
?:)
eBPFHub: Tüm alıştırmalarda filtreleme için if/else kullanacaksınız - PID kontrolleri, syscall numarası eşleştirme, NULL check sonrası dallanma.
xdp-tutorial’da bakın: packet01-parsing/xdp_prog_kern.c - ETH_P_IP vs ETH_P_IPV6 kontrolü.
1.5 Loop’lar
for,while,do-whilebreak,continue- Nested loop’lar
BPF Kısıtlaması: Unbounded loop’lar yasaklanmıştır! Verifier bunları reddeder. Bounded loop veya #pragma unroll kullanın.
// BPF'te ÇALIŞMAZ:
while (1) { ... }
// DOĞRU: Fixed-bound loop
#pragma unroll
for (int i = 0; i < 10; i++) {
if (condition) break;
}
eBPFHub: “DNS packet parsing” alıştırmasında bounded loop pratiği yapacaksınız - #pragma unroll ile DNS label’larını parse etme:
#pragma unroll
for (int i = 0; i < 10; i++) { // Max 10 label
u8 len = buf[pos++];
if (len == 0) break;
#pragma unroll
for (int j = 0; j < 63; j++) {
if (j >= len) break;
domain[out++] = buf[pos++];
}
}
xdp-tutorial’da bakın: common/parsing_helpers.h:104-118 - VLAN parsing (#pragma unroll ile).
Okuma: