เจเจเจธเจชเฉเจฐเฉเจธ เจกเฉเจเจพ เจชเจพเจฅ (XDP) เจคเจเจจเจพเจฒเฉเจเฉ เจฒเฉเจจเจเจธ เจเฉฐเจเจฐเจซเฉเจธ เจเฉฑเจคเฉ เจชเฉเจเฉเจ เจเจฐเจจเจฒ เจจเฉเจเจตเจฐเจ เจธเจเฉเจ เจตเจฟเฉฑเจ เจฆเจพเจเจฒ เจนเฉเจฃ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ เจเฉเจฐเฉเจซเจฟเจ เจฆเฉ เจฎเจจเจฎเจพเจจเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเฉ เจเจเจฟเจ เจฆเจฟเฉฐเจฆเฉ เจนเฉเฅค XDP เจเจชเจฒเฉเจเฉเจธเจผเจจ - DDoS เจนเจฎเจฒเจฟเจเจ (CloudFlare), เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจซเจฟเจฒเจเจฐ, เจ เฉฐเจเฉเฉ เจธเฉฐเจเฉเจฐเจนเจฟ (Netflix) เจคเฉเจ เจธเฉเจฐเฉฑเจเจฟเจเฅค XDP เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจจเฉเฉฐ eBPF เจตเจฐเจเฉเจ เจฒ เจฎเจธเจผเฉเจจ เจฆเฉเจเจฐเจพ เจเจฒเจพเจเจ เจเจพเจเจฆเจพ เจนเฉ, เจเจธเจฒเจ เจซเจฟเจฒเจเจฐ เจฆเฉ เจเจฟเจธเจฎ 'เจคเฉ เจจเจฟเจฐเจญเจฐ เจเจฐเจฆเฉ เจนเฉเจ, เจเจนเจจเจพเจ เจฆเฉ เจเฉเจก เจ เจคเฉ เจเจชเจฒเจฌเจง เจเจฐเจจเจฒ เจซเฉฐเจเจธเจผเจจเจพเจ เจฆเฉเจตเจพเจ 'เจคเฉ เจชเจพเจฌเฉฐเจฆเฉเจเจ เจนเจจเฅค
เจฒเฉเจ เจฆเจพ เจเจฆเฉเจธเจผ XDP 'เจคเฉ เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจธเจฎเฉฑเจเจฐเฉเจเจ เจฆเฉเจเจ เจเจฎเฉเจเจ เจจเฉเฉฐ เจชเฉเจฐเจพ เจเจฐเจจเจพ เจนเฉเฅค เจชเจนเจฟเจฒเจพเจ, เจเจน เจคเจฟเจเจฐ เจเฉเจก เจชเฉเจฐเจฆเจพเจจ เจเจฐเจฆเฉ เจนเจจ เจเฉ เจคเฉเจฐเฉฐเจค XDP เจฆเฉเจเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจจเฉเฉฐ เจฌเจพเจเจชเจพเจธ เจเจฐเจฆเจพ เจนเฉ: เจชเฉเจธเจผเจเฉเจเจฐเจจ เจฒเจ เจคเจฟเจเจฐ เจเจพเจ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจชเฉเจฆเจพ เจเจฐเจจ เจฒเจ เจฌเจนเฉเจค เจธเจงเจพเจฐเจจเฅค เจเจฆเฉเจ เจคเฉเจธเฉเจ เจฌเจพเจ เจฆ เจตเจฟเฉฑเจ เจธเจเฉเจฐเฉเจ เจคเฉเจ เจเจชเจฃเจพ เจเฉเจก เจฒเจฟเจเจฃ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเจฆเฉ เจนเฉ, เจคเจพเจ เจเจธ เจเฉฑเจฒ เจฆเฉ เจเฉเจ เจธเจฎเจ เจจเจนเฉเจ เจนเฉเฉฐเจฆเฉ เจเจฟ เจเจฎ เจเจฒเจคเฉเจเจ เจจเจพเจฒ เจเฉ เจเจฐเจจเจพ เจนเฉเฅค เจฆเฉเจเจพ, เจเจน VM เจ เจคเฉ เจนเจพเจฐเจกเจตเฉเจ เจฐ เจคเฉเจ เจฌเจฟเจจเจพเจ XDP เจจเฉเฉฐ เจธเจฅเจพเจจเจ เจคเฉเจฐ 'เจคเฉ เจเฉเจธเจ เจเจฐเจจ เจฆเฉ เจคเจฐเฉเจเจฟเจเจ เจจเฉเฉฐ เจเจตเจฐ เจจเจนเฉเจ เจเจฐเจฆเจพ, เจเจธ เจคเฉฑเจฅ เจฆเฉ เจฌเจพเจตเจเฉเจฆ เจเจฟ เจเจนเจจเจพเจ เจฆเฉเจเจ เจเจชเจฃเฉเจเจ เจเจฎเฉเจเจ เจนเจจเฅค เจเฉเจเจธเจ เจเจนเจจเจพเจ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฐเจพเจ เจฒเจ เจนเฉ เจเฉ เจจเฉเจเจตเจฐเจ เจ เจคเฉ เจฒเฉเจจเจเจธ เจคเฉเจ เจเจพเจฃเฉ เจนเจจ เจเฉ XDP เจ เจคเฉ eBPF เจตเจฟเฉฑเจ เจฆเจฟเจฒเจเจธเจชเฉ เจฐเฉฑเจเจฆเฉ เจนเจจเฅค
เจเจธ เจนเจฟเฉฑเจธเฉ เจตเจฟเฉฑเจ, เจ
เจธเฉเจ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจ เจธเจฎเจเจพเจเจเฉ เจเจฟ XDP เจซเจฟเจฒเจเจฐ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจ
เจธเฉเจเจฌเจฒ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ เจ
เจคเฉ เจเจธเจจเฉเฉฐ เจเจฟเจตเฉเจ เจเฉเจธเจ เจเจฐเจจเจพ เจนเฉ, เจซเจฟเจฐ เจ
เจธเฉเจ เจชเฉเจเฉเจ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจชเฉฑเจงเจฐ 'เจคเฉ เจเจพเจฃเฉ-เจชเจเจพเจฃเฉ SYN เจเฉเจเฉเจเจผ เจตเจฟเจงเฉ เจฆเจพ เจเฉฑเจ เจธเจงเจพเจฐเจจ เจธเฉฐเจธเจเจฐเจฃ เจฒเจฟเจเจพเจเจเฉเฅค เจเจฆเฉเจ เจคเฉฑเจ เจ
เจธเฉเจ "เจตเจพเจเจ เจฒเจฟเจธเจ" เจจเจนเฉเจ เจฌเจฃเจพเจเจเจฆเฉ
เจชเฉเจฐเจฎเจพเจฃเจฟเจค เจเจพเจนเจ, เจเจพเจเจเจเจฐ เจฐเฉฑเจเฉ เจ
เจคเฉ เจซเจฟเจฒเจเจฐ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจเจฐเฉ - เจเจพเจซเจผเฉ เจฒเฉเจเฅค
เจ เจธเฉเจ C เจตเจฟเฉฑเจ เจฒเจฟเจเจพเจเจเฉ - เจเจน เจซเฉเจธเจผเจจเฉเจฌเจฒ เจจเจนเฉเจ เจนเฉ, เจชเจฐ เจตเจฟเจนเจพเจฐเจ เจนเฉ. เจธเจพเจฐเฉ เจเฉเจก เจ เฉฐเจค เจตเจฟเฉฑเจ เจฒเจฟเฉฐเจ 'เจคเฉ GitHub 'เจคเฉ เจเจชเจฒเจฌเจง เจนเจจ เจ เจคเฉ เจฒเฉเจ เจตเจฟเฉฑเจ เจฆเฉฑเจธเฉ เจเจ เจเจฆเจฎเจพเจ เจฆเฉ เจ เจจเฉเจธเจพเจฐ เจเจฎเจฟเจเจพเจ เจตเจฟเฉฑเจ เจตเฉฐเจกเจฟเจ เจเจฟเจ เจนเฉเฅค
เจฌเฉเจฆเจพเจ เจตเจพ เจฒเฉเจ เจฆเฉ เจเฉเจฐเจธ เจตเจฟเฉฑเจ, DDoS เจนเจฎเจฒเจฟเจเจ เจจเฉเฉฐ เจฆเฉเจฐ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจฎเจฟเฉฐเจจเฉ-เจนเฉฑเจฒ เจตเจฟเจเจธเจฟเจค เจเฉเจคเจพ เจเจพเจตเฉเจเจพ, เจเจฟเจเจเจเจฟ เจเจน XDP เจ เจคเฉ เจฎเฉเจฐเฉ เจเฉเจคเจฐ เจฒเจ เจเฉฑเจ เจฏเจฅเจพเจฐเจฅเจตเจพเจฆเฉ เจเฉฐเจฎ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจฎเฉเฉฑเจ เจเฉเจเจพ เจคเจเจจเจพเจฒเฉเจเฉ เจจเฉเฉฐ เจธเจฎเจเจฃเจพ เจนเฉ, เจเจน เจฐเฉเจกเฉเจฎเฉเจก เจธเฉเจฐเฉฑเจเจฟเจ เจฌเจฃเจพเจเจฃ เจฒเจ เจเฉฑเจ เจเจพเจเจก เจจเจนเฉเจ เจนเฉ. เจเจฟเจเจเฉเจฐเจฟเจ เจฒ เจเฉเจก เจจเฉเฉฐ เจ เจจเฉเจเฉเจฒเจฟเจค เจจเจนเฉเจ เจเฉเจคเจพ เจเจฟเจ เจนเฉ เจ เจคเฉ เจเฉเจ เจธเฉเจเจฎเจคเจพเจตเจพเจ เจจเฉเฉฐ เจเฉฑเจก เจฆเจฟเฉฑเจคเจพ เจเจฟเจ เจนเฉเฅค
XDP เจฆเฉ เจเฉฑเจ เจธเฉฐเจเฉเจช เจเจพเจฃเจเจพเจฐเฉ
เจฎเฉเจ เจธเจฟเจฐเจซเจผ เจฎเฉเฉฑเจ เจจเฉเจเจคเฉ เจฆเฉฑเจธเจพเจเจเจพ เจคเจพเจ เจเจฟ เจฆเจธเจคเจพเจตเฉเจเจผเจพเจ เจ เจคเฉ เจฎเฉเจเฉเจฆเจพ เจฒเฉเจเจพเจ เจฆเฉ เจจเจเจฒ เจจเจพ เจเฉเจคเฉ เจเจพ เจธเจเฉเฅค
เจเจธ เจฒเจ, เจซเจฟเจฒเจเจฐ เจเฉเจก เจเจฐเจจเจฒ เจตเจฟเฉฑเจ เจฒเฉเจก เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค เจซเจฟเจฒเจเจฐ เจเจเจฃ เจตเจพเจฒเฉ เจชเฉเจเฉเจเจพเจ เจจเฉเฉฐ เจชเจพเจธ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค เจจเจคเฉเจเฉ เจตเจเฉเจ, เจซเจฟเจฒเจเจฐ เจจเฉเฉฐ เจเฉฑเจ เจซเฉเจธเจฒเจพ เจฒเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ: เจชเฉเจเฉเจ เจจเฉเฉฐ เจเจฐเจจเจฒ เจตเจฟเฉฑเจ เจญเฉเจเจฃ เจฒเจ (XDP_PASS
), เจกเจฐเจพเจช เจชเฉเจเฉเจ (XDP_DROP
) เจเจพเจ เจเจธเจจเฉเฉฐ เจตเจพเจชเจธ เจญเฉเจเฉ (XDP_TX
). เจซเจฟเจฒเจเจฐ เจชเฉเจเฉเจ เจจเฉเฉฐ เจฌเจฆเจฒ เจธเจเจฆเจพ เจนเฉ, เจเจน เจเจธ เจฒเจ เจเจพเจธ เจคเฉเจฐ 'เจคเฉ เจธเฉฑเจ เจนเฉ XDP_TX
. เจคเฉเจธเฉเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจจเฉเฉฐ เจตเฉ เจเจฐเฉเจธเจผ เจเจฐ เจธเจเจฆเฉ เจนเฉ (XDP_ABORTED
) เจ
เจคเฉ เจชเฉเจเฉเจ เจเฉฑเจกเฉ, เจชเจฐ เจเจน เจธเจฎเจพเจจ เจนเฉ assert(0)
- เจกเฉเจฌเฉฑเจเจฟเฉฐเจ เจฒเจเฅค
eBPF (เจเจเจธเจเฉเจเจกเจก เจฌเจฐเจเจฒเฉ เจชเฉเจเฉเจ เจซเจฟเจฒเจเจฐ) เจตเจฐเจเฉเจ เจฒ เจฎเจธเจผเฉเจจ เจจเฉเฉฐ เจเจพเจฃเจฌเฉเฉฑเจ เจเฉ เจธเจฐเจฒ เจฌเจฃเจพเจเจ เจเจฟเจ เจนเฉ เจคเจพเจ เจเจฟ เจเจฐเจจเจฒ เจเจน เจเจพเจเจ เจเจฐ เจธเจเฉ เจเจฟ เจเฉเจก เจฒเฉเจช เจจเจนเฉเจ เจนเฉ เจ เจคเฉ เจฆเฉเจเฉ เจฒเฉเจเจพเจ เจฆเฉ เจฏเจพเจฆเจฆเจพเจธเจผเจค เจจเฉเฉฐ เจจเฉเจเจธเจพเจจ เจจเจนเฉเจ เจชเจนเฉเฉฐเจเจพเจเจเจฆเจพ เจนเฉเฅค เจธเฉฐเจเจค เจชเจพเจฌเฉฐเจฆเฉเจเจ เจ เจคเฉ เจเจพเจเจเจพเจ:
- เจฒเฉเจชเจธ (เจตเจพเจชเจธ เจเจพเจฒ) เจฆเฉ เจฎเจจเจพเจนเฉ เจนเฉเฅค
- เจกเฉเจเจพ เจฒเจ เจเฉฑเจ เจธเจเฉเจ เจนเฉ, เจชเจฐ เจเฉเจ เจซเฉฐเจเจธเจผเจจ เจจเจนเฉเจ (เจธเจพเจฐเฉ C เจซเฉฐเจเจธเจผเจจ เจเจจเจฒเจพเจเจจ เจนเฉเจฃเฉ เจเจพเจนเฉเจฆเฉ เจนเจจ)เฅค
- เจธเจเฉเจ เจ เจคเฉ เจชเฉเจเฉเจ เจฌเจซเจฐ เจคเฉเจ เจฌเจพเจนเจฐ เจฎเฉเจฎเฉเจฐเฉ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจฆเฉ เจฎเจจเจพเจนเฉ เจนเฉเฅค
- เจเฉเจก เจฆเจพ เจเจเจพเจฐ เจธเฉเจฎเจค เจนเฉ, เจชเจฐ เจ เจญเจฟเจเจธ เจตเจฟเฉฑเจ เจเจน เจฌเจนเฉเจค เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจจเจนเฉเจ เจนเฉ.
- เจธเจฟเจฐเจซเจผ เจตเจฟเจธเจผเฉเจธเจผ เจเจฐเจจเจฒ เจซเฉฐเจเจธเจผเจจเจพเจ (eBPF เจธเจนเจพเจเจ) เจฆเฉ เจเจเจพเจเจผเจค เจนเฉเฅค
เจเฉฑเจ เจซเจฟเจฒเจเจฐ เจฆเจพ เจตเจฟเจเจพเจธ เจ เจคเฉ เจธเจฅเจพเจชเจจเจพ เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเจฟเจเจพเจ เจฆเจฟเฉฐเจฆเฉ เจนเฉ:
- เจธเจฐเฉเจค เจเฉเจก (เจเจฆเจพเจนเจฐเจจ เจฒเจ.
kernel.c
) เจตเจธเจคเฉ เจจเฉเฉฐ เจเฉฐเจชเจพเจเจฒ เจเจฐเจฆเจพ เจนเฉ (kernel.o
) eBPF เจตเจฐเจเฉเจ เจฒ เจฎเจธเจผเฉเจจ เจเจฐเจเฉเจเฉเจเจเจฐ เจฒเจเฅค เจ เจเจคเฉเจฌเจฐ 2019 เจคเฉฑเจ, eBPF เจจเฉเฉฐ เจเฉฐเจชเจพเจเจฒ เจเจฐเจจเจพ Clang เจฆเฉเจเจฐเจพ เจธเจฎเจฐเจฅเจฟเจค เจนเฉ เจ เจคเฉ GCC 10.1 เจตเจฟเฉฑเจ เจตเจพเจ เจฆเจพ เจเฉเจคเจพ เจเจฟเจ เจนเฉเฅค - เจเฉเจเจฐ เจเจธ เจเจฌเจเฉเจเจ เจเฉเจก เจตเจฟเฉฑเจ เจเจฐเจจเจฒ เจขเจพเจเจเฉ (เจเจฆเจพเจนเจฐเจฃ เจตเจเฉเจ, เจเฉเจฌเจฒ เจ เจคเฉ เจเจพเจเจเจเจฐเจพเจ เจฒเจ) เจเจพเจฒเจพเจ เจนเจจ, เจคเจพเจ เจเจนเจจเจพเจ เจฆเฉ ID เจฆเฉ เจฌเจเจพเจ เจเจผเฉเจฐเฉ เจนเจจ, เจฏเจพเจจเฉ, เจ เจเจฟเจนเฉ เจเฉเจก เจจเฉเฉฐ เจเจฒเจพเจเจ เจจเจนเฉเจ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจเจฐเจจเจฒ เจตเจฟเฉฑเจ เจฒเฉเจก เจเจฐเจจ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ, เจเจนเจจเจพเจ เจเจผเฉเจฐเฉ เจจเฉเฉฐ เจเจฐเจจเจฒ เจเจพเจฒเจพเจ (เจเฉเจก เจจเฉเฉฐ เจฒเจฟเฉฐเจ เจเจฐเฉ) เจฆเฉเจเจฐเจพ เจฌเจฃเจพเจ เจเจ เจเจพเจธ เจเจฌเจเฉเจเจ เจฆเฉ ID เจจเจพเจฒ เจฌเจฆเจฒเจฟเจ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค เจคเฉเจธเฉเจ เจเจน เจฌเจพเจนเจฐเฉ เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจจเจพเจฒ เจเจฐ เจธเจเจฆเฉ เจนเฉ, เจเจพเจ เจคเฉเจธเฉเจ เจเฉฑเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฒเจฟเจ เจธเจเจฆเฉ เจนเฉ เจเฉ เจเฉฑเจ เจเจพเจธ เจซเจฟเจฒเจเจฐ เจจเฉเฉฐ เจฒเจฟเฉฐเจ เจ เจคเฉ เจฒเฉเจก เจเจฐเฉเจเจพเฅค
- เจเจฐเจจเจฒ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฒเฉเจก เจนเฉเจฃ เจฆเฉ เจชเฉเจธเจผเจเฉ เจเจฐเจฆเจพ เจนเฉเฅค เจเจน เจเฉฑเจเจฐเจพเจ เจฆเฉ เจ เจฃเจนเฉเจเจฆ เจ เจคเฉ เจชเฉเจเฉเจ เจ เจคเฉ เจธเจเฉเจ เจธเฉเจฎเจพเจตเจพเจ เจคเฉเจ เจฌเจพเจนเจฐ เจจเจพ เจจเจฟเจเจฒเจฃ เจฆเฉ เจเจพเจเจ เจเจฐเจฆเจพ เจนเฉเฅค เจเฉเจเจฐ เจคเจธเจฆเฉเจเจเจฐเจคเจพ เจเจน เจธเจพเจฌเจค เจจเจนเฉเจ เจเจฐ เจธเจเจฆเจพ เจนเฉ เจเจฟ เจเฉเจก เจธเจนเฉ เจนเฉ, เจคเจพเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจจเฉเฉฐ เจ เจธเจตเฉเจเจพเจฐ เจเจฐ เจฆเจฟเฉฑเจคเจพ เจเจพเจเจฆเจพ เจนเฉ - เจเฉฑเจ เจจเฉเฉฐ เจเจธเจจเฉเฉฐ เจเฉเจธเจผ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค
- เจธเจซเจฒ เจคเจธเจฆเฉเจ เจคเฉเจ เจฌเจพเจ เจฆ, เจเจฐเจจเจฒ eBPF เจเจฐเจเฉเจเฉเจเจเจฐ เจเจฌเจเฉเจเจ เจเฉเจก เจจเฉเฉฐ เจธเจฟเจธเจเจฎ เจเจฐเจเฉเจเฉเจเจเจฐ เจฎเจธเจผเฉเจจ เจเฉเจก (เจธเจฟเจฐเจซเจผ เจธเจฎเฉเจ เจตเจฟเฉฑเจ) เจตเจฟเฉฑเจ เจเฉฐเจชเจพเจเจฒ เจเจฐเจฆเจพ เจนเฉเฅค
- เจชเฉเจฐเฉเจเจฐเจพเจฎ เจเฉฐเจเจฐเจซเฉเจธ เจจเจพเจฒ เจเฉเฉเจฟเจ เจนเฉเจเจ เจนเฉ เจ เจคเฉ เจชเฉเจเฉเจเจพเจ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจธเจผเฉเจฐเฉ เจเจฐเจฆเจพ เจนเฉเฅค
เจเจฟเจเจเจเจฟ XDP เจเจฐเจจเจฒ เจตเจฟเฉฑเจ เจเฉฑเจฒเจฆเจพ เจนเฉ, เจกเฉเจฌเฉฑเจเจฟเฉฐเจ เจเจฐเฉเจธ เจฒเฉเจเจธ เจฆเฉเจเจฐเจพ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ เจ เจคเฉ, เจ เจธเจฒ เจตเจฟเฉฑเจ, เจเจนเจจเจพเจ เจชเฉเจเฉเจเจพเจ เจฆเฉเจเจฐเจพ เจเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจซเจฟเจฒเจเจฐ เจเจฐเจฆเจพ เจนเฉ เจเจพเจ เจคเจฟเจเจฐ เจเจฐเจฆเจพ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, eBPF เจกเจพเจเจจเจฒเฉเจก เจเฉเจคเฉ เจเฉเจก เจจเฉเฉฐ เจธเจฟเจธเจเจฎ เจฒเจ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจฐเฉฑเจเจฆเจพ เจนเฉ, เจคเจพเจ เจเฉ เจคเฉเจธเฉเจ เจเจชเจฃเฉ เจธเจฅเจพเจจเจ เจฒเฉเจจเจเจธ 'เจคเฉ XDP เจจเจพเจฒ เจชเฉเจฐเจฏเฉเจ เจเจฐ เจธเจเฉเฅค
เจตเจพเจคเจพเจตเจฐเจฃ เจฆเฉ เจคเจฟเจเจฐเฉ
เจ เจธเฉเจเจฌเจฒเฉ
Clang eBPF เจเจฐเจเฉเจเฉเจเจเจฐ เจฒเจ เจธเจฟเฉฑเจงเฉ เจคเฉเจฐ 'เจคเฉ เจเจฌเจเฉเจเจ เจเฉเจก เจเจพเจฐเฉ เจจเจนเฉเจ เจเจฐ เจธเจเจฆเจพ เจนเฉ, เจเจธเจฒเจ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจตเจฟเฉฑเจ เจฆเฉ เจเจฆเจฎ เจนเจจ:
- เจธเฉ เจเฉเจก เจจเฉเฉฐ LLVM เจฌเจพเจเจเจเฉเจก เจตเจฟเฉฑเจ เจเฉฐเจชเจพเจเจฒ เจเจฐเฉ (
clang -emit-llvm
). - เจฌเจพเจเจเจเฉเจก เจจเฉเฉฐ eBPF เจเจฌเจเฉเจเจ เจเฉเจก เจตเจฟเฉฑเจ เจฌเจฆเจฒเฉ (
llc -march=bpf -filetype=obj
).
เจซเจฟเจฒเจเจฐ เจฒเจฟเจเจฃ เจตเฉเจฒเฉ, เจธเจนเจพเจเจ เจซเฉฐเจเจธเจผเจจเจพเจ เจ
เจคเฉ เจฎเฉเจเจฐเฉ เจตเจพเจฒเฉเจเจ เจเฉเจ เจซเจพเจเจฒเจพเจ เจเฉฐเจฎ เจเจเจฃเจเฉเจเจ KVER
). เจเจนเจจเจพเจ เจจเฉเฉฐ เจกเจพเจเจจเจฒเฉเจก เจเจฐเฉ helpers/
:
export KVER=v5.3.7
export BASE=https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/plain/tools/testing/selftests/bpf
wget -P helpers --content-disposition "${BASE}/bpf_helpers.h?h=${KVER}" "${BASE}/bpf_endian.h?h=${KVER}"
unset KVER BASE
เจเจฐเจ เจฒเฉเจจเจเจธ เจฒเจ เจฎเฉเจเจซเจพเจเจฒ (เจเจฐเจจเจฒ 5.3.7):
CLANG ?= clang
LLC ?= llc
KDIR ?= /lib/modules/$(shell uname -r)/build
ARCH ?= $(subst x86_64,x86,$(shell uname -m))
CFLAGS =
-Ihelpers
-I$(KDIR)/include
-I$(KDIR)/include/uapi
-I$(KDIR)/include/generated/uapi
-I$(KDIR)/arch/$(ARCH)/include
-I$(KDIR)/arch/$(ARCH)/include/generated
-I$(KDIR)/arch/$(ARCH)/include/uapi
-I$(KDIR)/arch/$(ARCH)/include/generated/uapi
-D__KERNEL__
-fno-stack-protector -O2 -g
xdp_%.o: xdp_%.c Makefile
$(CLANG) -c -emit-llvm $(CFLAGS) $< -o - |
$(LLC) -march=bpf -filetype=obj -o $@
.PHONY: all clean
all: xdp_filter.o
clean:
rm -f ./*.o
KDIR
เจเจฐเจจเจฒ เจธเจฟเจฐเจฒเฉเจเจพเจ เจฆเจพ เจฎเจพเจฐเจ เจฐเฉฑเจเจฆเจพ เจนเฉ, ARCH
- เจธเจฟเจธเจเจฎ เจเจฐเจเฉเจเฉเจเจเจฐ. เจชเจพเจฅ เจ
เจคเฉ เจเฉเจฒ เจกเจฟเจธเจเจฐเฉเจฌเจฟเจเจธเจผเจจ เจฆเฉ เจตเจฟเจเจเจพเจฐ เจฅเฉเฉเฉเจนเจพ เจตเฉฑเจ-เจตเฉฑเจ เจนเฉ เจธเจเจฆเฉ เจนเจจเฅค
เจกเฉเจฌเฉเจ เจจ 10 (เจเจฐเจจเจฒ 4.19.67) เจฒเจ เจ เฉฐเจคเจฐ เจเจฆเจพเจนเจฐเจจ
# ะดััะณะฐั ะบะพะผะฐะฝะดะฐ
CLANG ?= clang
LLC ?= llc-7
# ะดััะณะพะน ะบะฐัะฐะปะพะณ
KDIR ?= /usr/src/linux-headers-$(shell uname -r)
ARCH ?= $(subst x86_64,x86,$(shell uname -m))
# ะดะฒะฐ ะดะพะฟะพะปะฝะธัะตะปัะฝัั
ะบะฐัะฐะปะพะณะฐ -I
CFLAGS =
-Ihelpers
-I/usr/src/linux-headers-4.19.0-6-common/include
-I/usr/src/linux-headers-4.19.0-6-common/arch/$(ARCH)/include
# ะดะฐะปะตะต ะฑะตะท ะธะทะผะตะฝะตะฝะธะน
CFLAGS
เจธเจนเจพเจเจ เจนเฉเจกเจฐเจพเจ เจตเจพเจฒเฉ เจเฉฑเจ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจ
เจคเฉ เจเจฐเจจเจฒ เจนเฉเจกเจฐเจพเจ เจจเจพเจฒ เจเจ เจกเจพเจเจฐเฉเจเจเจฐเฉเจเจ เจธเจผเจพเจฎเจฒ เจเจฐเฉเฅค เจเจฟเฉฐเจจเฉเจน __KERNEL__
เจฎเจคเจฒเจฌ เจเจฟ UAPI (userspace API) เจธเจฟเจฐเจฒเฉเจ เจเจฐเจจเจฒ เจเฉเจก เจฒเจ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจเฉเจคเฉ เจเจ เจนเจจ, เจเจฟเจเจเจเจฟ เจซเจฟเจฒเจเจฐ เจเจฐเจจเจฒ เจตเจฟเฉฑเจ เจเจฒเจพเจเจ เจเจพเจเจฆเจพ เจนเฉเฅค
เจธเจเฉเจ เจธเฉเจฐเฉฑเจเจฟเจ เจจเฉเฉฐ เจ
เจฏเฉเจ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉ (-fno-stack-protector
) เจเจฟเจเจเจเจฟ eBPF เจเฉเจก เจตเฉเจฐเฉเจซเจพเจเจฐ เจเจฟเจธเฉ เจตเฉ เจคเจฐเฉเจนเจพเจ เจธเจเฉเจ เจธเฉเจฎเจพเจตเจพเจ เจคเฉเจ เจฌเจพเจนเจฐ เจจเจพ เจนเฉเจฃ เจฆเฉ เจเจพเจเจ เจเจฐเจฆเจพ เจนเฉเฅค เจคเฉเจนเจพเจจเฉเฉฐ เจคเฉเจฐเฉฐเจค เจ
เจจเฉเจเฉเจฒเจคเจพ เจจเฉเฉฐ เจธเจฎเจฐเฉฑเจฅ เจเจฐเจจเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ, เจเจฟเจเจเจเจฟ eBPF เจฌเจพเจเจเจเฉเจก เจฆเจพ เจเจเจพเจฐ เจธเฉเจฎเจค เจนเฉเฅค
เจเจ เจเฉฑเจ เจซเจฟเจฒเจเจฐ เจจเจพเจฒ เจธเจผเฉเจฐเฉ เจเจฐเฉเจ เจเฉ เจธเจพเจฐเฉ เจชเฉเจเฉเจเจพเจ เจจเฉเฉฐ เจชเจพเจธ เจเจฐเจฆเจพ เจนเฉ เจ เจคเฉ เจเฉเจ เจจเจนเฉเจ เจเจฐเจฆเจพ:
#include <uapi/linux/bpf.h>
#include <bpf_helpers.h>
SEC("prog")
int xdp_main(struct xdp_md* ctx) {
return XDP_PASS;
}
char _license[] SEC("license") = "GPL";
เจฆเฉ เจเฉเจฎ make
เจเจเฉฑเจ เจพ เจเจฐเจฆเจพ เจนเฉ xdp_filter.o
. เจคเฉเจธเฉเจ เจนเฉเจฃ เจเจธเจจเฉเฉฐ เจเจฟเฉฑเจฅเฉ เจเฉเจธเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ?
เจเฉเจธเจ เจธเจเฉเจเจก
เจธเจเฉเจเจก เจตเจฟเฉฑเจ เจฆเฉ เจเฉฐเจเจฐเจซเฉเจธ เจธเจผเจพเจฎเจฒ เจนเฉเจฃเฉ เจเจพเจนเฉเจฆเฉ เจนเจจ: เจเจฟเจธ เจเฉฑเจคเฉ เจเฉฑเจ เจซเจฟเจฒเจเจฐ เจนเฉเจตเฉเจเจพ เจ เจคเฉ เจเจฟเจธ เจคเฉเจ เจชเฉเจเฉเจ เจญเฉเจเฉ เจเจพเจฃเจเฉเฅค เจเจน เจฆเฉเจเจฃ เจฒเจ เจเจฟ เจธเจพเจกเฉ เจซเจฟเจฒเจเจฐ เจจเจพเจฒ เจจเจฟเจฏเจฎเจค เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจเจฟเจตเฉเจ เจเฉฐเจฎ เจเจฐเจฆเฉเจเจ เจนเจจ, เจเจน เจฆเฉเจเจฃ เจฒเจ เจเจนเจจเจพเจ เจฆเฉ เจเจชเจฃเฉ IP เจฆเฉ เจจเจพเจฒ เจชเฉเจฐเฉ เจฒเฉเจจเจเจธ เจกเจฟเจตเจพเจเจธเจพเจ เจนเฉเจฃเฉเจเจ เจเจพเจนเฉเจฆเฉเจเจ เจนเจจเฅค
เจตเฉเจฅ (เจตเจฐเจเฉเจ
เจฒ เจเจฅเจฐเจจเฉเฉฑเจ) เจตเจฐเจเฉ เจฏเฉฐเจคเจฐ เจธเจพเจกเฉ เจฒเจ เจขเฉเจเจตเฉเจ เจนเจจ: เจเจน เจตเจฐเจเฉเจ
เจฒ เจจเฉเฉฑเจเจตเจฐเจ เจเฉฐเจเจฐเจซเฉเจธเจพเจ เจฆเจพ เจเฉฑเจ เจเฉเฉเจพ เจนเจจ เจเฉ เจธเจฟเฉฑเจงเฉ เจเฉฑเจ เจฆเฉเจเฉ เจจเจพเจฒ "เจเจจเฉเจเจ" เจนเฉเฉฐเจฆเฉ เจนเจจเฅค เจคเฉเจธเฉเจ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเจธ เจคเจฐเฉเจนเจพเจ เจฌเจฃเจพ เจธเจเจฆเฉ เจนเฉ (เจเจธ เจญเจพเจ เจตเจฟเฉฑเจ, เจธเจพเจฐเฉเจเจ เจเจฎเจพเจเจกเจพเจ ip
เจคเฉฑเจ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจเฉเจคเจพ root
):
ip link add xdp-remote type veth peer name xdp-local
เจเจน เจเจธ เจฒเจ เจนเฉ xdp-remote
ะธ xdp-local
โ เจเฉฐเจคเจฐ เจฆเฉ เจจเจพเจฎ. 'เจคเฉ xdp-local
(192.0.2.1/24) เจจเจพเจฒ เจเฉฑเจ เจซเจฟเจฒเจเจฐ เจจเฉฑเจฅเฉ เจเฉเจคเจพ เจเจพเจตเฉเจเจพ xdp-remote
(192.0.2.2/24) เจเจเจฃ เจตเจพเจฒเฉ เจเจฐเฉเจซเจฟเจ เจญเฉเจเฉ เจเจพเจตเฉเจเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเฉฑเจ เจธเจฎเฉฑเจธเจฟเจ เจนเฉ: เจเฉฐเจเจฐเจซเฉเจธ เจเฉฑเจเฉ เจฎเจธเจผเฉเจจ 'เจคเฉ เจนเจจ, เจ
เจคเฉ เจฒเฉเจจเจเจธ เจเจนเจจเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ เจจเฉเฉฐ เจฆเฉเจเฉ เจฐเจพเจนเฉเจ เจเจฐเฉเจซเจฟเจ เจจเจนเฉเจ เจญเฉเจเฉเจเจพเฅค เจคเฉเจธเฉเจ เจเจธ เจจเฉเฉฐ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจจเจฟเจฏเจฎเจพเจ เจจเจพเจฒ เจนเฉฑเจฒ เจเจฐ เจธเจเจฆเฉ เจนเฉ iptables
, เจชเจฐ เจเจนเจจเจพเจ เจจเฉเฉฐ เจชเฉเจเฉเจ เจฌเจฆเจฒเจฃเฉ เจชเฉเจฃเจเฉ, เจเฉ เจกเฉเจฌเฉฑเจ เจเจฐเจจ เจตเฉเจฒเฉ เจ
เจธเฉเจตเจฟเจงเจพเจเจจเจ เจนเฉเฅค เจจเฉเฉฑเจเจตเจฐเจ เจจเฉเจฎเจธเจชเฉเจธ (เจจเฉเฉฑเจเจตเจฐเจ เจจเฉเจฎเจธเจชเฉเจธ, เจนเฉเจฐ เจจเฉเฉฑเจเจจเจธ) เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ เจฌเจฟเจนเจคเจฐ เจนเฉเฅค
เจจเฉเฉฑเจเจตเจฐเจ เจจเฉเจฎเจธเจชเฉเจธ เจตเจฟเฉฑเจ เจเฉฐเจเจฐเจซเฉเจธ, เจฐเฉเจเจฟเฉฐเจ เจเฉเจฌเจฒ, เจ เจคเฉ เจจเฉเฉฑเจเจซเจฟเจฒเจเจฐ เจจเจฟเจฏเจฎเจพเจ เจฆเจพ เจเฉฑเจ เจธเจฎเฉเจน เจนเฉเฉฐเจฆเจพ เจนเฉ เจเฉ เจนเฉเจฐ เจจเฉเฉฑเจเจจ เจตเจฟเฉฑเจ เจธเจฎเจพเจจ เจเจฌเจเฉเจเจ เจคเฉเจ เจ เจฒเฉฑเจ เจนเฉเฉฐเจฆเฉ เจนเจจเฅค เจนเจฐเฉเจ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเฉเจ เจจเฉเจฎเจธเจชเฉเจธ เจตเจฟเฉฑเจ เจเฉฑเจฒเจฆเฉ เจนเฉ, เจ เจคเฉ เจเจธ เจฒเจ เจธเจฟเจฐเจซ เจเจธ เจจเฉเฉฑเจเจจเจธ เจฆเฉเจเจ เจตเจธเจคเฉเจเจ เจนเฉ เจเจชเจฒเจฌเจง เจนเฉเฉฐเจฆเฉเจเจ เจนเจจเฅค เจฎเฉเจฒ เจฐเฉเจช เจตเจฟเฉฑเจ, เจธเจฟเจธเจเจฎ เจตเจฟเฉฑเจ เจธเจพเจฐเฉเจเจ เจตเจธเจคเฉเจเจ เจฒเจ เจเฉฑเจ เจธเจฟเฉฐเจเจฒ เจจเฉเฉฑเจเจตเจฐเจ เจจเฉเจฎเจธเจชเฉเจธ เจนเฉเฉฐเจฆเจพ เจนเฉ, เจเจธเจฒเจ เจคเฉเจธเฉเจ เจฒเฉเจจเจเจธ เจเฉฑเจคเฉ เจเฉฐเจฎ เจเจฐ เจธเจเจฆเฉ เจนเฉ เจ เจคเฉ เจจเฉเฉฑเจเจจเจธ เจฌเจพเจฐเฉ เจจเจนเฉเจ เจเจพเจฃเจฆเฉ เจนเฉเฅค
เจเจฒเฉ เจเฉฑเจ เจจเจตเจพเจ เจจเฉเจฎเจธเจชเฉเจธ เจฌเจฃเจพเจเจ xdp-test
เจ
เจคเฉ เจเฉฑเจฅเฉ เจเจฒเฉ เจเจพเจ xdp-remote
.
ip netns add xdp-test
ip link set dev xdp-remote netns xdp-test
เจซเจฟเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเฉฑเจฒ เจฐเจนเฉ เจนเฉ xdp-test
, "เจตเฉเจเฉ" เจจเจนเฉเจ เจนเฉเจตเฉเจเจพ xdp-local
(เจเจน เจกเจฟเจซเฉเจฒเจ เจฐเฉเจช เจตเจฟเฉฑเจ netns เจตเจฟเฉฑเจ เจฐเจนเฉเจเจพ) เจ
เจคเฉ เจเจฆเฉเจ เจเฉฑเจ เจชเฉเจเฉเจ 192.0.2.1 เจจเฉเฉฐ เจญเฉเจเจฆเฉ เจนเฉ เจคเจพเจ เจเจธ เจตเจฟเฉฑเจเฉเจ เจฒเฉฐเจ เจเจพเจตเฉเจเจพ xdp-remote
, เจเจฟเจเจเจเจฟ เจเจธ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฒเจ 192.0.2.0/24 'เจคเฉ เจธเจฟเจฐเจซเจผ เจเจน เจนเฉ เจเฉฐเจเจฐเจซเฉเจธ เจเจชเจฒเจฌเจง เจนเฉเฅค เจเจน เจเจฒเจเจพ เจตเฉ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉเฅค
netns เจฆเฉ เจตเจฟเจเจเจพเจฐ เจเจพเจฃ เจตเฉเจฒเฉ, เจเฉฐเจเจฐเจซเฉเจธ เจนเฉเจ เจพเจ เจเจฒเจพ เจเจพเจเจฆเจพ เจนเฉ เจ
เจคเฉ เจชเจคเจพ เจเฉเจ เจฆเจฟเฉฐเจฆเจพ เจนเฉเฅค netns เจตเจฟเฉฑเจ เจเฉฑเจ เจเฉฐเจเจฐเจซเฉเจธ เจธเจฅเจพเจชเจค เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ ip ...
เจเจธ เจเจฎเจพเจเจก เจจเฉเจฎเจธเจชเฉเจธ เจตเจฟเฉฑเจ ip netns exec
:
ip netns exec xdp-test
ip address add 192.0.2.2/24 dev xdp-remote
ip netns exec xdp-test
ip link set xdp-remote up
เจเจฟเจตเฉเจ เจเจฟ เจคเฉเจธเฉเจ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉ, เจเจน เจธเฉเจเจฟเฉฐเจ เจคเฉเจ เจตเฉฑเจเจฐเจพ เจจเจนเฉเจ เจนเฉ xdp-local
เจกเจฟเจซเฉเจฒเจ เจจเฉเจฎเจธเจชเฉเจธ เจตเจฟเฉฑเจ:
ip address add 192.0.2.1/24 dev xdp-local
ip link set xdp-local up
เจเฉเจเจฐ เจเจฒเจพเจเจ เจเจพเจตเฉ tcpdump -tnevi xdp-local
, เจคเฉเจธเฉเจ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉ เจเจฟ เจเจธ เจคเฉเจ เจญเฉเจเฉ เจเจ เจชเฉเจเฉเจ xdp-test
, เจเจธ เจเฉฐเจเจฐเจซเฉเจธ เจจเฉเฉฐ เจกเจฟเจฒเฉเจตเจฐ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ:
ip netns exec xdp-test ping 192.0.2.1
เจ
เฉฐเจฆเจฐ เจธเจผเฉเฉฑเจฒ เจเจฒเจพเจเจฃเจพ เจธเฉเจตเจฟเจงเจพเจเจจเจ เจนเฉ xdp-test
. เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ เจเฉฑเจ เจธเจเฉเจฐเจฟเจชเจ เจนเฉ เจเฉ เจธเจเฉเจเจก เจฆเฉ เจจเจพเจฒ เจเฉฐเจฎ เจจเฉเฉฐ เจธเจตเฉเจเจพเจฒเจค เจเจฐเจฆเฉ เจนเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจคเฉเจธเฉเจ เจเจฎเจพเจเจก เจจเจพเจฒ เจธเจเฉเจเจก เจจเฉเฉฐ เจธเฉเจ เจ
เจช เจเจฐ เจธเจเจฆเฉ เจนเฉ sudo ./stand up
เจ
เจคเฉ เจเจธ เจจเฉเฉฐ เจนเจเจพเจ sudo ./stand down
.
เจเจฐเฉเจธเจฟเฉฐเจ
เจซเจฟเจฒเจเจฐ เจกเจฟเจตเจพเจเจธ เจจเจพเจฒ เจเจธ เจคเจฐเฉเจนเจพเจ เจเฉเฉเจฟเจ เจนเฉเจเจ เจนเฉ:
ip -force link set dev xdp-local xdp object xdp_filter.o verbose
เจเฉเฉฐเจเฉ -force
เจเฉฑเจ เจจเจตเฉเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจจเฉเฉฐ เจฒเจฟเฉฐเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเฉเจเจฐ เจเฉเจ เจนเฉเจฐ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจฒเจฟเฉฐเจ เจเฉเจคเจพ เจนเฉเจเจ เจนเฉเฅค "เจเฉเจ เจเจผเจฌเจฐ เจเฉฐเจเฉ เจเจผเจฌเจฐ เจจเจนเฉเจ เจนเฉ" เจเจธ เจเจฎเจพเจเจก เจฌเจพเจฐเฉ เจจเจนเฉเจ เจนเฉ, เจเจเจเจชเฉเฉฑเจ เจเจฟเจธเฉ เจตเฉ เจคเจฐเฉเจนเจพเจ เจตเฉฑเจกเฉ เจนเฉเฅค เจฆเจฐเจธเจพเจเจเจฆเฉ เจนเจจ verbose
เจตเจฟเจเจฒเจชเจฟเจ, เจชเจฐ เจเจธเจฆเฉ เจจเจพเจฒ เจ
เจธเฉเจเจฌเจฒเจฐ เจธเฉเจเฉ เจฆเฉ เจจเจพเจฒ เจเฉเจก เจตเฉเจฐเฉเจซเจพเจเจฐ เจฆเฉ เจเฉฐเจฎ เจฌเจพเจฐเฉ เจเฉฑเจ เจฐเจฟเจชเฉเจฐเจ เจฆเจฟเจเจพเจ เจฆเจฟเฉฐเจฆเฉ เจนเฉ:
Verifier analysis:
0: (b7) r0 = 2
1: (95) exit
เจชเฉเจฐเฉเจเจฐเจพเจฎ เจจเฉเฉฐ เจเฉฐเจเจฐเจซเฉเจธ เจคเฉเจ เจตเฉฑเจ เจเจฐเฉ:
ip link set dev xdp-local xdp off
เจธเจเฉเจฐเจฟเจชเจ เจตเจฟเฉฑเจ, เจเจน เจนเฉเจเจฎ เจนเจจ sudo ./stand attach
ะธ sudo ./stand detach
.
เจซเจฟเจฒเจเจฐ เจจเฉเฉฐ เจฌเฉฐเจจเฉเจน เจเฉ, เจคเฉเจธเฉเจ เจเจน เจฏเจเฉเจจเฉ เจฌเจฃเจพ เจธเจเจฆเฉ เจนเฉ ping
เจเฉฐเจฎ เจเจฐเจจเจพ เจเจพเจฐเฉ เจฐเฉฑเจเจฆเจพ เจนเฉ, เจชเจฐ เจเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ? เจเจ เจฒเฉเจเฉ เจเฉเฉเฉเจเฅค เจซเฉฐเจเจธเจผเจจ bpf_trace_printk()
printf()
, เจชเจฐ เจชเฉเจเจฐเจจ เจคเฉเจ เจเจฒเจพเจตเจพ เจธเจฟเจฐเจซเจผ เจคเจฟเฉฐเจจ เจเจฐเจเฉเจฎเฉเจเจเจพเจ เจ
เจคเฉ เจจเจฟเจฐเจงเจพเจฐเจเจพเจ เจฆเฉ เจเฉฑเจ เจธเฉเจฎเจค เจธเฉเจเฉ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจเจฐเจฆเจพ เจนเฉเฅค เจฎเฉเจเจฐเฉ bpf_printk()
เจเจพเจฒ เจจเฉเฉฐ เจธเจฐเจฒ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉเฅค
SEC("prog")
int xdp_main(struct xdp_md* ctx) {
+ bpf_printk("got packet: %pn", ctx);
return XDP_PASS;
}
เจเจเจเจชเฉเฉฑเจ เจเจฐเจจเจฒ เจเจฐเฉเจธ เจเฉเจจเจฒ 'เจคเฉ เจเจพเจเจฆเฉ เจนเฉ, เจเจฟเจธ เจจเฉเฉฐ เจฏเฉเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ:
echo -n 1 | sudo tee /sys/kernel/debug/tracing/options/trace_printk
เจธเฉเจจเฉเจนเจพ เจชเฉเจฐเจตเจพเจน เจฆเฉเจเฉ:
cat /sys/kernel/debug/tracing/trace_pipe
เจเจน เจฆเฉเจตเฉเจ เจเฉเจฎเจพเจ เจเฉฑเจ เจเจพเจฒ เจเจฐเจฆเฉเจเจ เจนเจจ sudo ./stand log
.
เจชเจฟเฉฐเจ เจจเฉเฉฐ เจนเฉเจฃ เจเจธ เจตเจฟเฉฑเจ เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเฉ เจธเฉฐเจฆเฉเจธเจผ เจชเฉเจฆเจพ เจเจฐเจจเฉ เจเจพเจนเฉเจฆเฉ เจนเจจ:
<...>-110930 [004] ..s1 78803.244967: 0: got packet: 00000000ac510377
เจเฉเจเจฐ เจคเฉเจธเฉเจ เจตเฉเจฐเฉเจซเจพเจเจฐ เจฆเฉ เจเจเจเจชเฉเฉฑเจ เจจเฉเฉฐ เจจเฉเฉเจฟเจเจ เจฆเฉเจเจฆเฉ เจนเฉ, เจคเจพเจ เจคเฉเจธเฉเจ เจ เจเฉเจฌ เจเจฃเจจเจพเจตเจพเจ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉ:
0: (bf) r3 = r1
1: (18) r1 = 0xa7025203a7465
3: (7b) *(u64 *)(r10 -8) = r1
4: (18) r1 = 0x6b63617020746f67
6: (7b) *(u64 *)(r10 -16) = r1
7: (bf) r1 = r10
8: (07) r1 += -16
9: (b7) r2 = 16
10: (85) call bpf_trace_printk#6
<...>
เจคเฉฑเจฅ เจเจน เจนเฉ เจเจฟ eBPF เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจตเจฟเฉฑเจ เจกเฉเจเจพ เจธเฉเจเจธเจผเจจ เจจเจนเฉเจ เจนเฉเฉฐเจฆเจพ เจนเฉ, เจเจธเจฒเจ เจซเจพเจฐเจฎเฉเจ เจธเจคเจฐ เจจเฉเฉฐ เจเจจเจเฉเจก เจเจฐเจจ เจฆเจพ เจเฉฑเจเฉ เจเฉฑเจ เจคเจฐเฉเจเจพ เจนเฉ VM เจเจฎเจพเจเจกเจพเจ เจฆเฉ เจคเฉเจฐเฉฐเจค เจเจฐเจเฉเจฎเฉเจเจเจธ:
$ python -c "import binascii; print(bytes(reversed(binascii.unhexlify('0a7025203a74656b63617020746f67'))))"
b'got packet: %pn'
เจเจธ เจเจพเจฐเจจ เจเจฐเจเฉ, เจกเฉเจฌเฉฑเจ เจเจเจเจชเฉเฉฑเจ เจจเจคเฉเจเฉ เจตเจพเจฒเฉ เจเฉเจก เจจเฉเฉฐ เจฌเจนเฉเจค เจเจผเจฟเจเจฆเจพ เจซเฉเฉฑเจฒ เจฆเจฟเฉฐเจฆเฉ เจนเฉเฅค
XDP เจชเฉเจเฉเจ เจญเฉเจเฉ เจเจพ เจฐเจนเฉ เจนเจจ
เจเจฒเฉ เจซเจฟเจฒเจเจฐ เจจเฉเฉฐ เจฌเจฆเจฒเฉเจ: เจเจธเจจเฉเฉฐ เจธเจพเจฐเฉ เจเจเจฃ เจตเจพเจฒเฉ เจชเฉเจเฉเจ เจตเจพเจชเจธ เจญเฉเจเจฃ เจฆเจฟเจเฅค เจเจน เจจเฉเฉฑเจเจตเจฐเจ เจฆเฉเจฐเจฟเจธเจผเจเฉเจเฉเจฃ เจคเฉเจ เจเจฒเจค เจนเฉ, เจเจฟเจเจเจเจฟ เจธเจฟเจฐเจฒเฉเจเจพเจ เจตเจฟเฉฑเจ เจชเจคเจฟเจเจ เจจเฉเฉฐ เจฌเจฆเจฒเจฃเจพ เจเจผเจฐเฉเจฐเฉ เจนเฉเจตเฉเจเจพ, เจชเจฐ เจนเฉเจฃ เจธเจฟเจงเจพเจเจค เจตเจฟเฉฑเจ เจเฉฐเจฎ เจเจฐเจจเจพ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉเฅค
bpf_printk("got packet: %pn", ctx);
- return XDP_PASS;
+ return XDP_TX;
}
เจฒเจพเจเจ เจเจฐเฉ tcpdump
'เจคเฉ xdp-remote
. เจเจธ เจจเฉเฉฐ เจธเจฎเจพเจจ เจเจเจเจเฉเจเฉฐเจ เจ
เจคเฉ เจเจจเจเจฎเจฟเฉฐเจ ICMP เจเจเฉ เจฌเฉเจจเจคเฉ เจฆเจฟเจเจพเจเจฃเฉ เจเจพเจนเฉเจฆเฉ เจนเฉ เจ
เจคเฉ ICMP เจเจเฉ เจเจตเจพเจฌ เจฆเจฟเจเจพเจเจฃเจพ เจฌเฉฐเจฆ เจเจฐเจจเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค เจชเจฐ เจเจน เจจเจนเฉเจ เจฆเจฟเจเจพเจเจเจฆเจพ. เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจจเจฟเจเจฒเจฆเจพ เจนเฉ XDP_TX
เจฒเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจตเจฟเฉฑเจ xdp-local
xdp-remote
เจเฉฑเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจตเฉ เจจเจฟเจฐเจงเจพเจฐเจค เจเฉเจคเจพ เจเจฟเจ เจธเฉ, เจญเจพเจตเฉเจ เจเจน เจเจพเจฒเฉ เจธเฉ, เจ
เจคเฉ เจเจธเจจเฉเฉฐ เจเจญเจพเจฐเจฟเจ เจเจฟเจ เจธเฉเฅค
เจฎเฉเจจเฉเฉฐ เจเจฟเจตเฉเจ เจชเจคเจพ เจฒเฉฑเจเจพ?
เจคเฉเจนเจพเจจเฉเฉฐ เจฌเฉเจฐเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉฐเจเจพ เจฌเจฃเจพเจเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ, เจเจฟเจเจเจเจฟ เจเจธ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ เจฒเจ เจนเฉเจฐ เจเฉเจ เจจเจนเฉเจ เจนเฉเฅค
$ sudo perf trace --call-graph dwarf -e 'xdp:*'
0.000 ping/123455 xdp:xdp_bulk_tx:ifindex=19 action=TX sent=0 drops=1 err=-6
veth_xdp_flush_bq ([veth])
veth_xdp_flush_bq ([veth])
veth_poll ([veth])
<...>
เจเฉเจก 6 เจเฉ เจนเฉ?
$ errno 6
ENXIO 6 No such device or address
เจซเฉฐเจเจธเจผเจจ veth_xdp_flush_bq()
เจคเฉเจ เจเจฒเจคเฉ เจเฉเจก เจชเฉเจฐเจพเจชเจค เจเจฐเจฆเจพ เจนเฉ veth_xdp_xmit()
, เจเจฟเฉฑเจฅเฉ เจเฉ เจเฉเจ ENXIO
เจ
เจคเฉ เจเฉฑเจ เจเจฟเฉฑเจชเจฃเฉ เจฒเฉฑเจญเฉ.
เจเฉฑเจเฉ-เจเฉฑเจ เจซเจฟเจฒเจเจฐ เจฐเฉเจธเจเฉเจฐ เจเจฐเฉ (XDP_PASS
) เจซเจพเจเจฒ เจตเจฟเฉฑเจ xdp_dummy.c
, เจเจธเจจเฉเฉฐ เจฎเฉเจเจซเจพเจเจฒ เจตเจฟเฉฑเจ เจเฉเฉเฉ, เจจเจพเจฒ เจฌเฉฐเจจเฉเจนเฉ xdp-remote
:
ip netns exec remote
ip link set dev int xdp object dummy.o
เจนเฉเจฃ tcpdump
เจฆเจฐเจธเจพเจเจเจฆเจพ เจนเฉ เจเจฟ เจเฉ เจเจฎเฉเจฆ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ:
62:57:8e:70:44:64 > 26:0e:25:37:8f:96, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 13762, offset 0, flags [DF], proto ICMP (1), length 84)
192.0.2.2 > 192.0.2.1: ICMP echo request, id 46966, seq 1, length 64
62:57:8e:70:44:64 > 26:0e:25:37:8f:96, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 13762, offset 0, flags [DF], proto ICMP (1), length 84)
192.0.2.2 > 192.0.2.1: ICMP echo request, id 46966, seq 1, length 64
เจเฉเจเจฐ เจเจธเจฆเฉ เจฌเจเจพเจ เจธเจฟเจฐเจซเจผ ARP เจฆเจฟเจเจพเจเจ เจเจฟเจ เจนเฉ, เจคเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจซเจฟเจฒเจเจฐเจพเจ เจจเฉเฉฐ เจนเจเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ (เจเจธ เจจเจพเจฒ sudo ./stand detach
), เจเจฒเฉ ping
, เจซเจฟเจฐ เจซเจฟเจฒเจเจฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเฉ เจ
เจคเฉ เจฆเฉเจฌเจพเจฐเจพ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเฉเฅค เจธเจฎเฉฑเจธเจฟเจ เจเจน เจนเฉ เจเจฟ เจซเจฟเจฒเจเจฐ XDP_TX
ARP เจจเฉเฉฐ เจตเฉ เจชเฉเจฐเจญเจพเจตเจฟเจค เจเจฐเจฆเจพ เจนเฉ, เจ
เจคเฉ เจเฉเจเจฐ เจธเจเฉเจ
เจจเจพเจฎ-เจธเจฅเจพเจจเจพเจ xdp-test
MAC เจเจกเจฐเฉเฉฑเจธ 192.0.2.1 เจจเฉเฉฐ "เจญเฉเฉฑเจฒเจฃ" เจตเจฟเฉฑเจ เจชเจฐเจฌเฉฐเจงเจฟเจค, เจเจน เจเจธ IP เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจจเจนเฉเจ เจนเฉเจตเฉเจเจพเฅค
เจธเจฎเฉฑเจธเจฟเจ เจฆเจพ เจเจ เจจ
เจเจฒเฉ เจฆเฉฑเจธเฉ เจเจ เจเฉฐเจฎ เจตเฉฑเจฒ เจตเจงเฉเจ: XDP เจเฉฑเจคเฉ เจเฉฑเจ SYN เจเฉเจเฉ เจตเจฟเจงเฉ เจฒเจฟเจเจฃ เจฒเจเฅค
เจนเฉเจฃ เจคเฉฑเจ, SYN เจนเฉเฉเจน เจเฉฑเจ เจชเฉเจฐเจธเจฟเฉฑเจง DDoS เจนเจฎเจฒเจพ เจฌเจฃเจฟเจ เจนเฉเจเจ เจนเฉ, เจเจฟเจธเจฆเจพ เจธเจพเจฐ เจนเฉเจ เจฒเจฟเจเฉ เจ เจจเฉเจธเจพเจฐ เจนเฉเฅค เจเจฆเฉเจ เจเฉฑเจ เจเจจเฉเจเจธเจผเจจ เจธเจฅเจพเจชเจค เจนเฉเฉฐเจฆเจพ เจนเฉ (TCP เจนเฉเจเจกเจธเจผเฉเจ), เจธเจฐเจตเจฐ เจเฉฑเจ SYN เจชเฉเจฐเจพเจชเจค เจเจฐเจฆเจพ เจนเฉ, เจญเจตเจฟเฉฑเจ เจฆเฉ เจเจจเฉเจเจธเจผเจจ เจฒเจ เจธเจฐเฉเจค เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจฆเจพ เจนเฉ, เจเฉฑเจ SYNACK เจชเฉเจเฉเจ เจจเจพเจฒ เจเจตเจพเจฌ เจฆเจฟเฉฐเจฆเจพ เจนเฉ, เจ เจคเฉ เจเฉฑเจ ACK เจฆเฉ เจเจกเฉเจ เจเจฐเจฆเจพ เจนเฉเฅค เจนเจฎเจฒเจพเจตเจฐ เจเฉฑเจ เจฌเจนเฉ-เจนเจเจผเจพเจฐ เจฌเฉเจเจจเฉเฉฑเจ เจตเจฟเฉฑเจ เจนเจฐเฉเจ เจนเฉเจธเจ เจคเฉเจ เจนเจเจผเจพเจฐเจพเจ เจชเฉเจฐเจคเฉ เจธเจเจฟเฉฐเจ เจฆเฉ เจฎเจพเจคเจฐเจพ เจตเจฟเฉฑเจ เจเจพเจ เจฒเฉ เจชเจคเจฟเจเจ เจคเฉเจ SYN เจชเฉเจเฉเจ เจญเฉเจเจฆเจพ เจนเฉเฅค เจธเจฐเจตเจฐ เจจเฉเฉฐ เจชเฉเจเฉเจ เจฆเฉ เจเจเจฃ 'เจคเฉ เจคเฉเจฐเฉฐเจค เจธเจฐเฉเจค เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจ เจฒเจ เจฎเจเจฌเฉเจฐ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจชเจฐ เจฒเฉฐเจฌเฉ เจธเจฎเฉเจ เจคเฉเจ เจฌเจพเจ เจฆ เจเจธเจจเฉเฉฐ เจเจพเจฐเฉ เจเจฐเจฆเจพ เจนเฉ, เจจเจคเฉเจเฉ เจตเจเฉเจ, เจฎเฉเจฎเฉเจฐเฉ เจเจพเจ เจธเฉเจฎเจพเจตเจพเจ เจเจคเจฎ เจนเฉ เจเจพเจเจฆเฉเจเจ เจนเจจ, เจจเจตเฉเจ เจเจจเฉเจเจธเจผเจจ เจธเจตเฉเจเจพเจฐ เจจเจนเฉเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจ, เจธเฉเจตเจพ เจเจชเจฒเจฌเจง เจจเจนเฉเจ เจนเฉเฅค
เจเฉเจเจฐ เจคเฉเจธเฉเจ SYN เจชเฉเจเฉเจ 'เจคเฉ เจธเจฐเฉเจค เจจเจฟเจฐเจงเจพเจฐเจค เจจเจนเฉเจ เจเจฐเจฆเฉ, เจชเจฐ เจธเจฟเจฐเจซ เจเฉฑเจ SYNACK เจชเฉเจเฉเจ เจจเจพเจฒ เจเจตเจพเจฌ เจฆเจฟเฉฐเจฆเฉ เจนเฉ, เจคเจพเจ เจธเจฐเจตเจฐ เจเจฟเจตเฉเจ เจธเจฎเจ เจธเจเจฆเจพ เจนเฉ เจเจฟ เจฌเจพเจ
เจฆ เจตเจฟเฉฑเจ เจเจเจ ACK เจชเฉเจเฉเจ SYN เจชเฉเจเฉเจ เจจเจพเจฒ เจธเจฌเฉฐเจงเจค เจนเฉ เจเฉ เจธเฉเจฐเฉฑเจเจฟเจ
เจค เจจเจนเฉเจ เจเฉเจคเจพ เจเจฟเจ เจธเฉ? เจเจเจฐเจเจพเจฐ, เจเฉฑเจ เจนเจฎเจฒเจพเจตเจฐ เจเจพเจ
เจฒเฉ ACKs เจตเฉ เจคเจฟเจเจฐ เจเจฐ เจธเจเจฆเจพ เจนเฉเฅค SYN เจเฉเจเฉ เจฆเจพ เจธเจพเจฐ เจเจจเจเฉเจก เจเจฐเจจเจพ เจนเฉ seqnum
เจเจจเฉเจเจธเจผเจจ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจชเจคเจฟเจเจ, เจชเฉเจฐเจเจพเจ เจ
เจคเฉ เจฌเจฆเจฒเจฆเฉ เจจเจฎเจ เจฆเฉ เจนเฉเจธเจผ เจตเจเฉเจเฅค เจเฉเจเจฐ ACK เจฒเฉเจฃ เจฌเจฆเจฒเจฃ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ เจชเจนเฉเฉฐเจเจฃ เจตเจฟเฉฑเจ เจเจพเจฎเจฏเจพเจฌ เจนเฉ เจเจฟเจ, เจคเจพเจ เจคเฉเจธเฉเจ เจฆเฉเจฌเจพเจฐเจพ เจนเฉเจธเจผ เจฆเฉ เจเจฃเจจเจพ เจเจฐ เจธเจเจฆเฉ เจนเฉ เจ
เจคเฉ เจเจธ เจจเจพเจฒ เจคเฉเจฒเจจเจพ เจเจฐ เจธเจเจฆเฉ เจนเฉ acknum
. เจจเจเจฒเฉ acknum
เจนเจฎเจฒเจพเจตเจฐ เจจเจนเฉเจ เจเจฐ เจธเจเจฆเจพ, เจเจฟเจเจเจเจฟ เจฒเฉเจฃ เจตเจฟเฉฑเจ เจฐเจพเจเจผ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉ, เจ
เจคเฉ เจธเฉเจฎเจค เจเฉเจจเจฒ เจฆเฉ เจเจพเจฐเจจ เจเจธ เจจเฉเฉฐ เจเจพเจเจเจฃ เจฒเจ เจธเจฎเจพเจ เจจเจนเฉเจ เจนเฉเฉฐเจฆเจพเฅค
SYN เจเฉเจเฉเจเจผ เจจเฉเฉฐ เจฒเฉเจจเจเจธ เจเจฐเจจเจฒ เจตเจฟเฉฑเจ เจฒเฉฐเจฌเฉ เจธเจฎเฉเจ เจคเฉเจ เจฒเจพเจเฉ เจเฉเจคเจพ เจเจฟเจ เจนเฉ เจ เจคเฉ เจเฉเจเจฐ SYN เจฌเจนเฉเจค เจคเฉเจเจผเฉ เจจเจพเจฒ เจ เจคเฉ เจฌเจฒเจ เจตเจฟเฉฑเจ เจเจเจเจฆเฉ เจนเจจ เจคเจพเจ เจเจชเจฃเฉ เจเจช เจนเฉ เจธเจฎเจฐเฉฑเจฅ เจนเฉ เจธเจเจฆเฉ เจนเจจเฅค
TCP เจนเฉเจเจกเจธเจผเฉเจ 'เจคเฉ เจตเจฟเจฆเจฟเจ เจ เจชเฉเจฐเฉเจเจฐเจพเจฎ
TCP เจฌเจพเจเจเจพเจ เจฆเฉ เจเฉฑเจ เจธเจเฉเจฐเฉเจฎ เจฆเฉ เจคเฉเจฐ เจคเฉ เจกเฉเจเจพ เจฆเจพ เจคเจฌเจพเจฆเจฒเจพ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจฆเจพ เจนเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, HTTP เจฌเฉเจจเจคเฉเจเจ TCP เจฆเฉเจเจฐเจพ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจเฉเจคเฉเจเจ เจเจพเจเจฆเฉเจเจ เจนเจจเฅค เจธเจเจฐเฉเจฎ เจจเฉเฉฐ เจชเฉเจเฉเจเจพเจ เจตเจฟเฉฑเจ เจเฉเจเฉเฉ-เจเฉเจเฉเฉ เจตเจฟเฉฑเจ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค เจธเจพเจฐเฉ TCP เจชเฉเจเฉเจเจพเจ เจตเจฟเฉฑเจ เจฒเจพเจเจผเฉเจเจฒ เจซเจฒเฉเจ เจ เจคเฉ 32-เจฌเจฟเฉฑเจ เจเฉเจฐเจฎ เจจเฉฐเจฌเจฐ เจนเฉเฉฐเจฆเฉ เจนเจจ:
-
เจเฉฐเจกเฉ เจฆเจพ เจธเฉเจฎเฉเจฒ เจเฉฑเจ เจเจพเจธ เจชเฉเจเฉเจ เจฆเฉ เจญเฉเจฎเจฟเจเจพ เจจเฉเฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจเจฐเจฆเจพ เจนเฉเฅค SYN เจซเจฒเฉเจ เจฆเจพ เจฎเจคเจฒเจฌ เจนเฉ เจเจฟ เจเจน เจเจจเฉเจเจธเจผเจจ 'เจคเฉ เจญเฉเจเจฃ เจตเจพเจฒเฉ เจฆเจพ เจชเจนเจฟเจฒเจพ เจชเฉเจเฉเจ เจนเฉเฅค ACK เจซเจฒเฉเจ เจฆเจพ เจฎเจคเจฒเจฌ เจนเฉ เจเจฟ เจญเฉเจเจฃ เจตเจพเจฒเฉ เจจเฉ เจเฉฑเจ เจฌเจพเจเจ เจคเฉฑเจ เจธเจพเจฐเจพ เจเฉเจจเฉเจเจธเจผเจจ เจกเจพเจเจพ เจชเฉเจฐเจพเจชเจค เจเจฐ เจฒเจฟเจ เจนเฉเฅค
acknum
. เจเฉฑเจ เจชเฉเจเฉเจ เจตเจฟเฉฑเจ เจเจ เจเฉฐเจกเฉ เจนเฉ เจธเจเจฆเฉ เจนเจจ เจ เจคเฉ เจเจนเจจเจพเจ เจฆเฉ เจธเฉเจฎเฉเจฒ เจฆเฉ เจฌเจพเจ เจฆ เจจเจพเจฎ เจฆเจฟเฉฑเจคเจพ เจเจฟเจ เจนเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเฉฑเจ SYNACK เจชเฉเจเฉเจเฅค -
เจเฉเจฐเจฎ เจจเฉฐเจฌเจฐ (เจธเฉเจเจจเฉเจฎ) เจเจธ เจชเฉเจเฉเจ เจตเจฟเฉฑเจ เจญเฉเจเฉ เจเจ เจชเจนเจฟเจฒเฉ เจฌเจพเจเจ เจฒเจ เจกเฉเจเจพ เจธเจเฉเจฐเฉเจฎ เจตเจฟเฉฑเจ เจเจซเจธเฉเฉฑเจ เจจเฉเฉฐ เจจเจฟเจธเจผเจเจฟเจค เจเจฐเจฆเจพ เจนเฉเฅค เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเฉเจเจฐ เจกเฉเจเจพ เจฆเฉ X เจฌเจพเจเจ เจตเจพเจฒเฉ เจชเจนเจฟเจฒเฉ เจชเฉเจเฉเจ เจตเจฟเฉฑเจ เจเจน เจจเฉฐเจฌเจฐ N เจธเฉ, เจคเจพเจ เจจเจตเฉเจ เจกเฉเจเจพ เจตเจพเจฒเฉ เจ เจเจฒเฉ เจชเฉเจเฉเจ เจตเจฟเฉฑเจ เจเจน N+X เจนเฉเจตเฉเจเจพเฅค เจเจพเจฒ เจฆเฉ เจธเจผเฉเจฐเฉเจเจค 'เจคเฉ, เจนเจฐ เจชเฉฑเจ เจเจธ เจจเฉฐเจฌเจฐ เจจเฉเฉฐ เจฌเฉเจคเจฐเจคเฉเจฌ เจขเฉฐเจ เจจเจพเจฒ เจเฉเจฃเจฆเจพ เจนเฉเฅค
-
เจฐเจธเฉเจฆ เจจเฉฐเจฌเจฐ (เจเจเฉฐเจจเจฎ) - เจธเฉเจเจจเจฎ เจฆเฉ เจธเจฎเจพเจจ เจเจซเจธเฉเฉฑเจ, เจชเจฐ เจเจน เจชเฉเจฐเจธเจพเจฐเจฟเจค เจฌเจพเจเจ เจฆเฉ เจธเฉฐเจเจฟเจ เจจเฉเฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจจเจนเฉเจ เจเจฐเจฆเจพ, เจชเจฐ เจชเฉเจฐเจพเจชเจคเจเจฐเจคเจพ เจคเฉเจ เจชเจนเจฟเจฒเฉ เจฌเจพเจเจ เจฆเฉ เจธเฉฐเจเจฟเจ, เจเฉ เจญเฉเจเจฃ เจตเจพเจฒเฉ เจจเฉ เจจเจนเฉเจ เจฆเฉเจเจฟเจ เจธเฉเฅค
เจเฉเจจเฉเจเจธเจผเจจ เจฆเฉ เจธเจผเฉเจฐเฉเจเจค 'เจคเฉ, เจชเจพเจฐเจเฉเจเจ เจจเฉเฉฐ เจธเจนเจฟเจฎเจค เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ seqnum
ะธ acknum
. เจเจฒเจพเจเฉฐเจ เจเจธเจฆเฉ เจจเจพเจฒ เจเฉฑเจ SYN เจชเฉเจเฉเจ เจญเฉเจเจฆเจพ เจนเฉ seqnum = X
. เจธเจฐเจตเจฐ เจเฉฑเจ SYNACK เจชเฉเจเฉเจ เจจเจพเจฒ เจเจตเจพเจฌ เจฆเจฟเฉฐเจฆเจพ เจนเฉ, เจเจฟเฉฑเจฅเฉ เจเจน เจเจชเจฃเจพ เจฒเจฟเจเจฆเจพ เจนเฉ seqnum = Y
เจ
เจคเฉ เจชเฉเจฐเจเจ เจเจฐเจฆเจพ เจนเฉ acknum = X + 1
. เจเจฒเจพเจเฉฐเจ เจเฉฑเจ ACK เจชเฉเจเฉเจ เจจเจพเจฒ SYNACK เจฆเจพ เจเจตเจพเจฌ เจฆเจฟเฉฐเจฆเจพ เจนเฉ, เจเจฟเฉฑเจฅเฉ seqnum = X + 1
, acknum = Y + 1
. เจเจธ เจคเฉเจ เจฌเจพเจ
เจฆ, เจ
เจธเจฒ เจกเจพเจเจพ เจเฉเจฐเจพเจเจธเจซเจฐ เจธเจผเฉเจฐเฉ เจนเฉเฉฐเจฆเจพ เจนเฉ.
เจเฉเจเจฐ เจตเจพเจฐเจคเจพเจเจพเจฐ เจชเฉเจเฉเจ เจฆเฉ เจฐเจธเฉเจฆ เจจเฉเฉฐ เจธเจตเฉเจเจพเจฐ เจจเจนเฉเจ เจเจฐเจฆเจพ เจนเฉ, เจคเจพเจ TCP เจเจธเจจเฉเฉฐ เจเจพเจเจฎเจเจเจ เจฆเฉเจเจฐเจพ เจฆเฉเจฌเจพเจฐเจพ เจญเฉเจเจฆเจพ เจนเฉเฅค
SYN เจเฉเจเฉเจเจผ เจฆเฉ เจตเจฐเจคเฉเจ เจนเจฎเฉเจธเจผเจพ เจเจฟเจเจ เจจเจนเฉเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ?
เจชเจนเจฟเจฒเจพเจ, เจเฉเจเจฐ เจเฉเจ SYNACK เจเจพเจ ACK เจเฉเฉฐเจฎ เจนเฉ เจเจพเจเจฆเจพ เจนเฉ, เจคเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจฆเฉเจฌเจพเจฐเจพ เจญเฉเจเจฃ เจฒเจ เจเจกเฉเจ เจเจฐเจจเฉ เจชเจตเฉเจเฉ - เจเฉเจจเฉเจเจธเจผเจจ เจธเจฅเจพเจชเจจเจพ เจนเฉเจฒเฉ เจนเฉ เจเจพเจเจฆเฉ เจนเฉเฅค เจฆเฉเจเจพ, SYN เจชเฉเจเฉเจ เจตเจฟเฉฑเจ - เจ เจคเฉ เจธเจฟเจฐเจซ เจเจธ เจตเจฟเฉฑเจ! - เจเจ เจตเจฟเจเจฒเจช เจชเฉเจฐเจธเจพเจฐเจฟเจค เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจ เจเฉ เจเจจเฉเจเจธเจผเจจ เจฆเฉ เจ เจเจฒเฉ เจเฉฐเจฎ เจจเฉเฉฐ เจชเฉเจฐเจญเจพเจตเจค เจเจฐเจฆเฉ เจนเจจเฅค เจเจเจฃ เจตเจพเจฒเฉ SYN เจชเฉเจเฉเจเจพเจ เจจเฉเฉฐ เจฏเจพเจฆ เจจเจพ เจเจฐเจฆเฉ เจนเฉเจ, เจธเจฐเจตเจฐ เจเจธ เจคเจฐเฉเจนเจพเจ เจเจนเจจเจพเจ เจตเจฟเจเจฒเจชเจพเจ เจจเฉเฉฐ เจจเจเจผเจฐเจ เฉฐเจฆเจพเจเจผ เจเจฐเจฆเจพ เจนเฉ, เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจชเฉเจเฉเจเจพเจ เจตเจฟเฉฑเจ เจเจฒเจพเจเฉฐเจ เจนเฉเจฃ เจเจนเจจเจพเจ เจจเฉเฉฐ เจจเจนเฉเจ เจญเฉเจเฉเจเจพเฅค TCP เจเจธ เจเฉเจธ เจตเจฟเฉฑเจ เจเฉฐเจฎ เจเจฐ เจธเจเจฆเจพ เจนเฉ, เจชเจฐ เจเฉฑเจเฉ เจเฉฑเจ เจธเจผเฉเจฐเฉเจเจคเฉ เจชเฉเจพเจ 'เจคเฉ, เจเฉเจจเฉเจเจธเจผเจจ เจฆเฉ เจเฉเจฃเจตเฉฑเจคเจพ เจเฉฑเจ เจเจพเจตเฉเจเฉ.
เจชเฉเจเฉเจเจพเจ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ, เจเฉฑเจ XDP เจชเฉเจฐเฉเจเจฐเจพเจฎ เจจเฉเฉฐ เจเจน เจเจฐเจจเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ:
- เจเฉเจเฉ เจฆเฉ เจจเจพเจฒ SYNACK เจจเจพเจฒ SYN เจฆเจพ เจเจตเจพเจฌ;
- ACK เจฆเจพ RST เจจเจพเจฒ เจเจตเจพเจฌ เจฆเจฟเจ (เจเฉเจจเฉเจเจธเจผเจจ เจคเฉเฉเฉ);
- เจนเฉเจฐ เจชเฉเจเฉเจ เจธเฉเฉฑเจเฉ.
เจชเฉเจเฉเจ เจชเจพเจฐเจธเจฟเฉฐเจ เจฆเฉ เจจเจพเจฒ เจเจฒเจเฉเจฐเจฟเจฆเจฎ เจฆเจพ เจธเฉเจกเฉ-เจเฉเจก:
ะัะปะธ ััะพ ะฝะต Ethernet,
ะฟัะพะฟัััะธัั ะฟะฐะบะตั.
ะัะปะธ ััะพ ะฝะต IPv4,
ะฟัะพะฟัััะธัั ะฟะฐะบะตั.
ะัะปะธ ะฐะดัะตั ะฒ ัะฐะฑะปะธัะต ะฟัะพะฒะตัะตะฝะฝัั
, (*)
ัะผะตะฝััะธัั ััะตััะธะบ ะพััะฐะฒัะธั
ัั ะฟัะพะฒะตัะพะบ,
ะฟัะพะฟัััะธัั ะฟะฐะบะตั.
ะัะปะธ ััะพ ะฝะต TCP,
ัะฑัะพัะธัั ะฟะฐะบะตั. (**)
ะัะปะธ ััะพ SYN,
ะพัะฒะตัะธัั SYN-ACK ั cookie.
ะัะปะธ ััะพ ACK,
ะตัะปะธ ะฒ acknum ะปะตะถะธั ะฝะต cookie,
ัะฑัะพัะธัั ะฟะฐะบะตั.
ะะฐะฝะตััะธ ะฒ ัะฐะฑะปะธัั ะฐะดัะตั ั N ะพััะฐะฒัะธั
ัั ะฟัะพะฒะตัะพะบ. (*)
ะัะฒะตัะธัั RST. (**)
ะ ะพััะฐะปัะฝัั
ัะปััะฐัั
ัะฑัะพัะธัั ะฟะฐะบะตั.
เจเฉฑเจ (*)
เจเจน เจฌเจฟเฉฐเจฆเฉ เจเจฟเฉฑเจฅเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจธเจฟเจธเจเจฎ เจฆเฉ เจธเจฅเจฟเจคเฉ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเจฟเฉฐเจจเฉเจนเจฟเจค เจเฉเจคเจพ เจเจฟเจ เจนเฉ - เจชเจนเจฟเจฒเฉ เจชเฉเจพเจ
'เจคเฉ, เจคเฉเจธเฉเจ เจเฉฑเจ เจธเฉเจเจจเจฎ เจตเจเฉเจ เจเฉฑเจ SYN เจเฉเจเฉ เจฌเจฃเจพเจเจฃ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ TCP เจนเฉเจเจกเจธเจผเฉเจ เจฒเจพเจเฉ เจเจฐเจเฉ เจเจนเจจเจพเจ เจคเฉเจ เจฌเจฟเจจเจพเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค
เจธเจพเจเจ เจคเฉ (**)
, เจเจฆเฉเจ เจเจฟ เจธเจพเจกเฉ เจเฉเจฒ เจเฉเจฌเจฒ เจจเจนเฉเจ เจนเฉ, เจ
เจธเฉเจ เจชเฉเจเฉเจ เจจเฉเฉฐ เจเฉฑเจก เจฆเฉเจตเจพเจเจเฉเฅค
TCP เจนเฉเจเจกเจธเจผเฉเจ เจฒเจพเจเฉ เจเจฐเจจเจพ
เจชเฉเจเฉเจ เจชเจพเจฐเจธเจฟเฉฐเจ เจ เจคเฉ เจเฉเจก เจตเฉเจฐเฉเจซเจฟเจเฉเจธเจผเจจ
เจธเจพเจจเฉเฉฐ เจจเฉเฉฑเจเจตเจฐเจ เจธเจฟเจฐเจฒเฉเจ เจขเจพเจเจเฉ เจฆเฉ เจฒเฉเฉ เจนเฉ: เจเจฅเจฐเจจเฉเฉฑเจ (uapi/linux/if_ether.h
), IPv4 (uapi/linux/ip.h
) เจ
เจคเฉ TCP (uapi/linux/tcp.h
). เจชเจฟเจเจฒเฉ เจเฉฑเจ เจจเจพเจฒ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจเจฒเจคเฉเจเจ เจเจพเจฐเจจ เจฎเฉเจ เจเจจเฉเจเจ เจจเจนเฉเจ เจเจฐ เจธเจเจฟเจ atomic64_t
, เจฎเฉเจจเฉเฉฐ เจเฉเจก เจตเจฟเฉฑเจ เจฒเฉเฉเฉเจเจฆเฉเจเจ เจชเจฐเจฟเจญเจพเจธเจผเจพเจตเจพเจ เจฆเฉ เจจเจเจฒ เจเจฐเจจเฉ เจชเจเฅค
เจธเจพเจฐเฉ เจซเฉฐเจเจธเจผเจจ เจเฉ เจชเฉเฉเจนเจจเจฏเฉเจเจคเจพ เจฒเจ C เจตเจฟเฉฑเจ เจตเฉฑเจเจฐเฉ เจนเจจ, เจเจพเจฒ เจธเจพเจเจ 'เจคเฉ เจเจจเจฒเจพเจเจจ เจนเฉเจฃเฉ เจเจพเจนเฉเจฆเฉ เจนเจจ, เจเจฟเจเจเจเจฟ เจเจฐเจจเจฒ เจตเจฟเฉฑเจ eBPF เจตเฉเจฐเฉเจซเจพเจเจฐ เจฌเฉเจ เจเฉฐเจช, เจฏเจพเจจเฉ เจ เจธเจฒ เจตเจฟเฉฑเจ, เจฒเฉเจชเจธ เจ เจคเฉ เจซเฉฐเจเจธเจผเจจ เจเจพเจฒเจพเจ เจจเฉเฉฐ เจฎเจจเฉเจนเจพ เจเจฐเจฆเจพ เจนเฉเฅค
#define INTERNAL static __attribute__((always_inline))
เจฎเฉเจเจฐเฉ LOG()
เจฐเฉเจฒเฉเจเจผ เจฌเจฟเจฒเจก เจตเจฟเฉฑเจ เจชเฉเจฐเจฟเฉฐเจเจฟเฉฐเจ เจจเฉเฉฐ เจ
เจฏเฉเจ เจเจฐเจฆเจพ เจนเฉเฅค
เจชเฉเจฐเฉเจเจฐเจพเจฎ เจซเฉฐเจเจธเจผเจจเจพเจ เจฆเฉ เจเฉฑเจ เจชเจพเจเจชเจฒเจพเจเจจ เจนเฉเฅค เจนเจฐเฉเจ เจจเฉเฉฐ เจเฉฑเจ เจชเฉเจเฉเจ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเจพ เจนเฉ เจเจฟเจธ เจตเจฟเฉฑเจ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจชเฉฑเจงเจฐ เจฆเจพ เจธเจฟเจฐเจฒเฉเจ เจเจเจพเจเจฐ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, process_ether()
เจญเจฐเจจ เจฆเฉ เจเจกเฉเจ เจเจฐ เจฐเจฟเจนเจพ เจนเฉ ether
. เจซเฉเจฒเจก เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจฆเฉ เจจเจคเฉเจเจฟเจเจ เจฆเฉ เจเจงเจพเจฐ 'เจคเฉ, เจซเฉฐเจเจธเจผเจจ เจชเฉเจเฉเจ เจจเฉเฉฐ เจเฉฑเจ เจชเฉฑเจงเจฐ 'เจคเฉ เจเฉเจฐเจพเจเจธเจซเจฐ เจเจฐ เจธเจเจฆเจพ เจนเฉเฅค เจซเฉฐเจเจธเจผเจจ เจฆเจพ เจจเจคเฉเจเจพ เจเฉฑเจ XDP เจเจเจธเจผเจจ เจนเฉเฅค เจเจฆเฉเจ เจเจฟ SYN เจ
เจคเฉ ACK เจนเฉเจเจกเจฒเจฐ เจธเจพเจฐเฉ เจชเฉเจเฉเจเจพเจ เจจเฉเฉฐ เจฒเฉฐเจเจฃ เจฆเจฟเฉฐเจฆเฉ เจนเจจเฅค
struct Packet {
struct xdp_md* ctx;
struct ethhdr* ether;
struct iphdr* ip;
struct tcphdr* tcp;
};
INTERNAL int process_tcp_syn(struct Packet* packet) { return XDP_PASS; }
INTERNAL int process_tcp_ack(struct Packet* packet) { return XDP_PASS; }
INTERNAL int process_tcp(struct Packet* packet) { ... }
INTERNAL int process_ip(struct Packet* packet) { ... }
INTERNAL int
process_ether(struct Packet* packet) {
struct ethhdr* ether = packet->ether;
LOG("Ether(proto=0x%x)", bpf_ntohs(ether->h_proto));
if (ether->h_proto != bpf_ntohs(ETH_P_IP)) {
return XDP_PASS;
}
// B
struct iphdr* ip = (struct iphdr*)(ether + 1);
if ((void*)(ip + 1) > (void*)packet->ctx->data_end) {
return XDP_DROP; /* malformed packet */
}
packet->ip = ip;
return process_ip(packet);
}
SEC("prog")
int xdp_main(struct xdp_md* ctx) {
struct Packet packet;
packet.ctx = ctx;
// A
struct ethhdr* ether = (struct ethhdr*)(void*)ctx->data;
if ((void*)(ether + 1) > (void*)ctx->data_end) {
return XDP_PASS;
}
packet.ether = ether;
return process_ether(&packet);
}
เจฎเฉเจ A เจ เจคเฉ B เจฎเจพเจฐเจ เจเฉเจคเฉ เจเฉเจเจพเจ เจตเฉฑเจฒ เจงเจฟเจเจจ เจเจฟเฉฑเจเจฆเจพ เจนเจพเจเฅค เจเฉเจเจฐ เจคเฉเจธเฉเจ A เจฆเฉ เจเจฟเฉฑเจชเจฃเฉ เจเจฐเจฆเฉ เจนเฉ, เจคเจพเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฌเจฃ เจเจพเจตเฉเจเจพ, เจชเจฐ เจฒเฉเจก เจเจฐเจจ เจตเฉเจฒเฉ เจเฉฑเจ เจชเฉเจธเจผเจเฉเจเจฐเจจ เจเจฒเจคเฉ เจนเฉเจตเฉเจเฉ:
Verifier analysis:
<...>
11: (7b) *(u64 *)(r10 -48) = r1
12: (71) r3 = *(u8 *)(r7 +13)
invalid access to packet, off=13 size=1, R7(id=0,off=0,r=0)
R7 offset is outside of the packet
processed 11 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
Error fetching program/map!
เจเฉเฉฐเจเฉ เจธเจคเจฐ invalid access to packet, off=13 size=1, R7(id=0,off=0,r=0)
: เจเฉฑเจฅเฉ เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจฎเจพเจฐเจ เจนเฉเฉฐเจฆเฉ เจนเจจ เจเจฆเฉเจ เจฌเจซเจฐ เจฆเฉ เจธเจผเฉเจฐเฉเจเจค เจคเฉเจ เจคเฉเจฐเฉเจนเจตเจพเจ เจฌเจพเจเจ เจชเฉเจเฉเจ เจฆเฉ เจฌเจพเจนเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจธเฉเจเฉ เจคเฉเจ เจเจน เจฆเฉฑเจธเจฃเจพ เจเจเจพ เจนเฉ เจเจฟ เจ
เจธเฉเจ เจเจฟเจธ เจฒเจพเจเจจ เจฌเจพเจฐเฉ เจเฉฑเจฒ เจเจฐ เจฐเจนเฉ เจนเจพเจ, เจชเจฐ เจเฉฑเจฅเฉ เจเฉฑเจ เจนเจฆเจพเจเจค เจจเฉฐเจฌเจฐ (12) เจ
เจคเฉ เจเฉฑเจ เจกเจฟเจธเจธเฉเจเจฌเจฒเจฐ เจนเฉ เจเฉ เจธเจฐเฉเจค เจเฉเจก เจฆเฉเจเจ เจฒเจพเจเจจเจพเจ เจจเฉเฉฐ เจฆเจฐเจธเจพเจเจเจฆเจพ เจนเฉ:
llvm-objdump -S xdp_filter.o | less
เจเจธ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ, เจเจน เจฒเจพเจเจจ เจตเฉฑเจฒ เจเจธเจผเจพเจฐเจพ เจเจฐเจฆเจพ เจนเฉ
LOG("Ether(proto=0x%x)", bpf_ntohs(ether->h_proto));
เจเฉ เจเจน เจธเจชเฉฑเจธเจผเจ เจเจฐเจฆเจพ เจนเฉ เจเจฟ เจธเจฎเฉฑเจธเจฟเจ เจนเฉ ether
. เจเจน เจนเจฎเฉเจธเจผเจพ เจ
เจเจฟเจนเจพ เจนเฉ เจนเฉเจตเฉเจเจพเฅค
SYN เจจเฉเฉฐ เจเจตเจพเจฌ เจฆเจฟเจ
เจเจธ เจชเฉเจพเจ
'เจคเฉ เจเฉเจเจพ เจเฉฑเจ เจธเจฅเจฟเจฐ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจธเจนเฉ SYNACK เจชเฉเจเฉเจ เจคเจฟเจเจฐ เจเจฐเจจเจพ เจนเฉ seqnum
, เจเฉ เจญเจตเจฟเฉฑเจ เจตเจฟเฉฑเจ SYN เจเฉเจเฉ เจฆเฉเจเจฐเจพ เจฌเจฆเจฒเจฟเจ เจเจพเจตเฉเจเจพเฅค เจตเจฟเฉฑเจ เจธเจพเจฐเฉเจเจ เจคเจฌเจฆเฉเจฒเฉเจเจ เจนเฉเฉฐเจฆเฉเจเจ เจนเจจ process_tcp_syn()
เจ
เจคเฉ เจเจฒเฉ เจฆเฉเจเจฒเฉ.
เจชเฉเจเฉเจ เจฆเฉ เจเจพเจเจ เจเฉเจคเฉ เจเจพ เจฐเจนเฉ เจนเฉ
เจ เจเฉเจฌ เจคเฉเจฐ 'เจคเฉ, เจเฉฑเจฅเฉ เจธเจญ เจคเฉเจ เจเจฎเจพเจฒ เจฆเฉ เจฒเจพเจเจจ เจนเฉ, เจเจพเจ เจเจธ เจฆเฉ เจฌเจเจพเจ, เจเจธ เจฒเจ เจเฉฑเจ เจเจฟเฉฑเจชเจฃเฉ:
/* Required to verify checksum calculation */
const void* data_end = (const void*)ctx->data_end;
เจเฉเจก เจฆเฉ เจชเจนเจฟเจฒเฉ เจธเฉฐเจธเจเจฐเจฃ เจจเฉเฉฐ เจฒเจฟเจเจฃ เจตเฉเจฒเฉ, 5.1 เจเจฐเจจเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจเฉเจคเฉ เจเจ เจธเฉ, เจเจฟเจธ เจฆเฉ เจคเจธเจฆเฉเจ เจเจฐเจจ เจตเจพเจฒเฉ เจตเจฟเฉฑเจ เจเฉฑเจ เจ
เฉฐเจคเจฐ เจธเฉ data_end
ะธ (const void*)ctx->data_end
. เจฒเจฟเจเจฃ เจฆเฉ เจธเจฎเฉเจ, 5.3.1 เจเจฐเจจเจฒ เจตเจฟเฉฑเจ เจเจน เจธเจฎเฉฑเจธเจฟเจ เจจเจนเฉเจ เจธเฉเฅค เจธเจผเจพเจเจฆ เจเฉฐเจชเจพเจเจฒเจฐ เจเฉฑเจ เจเฉเจคเจฐ เจจเจพเจฒเฉเจ เจตเฉฑเจเจฐเฉ เจคเฉเจฐ 'เจคเฉ เจเฉฑเจ เจธเจฅเจพเจจเจ เจตเฉเจฐเฉเจเจฌเจฒ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจเจฐ เจฐเจฟเจนเจพ เจธเฉเฅค เจจเฉเจคเจฟเจ - เจเฉฑเจ เจตเฉฑเจกเฉ เจเจฒเฉเจนเจฃเฉ 'เจคเฉ, เจเฉเจก เจจเฉเฉฐ เจธเจฐเจฒ เจฌเจฃเจพเจเจฃเจพ เจฎเจฆเจฆ เจเจฐ เจธเจเจฆเจพ เจนเฉ.
เจคเจธเจฆเฉเจ เจเจฐเจจ เจตเจพเจฒเฉ เจฆเฉ เจฎเจนเจฟเจฎเจพ เจฒเจ เจฒเฉฐเจฌเจพเจ เจฆเฉ เจนเฉเจฐ เจฐเฉเจเฉเจจ เจเจพเจเจ; เจ MAX_CSUM_BYTES
เจนเฉเจ เจพเจ.
const u32 ip_len = ip->ihl * 4;
if ((void*)ip + ip_len > data_end) {
return XDP_DROP; /* malformed packet */
}
if (ip_len > MAX_CSUM_BYTES) {
return XDP_ABORTED; /* implementation limitation */
}
const u32 tcp_len = tcp->doff * 4;
if ((void*)tcp + tcp_len > (void*)ctx->data_end) {
return XDP_DROP; /* malformed packet */
}
if (tcp_len > MAX_CSUM_BYTES) {
return XDP_ABORTED; /* implementation limitation */
}
เจชเฉเจเฉเจ เจซเฉเจฒเจพเจ
เจ
เจธเฉเจ เจญเจฐเจฆเฉ เจนเจพเจ seqnum
ะธ acknum
, ACK เจธเฉเฉฑเจ เจเจฐเฉ (SYN เจชเจนเจฟเจฒเจพเจ เจนเฉ เจธเฉเฉฑเจ เจนเฉ):
const u32 cookie = 42;
tcp->ack_seq = bpf_htonl(bpf_ntohl(tcp->seq) + 1);
tcp->seq = bpf_htonl(cookie);
tcp->ack = 1;
TCP เจชเฉเจฐเจเจพเจ, IP เจ
เจคเฉ MAC เจเจกเจฐเฉเฉฑเจธ เจจเฉเฉฐ เจธเจตเฉเจช เจเจฐเฉเฅค เจธเจเฉเจเจกเจฐเจก เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ XDP เจชเฉเจฐเฉเจเจฐเจพเจฎ เจคเฉเจ เจเจชเจฒเจฌเจง เจจเจนเฉเจ เจนเฉ, เจเจธ เจฒเจ memcpy()
- เจเฉฑเจ เจฎเฉเจเจฐเฉ เจเฉ เจเจฒเฉเจเจ เจ
เฉฐเจฆเจฐเฉเจจเฉ เจจเฉเฉฐ เจฒเฉเจเจพเจเจเจฆเจพ เจนเฉเฅค
const u16 temp_port = tcp->source;
tcp->source = tcp->dest;
tcp->dest = temp_port;
const u32 temp_ip = ip->saddr;
ip->saddr = ip->daddr;
ip->daddr = temp_ip;
struct ethhdr temp_ether = *ether;
memcpy(ether->h_dest, temp_ether.h_source, ETH_ALEN);
memcpy(ether->h_source, temp_ether.h_dest, ETH_ALEN);
เจเฉเจเจธเจฎ เจฎเฉเฉ เจเจฃเจจเจพ
IPv4 เจ เจคเฉ TCP เจเฉเจเจธเจฎ เจฒเจ เจธเจฟเจฐเจฒเฉเจเจพเจ เจตเจฟเฉฑเจ เจธเจพเจฐเฉ 16-เจฌเจฟเฉฑเจ เจธเจผเจฌเจฆเจพเจ เจจเฉเฉฐ เจเฉเฉเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ, เจ เจคเฉ เจธเจฟเจฐเจฒเฉเจเจพเจ เจฆเจพ เจเจเจพเจฐ เจเจนเจจเจพเจ เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ เจเจพเจเจฆเจพ เจนเฉ, เจฏเจพเจจเฉ เจธเฉฐเจเจฒเจจ เจฆเฉ เจธเจฎเฉเจ เจ เจฃเจเจพเจฃ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจเจน เจเฉฑเจ เจธเจฎเฉฑเจธเจฟเจ เจนเฉ เจเจฟเจเจเจเจฟ เจคเจธเจฆเฉเจ เจเจฐเจจ เจตเจพเจฒเจพ เจธเฉเจฎเจพ เจตเฉเจฐเฉเจเจฌเจฒ เจคเฉฑเจ เจธเจงเจพเจฐเจจ เจฒเฉเจช เจจเฉเฉฐ เจจเจนเฉเจ เจเฉฑเจกเฉเจเจพเฅค เจชเจฐ เจธเจฟเจฐเจฒเฉเจเจพเจ เจฆเจพ เจเจเจพเจฐ เจธเฉเจฎเจค เจนเฉ: เจนเจฐเฉเจ 64 เจฌเจพเจเจ เจคเฉฑเจเฅค เจคเฉเจธเฉเจ เจเฉฑเจ เจจเจฟเจธเจผเจเจฟเจค เจธเฉฐเจเจฟเจ เจฆเฉ เจฆเฉเจนเจฐเจพเจ เจจเจพเจฒ เจเฉฑเจ เจฒเฉเจช เจฌเจฃเจพ เจธเจเจฆเฉ เจนเฉ, เจเฉ เจเจฒเจฆเฉ เจเจคเจฎ เจนเฉ เจธเจเจฆเจพ เจนเฉเฅค
เจฎเฉเจ เจจเฉเจ เจเจฐเจฆเจพ เจนเจพเจ เจเจฟ เจเฉฑเจฅเฉ เจนเฉ
เจเฉเฉฑเจเจธเจฎ เจเจฃเจจเจพ เจซเฉฐเจเจธเจผเจจ:
#define MAX_CSUM_WORDS 32
#define MAX_CSUM_BYTES (MAX_CSUM_WORDS * 2)
INTERNAL u32
sum16(const void* data, u32 size, const void* data_end) {
u32 s = 0;
#pragma unroll
for (u32 i = 0; i < MAX_CSUM_WORDS; i++) {
if (2*i >= size) {
return s; /* normal exit */
}
if (data + 2*i + 1 + 1 > data_end) {
return 0; /* should be unreachable */
}
s += ((const u16*)data)[i];
}
return s;
}
เจนเจพเจฒเจพเจเจเจฟ size
เจเจพเจฒเจฟเฉฐเจ เจเฉเจก เจฆเฉเจเจฐเจพ เจเจพเจเจ เจเฉเจคเฉ เจเจ, เจฆเฉเจเฉ เจเจเจเจผเจฟเจ เจธเจผเจฐเจค เจเจผเจฐเฉเจฐเฉ เจนเฉ เจคเจพเจ เจเฉ เจตเฉเจฐเฉเจซเจพเจเจฐ เจฒเฉเจช เจฆเฉ เจ
เฉฐเจค เจจเฉเฉฐ เจธเจพเจฌเจค เจเจฐ เจธเจเฉเฅค
32-เจฌเจฟเฉฑเจ เจธเจผเจฌเจฆเจพเจ เจฒเจ, เจเฉฑเจ เจธเจฐเจฒ เจธเฉฐเจธเจเจฐเจฃ เจฒเจพเจเฉ เจเฉเจคเจพ เจเจฟเจ เจนเฉ:
INTERNAL u32
sum16_32(u32 v) {
return (v >> 16) + (v & 0xffff);
}
เจ เจธเจฒ เจตเจฟเฉฑเจ เจเฉเฉฑเจเจธเจฎเจพเจ เจฆเฉ เจฎเฉเฉ เจเจฃเจจเจพ เจเจฐเจจเจพ เจ เจคเฉ เจชเฉเจเฉเจ เจจเฉเฉฐ เจตเจพเจชเจธ เจญเฉเจเจฃเจพ:
ip->check = 0;
ip->check = carry(sum16(ip, ip_len, data_end));
u32 tcp_csum = 0;
tcp_csum += sum16_32(ip->saddr);
tcp_csum += sum16_32(ip->daddr);
tcp_csum += 0x0600;
tcp_csum += tcp_len << 8;
tcp->check = 0;
tcp_csum += sum16(tcp, tcp_len, data_end);
tcp->check = carry(tcp_csum);
return XDP_TX;
เจซเฉฐเจเจธเจผเจจ carry()
RFC 32 เจฆเฉ เจ
เจจเฉเจธเจพเจฐ, 16-เจฌเจฟเฉฑเจ เจธเจผเจฌเจฆเจพเจ เจฆเฉ 791-เจฌเจฟเฉฑเจ เจเฉเฉ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ เจเฉเฉฑเจเจธเจฎ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉเฅค
TCP เจนเฉเจเจกเจธเจผเฉเจ เจเฉเฉฑเจ
เจซเจฟเจฒเจเจฐ เจธเจนเฉ เจขเฉฐเจ เจจเจพเจฒ เจจเจพเจฒ เจเฉฑเจ เจเฉเจจเฉเจเจธเจผเจจ เจธเจฅเจพเจชเจค เจเจฐเจฆเจพ เจนเฉ netcat
, เจซเจพเจเจจเจฒ ACK เจจเฉเฉฐ เจเฉฑเจกเจฃเจพ, เจเจฟเจธ เจฒเจ เจฒเฉเจจเจเจธ เจจเฉ เจเฉฑเจ RST เจชเฉเจเฉเจ เจจเจพเจฒ เจเจตเจพเจฌ เจฆเจฟเฉฑเจคเจพ, เจเจฟเจเจเจเจฟ เจจเฉเฉฑเจเจตเจฐเจ เจธเจเฉเจ เจจเฉเฉฐ เจเฉฑเจ SYN เจจเจนเฉเจ เจฎเจฟเจฒเจฟเจ - เจเจธเจจเฉเฉฐ SYNACK เจตเจฟเฉฑเจ เจฌเจฆเจฒเจฟเจ เจเจฟเจ เจ
เจคเฉ เจตเจพเจชเจธ เจญเฉเจเจฟเจ เจเจฟเจ - เจ
เจคเฉ OS เจฆเฉ เจฆเฉเจฐเจฟเจธเจผเจเฉเจเฉเจฃ เจคเฉเจ, เจเฉฑเจ เจชเฉเจเฉเจ เจเจเจ เจเฉ เจจเจนเฉเจ เจธเฉเฅค เจเฉเฉฑเจฒเฉ เจเฉเจจเฉเจเจธเจผเจจเจพเจ เจจเจพเจฒ เจธเจฌเฉฐเจงเจค.
$ sudo ip netns exec xdp-test nc -nv 192.0.2.1 6666
192.0.2.1 6666: Connection reset by peer
เจชเฉเจฐเฉเจเจ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจฆเฉ เจเจพเจเจ เจเจฐเจจเจพ เจ
เจคเฉ เจจเจฟเจฐเฉเจเจฃ เจเจฐเจจเจพ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉ tcpdump
'เจคเฉ xdp-remote
เจเจฟเจเจเจเจฟ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, hping3
เจเจฒเจค เจเฉเฉฑเจเจธเจฎเจพเจ เจฆเจพ เจเจตเจพเจฌ เจจเจนเฉเจ เจฆเจฟเฉฐเจฆเจพเฅค
SYN เจเฉเจเฉ
XDP เจฆเฉ เจฆเฉเจฐเจฟเจธเจผเจเฉเจเฉเจฃ เจคเฉเจ, เจเฉเฉฑเจ เจเจชเจฃเฉ เจเจช เจตเจฟเฉฑเจ เจฎเจพเจฎเฉเจฒเฉ เจนเฉ. เจเจฃเจจเจพ เจเจฒเจเฉเจฐเจฟเจฆเจฎ เจฎเฉเฉฑเจขเจฒเจพ เจนเฉ เจ เจคเฉ เจธเฉฐเจญเจพเจตเจค เจคเฉเจฐ 'เจคเฉ เจเฉฑเจ เจธเฉเจเจตเจพเจจ เจนเจฎเจฒเจพเจตเจฐ เจฒเจ เจเจฎเจเจผเฉเจฐ เจนเฉเฅค เจฒเฉเจจเจเจธ เจเจฐเจจเจฒ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเฉเจฐเจฟเจชเจเฉเจเฉเจฐเจพเจซเจฟเจ SipHash เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเจพ เจนเฉ, เจชเจฐ XDP เจฒเจ เจเจธเจฆเจพ เจฒเจพเจเฉ เจเจฐเจจเจพ เจธเจชเจธเจผเจ เจคเฉเจฐ 'เจคเฉ เจเจธ เจฒเฉเจ เจฆเฉ เจฆเจพเจเจฐเฉ เจคเฉเจ เจฌเจพเจนเจฐ เจนเฉเฅค
เจฌเจพเจนเจฐเฉ เจชเจฐเจธเจชเจฐ เจชเฉเจฐเจญเจพเจต เจจเจพเจฒ เจธเจฌเฉฐเจงเจค เจจเจตเฉเจ TODOs เจฒเจ เจชเฉเจฐเจเจ เจนเฉเจเจ:
-
XDP เจชเฉเจฐเฉเจเจฐเจพเจฎ เจธเจเฉเจฐ เจจเจนเฉเจ เจเจฐ เจธเจเจฆเจพ
cookie_seed
(เจฒเฉเจฃ เจฆเจพ เจเฉเจชเจค เจนเจฟเฉฑเจธเจพ) เจเฉฑเจ เจเจฒเฉเจฌเจฒ เจตเฉเจฐเฉเจเจฌเจฒ เจตเจฟเฉฑเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจ เจเจฐเจจเจฒ เจธเจเฉเจฐ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเจฟเจธเจฆเจพ เจฎเฉเฉฑเจฒ เจธเจฎเฉเจ-เจธเจฎเฉเจ เจคเฉ เจเฉฑเจ เจญเจฐเฉเจธเฉเจฏเฉเจ เจเจจเจฐเฉเจเจฐ เจคเฉเจ เจ เจชเจกเฉเจ เจเฉเจคเจพ เจเจพเจตเฉเจเจพเฅค -
เจเฉเจเจฐ ACK เจชเฉเจเฉเจ เจตเจฟเฉฑเจ SYN เจเฉเจเฉ เจฎเฉเจฒ เจเจพเจเจฆเฉ เจนเฉ, เจคเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจ เจธเฉเจจเฉเจนเจพ เจชเฉเจฐเจฟเฉฐเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉ, เจชเจฐ เจเจธ เจคเฉเจ เจชเฉเจเฉเจ เจจเฉเฉฐ เจเฉฑเจกเจฃ เจฒเจ เจชเฉเจฐเจฎเจพเจฃเจฟเจค เจเจฒเจพเจเฉฐเจ เจฆเจพ IP เจฏเจพเจฆ เจฐเฉฑเจเฉเฅค
เจเฉฑเจ เจเจพเจเจเจผ เจเจพเจนเจ เจฆเฉเจเจฐเจพ เจชเฉเจฐเจฎเจพเจฃเจฟเจเจคเจพ:
$ sudoip netns exec xdp-test nc -nv 192.0.2.1 6666
192.0.2.1 6666: Connection reset by peer
เจฒเจพเจเจพเจ เจจเฉ เจเฉเฉฑเจ เจฆเฉ เจฌเฉเจคเจฃ เจจเฉเฉฐ เจฐเจฟเจเจพเจฐเจก เจเฉเจคเจพ (flags=0x2
SYN เจนเฉ flags=0x10
ACK เจนเฉ):
Ether(proto=0x800)
IP(src=0x20e6e11a dst=0x20e6e11e proto=6)
TCP(sport=50836 dport=6666 flags=0x2)
Ether(proto=0x800)
IP(src=0xfe2cb11a dst=0xfe2cb11e proto=6)
TCP(sport=50836 dport=6666 flags=0x10)
cookie matches for client 20200c0
เจเจฆเฉเจ เจคเฉฑเจ เจชเฉเจฐเจฎเจพเจฃเจฟเจค IP เจฆเฉ เจเฉเจ เจธเฉเจเฉ เจจเจนเฉเจ เจนเฉ, เจเจฆเฉเจ เจคเฉฑเจ SYN เจนเฉเฉเจน เจฆเฉ เจตเจฟเจฐเฉเฉฑเจง เจเฉเจ เจธเฉเจฐเฉฑเจเจฟเจ เจจเจนเฉเจ เจนเฉเจตเฉเจเฉ, เจชเจฐ เจเฉฑเจฅเฉ เจเจธ เจเจฎเจพเจเจก เจฆเฉเจเจฐเจพ เจฒเจพเจเจ เจเฉเจคเฉ เจเจ ACK เจนเฉเฉเจน เจฆเฉ เจชเฉเจฐเจคเฉเจเฉเจฐเจฟเจ เจนเฉ:
sudo ip netns exec xdp-test hping3 --flood -A -s 1111 -p 2222 192.0.2.1
เจฒเฉเจ เจเจเจเจฐเฉเจเจ:
Ether(proto=0x800)
IP(src=0x15bd11a dst=0x15bd11e proto=6)
TCP(sport=3236 dport=2222 flags=0x10)
cookie mismatch
เจธเจฟเฉฑเจเจพ
เจเจ เจตเจพเจฐ เจเจฎ เจคเฉเจฐ 'เจคเฉ eBPF เจ เจคเฉ เจเจพเจธ เจคเฉเจฐ 'เจคเฉ XDP เจจเฉเฉฐ เจเฉฑเจ เจตเจฟเจเจพเจธ เจชเจฒเฉเจเจซเจพเจฐเจฎ เจฆเฉ เจฌเจเจพเจ เจเฉฑเจ เจเฉฑเจจเจค เจชเฉเจฐเจธเจผเจพเจธเจ เจฆเฉ เจธเจพเจงเจจ เจตเจเฉเจ เจชเฉเจธเจผ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค เจฆเจฐเจ เจธเจฒ, XDP เจเจฐเจจเจฒ เจชเฉเจเฉเจ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจตเจฟเฉฑเจ เจฆเจเจฒ เจฆเฉเจฃ เจฒเจ เจเฉฑเจ เจเฉเจฒ เจนเฉ, เจจเจพ เจเจฟ เจเจฐเจจเจฒ เจธเจเฉเจ เจฆเจพ เจตเจฟเจเจฒเจช, เจเจฟเจตเฉเจ เจเจฟ DPDK เจ เจคเฉ เจนเฉเจฐ เจเจฐเจจเจฒ เจฌเจพเจเจชเจพเจธ เจตเจฟเจเจฒเจชเฅค เจฆเฉเจเฉ เจชเจพเจธเฉ, XDP เจคเฉเจนเจพเจจเฉเฉฐ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจคเจฐเจ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉ, เจเฉ เจเจฟ, เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, เจเฉเจฐเฉเจซเจฟเจ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจตเจฟเฉฑเจ เจตเจฟเจฐเจพเจฎ เจฆเฉ เจฌเจฟเจจเจพเจ เจ เจชเจกเฉเจ เจเจฐเจจเจพ เจเจธเจพเจจ เจนเฉ. เจตเฉเจฐเฉเจซเจพเจเจฐ เจตเฉฑเจกเฉเจเจ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจชเฉเจฆเจพ เจจเจนเฉเจ เจเจฐเจฆเจพ เจนเฉ, เจจเจฟเฉฑเจเฉ เจคเฉเจฐ 'เจคเฉ เจฎเฉเจ เจฏเฉเจเจผเจฐเจธเจชเฉเจธ เจเฉเจก เจฆเฉ เจเฉเจ เจนเจฟเฉฑเจธเจฟเจเจ เจฒเจ เจเจธ เจคเฉเจ เจเจจเจเจพเจฐ เจจเจนเฉเจ เจเจฐเจพเจเจเจพเฅค
เจฆเฉเจเฉ เจญเจพเจ เจตเจฟเฉฑเจ, เจเฉเจเจฐ เจตเจฟเจธเจผเจพ เจฆเจฟเจฒเจเจธเจช เจนเฉ, เจคเจพเจ เจ เจธเฉเจ เจชเฉเจฐเจฎเจพเจฃเจฟเจค เจเจพเจนเจเจพเจ เจฆเฉ เจธเจพเจฐเจฃเฉ เจจเฉเฉฐ เจชเฉเจฐเจพ เจเจฐเจพเจเจเฉ เจ เจคเฉ เจเจจเฉเจเจธเจผเจจเจพเจ เจจเฉเฉฐ เจคเฉเฉเจพเจเจเฉ, เจเจพเจเจเจเจฐเจพเจ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจพเจเจเฉ เจ เจคเฉ เจซเจฟเจฒเจเจฐ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจฏเฉเจเจผเจฐเจธเจชเฉเจธ เจเจชเจฏเฉเจเจคเจพ เจฒเจฟเจเจพเจเจเฉเฅค
เจฒเจฟเฉฐเจ:
GitHub 'เจคเฉ เจชเฉเจฐเจพ เจเฉเจก bpftrace เจเฉเจ เจธเจผเฉเจ BPF เจ เจคเฉ XDP เจธเฉฐเจฆเจฐเจญ เจเจพเจเจก XDP เจเจฟเจเจเฉเจฐเจฟเจ เจฒ PoC: Rust เจคเฉเจ eBPF เจจเฉเฉฐ เจเฉฐเจชเจพเจเจฒ เจเจฐเจจเจพ
เจธเจฐเฉเจค: www.habr.com