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 / else
  • switch / 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-while
  • break, 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: