.TH "xdp-loader" "8" "SEPTEMBER 12, 2024" "V1.6.3" "XDP program loader" .SH "نام (NAME)" xdp-loader \- بارگذار برنامه‌های XDP .SH "خلاصه دستور (SYNOPSIS)" .PP ابزار XDP-loader یک بارگذار ساده برای برنامه‌های XDP است که از الصاق چندین برنامه به یک رابط شبکه یکسان پشتیبانی می‌کند. برای دستیابی به این هدف، قواعد معنایی بارگذاری و تخلیه ارائه‌شده توسط کتابخانه libxdp را پیاده‌سازی می‌کند. برای جزئیات نحوه کارکرد این ابزار و ویژگی‌های کرنل که به آن‌ها وابسته است، صفحه راهنمای \fIlibxdp(3)\fP را مشاهده کنید. .SS "اجرای xdp-loader" .PP نحو اجرای xdp-loader به صورت زیر است: .RS .nf \fCxdp-loader COMMAND [options] Where COMMAND can be one of: load - load an XDP program on an interface unload - unload an XDP program from an interface status - show current XDP program status features - show XDP features supported by the NIC clean - clean up detached program links in XDP bpffs directory help - show the list of available commands \fP .fi .RE .PP هر دستور و گزینه‌های آن در ادامه توضیح داده شده است. همچنین می‌توانید از \fIxdp\-loader COMMAND \-\-help\fP برای مشاهده گزینه‌های هر دستور استفاده کنید. .SH "دستور LOAD (The LOAD command)" .PP دستور \fIload\fP یک یا چند برنامه XDP را روی یک رابط شبکه بارگذاری می‌کند. .PP نحو دستور \fIload\fP به صورت زیر است: .PP \fIxdp\-loader load [options] \fP .PP که در آن \fI\fP نام رابط شبکه برای بارگذاری برنامه‌ها روی آن است، و \fI\fP یک یا چند نام فایل حاوی برنامه‌های XDP است. برنامه‌ها بر اساس اولویت مشخص‌شده در متادیتای برنامه (به \fBlibxdp(3)\fP مراجعه کنید) روی رابط شبکه بارگذاری خواهند شد. .PP گزینه‌های پشتیبانی‌شده عبارتند از: .SS "-m, --mode " .PP حالتی را که برنامه XDP باید در آن بارگذاری شود مشخص می‌کند. مقادیر معتبر عبارتند از: 'native' که حالت پیش‌فرض XDP درون درایور است، 'skb' که از به اصطلاح \fIحالت skb\fP (معروف به \fIXDP عمومی یا generic XDP\fP) استفاده می‌کند، 'hw' که باعث برون‌سپاری برنامه به سخت‌افزار می‌شود، یا 'unspecified' که انتخاب حالت را به عهده کرنل می‌گذارد (کرنل در صورت پشتیبانی درایور حالت native و در غیر این صورت حالت generic را انتخاب خواهد کرد). توجه داشته باشید که استفاده از 'unspecified' پیش‌بینی حالت نهایی بارگذاری برنامه را دشوار می‌کند. به همین دلیل، پیش‌فرض 'native' است. توجه داشته باشید سخت‌افزارهایی که از حالت 'hw' پشتیبانی می‌کنند نادر هستند: کارت‌های Netronome/Corigine (با درایور 'nfp') تنها دستگاه‌های دارای پشتیبانی از این قابلیت در هسته اصلی لینوکس هستند. .SS "-p, --pin-path " .PP یک مسیر ریشه را مشخص می‌کند که نگاشت‌های (maps) دارای ویژگی 'pinning' در تعاریف خود، زیر آن پین شوند. این مسیر باید روی یک سیستم فایل \fIbpffs\fP قرار داشته باشد. اگر تنظیم نشود، نگاشت‌ها پین نخواهند شد، حتی اگر ویژگی pinning را در تعاریف خود مشخص کرده باشند. هنگام پین کردن نگاشت‌ها، اگر مکان پین‌شده برای یک نگاشت از قبل وجود داشته باشد، در صورت سازگاری با نوع نگاشت در حال بارگذاری، نگاشت پین‌شده قبلی مجدداً استفاده خواهد شد. .SS "-s, --section
" .PP مشخص می‌کند که در هر فایل، برنامه(های) XDP از کدام بخش (section) فایل ELF بارگذاری شوند. پیش‌فرض استفاده از اولین برنامه در هر فایل است. اگر این گزینه تنظیم شود، برای تمام برنامه‌های در حال بارگذاری اعمال خواهد شد. .SS "-n, --prog-name " .PP مشخص می‌کند که در هر فایل، برنامه(های) XDP از کدام برنامه BPF با نام مشخص بارگذاری شوند. پیش‌فرض استفاده از اولین برنامه در هر فایل است. فقط یکی از گزینه‌های --section و --prog-name می‌تواند مشخص شود. اگر این گزینه تنظیم شود، برای تمام برنامه‌های در حال بارگذاری اعمال خواهد شد. .SS "-P, --prio " .PP اولویت بارگذاری برنامه(های) XDP را مشخص می‌کند (این گزینه بر ترتیب اجرای برنامه‌ها روی رابط شبکه تاثیر می‌گذارد). مقدار پیش‌فرض از متادیتای موجود در فایل ELF برنامه گرفته می‌شود، یا در صورت نبود متادیتا، مقدار ۵۰ در نظر گرفته می‌شود. اگر این گزینه تنظیم شود، برای تمام برنامه‌های در حال بارگذاری اعمال خواهد شد. .SS "-A, --actions " .PP «اقدامات فراخوانی زنجیره‌ای» (chain call actions) برنامه(های) XDP بارگذاری‌شده را مشخص می‌کند. این‌ها اقدامات XDP هستند که باعث می‌شوند برنامه بعدی بارگذاری‌شده روی رابط شبکه به جای بازگشت فوری فراخوانی شود. پیش‌فرض استفاده از مقدار تنظیم‌شده در متادیتای فایل ELF برنامه است، یا اگر چنین متادیتایی وجود نداشته باشد، مقدار XDP_PASS استفاده می‌شود. اگر این گزینه تنظیم شود، برای تمام برنامه‌های در حال بارگذاری اعمال خواهد شد. .SS "-v, --verbose" .PP فعال‌سازی گزارش‌گیری اشکال‌زدایی. درج دوباره برای افزایش بیشتر سطح گزارش‌گیری. .SS "-h, --help" .PP نمایش خلاصه‌ای از گزینه‌های موجود .SH "دستور UNLOAD (The UNLOAD command)" .PP دستور \fIunload\fP برای تخلیه برنامه‌ها از یک رابط شبکه استفاده می‌شود. .PP نحو دستور \fIunload\fP به صورت زیر است: .PP \fIxdp\-loader unload [options] \fP .PP که در آن \fI\fP نام رابط شبکه‌ای است که برنامه‌ها از آن تخلیه می‌شوند. برای مشخص کردن برنامه(هایی) که باید تخلیه شوند، باید از گزینه \fI\-\-all\fP یا \fI\-\-id\fP استفاده شود. .PP گزینه‌های پشتیبانی‌شده عبارتند از: .SS "-i, --id " .PP تخلیه یک برنامه منفرد از رابط شبکه بر اساس شناسه (ID). برای دریافت شناسه برنامه مورد نظر جهت تخلیه، از \fIxdp\-loader status\fP استفاده کنید. اگر این برنامه آخرین برنامه بارگذاری‌شده روی رابط شبکه باشد، برنامه توزیع‌کننده (dispatcher) نیز حذف خواهد شد که این عملیات را معادل مشخص کردن \fI\-\-all\fP می‌سازد. .SS "-a, --all" .PP تخلیه تمام برنامه‌های XDP روی رابط شبکه، و همچنین حذف توزیع‌کننده چندبرنامه‌ای. .SS "-v, --verbose" .PP فعال‌سازی گزارش‌گیری اشکال‌زدایی. درج دوباره برای افزایش بیشتر سطح جزئیات. .SS "-h, --help" .PP نمایش خلاصه‌ای از گزینه‌های موجود .SH "دستور STATUS (The STATUS command)" .PP دستور \fIstatus\fP فهرستی از رابط‌های شبکه در سیستم و برنامه(های) XDP بارگذاری‌شده روی هر رابط را نمایش می‌دهد. برای هر رابط شبکه، فهرستی از برنامه‌ها به همراه اولویت اجرا و «اقدامات زنجیره‌ای» برای هر برنامه نشان داده می‌شود. برای مفهوم این متادیتا به بخش متادیتای برنامه مراجعه کنید. .SS "-v, --verbose" .PP فعال‌سازی گزارش‌گیری اشکال‌زدایی. درج دوباره برای افزایش بیشتر سطح جزئیات. .SS "-h, --help" .PP نمایش خلاصه‌ای از گزینه‌های موجود .SH "دستور FEATURES (The FEATURES command)" .PP دستور \fIfeatures\fP قابلیت‌های XDP پشتیبانی‌شده توسط کارت شبکه (NIC) را نمایش می‌دهد. .PP قابلیت‌های XDP که در حال حاضر پشتیبانی می‌شوند عبارتند از: .SS "NETDEV_XDP_ACT_BASIC" .PP دستگاه شبکه از اجرای برنامه‌های XDP پشتیبانی پایه دارد و می‌تواند مجموعه کدهای بازگشتی پایه (XDP_ABORTED, XDP_DROP, XDP_PASS, XDP_TX) را مدیریت کند. .SS "NETDEV_XDP_ACT_REDIRECT" .PP دستگاه شبکه از مدیریت کد بازگشتی XDP_REDIRECT پشتیبانی می‌کند. این بدان معناست که بسته‌ها می‌توانند توسط XDP از این دستگاه بازهدایت شوند. .SS "NETDEV_XDP_ACT_NDO_XMIT" .PP رابط‌های شبکه بازخورد ndo_xdp_xmit را پیاده‌سازی می‌کنند. این به این معنی است که بسته‌ها می‌توانند توسط XDP به این دستگاه بازهدایت شوند. .SS "NETDEV_XDP_ACT_XSK_ZEROCOPY" .PP دستگاه شبکه از AF_XDP در حالت zero copy پشتیبانی می‌کند. .SS "NETDEV_XDP_ACT_HW_OFFLOAD" .PP دستگاه شبکه از برون‌سپاری سخت‌افزاری XDP پشتیبانی می‌کند. .SS "NETDEV_XDP_ACT_RX_SG" .PP دستگاه شبکه از فریم‌های غیرخطی XDP در سمت دریافت (RX) پشتیبانی می‌کند. این به این معناست که XDP می‌تواند با MTUهای بزرگ روی این دستگاه استفاده شود (در صورتی که برنامه XDP با پشتیبانی از fragments کامپایل شده باشد). .SS "NETDEV_XDP_ACT_NDO_XMIT_SG" .PP دستگاه شبکه از فریم‌های غیرخطی XDP در سمت ارسال (TX) پشتیبانی می‌کند. این بدان معناست که فریم‌های غیرخطی می‌توانند به این دستگاه بازهدایت شوند. .SH "دستور CLEAN (The CLEAN command)" .PP نحو دستور \fIclean\fP به صورت زیر است: .PP \fIxdp\-loader clean [options] [ifname]\fP .PP دستور \fIclean\fP پیوندهای برنامه‌های جداشده (detached) در پوشه bpffs مربوط به XDP را پاکسازی می‌کند. هنگامی که یک رابط شبکه ناپدید می‌شود، هر برنامه‌ای که در حالت نرم‌افزاری (مانند skb یا native) بارگذاری شده باشد در پوشه bpffs پین‌شده باقی می‌ماند، اما ارتباط آن با رابط قطع می‌شود. این پیوندها باید از سیستم فایل حذف شوند. دستور \fIclean\fP یک پارامتر اختیاری نام رابط شبکه می‌گیرد تا تنها برنامه‌های جداشده مربوط به همان رابط را حذف کند. به طور پیش‌فرض، تمامی برنامه‌های جداشده برای تمام رابط‌ها حذف می‌شوند. .PP گزینه‌های پشتیبانی‌شده عبارتند از: .SS "-v, --verbose" .PP فعال‌سازی گزارش‌گیری اشکال‌زدایی. درج دوباره برای افزایش بیشتر سطح جزئیات. .SS "-h, --help" .PP نمایش خلاصه‌ای از گزینه‌های موجود .SH "مثال‌ها (EXAMPLES)" .PP برای بارگذاری یک برنامه XDP روی رابط eth0 کافیست دستور زیر را اجرا کنید: .RS .nf \fC# xdp-loader load eth0 xdp_drop.o # xdp-loader status CURRENT XDP PROGRAM STATUS: Interface Prio Program name Mode ID Tag Chain actions ------------------------------------------------------------------------------------- lo eth0 xdp_dispatcher native 50 d51e469e988d81da => 50 xdp_drop 55 57cd311f2e27366b XDP_PASS \fP .fi .RE .PP خروجی نشان می‌دهد که یک برنامه توزیع‌کننده (dispatcher) روی رابط بارگذاری شده و برنامه xdp_drop به عنوان اولین (و تنها) مؤلفه بعد از آن نصب شده است. در این مورد، برنامه هیچ‌یک از متادیتای فوق را مشخص نکرده است، بنابراین مقادیر پیش‌فرض (اولویت ۵۰ و اقدام زنجیره‌ای XDP_PASS) اعمال شده‌اند. .PP برای استفاده از پین کردن خودکار نگاشت‌ها، ویژگی \fIpinning\fP را در تعریف نگاشت درون برنامه بگنجانید، مانند: .RS .nf \fCstruct { __uint(type, BPF_MAP_TYPE_ARRAY); __uint(max_entries, 10); __type(key, __u32); __type(value, __u64); __uint(pinning, LIBBPF_PIN_BY_NAME); } my_map SEC(".maps"); \fP .fi .RE .PP و آن را با گزینه \fI\-\-pin\-path\fP بارگذاری کنید: .RS .nf \fC# xdp-loader load eth0 my_prog.o --pin-path /sys/fs/bpf/my-prog \fP .fi .RE .PP این دستور نگاشت را در مسیر \fI/sys/fs/bpf/my\-prog/my_map\fP پین می‌کند. اگر این مسیر از قبل وجود داشته باشد، به جای ایجاد نگاشت جدید از همان نگاشت پین‌شده مجدداً استفاده می‌شود که این کار اجازه می‌دهد برنامه‌های مختلف BPF نگاشت را به اشتراک بگذارند. .SH "همچنین ببینید (SEE ALSO)" .PP برای جزئیات بیشتر در مورد قواعد معنایی بارگذاری XDP و نیازمندی‌های سازگاری کرنل به \fIlibxdp(3)\fP مراجعه کنید. .SH "گزارش باگ‌ها (BUGS)" .PP لطفاً باگ‌ها را در گیت‌هاب گزارش دهید: \fIhttps://github.com/xdp-project/xdp-tools/issues\fP .SH "نویسنده (AUTHOR)" .PP ابزار xdp-loader و این صفحه راهنما توسط Toke Høiland-Jørgensen نوشته شده‌اند.