bpftool-net(8) System Manager's Manual bpftool-net(8)

bpftool-net - ابزاری برای بازرسی و مدیریت برنامه‌های BPF متصل به شبکه

bpftool [OPTIONS] net COMMAND

OPTIONS := { { -j | --json } [{ -p | --pretty }] | { -d | --debug } }

COMMANDS := { show | list | attach | detach | help }

bpftool net { show | list } [ dev NAME ]
bpftool net attach ATTACH_TYPE PROG dev NAME [ overwrite | prepend ]
bpftool net detach ATTACH_TYPE dev NAME
bpftool net help
PROG := { id PROG_ID | pinned FILE | tag PROG_TAG | name PROG_NAME }
ATTACH_TYPE := { xdp | xdpgeneric | xdpdrv | xdpoffload | tcx_ingress | tcx_egress }

فهرست کردن اتصالات برنامه‌های bpf در زیرسیستم شبکه هسته.

در حال حاضر، اتصالات xdp درایور دستگاه، tcx، netkit و اتصالات قدیمی کلاسیفایر/اکشن tc (از نوع old-style tc classifier/action)، flow_dissector و همچنین اتصالات netfilter پیاده‌سازی شده‌اند؛ یعنی برای انواع برنامه‌های BPF_PROG_TYPE_XDP، BPF_PROG_TYPE_SCHED_CLS، BPF_PROG_TYPE_SCHED_ACT، BPF_PROG_TYPE_FLOW_DISSECTOR و BPF_PROG_TYPE_NETFILTER.

برای برنامه‌های متصل به یک cgroup خاص، مانند BPF_PROG_TYPE_CGROUP_SKB، BPF_PROG_TYPE_CGROUP_SOCK، BPF_PROG_TYPE_SOCK_OPS و BPF_PROG_TYPE_CGROUP_SOCK_ADDR، کاربران می‌توانند از bpftool cgroup برای مشاهده و استخراج اتصالات cgroup استفاده کنند. برای برنامه‌های bpf از نوع sk_{filter, skb, msg, reuseport} و lwt/seg6، کاربران باید به ابزارهای دیگر، مانند iproute2 مراجعه کنند.

خروجی فعلی با تمام اتصالات برنامه‌های xdp آغاز می‌شود، به دنبال آن تمام اتصالات tcx، netkit، سپس اتصالات برنامه‌های bpf کلاس/qdisc مربوط به tc، سپس flow_dissector و در نهایت برنامه‌های netfilter قرار می‌گیرند. هر دو گروه برنامه‌های xdp و برنامه‌های tcx/netkit/tc بر اساس شماره ifindex مرتب می‌شوند. اگر چندین برنامه bpf از طریق tc به یک دستگاه شبکه متصل شده باشند، ترتیب آن‌ها ابتدا تمام برنامه‌های bpf متصل به tcx، netkit، سپس کلاس‌های tc، سپس تمامی برنامه‌های bpf متصل به qdiscهای غیر clsact و در نهایت تمامی برنامه‌های bpf متصل به root و qdiscهای clsact خواهد بود.

متصل کردن برنامه bpf مشخص‌شده با PROG به رابط شبکه NAME با نوع مشخص‌شده توسط ATTACH_TYPE.

ATTACH_TYPE می‌تواند یکی از موارد زیر باشد:
xdp - امتحان XDP بومی (native) و در صورت عدم پشتیبانی درایور کارت شبکه (NIC)، بازگشت به XDP عمومی (generic)؛
xdpgeneric - نوع Generic XDP؛ در قلاب XDP عمومی هنگامی که بسته از قبل به صورت skb وارد مسیر دریافت شده است اجرا می‌شود؛
xdpdrv - نوع Native XDP؛ در اولین نقطه ممکن در مسیر دریافت درایور اجرا می‌شود؛
xdpoffload - نوع Offload XDP؛ مستقیماً روی کارت شبکه (NIC) در زمان دریافت هر بسته اجرا می‌شود؛
tcx_ingress - نوع Ingress TCX؛ روی ترافیک ورودی شبکه اجرا می‌شود؛
tcx_egress - نوع Egress TCX؛ روی ترافیک خروجی شبکه اجرا می‌شود؛

برای انواع اتصالات مرتبط با XDP (xdp، xdpgeneric، xdpdrv، xdpoffload)، گزینه overwrite می‌تواند برای جایگزینی برنامه‌ای از bpf که قبلاً متصل شده است استفاده شود.

برای انواع اتصال tcx_ingress و tcx_egress، گزینه prepend می‌تواند برای متصل کردن برنامه در ابتدای زنجیره به جای انتهای آن استفاده شود.

