.\" -*- coding: UTF-8 -*- .\" Copyright 1999, Andi Kleen .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-1-para .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH packet 7 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم packet \- واجهة الحزمة على مستوى الجهاز .SH موجز .nf \fB#include \fP \fB#include \fP \fB#include /* the L2 protocols */\fP .P \fBpacket_socket = socket(AF_PACKET, int \fP\fIsocket_type\fP\fB, int \fP\fIprotocol\fP\fB);\fP .fi .SH الوصف تُستخدم مقابس الحزمة لاستقبال أو إرسال حزم خام على مستوى برنامج تشغيل الجهاز (الطبقة الثانية من OSI). تسمح للمستخدم بتنفيذ وحدات البروتوكول في مساحة المستخدم فوق الطبقة المادية. .P \fIsocket_type\fP إما \fBSOCK_RAW\fP للحزم الخام بما في ذلك رأس طبقة الوصلة أو \fBSOCK_DGRAM\fP للحزم المطبوخة مع إزالة رأس طبقة الوصلة. تتوفر معلومات رأس طبقة الوصلة بتنسيق شائع في بنية \fIsockaddr_ll\fP. \fIprotocol\fP هو رقم بروتوكول IEEE 802.3 بترتيب بايت الشبكة. راجع ملف التضمين \fI\fP للحصول على قائمة البروتوكولات المسموح بها. عند تعيين البروتوكول إلى \fBhtons(ETH_P_ALL)\fP، تُستقبل جميع البروتوكولات. تُمرر جميع الحزم الواردة من ذلك النوع البروتوكولي إلى مقبس الحزمة قبل تمريرها إلى البروتوكولات المنفذة في النواة. إذا تم تعيين \fIprotocol\fP إلى صفر، لا تُستقبل أي حزم. يمكن استدعاء \fBbind\fP(2) اختياريًا مع \fIsll_protocol\fP غير صفري لبدء استقبال حزم للبروتوكولات المحددة. .P لإنشاء مقبس حزمة، يجب أن تمتلك العملية القدرة \fBCAP_NET_RAW\fP في مساحة المستخدم التي تحكم مساحة الشبكة الخاصة بها. .P تُمرر حزم \fBSOCK_RAW\fP إلى برنامج تشغيل الجهاز ومنه دون أي تغييرات في بيانات الحزمة. عند استقبال حزمة، يُحلل العنوان ويُمرر في بنية عنوان \fIsockaddr_ll\fP قياسية. عند إرسال حزمة، يجب أن يحتوي المخزن المؤقت المقدم من المستخدم على رأس الطبقة المادية. ثم تُصطف تلك الحزمة دون تعديل إلى برنامج تشغيل الشبكة للواجهة المحددة بواسطة العنوان الوجهة. تضيف بعض برامج تشغيل الأجهزة دائمًا رؤوسًا أخرى. \fBSOCK_RAW\fP مشابه لـ \fBAF_INET/SOCK_PACKET\fP القديم في Linux 2.0 ولكنه غير متوافق معه. .P يعمل \fBSOCK_DGRAM\fP على مستوى أعلى قليلاً. يُزال الرأس المادي قبل تمرير الحزمة إلى المستخدم. تحصل الحزم المرسلة عبر مقبس حزمة \fBSOCK_DGRAM\fP على رأس طبقة مادية مناسب بناءً على المعلومات في عنوان الوجهة \fIsockaddr_ll\fP قبل أن تُصطف. .P افتراضيًا، تُمرر جميع الحزم من نوع البروتوكول المحدد إلى مقبس حزمة. للحصول على حزم من واجهة محددة فقط، استخدم \fBbind\fP(2) مع تحديد عنوان في \fIstruct sockaddr_ll\fP لربط مقبس الحزمة بواجهة. الحقول المستخدمة للربط هي \fIsll_family\fP (يجب أن يكون \fBAF_PACKET\fP) و \fIsll_protocol\fP و \fIsll_ifindex\fP. .P عملية \fBconnect\fP(2) غير مدعومة على مقابس الحزمة. .P عند تمرير العلم \fBMSG_TRUNC\fP إلى \fBrecvmsg\fP(2) أو \fBrecv\fP(2) أو \fBrecvfrom\fP(2)، يُعاد دائمًا الحجم الحقيقي للحزمة على السلك، حتى عندما يكون أطول من المخزن المؤقت. .SS "أنواع العناوين" بنية \fIsockaddr_ll\fP هي عنوان طبقة مادية مستقل عن الجهاز. .P .in +4n .EX struct sockaddr_ll { unsigned short sll_family; /* Always AF_PACKET */ unsigned short sll_protocol; /* Physical\-layer protocol */ int sll_ifindex; /* Interface number */ unsigned short sll_hatype; /* ARP hardware type */ unsigned char sll_pkttype; /* Packet type */ unsigned char sll_halen; /* Size of address */ unsigned char sll_addr[8]; /* Physical\-layer address */ }; .EE .in .P حقول هذا الهيكل هي كالتالي: .TP \fIsll_protocol\fP هو نوع بروتوكول الإيثرنت القياسي بترتيب بايت الشبكة كما هو معرف في ملف التضمين \fI\fP. المبدئي هو بروتوكول المقبس. .TP \fIsll_ifindex\fP هو فهرس الواجهة (انظر \fBnetdevice\fP(7))؛ 0 يطابق أي واجهة (مسموح به فقط للربط). \fIsll_hatype\fP هو نوع ARP كما هو معرف في ملف التضمين \fI\fP. .TP \fIsll_pkttype\fP يحتوي على نوع الحزمة. الأنواع الصالحة هي \fBPACKET_HOST\fP لحزمة موجهة إلى المضيف المحلي، \fBPACKET_BROADCAST\fP لحزمة بث على الطبقة المادية، \fBPACKET_MULTICAST\fP لحزمة مرسلة إلى عنوان متعدد الإرسال على الطبقة المادية، \fBPACKET_OTHERHOST\fP لحزمة إلى مضيف آخر تم التقاطها بواسطة برنامج تشغيل جهاز في وضع غير انتقائي، و \fBPACKET_OUTGOING\fP لحزمة صادرة من المضيف المحلي تُعاد حلقياً إلى مقبس حزمة. هذه الأنواع منطقية فقط للاستقبال. .TP \fIsll_addr\fP .TQ \fIsll_halen\fP يحتويان على عنوان الطبقة المادية (مثل IEEE 802.3) وحجمه. يعتمد التفسير الدقيق على الجهاز. .P عند إرسال الحزم، يكفي تحديد \fIsll_family\fP و \fIsll_addr\fP و \fIsll_halen\fP و \fIsll_ifindex\fP و \fIsll_protocol\fP. يجب أن تكون الحقول الأخرى 0. تُضبط \fIsll_hatype\fP و \fIsll_pkttype\fP على الحزم المستلمة لمعلوماتك. .SS "خيارات المقبس" تُهيأ خيارات مقبس الرزم باستدعاء \fBsetsockopt\fP(2) بمستوى \fBSOL_PACKET\fP. .TP \fBPACKET_ADD_MEMBERSHIP\fP .PD 0 .TP \fBPACKET_DROP_MEMBERSHIP\fP .PD يمكن استخدام مقابس الرزم لتهيئة البث المتعدد على الطبقة المادية والوضع غير الانتقائي. يضيف \fBPACKET_ADD_MEMBERSHIP\fP ربطًا ويسقطه \fBPACKET_DROP_MEMBERSHIP\fP. يتوقع كلاهما بنية \fIpacket_mreq\fP كوسيطة: .IP .in +4n .EX struct packet_mreq { int mr_ifindex; /* interface index */ unsigned short mr_type; /* action */ unsigned short mr_alen; /* address size */ unsigned char mr_address[8]; /* physical\-layer address */ }; .EE .in .IP يحتوي \fImr_ifindex\fP على دليل الواجهة للواجهة التي يجب تغيير حالتها. يحدد حقل \fImr_type\fP الإجراء الذي سيُنفذ. يُفعّل \fBPACKET_MR_PROMISC\fP استقبال جميع الرزم على وسيط مشترك (يُعرف غالبًا باسم "الوضع غير الانتقائي")، ويربط \fBPACKET_MR_MULTICAST\fP المقبس بمجموعة البث المتعدد على الطبقة المادية المحددة في \fImr_address\fP و \fImr_alen\fP، ويُعدّ \fBPACKET_MR_ALLMULTI\fP المقبس لاستقبال جميع رزم البث المتعدد الواصلة إلى الواجهة. .IP بالإضافة إلى ذلك، يمكن استخدام ioctls التقليدية \fBSIOCSIFFLAGS\fP و \fBSIOCADDMULTI\fP و \fBSIOCDELMULTI\fP لنفس الغرض. .TP \fBPACKET_AUXDATA\fP (منذ لينكس 2.6.21) .\" commit 8dc4194474159660d7f37c495e3fc3f10d0db8cc إذا فُعّل هذا الخيار الثنائي، يمرر مقبس الرزم بنية بيانات وصفية مع كل رزمة في حقل التحكم \fBrecvmsg\fP(2). يمكن قراءة البنية باستخدام \fBcmsg\fP(3). تُعرف كالتالي: .IP .in +4n .EX .\" commit a0cdfcf39362410d5ea983f4daf67b38de129408 added tp_vlan_tpid struct tpacket_auxdata { __u32 tp_status; __u32 tp_len; /* packet size */ __u32 tp_snaplen; /* captured size */ __u16 tp_mac; __u16 tp_net; __u16 tp_vlan_tci; __u16 tp_vlan_tpid; /* Since Linux 3.14; earlier, these were unused padding bytes */ }; .EE .in .TP \fBPACKET_FANOUT\fP (منذ لينكس 3.1) .\" commit dc99f600698dcac69b8f56dda9a8a00d645c5ffc لتوسيع نطاق المعالجة عبر الخيوط، يمكن لمقابس الرزم تشكيل مجموعة توزيع. في هذا الوضع، تُدرج كل رزمة مطابقة في مقبس واحد فقط في المجموعة. ينضم مقبس إلى مجموعة توزيع باستدعاء \fBsetsockopt\fP(2) بمستوى \fBSOL_PACKET\fP وخيار \fBPACKET_FANOUT\fP. يمكن لكل مساحة اسم شبكة أن تحتوي على ما يصل إلى 65536 مجموعة مستقلة. يختار المقبس مجموعة بترميز المعرف في أول 16 بت من قيمة الخيار الصحيحة. ينشئ أول مقبس رزم ينضم إلى مجموعة ضمنيًا. للانضمام بنجاح إلى مجموعة موجودة، يجب أن يكون لمقابس الرزم اللاحقة نفس البروتوكول وإعدادات الجهاز ووضع التوزيع والأعلام (انظر أدناه). يمكن لمقابس الرزم مغادرة مجموعة توزيع فقط بإغلاق المقبس. تُحذف المجموعة عند إغلاق آخر مقبس. .IP يدعم التوزيع خوارزميات متعددة لنشر الحركة المرورية بين المقابس، كالتالي: .RS .IP \[bu] 3 الوضع المبدئي، \fBPACKET_FANOUT_HASH\fP، يرسل الرزم من نفس التدفق إلى نفس المقبس للحفاظ على ترتيب كل تدفق. لكل رزمة، يختار مقبسًا بأخذ تجزئة تدفق الرزمة معامل عدد المقابس في المجموعة، حيث تجزئة التدفق هي تجزئة على عنوان طبقة الشبكة وحقول منفذ طبقة النقل الاختيارية. .IP \[bu] ينفذ وضع موازنة الحمل \fBPACKET_FANOUT_LB\fP خوارزمية round\-robin. .IP \[bu] يختار \fBPACKET_FANOUT_CPU\fP المقبس بناءً على وحدة المعالجة المركزية التي وصلت عليها الرزمة. .IP \[bu] يعالج \fBPACKET_FANOUT_ROLLOVER\fP جميع البيانات على مقبس واحد، منتقلًا إلى التالي عندما يصبح أحدها متراكمًا. .IP \[bu] يختار \fBPACKET_FANOUT_RND\fP المقبس باستخدام مولد أرقام شبه عشوائي. .IP \[bu] .\" commit 2d36097d26b5991d71a2cf4a20c1a158f0f1bfcd يختار \fBPACKET_FANOUT_QM\fP (المتوفر منذ لينكس 3.14) المقبس باستخدام queue_mapping المسجل لـ skb المستلم. .RE .IP يمكن لوضعيات التوزيع أن تأخذ خيارات إضافية. يتسبب تجزئة IP في أن يكون للرزم من نفس التدفق تجزئات تدفق مختلفة. العلم \fBPACKET_FANOUT_FLAG_DEFRAG\fP، إذا ضُبط، يتسبب في إزالة تجزئة الرزم قبل تطبيق التوزيع، للحفاظ على الترتيب حتى في هذه الحالة. يُبلغ عن وضع التوزيع والخيارات في الـ 16 بت الثانية من قيمة الخيار الصحيحة. يُفعّل العلم \fBPACKET_FANOUT_FLAG_ROLLOVER\fP آلية التجاوز كاستراتيجية احتياطية: إذا اختارت خوارزمية التوزيع الأصلية مقبسًا متراكمًا، تتجاوز الرزمة إلى المقبس التالي المتاح. .TP \fBPACKET_LOSS\fP (مع \fBPACKET_TX_RING\fP) عند مواجهة رزمة مشوهة على حلقة إرسال، المبدئي هو إعادة تعيين \fItp_status\fP الخاص بها إلى \fBTP_STATUS_WRONG_FORMAT\fP وإحباط الإرسال فورًا. تمنع الرزمة المشوهة نفسها والرزم المدرجة لاحقًا من الإرسال. يجب إصلاح خطأ التنسيق، وإعادة تعيين \fItp_status\fP المرتبط إلى \fBTP_STATUS_SEND_REQUEST\fP، وإعادة بدء عملية الإرسال عبر \fBsend\fP(2). ومع ذلك، إذا ضُبط \fBPACKET_LOSS\fP، ستُتجاوز أي رزمة مشوهة، ويُعاد تعيين \fItp_status\fP الخاص بها إلى \fBTP_STATUS_AVAILABLE\fP، وتستمر عملية الإرسال. .TP \fBPACKET_RESERVE\fP (مع \fBPACKET_RX_RING\fP) مبدئيًا، تكتب حلقة استقبال الرزم الرزم مباشرة بعد بنية البيانات الوصفية وحشو المحاذاة. يحتفظ هذا الخيار الصحيح بمساحة رأس إضافية. .TP \fBPACKET_RX_RING\fP إنشاء مخزن مؤقت حلقي مرتبط بالذاكرة لاستقبال الرزم غير المتزامن. يحجز مقبس الرزم منطقة متجاورة من مساحة عنوان التطبيق، ويرتبها في مصفوفة من فتحات الرزم، وينسخ الرزم (حتى \fItp_snaplen\fP) في الفتحات المتعاقبة. تسبق كل رزمة بنية بيانات وصفية مشابهة لـ \fItpacket_auxdata\fP. ترمز حقول البروتوكول إلى الإزاحة للبيانات من بداية الرأس الوصفي. يخزن \fItp_net\fP الإزاحة لطبقة الشبكة. إذا كان مقبس الرزم من النوع \fBSOCK_DGRAM\fP، فإن \fItp_mac\fP يكون مماثلاً. إذا كان من النوع \fBSOCK_RAW\fP، فإن هذا الحقل يخزن الإزاحة لإطار طبقة الوصلة. يتواصل مقبس الرزم والتطبيق حول بداية ونهاية الحلقة عبر حقل \fItp_status\fP. يمتلك مقبس الرزم جميع الفتحات التي تكون قيمة \fItp_status\fP فيها مساوية لـ \fBTP_STATUS_KERNEL\fP. بعد ملء فتحة، يغير حالة الفتحة لنقل الملكية إلى التطبيق. أثناء التشغيل العادي، تحتوي قيمة \fItp_status\fP الجديدة على الأقل على بت \fBTP_STATUS_USER\fP مضبوط للإشارة إلى تخزين رزمة مستلمة. عندما ينهي التطبيق معالجة رزمة، ينقل ملكية الفتحة مرة أخرى إلى المقبس بضبط \fItp_status\fP مساوياً لـ \fBTP_STATUS_KERNEL\fP. .IP تنفذ مقابس الرزم متغيرات متعددة للحلقة الرزمة. تفاصيل التنفيذ موصوفة في \fIDocumentation/networking/packet_mmap.rst\fP في شجرة مصدر نواة لينكس. .TP \fBPACKET_STATISTICS\fP استرداد إحصائيات مقبس الرزم في شكل بنية .IP .in +4n .EX struct tpacket_stats { unsigned int tp_packets; /* Total packet count */ unsigned int tp_drops; /* Dropped packet count */ }; .EE .in .IP استلام الإحصائيات يعيد ضبط العدادات الداخلية. تختلف بنية الإحصائيات عند استخدام حلقة من المتغير \fBTPACKET_V3\fP. .TP \fBPACKET_TIMESTAMP\fP (مع \fBPACKET_RX_RING\fP؛ منذ لينكس 2.6.36) .\" commit 614f60fa9d73a9e8fdff3df83381907fea7c5649 تخزن حلقة استقبال الرزم دائمًا طابعًا زمنيًا في الرأس الوصفي. مبدئيًا، هذا طابع زمني مولّد برمجيًا عند نسخ الرزمة إلى الحلقة. يحدد هذا الخيار الصحيح نوع الطابع الزمني. بالإضافة إلى المبدئي، يدعم التنسيقين العتاديين الموصوفين في \fIDocumentation/networking/timestamping.rst\fP في شجرة مصدر نواة لينكس. .TP \fBPACKET_TX_RING\fP (منذ لينكس 2.6.31) .\" commit 69e3c75f4d541a6eb151b3ef91f34033cb3ad6e1 إنشاء مخزن مؤقت حلقي مرتبط بالذاكرة لإرسال الرزم. هذا الخيار مشابه لـ \fBPACKET_RX_RING\fP ويأخذ نفس الوسائط. يكتب التطبيق الرزم في فتحات تكون قيمة \fItp_status\fP فيها مساوية لـ \fBTP_STATUS_AVAILABLE\fP ويجدولها للإرسال بتغيير \fItp_status\fP إلى \fBTP_STATUS_SEND_REQUEST\fP. عندما تكون الرزم جاهزة للإرسال، يستدعي التطبيق \fBsend\fP(2) أو متغيرًا منه. يتم تجاهل حقلي \fIbuf\fP و \fIlen\fP لهذه الاستدعاء. إذا تم تمرير عنوان باستخدام \fBsendto\fP(2) أو \fBsendmsg\fP(2)، فإنه يتجاوز المبدئي للمقبس. عند الإرسال الناجح، يعيد المقبس ضبط \fItp_status\fP إلى \fBTP_STATUS_AVAILABLE\fP. يلغي الإرسال فورًا عند الخطأ ما لم يتم ضبط \fBPACKET_LOSS\fP. .TP \fBPACKET_VERSION\fP (مع \fBPACKET_RX_RING\fP؛ منذ لينكس 2.6.27) .\" commit bbd6ef87c544d88c30e4b762b1b61ef267a7d279 مبدئيًا، ينشئ \fBPACKET_RX_RING\fP حلقة استقبال رزم من المتغير \fBTPACKET_V1\fP. لإنشاء متغير آخر، قم بتكوين المتغير المطلوب بضبط هذا الخيار الصحيح قبل إنشاء الحلقة. .TP \fBPACKET_QDISC_BYPASS\fP (منذ لينكس 3.14) .\" commit d346a3fae3ff1d99f5d0c819bf86edf9094a26a1 مبدئيًا، تمر الرزم المرسلة عبر مقابس الرزم عبر طبقة qdisc (التحكم في المرور) للنواة، وهو أمر جيد للغالبية العظمى من حالات الاستخدام. لأجهزة توليد المرور التي تستخدم مقابس الرزم والتي تهدف إلى إغراق الشبكة بالقوة\[em]على سبيل المثال، لاختبار الأجهزة تحت الحمل بطريقة مشابهة لـ pktgen\[em]يمكن تجاوز هذه الطبقة بضبط هذا الخيار الصحيح إلى 1. أحد الآثار الجانبية هو تجنب تخزين الرزم في طبقة qdisc، مما سيؤدي إلى زيادة الإسقاط عندما تكون قوائم إرسال جهاز الشبكة مشغولة؛ لذلك، استخدم على مسؤوليتك الخاصة. .SS Ioctls .\" FIXME Document SIOCGSTAMPNS يمكن استخدام \fBSIOCGSTAMP\fP لاستلام الطابع الزمني لآخر رزمة مستلمة. الوسيطة هي متغير من نوع \fIstruct timeval\fP. .P بالإضافة إلى ذلك، جميع ioctls القياسية المعرفة في \fBnetdevice\fP(7) و \fBsocket\fP(7) صالحة على مقابس الرزم. .SS "معالجة الأخطاء" لا تقوم مقابس الرزم بأي معالجة للأخطاء بخلاف الأخطاء التي تحدث أثناء تمرير الرزمة إلى برنامج تشغيل الجهاز. ليس لديها مفهوم الخطأ المعلق. .SH الأخطاء .TP \fBEADDRNOTAVAIL\fP تم تمرير عنوان مجموعة بث متعدد غير معروف. .TP \fBEFAULT\fP مرر المستخدم عنوان ذاكرة غير صالح. .TP \fBEINVAL\fP معطى غير صالح. .TP \fBEMSGSIZE\fP الرزمة أكبر من MTU للواجهة. .TP \fBENETDOWN\fP الواجهة غير نشطة. .TP \fBENOBUFS\fP ذاكرة غير كافية لتخصيص الرزمة. .TP \fBENODEV\fP اسم جهاز غير معروف أو فهرس واجهة محدد في عنوان الواجهة. .TP \fBENOENT\fP لم يتم استلام أي رزمة. .TP \fBENOTCONN\fP لم يتم تمرير أي عنوان واجهة. .TP \fBENXIO\fP عنوان الواجهة احتوى على فهرس واجهة غير صالح. .TP \fBEPERM\fP المستخدم لا يملك صلاحيات كافية لتنفيذ هذه العملية. .P بالإضافة إلى ذلك، قد تُولد أخطاء أخرى بواسطة برنامج التشغيل منخفض المستوى. .SH الإصدارات \fBAF_PACKET\fP هي ميزة جديدة في لينكس 2.2. الإصدارات السابقة من لينكس دعمت فقط \fBSOCK_PACKET\fP. .SH ملاحظات للبرامج المحمولة، يُقترح استخدام \fBAF_PACKET\fP عبر \fBpcap\fP(3)؛ على الرغم من أن هذا يغطي فقط مجموعة فرعية من ميزات \fBAF_PACKET\fP. .P مقابس الحزم \fBSOCK_DGRAM\fP لا تقوم بأي محاولة لإنشاء أو تحليل رأس IEEE 802.2 LLC لإطار IEEE 802.3. عندما يُحدد \fBETH_P_802_3\fP كبروتوكول للإرسال، ينشئ النواة إطار 802.3 ويملأ حقل الحجم؛ يجب على المستخدم توفير رأس LLC للحصول على حزمة متوافقة تمامًا. حزم 802.3 الواردة لا تُضاعف على حقول بروتوكول DSAP/SSAP؛ بدلاً من ذلك، تُقدم للمستخدم كبروتوكول \fBETH_P_802_2\fP مع رأس LLC مسبوق. وبالتالي، لا يمكن الربط بـ \fBETH_P_802_3\fP؛ اربط بـ \fBETH_P_802_2\fP بدلاً من ذلك وقم بتضاعف البروتوكول بنفسك. المبدئي للإرسال هو تغليف Ethernet DIX القياسي مع البروتوكول المملوء. .P مقابس الحزم لا تخضع لسلاسل جدار الحماية للإدخال أو الإخراج. .SS التوافقية في لينكس 2.0، الطريقة الوحيدة للحصول على مقبس حزمة كانت بالاستدعاء: .P .in +4n .EX socket(AF_INET, SOCK_PACKET, protocol) .EE .in .P هذا لا يزال مدعومًا، لكنه مهمل ومثبط بشدة. الفرق الرئيسي بين الطريقتين هو أن \fBSOCK_PACKET\fP تستخدم \fIstruct sockaddr_pkt\fP القديمة لتحديد واجهة، والتي لا توفر استقلالية الطبقة المادية. .P .in +4n .EX struct sockaddr_pkt { unsigned short spkt_family; unsigned char spkt_device[14]; unsigned short spkt_protocol; }; .EE .in .P \fIspkt_family\fP يحتوي على نوع الجهاز، \fIspkt_protocol\fP هو نوع بروتوكول IEEE 802.3 كما هو معرف في \fI\fP و \fIspkt_device\fP هو اسم الجهاز كسلسلة منتهية بقيمة خالية، على سبيل المثال، eth0. .P هذه البنية قديمة ولا ينبغي استخدامها في كود جديد. .SH العلل .SS "معالجة رأس LLC" يمكن اعتبار معالجة IEEE 802.2/803.3 LLC كخلل. .SS "مشكلات MSG_TRUNC" امتداد \fBMSG_TRUNC\fP \fBrecvmsg\fP(2) هو اختراق قبيح وينبغي استبداله برسالة تحكم. لا توجد حاليًا طريقة للحصول على عنوان الوجهة الأصلي للحزم عبر \fBSOCK_DGRAM\fP. .SS "اقتطاع اسم الجهاز spkt_device" حقل \fIspkt_device\fP من \fIsockaddr_pkt\fP بحجم 14 بايت، وهو أقل من الثابت \fBIFNAMSIZ\fP المعرف في \fI\fP والذي يساوي 16 بايت ويصف حد النظام لاسم واجهة الشبكة. هذا يعني أن أسماء أجهزة الشبكة الأطول من 14 بايت ستُقتطع لتناسب \fIspkt_device\fP. كل هذه الأحجام تتضمن البايت الفارغ الختامي (\[aq]\[rs]0\[aq])). .P مشكلات من هذا مع الكود القديم تظهر عادةً مع أسماء واجهات طويلة جدًا تستخدمها ميزة \fBPredictable Network Interface Names\fP المفعلة مبدئيًا في العديد من توزيعات لينكس الحديثة. .P الحل المفضل هو إعادة كتابة الكود لتجنب \fBSOCK_PACKET\fP. الحلول الممكنة للمستخدم هي تعطيل \fBPredictable Network Interface Names\fP أو إعادة تسمية الواجهة إلى اسم بطول 13 بايت على الأكثر، على سبيل المثال باستخدام أداة \fBip\fP(8). .SS "مشكلات التوثيق" .\" .SH CREDITS .\" This man page was written by Andi Kleen with help from Matthew Wilcox. .\" AF_PACKET in Linux 2.2 was implemented .\" by Alexey Kuznetsov, based on code by Alan Cox and others. مرشحات المقبس غير موثقة. .SH "انظر أيضًا" \fBsocket\fP(2), \fBpcap\fP(3), \fBcapabilities\fP(7), \fBip\fP(7), \fBraw\fP(7), \fBsocket\fP(7), \fBip\fP(8), .P RFC\ 894 لتغليف IP Ethernet القياسي. RFC\ 1700 لتغليف IP IEEE 802.3. .P ملف التضمين \fI\fP لبروتوكولات الطبقة المادية. .P شجرة مصدر نواة لينكس. يصف \fIDocumentation/networking/filter.rst\fP كيفية تطبيق مرشحات حزم بيركلي على مقابس الحزم. يحتوي \fItools/testing/selftests/net/psock_tpacket.c\fP على كود مصدري أمثلة لجميع الإصدارات المتاحة من \fBPACKET_RX_RING\fP و \fBPACKET_TX_RING\fP. .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .