eBPF實質上是一個內核注入技術
- 用戶態可以用C來寫運行的代碼,再通過一個Clang&LLVM的編譯器將C代碼編譯成BPF目標碼;
- 用戶態通過系統調用bpf()將BPF目標碼注入到內核當中,並創建必要的eBPF-maps。eBPF具有用作socket filter,kprobe處理器,流量控制調度,流量控制操作,tracepoint處理,eXpress Data Path(XDP),性能監測,cgroup限制,輕量級tunnel的程序類型。
- 將加載的程序attach到系統中。根據不同的程序類型attach到不同的內核系統中。程序運行的時候,啟動狀態並且開始過濾,分析或者捕獲信
對於bpf系統調用內核實現可以參考:https://www.csdn.net/gather_2d/MtjaQg2sMzIwMy1ibG9n.html kernel/bpf/syscall.c為
bpf的系統調用
說正題:Netronome的Jakub Kicinski和Nic Viljoen發表了標題為“eBPF / XDP硬件卸載到SmartNIC”
- 什么是XDP
- 即eXpress Data Path,它其實是位於網卡驅動程序里的一個快速處理數據包的HOOK點,最顯而易見的是,可以在如此低的層驅動鏈路層面上把數據包丟棄或者直接處理掉。如果面臨DDoS攻擊,采用這種方式的話,數據包就沒有必要上升到Netfilter層面再被丟棄了。也就是XDP允許數據包在進入Linux協議棧之前就能被處理,沒必要到tcp ip 協議棧處理。
- 怎樣知道這個報文要丟棄還是直接處理完回復再或者是到tcpip協議棧處理呢?
- 答案就是:eBPF!這相當於在網卡驅動層面運行了一個eBPF程序
是不是發現ebpf這個hook想干嘛就干嘛???簡直是為所欲為!!!
https://lwn.net/Articles/800606/ 目前gcc 還不支持ebpf不過很快應該就可以了。
先編寫代碼 編寫完在上傳,順便 編寫自己的網絡事件庫
等着。。。。。。。。。。。。。。。。
今天寫了一部分。。
2020-04-25 記錄