جدا کردن برنامه bpf متصل به رابط شبکه NAME با نوع مشخص‌شده توسط ATTACH_TYPE. برای جدا کردن برنامه bpf، باید همان ATTACH_TYPE که قبلاً برای اتصال استفاده شده بود مشخص شود.
چاپ پیام راهنمای کوتاه.

چاپ پیام راهنمای کوتاه (مشابه bpftool help).
چاپ شماره نسخه bpftool (مشابه bpftool version)، شماره نسخه libbpf در حال استفاده، و قابلیت‌های اختیاری که هنگام کامپایل bpftool گنجانده شده‌اند. قابلیت‌های اختیاری شامل پیوند با LLVM یا libbfd برای ارائه دیزاسمبلر برای برنامه‌های JIT شده (bpftool prog dump jited) و استفاده از اسکلت‌های BPF (برخی ویژگی‌ها مانند bpftool prog profile یا نمایش pidهای مرتبط با اشیاء BPF ممکن است به آن متکی باشند) می‌شود.
تولید خروجی JSON. برای دستوراتی که نمی‌توانند JSON تولید کنند، این گزینه هیچ تأثیری ندارد.
تولید خروجی JSON خوانا برای انسان. مستلزم -j است.
چاپ تمام لاگ‌های موجود، حتی اطلاعات در سطح دیباگ (debug-level). این شامل لاگ‌های libbpf و همچنین لاگ‌های اعتبارسنج (verifier) در هنگام تلاش برای بارگذاری برنامه‌ها است.

# bpftool net
xdp:
eth0(2) driver id 198
tc:
eth0(2) htb name prefix_matcher.o:[cls_prefix_matcher_htb] id 111727 act []
eth0(2) clsact/ingress fbflow_icmp id 130246 act []
eth0(2) clsact/egress prefix_matcher.o:[cls_prefix_matcher_clsact] id 111726
eth0(2) clsact/egress cls_fg_dscp id 108619 act []
eth0(2) clsact/egress fbflow_egress id 130245
# bpftool -jp net
[{
        "xdp": [{
                "devname": "eth0",
                "ifindex": 2,
                "mode": "driver",
                "id": 198
            }
        ],
        "tc": [{
                "devname": "eth0",
                "ifindex": 2,
                "kind": "htb",
                "name": "prefix_matcher.o:[cls_prefix_matcher_htb]",
                "id": 111727,
                "act": []
            },{
                "devname": "eth0",
                "ifindex": 2,
                "kind": "clsact/ingress",
                "name": "fbflow_icmp",
                "id": 130246,
                "act": []
            },{
                "devname": "eth0",
                "ifindex": 2,
                "kind": "clsact/egress",
                "name": "prefix_matcher.o:[cls_prefix_matcher_clsact]",
                "id": 111726,
            },{
                "devname": "eth0",
                "ifindex": 2,
                "kind": "clsact/egress",
                "name": "cls_fg_dscp",
                "id": 108619,
                "act": []
            },{
                "devname": "eth0",
                "ifindex": 2,
                "kind": "clsact/egress",
                "name": "fbflow_egress",
                "id": 130245,
            }
        ]
    }
]
# bpftool net attach xdpdrv id 16 dev enp6s0np0
# bpftool net
xdp:
enp6s0np0(4) driver id 16
# bpftool net attach xdpdrv id 16 dev enp6s0np0
# bpftool net attach xdpdrv id 20 dev enp6s0np0 overwrite
# bpftool net
xdp:
enp6s0np0(4) driver id 20
# bpftool net attach xdpdrv id 16 dev enp6s0np0
# bpftool net detach xdpdrv dev enp6s0np0
# bpftool net
xdp:
# bpftool net attach tcx_ingress name tc_prog dev lo
# bpftool net
tc:
lo(1) tcx/ingress tc_prog prog_id 29
# bpftool net attach tcx_ingress name tc_prog2 dev lo prepend
# bpftool net
tc:
lo(1) tcx/ingress tc_prog2 prog_id 30
lo(1) tcx/ingress tc_prog prog_id 29
# bpftool net attach tcx_ingress name tc_prog dev lo
# bpftool net detach tcx_ingress dev lo
# bpftool net
tc:

bpf(2), bpf-helpers(7), bpftool(8), bpftool-btf(8), bpftool-cgroup(8), bpftool-feature(8), bpftool-gen(8), bpftool-iter(8), bpftool-link(8), bpftool-map(8), bpftool-perf(8), bpftool-prog(8), bpftool-struct_ops(8), bpftool-token(8)