XDP

xdp-tutorial packet03-redirectingをやってみる

github.com 前提 alias t='sudo ../testenv/testenv.sh' Assignment1 ICMP echoサーバーを実装するというもの。 テスト環境構築 t setup --name test --legacy-ip コード修正 まずは以下を実施する。 swap_src_dst_mac()の実装 swap_src_dst_ipv6()の実装 sw…

xdp-tutorial packet02-rewritingをやってみる

github.com bpf_xdp_adjust_head()はパケットの先頭ポインタをずらすことができる。 つまり、パケット長が長くしたり、パケット長を短くするときに使える。(例えば、encap処理やdecap処理)bpf_xdp_adjust_headのあるパラメータに正の値を与えると、パケッ…

xdp-tutorial packet01-parsingをやってみる

github.com packet01-parsingでは以下を行う。 指定したICMPパケットを許可し、それ以外のICMPパケットはドロップする。 ICMPパケットでないものは許可。 Assignment1 parse_ethhdr()のbouds checkのバグフィックスをする。 テスト環境構築 sudo ../testenv/…

xdp-tutorial basic04-pinning-mapsをやってみる

github.com Assignment1 eBPFプログラムが再ロードされた場合、xdp_statsプログラムでそれを検知して、mapを再取得するというもの。 解いてみる 誤ったファイルディスクリプタを使っていないかbpfマップを検証する関数を実装する 問題文に書いてある通り、新…

xdp-tutorial basic03-map-counterをやってみる

github.com Assignment 1 現状の実装にbyteカウンタの機能を追加するというもの。 解いてみる xdp_stats_mapのエントリの構造体にbyteカウンタのフィールドを追加する eBPFマップは以下のように定義されている。 struct { __uint(type, BPF_MAP_TYPE_ARRAY);…

perfがうまくいかなかったメモ

xdp_exceptionのイベントを確認したくて、perfを実行したら、以下のようにエラーに遭遇した。 sudo perf record -a -e xdp:xdp_exception sleep 4 event syntax error: 'xdp:xdp_exception' \___ unsupported tracepoint libtraceevent is necessary for tra…

XDPプログラムをCLIでロード/アンロードする方法

iproute2 ロード sudo ip link set dev DEVICE [ { xdp | xdpgeneric | xdpdrv | xdpoffload } { object FILE [ section NAME ] [ verbose ] | pinned FILE } ] アンロード sudo ip link set dev DEVICE xdpgeneric off xdp-loader xdp-loaderはxdp-toolsに…