C Temelleri
Function'lar ve Array'ler
Fonksiyonlar ve array’ler - BPF’te fonksiyon çağrıları özel kurallara tabidir.
1.6 Fonksiyonlar ve Storage Class’lar
- Fonksiyon tanımlama ve çağırma
- Parametre geçirme (by value, by pointer)
- Return değerleri
- Storage class’lar:
auto,register,static,extern
BPF’te kullanımı:
static-> file-scope visibility__always_inline-> zorunlu inliningextern-> map referansı (userspace’ten)
static __always_inline BPF’te zorunludur - normal fonksiyon çağrıları yapılmaz (kernel 4.16+ bpf-to-bpf çağrıları hariç).
// YANLIŞ (BPF'te çalışmaz)
int parse_header(void *data) { ... }
// DOĞRU
static __always_inline int parse_header(void *data) { ... }
eBPFHub: Tüm alıştırmalar static __always_inline helper fonksiyonlar kullanır.
xdp-tutorial’da bakın: common/parsing_helpers.h - tüm parse_* fonksiyonları inline’dır.
1.7 Array’ler
- Array tanımlama ve başlatma
- Index erişimi
- Çok boyutlu array’ler
- Array’ler ve pointer’lar arasındaki ilişki
BPF’te: MAC adresleri (__u8[6]), IP adresleri (__u8[4] veya __u8[16]), syscall argüman array’leri (args[6]).
eBPFHub: “Reading syscall arrays” alıştırmasında char **argv pointer array traversal ve args[6] syscall argüman array’ini göreceksiniz.