.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1998, Andi Kleen .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-1.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH netlink 7 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم نتلينك \- اتصال بين النواة وفضاء المستخدم (AF_NETLINK) .SH موجز .nf \fB#include \fP \fB#include \fP \fB#include \fP .P \fBnetlink_socket = socket(AF_NETLINK, \fP\fIsocket_type\fP\fB, \fP\fInetlink_family\fP\fB);\fP .fi .SH الوصف يُستخدم نتلينك لنقل المعلومات بين النواة وعمليات فضاء المستخدم. يتكون من واجهة قياسية مبنية على المقابس لعمليات فضاء المستخدم وواجهة برمجة تطبيقات داخلية للنواة لوحدات النواة. واجهة النواة الداخلية غير موثقة في صفحة الدليل هذه. توجد أيضًا واجهة نتلينك قديمة عبر أجهزة حرف نتلينك؛ هذه الواجهة غير موثقة هنا، وهي متاحة فقط للتوافق مع الإصدارات السابقة. .P نتلينك هي خدمة موجهة للبيانات. كلا من \fBSOCK_RAW\fP و \fBSOCK_DGRAM\fP قيمتان صالحتان لـ \fIsocket_type\fP. ومع ذلك، لا يميز بروتوكول نتلينك بين مقابس البيانات والمقابس الخام. .P يختار \fInetlink_family\fP وحدة النواة أو مجموعة نتلينك للتواصل معها. عائلات نتلينك المعينة حاليًا هي: .TP \fBNETLINK_ROUTE\fP تستقبل تحديثات التوجيه والارتباط ويمكن استخدامها لتعديل جداول التوجيه (IPv4 و IPv6)، وعناوين IP، ومعلمات الارتباط، وإعدادات الجيران، وتخصصات الطابور، وفئات المرور، ومصنفات الحزم (انظر \fBrtnetlink\fP(7)). .TP \fBNETLINK_W1\fP (لينكس 2.6.13 إلى لينكس 2.16.17) رسائل من النظام الفرعي للسلك الواحد. .TP \fBNETLINK_USERSOCK\fP محجوزة لبروتوكولات مقابس وضع المستخدم. .TP \fBNETLINK_FIREWALL\fP (حتى لينكس 3.4 شاملاً) .\" removed by commit d16cf20e2f2f13411eece7f7fb72c17d141c4a84 تنقل حزم IPv4 من netfilter إلى فضاء المستخدم. تُستخدم بواسطة وحدة النواة \fIip_queue\fP. بعد فترة طويلة من الإعلان عن تقادمها (لصالح الميزة الأكثر تقدمًا \fInfnetlink_queue\fP)، أُزيلت \fBNETLINK_FIREWALL\fP في لينكس 3.5. .TP \fBNETLINK_SOCK_DIAG\fP (منذ لينكس 3.3) .\" commit 7f1fb60c4fc9fb29fbb406ac8c4cfb4e59e168d6 استعلام عن معلومات حول مقابس عائلات بروتوكولات مختلفة من النواة (انظر \fBsock_diag\fP(7)). .TP \fBNETLINK_INET_DIAG\fP (منذ لينكس 2.6.14) مرادف قديم لـ \fBNETLINK_SOCK_DIAG\fP. .TP \fBNETLINK_NFLOG\fP (حتى لينكس 3.16 شاملاً) ULOG لـ Netfilter/iptables. .TP \fBNETLINK_XFRM\fP .\" FIXME More details on NETLINK_XFRM needed. IPsec. .TP \fBNETLINK_SELINUX\fP (منذ لينكس 2.6.4) إشعارات أحداث SELinux. .TP \fBNETLINK_ISCSI\fP (منذ لينكس 2.6.15) .\" FIXME More details on NETLINK_ISCSI needed. Open\-iSCSI. .TP \fBNETLINK_AUDIT\fP (منذ لينكس 2.6.6) .\" FIXME More details on NETLINK_AUDIT needed. التدقيق. .TP \fBNETLINK_FIB_LOOKUP\fP (منذ لينكس 2.6.13) .\" FIXME More details on NETLINK_FIB_LOOKUP needed. الوصول إلى بحث FIB من مساحة المستخدم. .TP \fBNETLINK_CONNECTOR\fP (منذ لينكس 2.6.14) .\" commit baa293e9544bea71361950d071579f0e4d5713ed موصل النواة. انظر \fIDocumentation/driver\-api/connector.rst\fP (أو \fI/Documentation/connector/connector.*\fP في لينكس 5.2 والإصدارات الأقدم) في شجرة مصدر نواة لينكس لمزيد من المعلومات. .TP \fBNETLINK_NETFILTER\fP (منذ لينكس 2.6.14) .\" FIXME More details on NETLINK_NETFILTER needed. النظام الفرعي Netfilter. .TP \fBNETLINK_SCSITRANSPORT\fP (منذ لينكس 2.6.19) .\" commit 84314fd4740ad73550c76dee4a9578979d84af48 .\" FIXME More details on NETLINK_SCSITRANSPORT needed. نقلات SCSI. .TP \fBNETLINK_RDMA\fP (منذ لينكس 3.0) .\" commit b2cbae2c248776d81cc265ff7d48405b6a4cc463 .\" FIXME More details on NETLINK_RDMA needed. RDMA إنفينيباند. .TP \fBNETLINK_IP6_FW\fP (حتى لينكس 3.4 وما يشمل) نقل حزم IPv6 من netfilter إلى مساحة المستخدم. يُستخدم بواسطة وحدة النواة \fIip6_queue\fP. .TP \fBNETLINK_DNRTMSG\fP رسائل توجيه DECnet. .TP \fBNETLINK_KOBJECT_UEVENT\fP (منذ لينكس 2.6.10) .\" FIXME More details on NETLINK_KOBJECT_UEVENT needed. رسائل النواة إلى مساحة المستخدم. .TP \fBNETLINK_GENERIC\fP (منذ لينكس 2.6.15) عائلة netlink عامة لاستخدام netlink مبسط. .TP \fBNETLINK_CRYPTO\fP (منذ لينكس 3.2) .\" commit a38f7907b926e4c6c7d389ad96cc38cec2e5a9e9 .\" Author: Steffen Klassert واجهة netlink لطلب معلومات حول الشفرات المسجلة مع واجهة برمجة تطبيقات التشفير للنواة وكذلك السماح بتكوين واجهة برمجة تطبيقات التشفير للنواة. .P تتكون رسائل Netlink من تيار بايت مع رأس واحد أو متعدد \fInlmsghdr\fP وحمولة مرتبطة. يجب الوصول إلى تيار البايت فقط باستخدام وحدات الماكرو القياسية \fBNLMSG_*\fP. انظر \fBnetlink\fP(3) لمزيد من المعلومات. .P في الرسائل متعددة الأجزاء (رؤوس \fInlmsghdr\fP متعددة مع حمولة مرتبطة في تيار بايت واحد) يتم تعيين علامة \fBNLM_F_MULTI\fP للرأس الأول وجميع الرؤوس التالية، باستثناء الرأس الأخير الذي له النوع \fBNLMSG_DONE\fP. .P بعد كل \fInlmsghdr\fP تتبع الحمولة. .P .in +4n .EX struct nlmsghdr { __u32 nlmsg_len; /* Size of message including header */ __u16 nlmsg_type; /* Type of message content */ __u16 nlmsg_flags; /* Additional flags */ __u32 nlmsg_seq; /* Sequence number */ __u32 nlmsg_pid; /* Sender port ID */ }; .EE .in .P يمكن أن يكون \fInlmsg_type\fP أحد أنواع الرسائل القياسية: رسالة \fBNLMSG_NOOP\fP يجب تجاهلها، رسالة \fBNLMSG_ERROR\fP تشير إلى خطأ وتحتوي الحمولة على بنية \fInlmsgerr\fP، رسالة \fBNLMSG_DONE\fP تنهي رسالة متعددة الأجزاء. تُلحق رسائل الخطأ بالطلب الأصلي، ما لم يطلب المستخدم تقييد رسالة الخطأ، وتُحصل على بيانات خطأ إضافية إذا طُلب ذلك. .P .in +4n .EX struct nlmsgerr { int error; /* Negative errno or 0 for acknowledgements */ struct nlmsghdr msg; /* Message header that caused the error */ /* * followed by the message contents * unless NETLINK_CAP_ACK was set * or the ACK indicates success (error == 0). * For example Generic Netlink message with attributes. * message size is aligned with NLMSG_ALIGN() */ /* * followed by TLVs defined in enum nlmsgerr_attrs * if NETLINK_EXT_ACK was set */ }; .EE .in .P عادةً ما تحدد عائلة netlink أنواع رسائل إضافية، راجع صفحات الدليل المناسبة لذلك، على سبيل المثال، \fBrtnetlink\fP(7) لـ \fBNETLINK_ROUTE\fP. .TS tab(:); l s lB lx. بتات الأعلام القياسية في \f[I]nlmsg_flags\fR _ NLM_F_REQUEST:T{ يجب تعيينه على جميع رسائل الطلب. T} NLM_F_MULTI:T{ هذه الرسالة جزء من رسالة متعددة الأجزاء تنتهي بـ \fBNLMSG_DONE\fP. T} NLM_F_ACK:T{ طلب إقرار عند النجاح. T} NLM_F_ECHO:T{ صدى هذا الطلب. T} .TE .\" No right adjustment for text blocks in tables .TS tab(:); l s lB lx. بتات أعلام إضافية لطلبات GET _ NLM_F_ROOT:T{ إرجاع الجدول الكامل بدلاً من إدخال واحد. T} NLM_F_MATCH:T{ يُرجع جميع الإدخالات التي تتطابق مع المعايير المُرسلة في محتوى الرسالة. لم تنفذ بعد. T} NLM_F_ATOMIC:T{ إرجاع لقطة ذرية للجدول. T} NLM_F_DUMP:T{ ماكرو اختصار؛ يعادل (NLM_F_ROOT|NLM_F_MATCH). T} .TE .\" FIXME NLM_F_ATOMIC is not used anymore? .P لاحظ أن \fBNLM_F_ATOMIC\fP يتطلب صلاحية \fBCAP_NET_ADMIN\fP أو UID فعال بقيمة 0. .TS tab(:); l s lB lx. بتات أعلام إضافية لطلبات NEW _ NLM_F_REPLACE:T{ استبدال الكائن المطابق الموجود. T} NLM_F_EXCL:T{ لا تستبدل إذا كان الكائن موجودًا مسبقًا. T} NLM_F_CREATE:T{ إنشاء الكائن إذا لم يكن موجودًا مسبقًا. T} NLM_F_APPEND:T{ إضافة إلى نهاية قائمة الكائنات. T} .TE .P يُستخدم \fInlmsg_seq\fP و\fInlmsg_pid\fP لتتبع الرسائل. يُظهر \fInlmsg_pid\fP أصل الرسالة. لاحظ عدم وجود علاقة 1:1 بين \fInlmsg_pid\fP ومعرف العملية (PID) إذا نشأت الرسالة من مقبس netlink. راجع قسم \fBADDRESS FORMATS\fP لمزيد من المعلومات. .P .\" FIXME Explain more about nlmsg_seq and nlmsg_pid. كلا \fInlmsg_seq\fP و\fInlmsg_pid\fP غير شفافين لنواة netlink. .P Netlink ليس بروتوكولًا موثوقًا. يبذل قصارى جهده لتوصيل رسالة إلى وجهتها (وجهاتها)، لكنه قد يُسقط الرسائل عند حدوث حالة نفاد الذاكرة أو خطأ آخر. للنقل الموثوق، يمكن للمُرسِل طلب إقرار من المُستقبِل بتعيين العلم \fBNLM_F_ACK\fP. الإقرار هو حزمة \fBNLMSG_ERROR\fP مع تعيين حقل الخطأ إلى 0. يجب على التطبيق توليد إقرارات للرسائل المستلمة بنفسه. تحاول النواة إرسال رسالة \fBNLMSG_ERROR\fP لكل حزمة فاشلة. يجب على عملية المستخدم اتباع هذا الاصطلاح أيضًا. .P ومع ذلك، فإن الإرسالات الموثوقة من النواة إلى المستخدم مستحيلة في أي حال. لا تستطيع النواة إرسال رسالة netlink إذا كان مخزن المقبس ممتلئًا: سيتم إسقاط الرسالة ولن يكون للنواة وعملية مساحة المستخدم نفس الرؤية لحالة النواة. يقع على عاتق التطبيق اكتشاف متى يحدث هذا (عبر خطأ \fBENOBUFS\fP الذي يُرجعه \fBrecvmsg\fP(2)) وإعادة المزامنة. .SS "تنسيقات العناوين" تصف بنية \fIsockaddr_nl\fP عميل netlink في مساحة المستخدم أو في النواة. يمكن أن يكون \fIsockaddr_nl\fP إما أحادي الإرسال (يُرسل إلى نظير واحد فقط) أو يُرسل إلى مجموعات الإرسال المتعدد netlink (\fInl_groups\fP لا يساوي 0). .P .in +4n .EX struct sockaddr_nl { sa_family_t nl_family; /* AF_NETLINK */ unsigned short nl_pad; /* Zero */ pid_t nl_pid; /* Port ID */ __u32 nl_groups; /* Multicast groups mask */ }; .EE .in .P \fInl_pid\fP هو عنوان أحادي الإرسال لمقبس netlink. يكون دائمًا 0 إذا كانت الوجهة في النواة. بالنسبة لعملية مساحة المستخدم، \fInl_pid\fP عادةً ما يكون معرف العملية (PID) للعملية التي تملك مقبس الوجهة. ومع ذلك، يُحدد \fInl_pid\fP مقبس netlink، وليس عملية. إذا امتلكت عملية عدة مقابس netlink، فإن \fInl_pid\fP يمكن أن يساوي معرف العملية فقط لمقبس واحد على الأكثر. هناك طريقتان لتعيين \fInl_pid\fP لمقبس netlink. إذا عيّن التطبيق \fInl_pid\fP قبل استدعاء \fBbind\fP(2)، فإنه يقع على عاتق التطبيق التأكد من أن \fInl_pid\fP فريد. إذا عيّنه التطبيق إلى 0، تتولى النواة تعيينه. تُسند النواة معرف العملية إلى أول مقبس netlink تفتحه العملية وتُسند \fInl_pid\fP فريدًا لكل مقبس netlink تنشئه العملية لاحقًا. .P .\" commit d629b836d151d43332492651dd841d32e57ebe3b \fInl_groups\fP هو قناع بتات حيث يمثل كل بت رقم مجموعة netlink. لكل عائلة netlink مجموعة من 32 مجموعة إرسال متعدد. عند استدعاء \fBbind\fP(2) على المقبس، يجب تعيين حقل \fInl_groups\fP في \fIsockaddr_nl\fP إلى قناع بتات للمجموعات التي ترغب في الاستماع إليها. القيمة المبدئية لهذا الحقل هي صفر مما يعني عدم استقبال أي إرسال متعدد. يمكن لمقبس إرسال رسائل متعددة إلى أي من مجموعات الإرسال المتعدد بتعيين \fInl_groups\fP إلى قناع بتات للمجموعات التي يرغب في الإرسال إليها عند استدعاء \fBsendmsg\fP(2) أو تنفيذ \fBconnect\fP(2). فقط العمليات التي لديها UID فعال 0 أو صلاحية \fBCAP_NET_ADMIN\fP يمكنها الإرسال أو الاستماع إلى مجموعة إرسال متعدد netlink. منذ Linux 2.6.13، لا يمكن بث الرسائل إلى مجموعات متعددة. يجب إرسال أي ردود على رسالة مستلمة لمجموعة إرسال متعدد مرة أخرى إلى PID المُرسِل ومجموعة الإرسال المتعدد. قد تسمح بعض أنظمة النواة الفرعية Linux بالإضافة إلى ذلك لمستخدمين آخرين بالإرسال و/أو الاستقبال. اعتبارًا من Linux 3.0، تسمح المجموعات \fBNETLINK_KOBJECT_UEVENT\fP و\fBNETLINK_GENERIC\fP و\fBNETLINK_ROUTE\fP و\fBNETLINK_SELINUX\fP لمستخدمين آخرين باستقبال الرسائل. لا تسمح أي مجموعات لمستخدمين آخرين بإرسال الرسائل. .SS "خيارات المقبس" لتعيين أو الحصول على خيار مقبس netlink، استدع \fBgetsockopt\fP(2) للقراءة أو \fBsetsockopt\fP(2) للكتابة مع تعيين وسيطة مستوى الخيار إلى \fBSOL_NETLINK\fP. ما لم يُذكر خلاف ذلك، \fIoptval\fP هو مؤشر إلى \fIint\fP. .TP \fBNETLINK_PKTINFO\fP (منذ Linux 2.6.14) .\" commit 9a4595bc7e67962f13232ee55a64e063062c3a99 .\" Author: Patrick McHardy تمكين رسائل التحكم \fBnl_pktinfo\fP للحزم المستلمة للحصول على رقم مجموعة الوجهة الموسعة. .TP \fBNETLINK_ADD_MEMBERSHIP\fP .TQ \fBNETLINK_DROP_MEMBERSHIP\fP (منذ Linux 2.6.14) .\" commit 9a4595bc7e67962f13232ee55a64e063062c3a99 .\" Author: Patrick McHardy الانضمام/المغادرة من مجموعة محددة بواسطة \fIoptval\fP. .TP \fBNETLINK_LIST_MEMBERSHIPS\fP (منذ Linux 4.2) .\" commit b42be38b2778eda2237fc759e55e3b698b05b315 .\" Author: David Herrmann استرداد جميع المجموعات التي يكون المقبس عضوًا فيها. \fIoptval\fP هو مؤشر إلى \fB__u32\fP و\fIoptlen\fP هو حجم المصفوفة. تُملأ المصفوفة بمجموعة العضوية الكاملة للمقبس، ويُعاد حجم المصفوفة المطلوب في \fIoptlen\fP. .TP \fBNETLINK_BROADCAST_ERROR\fP (منذ Linux 2.6.30) .\" commit be0c22a46cfb79ab2342bb28fde99afa94ef868e .\" Author: Pablo Neira Ayuso عند عدم التعيين، يُبلغ \fBnetlink_broadcast()\fP عن أخطاء \fBESRCH\fP فقط ويتجاهل بصمت أخطاء \fBENOBUFS\fP. .TP \fBNETLINK_NO_ENOBUFS\fP (منذ لينكس 2.6.30) .\" commit 38938bfe3489394e2eed5e40c9bb8f66a2ce1405 .\" Author: Pablo Neira Ayuso يمكن استخدام هذه العلامة بواسطة مستمعي الإرسال الأحادي والبث لتجنب استقبال أخطاء \fBENOBUFS\fP. .TP \fBNETLINK_LISTEN_ALL_NSID\fP (منذ لينكس 4.2) .\" commit 59324cf35aba5336b611074028777838a963d03b .\" Author: Nicolas Dichtel عند التعيين، سيستقبل هذا المقبس إشعارات netlink من جميع مساحات أسماء الشبكة التي لديها \fInsid\fP معين في مساحة اسم الشبكة حيث فُتح المقبس. يُرسل \fInsid\fP إلى مساحة المستخدم عبر بيانات مساعدة. .TP \fBNETLINK_CAP_ACK\fP (منذ لينكس 4.3) .\" commit 0a6a3a23ea6efde079a5b77688541a98bf202721 .\" Author: Christophe Ricard قد يفشل النواة في تخصيص المساحة اللازمة لرسالة الإقرار العائدة إلى مساحة المستخدم. يقلص هذا الخيار حمولة رسالة netlink الأصلية. لا يزال رأس رسالة netlink مضمنًا، لذا يمكن للمستخدم تخمين من رقم التسلسل أي رسالة أثارت الإقرار. .SH الإصدارات ظهرت واجهة المقبس لـ netlink لأول مرة في لينكس 2.2. .P دعم لينكس 2.0 واجهة netlink بدائية قائمة على الجهاز (والتي لا تزال متاحة كخيار توافق). لا تُوصف هذه الواجهة القديمة هنا. .SH ملاحظات غالبًا ما يكون استخدام netlink عبر \fIlibnetlink\fP أو \fIlibnl\fP أفضل من استخدام واجهة النواة منخفضة المستوى. .SH العلل صفحة الدليل هذه غير كاملة. .SH أمثلة المثال التالي ينشئ مقبس netlink من نوع \fBNETLINK_ROUTE\fP سيستمع إلى مجموعات البث المتعدد \fBRTMGRP_LINK\fP (أحداث إنشاء/حذف/تشغيل/إيقاف واجهة الشبكة) و\fBRTMGRP_IPV4_IFADDR\fP (أحداث إضافة/حذف عناوين IPv4). .P .in +4n .EX struct sockaddr_nl sa; \& memset(&sa, 0, sizeof(sa)); sa.nl_family = AF_NETLINK; sa.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR; \& fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); bind(fd, (struct sockaddr *) &sa, sizeof(sa)); .EE .in .P المثال التالي يوضح كيفية إرسال رسالة netlink إلى النواة (pid 0). لاحظ أن التطبيق يجب أن يعتني بأرقام تسلسل الرسائل لتتبع الإقرارات بشكل موثوق. .P .in +4n .EX struct nlmsghdr *nh; /* The nlmsghdr with payload to send */ struct sockaddr_nl sa; struct iovec iov = { nh, nh\->nlmsg_len }; struct msghdr msg; \& msg = { &sa, sizeof(sa), &iov, 1, NULL, 0, 0 }; memset(&sa, 0, sizeof(sa)); sa.nl_family = AF_NETLINK; nh\->nlmsg_pid = 0; nh\->nlmsg_seq = ++sequence_number; /* Request an ack from kernel by setting NLM_F_ACK */ nh\->nlmsg_flags |= NLM_F_ACK; \& sendmsg(fd, &msg, 0); .EE .in .P والمثال الأخير يتعلق بقراءة رسالة netlink. .P .in +4n .EX int size; /* 8192 to avoid message truncation on platforms with page size > 4096 */ struct nlmsghdr buf[8192/sizeof(struct nlmsghdr)]; struct iovec iov = { buf, sizeof(buf) }; struct sockaddr_nl sa; struct msghdr msg; struct nlmsghdr *nh; \& msg = { &sa, sizeof(sa), &iov, 1, NULL, 0, 0 }; size = recvmsg(fd, &msg, 0); \& for (nh = (struct nlmsghdr *) buf; NLMSG_OK (nh, size); nh = NLMSG_NEXT (nh, size)) { /* The end of multipart message */ if (nh\->nlmsg_type == NLMSG_DONE) return; \& if (nh\->nlmsg_type == NLMSG_ERROR) /* Do some error handling */ ... \& /* Continue with parsing payload */ ... } .EE .in .SH "انظر أيضًا" \fBcmsg\fP(3), \fBnetlink\fP(3), \fBcapabilities\fP(7), \fBrtnetlink\fP(7), \fBsock_diag\fP(7) .P .UR ftp:\://ftp.inr.ac.ru\:/ip\-routing\:/iproute2* معلومات حول libnetlink .UE .P .UR http:\://www.infradead.org\:/\[ti]tgr\:/libnl/ معلومات حول libnl .UE .P RFC 3549 "Linux Netlink as an IP Services Protocol" .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .