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 inlining
  • extern -> 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.