rtnetlink(7)

الاسم
rtnetlink - مقبس توجيه لينكس

موجز
#include <asm/types.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <sys/socket.h>

rtnetlink_socket = socket(AF_NETLINK, int socket_type, NETLINK_ROUTE);

الوصف
يسمح Rtnetlink بقراءة جداول توجيه النواة وتعديلها. يُستخدم داخل النواة للتواصل بين الأنظمة الفرعية المختلفة، رغم أن هذا الاستخدام غير موثق هنا، وللتواصل مع برامج فضاء المستخدم. يمكن التحكم في مسارات الشبكة، وعناوين IP، ومعلمات الوصلة، وإعدادات الجوار، وضوابط جدولة الدور (queueing disciplines)، وفئات حركة المرور، ومصنفات الحزم، كل ذلك عبر مقابس NETLINK_ROUTE. وهو يعتمد على رسائل netlink؛ انظر netlink(7) للمزيد من المعلومات.

  سمات التوجيه
تحتوي بعض رسائل rtnetlink على سمات اختيارية بعد الترويسة الأولية:

    struct rtattr {
        unsigned short rta_len;    /* طول الخيار */
        unsigned short rta_type;   /* نوع الخيار */
        /* البيانات تتبع */
    };

ينبغي التعامل مع هذه السمات باستخدام وحدات ماكرو RTA_* فقط أو libnetlink، انظر rtnetlink(3).

  الرسائل
يتكون Rtnetlink من أنواع الرسائل هذه (بالإضافة إلى رسائل netlink القياسية):

RTM_NEWLINK
RTM_DELLINK
RTM_GETLINK
    إنشاء واجهة شبكة محددة أو إزالتها أو الحصول على معلومات عنها. تحتوي هذه الرسائل على هيكل ifinfomsg يليه سلسلة من هياكل rtattr.

        struct ifinfomsg {
            unsigned char  ifi_family; /* AF_UNSPEC */
            unsigned short ifi_type;   /* نوع الجهاز */
            int            ifi_index;  /* فهرس الواجهة */
            unsigned int   ifi_flags;  /* أعلام الجهاز  */
            unsigned int   ifi_change; /* قناع التغيير */
        };

    يحتوي ifi_flags على أعلام الجهاز، انظر netdevice(7)؛ و ifi_index هو فهرس الواجهة الفريد (منذ لينكس 3.7، يمكن تقديم قيمة غير صفرية مع رسالة RTM_NEWLINK، وبالتالي إنشاء وصلة بـ ifindex المعطى)؛ و ifi_change هو قناع يحدد أي بتات من ifi_flags يجب تطبيقها على الجهاز.
    سمات التوجيه
    rta_type | نوع القيمة | الوصف
    IFLA_UNSPEC | - | غير محدد
    IFLA_ADDRESS | عنوان العتاد | عنوان الطبقة الثانية (L2) للواجهة
    IFLA_BROADCAST | عنوان العتاد | عنوان بث الطبقة الثانية (L2)
    IFLA_IFNAME | سلسلة asciiz | اسم الجهاز
    IFLA_MTU | unsigned int | وحدة النقل القصوى (MTU) للجهاز
    IFLA_LINK | int | نوع الوصلة
    IFLA_QDISC | سلسلة asciiz | انضباط الجدولة
    IFLA_STATS | انظر أدناه | إحصائيات الواجهة
    IFLA_PERM_ADDRESS | عنوان العتاد | عنوان العتاد المقدم من الجهاز (منذ لينكس 5.5)

    نوع القيمة لـ IFLA_STATS هو struct rtnl_link_stats (في لينكس 2.4 وما قبله كان struct net_device_stats).

RTM_NEWADDR
RTM_DELADDR
RTM_GETADDR
    إضافة أو إزالة أو تلقي معلومات حول عنوان IP مرتبط بواجهة. في لينكس 2.2، يمكن للواجهة أن تحمل عناوين IP متعددة، وهذا يحل محل مفهوم جهاز الاسم المستعار (alias device) في لينكس 2.0. في لينكس 2.2، تدعم هذه الرسائل عناوين IPv4 و IPv6. وهي تحتوي على هيكل ifaddrmsg، تتبعه اختياريًا سمات توجيه rtattr.

        struct ifaddrmsg {
            unsigned char ifa_family;    /* نوع العنوان */
            unsigned char ifa_prefixlen; /* طول بادئة العنوان */
            unsigned char ifa_flags;     /* أعلام العنوان */
            unsigned char ifa_scope;     /* نطاق العنوان */
            unsigned int  ifa_index;     /* فهرس الواجهة */
        };

    ifa_family هو نوع عائلة العناوين (حاليًا AF_INET أو AF_INET6)، و ifa_prefixlen هو طول قناع العنوان إذا كان محددًا للعائلة (مثل IPv4)، و ifa_scope هو نطاق العنوان، و ifa_index هو فهرس الواجهة التي يرتبط بها العنوان. ifa_flags هي كلمة أعلام تتضمن IFA_F_SECONDARY للعنوان الثانوي (واجهة الاسم المستعار القديمة)، و IFA_F_PERMANENT لعنوان دائم ضبطه المستخدم، وأعلام أخرى غير موثقة.
    سمات
    rta_type | نوع القيمة | الوصف
    IFA_UNSPEC | - | غير محدد
    IFA_ADDRESS | عنوان البروتوكول الخام | عنوان الواجهة
    IFA_LOCAL | عنوان البروتوكول الخام | عنوان محلي
    IFA_LABEL | سلسلة asciiz | اسم الواجهة
    IFA_BROADCAST | عنوان البروتوكول الخام | عنوان البث
    IFA_ANYCAST | عنوان البروتوكول الخام | عنوان البث لأي وجهة (anycast)
    IFA_CACHEINFO | struct ifa_cacheinfo | معلومات العنوان

        struct ifa_cacheinfo {
            __u32 ifa_prefered; // العمر المفضل المتبقي، بالثواني
            __u32 ifa_valid;    // العمر الصالح المتبقي، بالثواني
            __u32 cstamp;       // طابع وقت الإنشاء، بأجزاء المئة من الثانية
            __u32 tstamp;       // طابع وقت التحديث، بأجزاء المئة من الثانية
        };

    لا يمكن أن يكون ifa_valid صفرًا، ولا يمكن أن يكون ifa_prefered أكبر من ifa_valid. تمثل القيمة UINT32_MAX عمرًا غير محدود.

RTM_NEWROUTE
RTM_DELROUTE
RTM_GETROUTE
    إنشاء مسار شبكة أو إزالته أو تلقي معلومات عنه. تحتوي هذه الرسائل على هيكل rtmsg متبوعًا بتسلسل اختياري من هياكل rtattr. بالنسبة لـ RTM_GETROUTE، فإن ضبط rtm_dst_len و rtm_src_len على 0 يعني الحصول على جميع المدخلات لجدول التوجيه المحدد. أما الحقول الأخرى، باستثناء rtm_table و rtm_protocol، فإن 0 يعمل كرمز بديل (wildcard).

        struct rtmsg {
            unsigned char rtm_family;   /* عائلة عناوين المسار */
            unsigned char rtm_dst_len;  /* طول الوجهة */
            unsigned char rtm_src_len;  /* طول المصدر */
            unsigned char rtm_tos;      /* مرشح نوع الخدمة (TOS) */
            unsigned char rtm_table;    /* معرف جدول التوجيه؛
                                           انظر RTA_TABLE أدناه */
            unsigned char rtm_protocol; /* بروتوكول التوجيه؛ انظر أدناه */
            unsigned char rtm_scope;    /* انظر أدناه */
            unsigned char rtm_type;     /* انظر أدناه */

            unsigned int  rtm_flags;
        };
    rtm_type | نوع المسار
    RTN_UNSPEC | مسار غير معروف
    RTN_UNICAST | بوابة أو مسار مباشر
    RTN_LOCAL | مسار واجهة محلي
    RTN_BROADCAST | مسار بث محلي (يُرسل كبث)
    RTN_ANYCAST | مسار بث محلي (يُرسل كبث لوجهة محددة/unicast)
    RTN_MULTICAST | مسار بث مجموعاتي
    RTN_BLACKHOLE | مسار لإسقاط الحزم
    RTN_UNREACHABLE | وجهة لا يمكن الوصول إليها
    RTN_PROHIBIT | مسار لرفض الحزم
    RTN_THROW | مواصلة البحث عن المسار في جدول آخر
    RTN_NAT | قاعدة لترجمة عناوين الشبكة
    RTN_XRESOLVE | الإحالة إلى محلل خارجي (غير مُنفذ)
    rtm_protocol | أصل المسار
    RTPROT_UNSPEC | unknown
    RTPROT_REDIRECT | بواسطة إعادة توجيه ICMP (غير مستخدم حاليًا)
    RTPROT_KERNEL | بواسطة النواة
    RTPROT_BOOT | أثناء الإقلاع
    RTPROT_STATIC | بواسطة المدير

    القيم الأكبر من RTPROT_STATIC لا تفسرها النواة، بل هي لمجرد إخبار المستخدم. ويمكن استخدامها لوسم مصدر معلومات التوجيه أو للتمييز بين شياطين توجيه متعددة. انظر <linux/rtnetlink.h> لمعرفات شياطين التوجيه المعينة مسبقًا.

    rtm_scope هي المسافة إلى الوجهة:
    RT_SCOPE_UNIVERSE | مسار عام
    RT_SCOPE_SITE | مسار داخلي في النظام الذاتي المحلي
    RT_SCOPE_LINK | مسار على هذه الوصلة
    RT_SCOPE_HOST | مسار على الحاسوب المحلي
    RT_SCOPE_NOWHERE | الوجهة غير موجودة

    القيم بين RT_SCOPE_UNIVERSE و RT_SCOPE_SITE متاحة للمستخدم.

    تمتلك rtm_flags المعاني التالية:
    RTM_F_NOTIFY | إذا تغير المسار، أخطر المستخدم عبر rtnetlink
    RTM_F_CLONED | المسار منسوخ من مسار آخر
    RTM_F_EQUALIZE | موازن متعدد المسارات (لم يُنفذ بعد)

    تحدد rtm_table جدول التوجيه
    RT_TABLE_UNSPEC | جدول توجيه غير محدد
    RT_TABLE_DEFAULT | الجدول المبدئي
    RT_TABLE_MAIN | الجدول الرئيس
    RT_TABLE_LOCAL | الجدول المحلي

    يمكن للمستخدم تعيين قيم عشوائية بين RT_TABLE_UNSPEC و RT_TABLE_DEFAULT.
    سمات
    rta_type | نوع القيمة | الوصف
    RTA_UNSPEC | - | ignored
    RTA_DST | عنوان البروتوكول | عنوان وجهة المسار
    RTA_SRC | عنوان البروتوكول | عنوان مصدر المسار
    RTA_IIF | int | فهرس واجهة الإدخال
    RTA_OIF | int | فهرس واجهة الإخراج
    RTA_GATEWAY | عنوان البروتوكول | بوابة المسار
    RTA_PRIORITY | int | أولوية المسار
    RTA_PREFSRC | عنوان البروتوكول | عنوان المصدر المفضل
    RTA_METRICS |  | مقاييس المسار (انظر أدناه).
    RTA_MULTIPATH |  | بيانات القفزة التالية متعددة المسارات (انظر أدناه).
    RTA_PROTOINFO |  | لم يعد مستخدماً
    RTA_FLOW | int | مجال المسار
    RTA_CACHEINFO | struct rta_cacheinfo | (انظر linux/rtnetlink.h)
    RTA_SESSION |  | لم يعد مستخدماً
    RTA_MP_ALGO |  | لم يعد مستخدماً
    RTA_TABLE | int | معرف جدول التوجيه؛ إذا عُين، يُتجاهل rtm_table
    RTA_MARK | int |
    RTA_MFC_STATS | struct rta_mfc_stats | (انظر linux/rtnetlink.h)
    RTA_VIA | struct rtvia | بوابة في عائلة عناوين (AF) مختلفة (انظر أدناه)
    RTA_NEWDST | عنوان البروتوكول | تغيير عنوان وجهة الحزمة
    RTA_PREF | char | تفضيل موجه IPv6 وفقًا لـ RFC4191 (انظر أدناه)
    RTA_ENCAP_TYPE | short | نوع التغليف لـ الأنفاق خفيفة الوزن (lwtunnels) (انظر أدناه)
    RTA_ENCAP |  | مُعرَّف بواسطة RTA_ENCAP_TYPE
    RTA_EXPIRES | int | وقت انتهاء صلاحية مسارات IPv6 (بالثواني)

    تحتوي RTA_METRICS على مصفوفة من struct rtattr مع سماتها المقابلة:

        سمات
        rta_type | نوع القيمة | الوصف
        RTAX_UNSPEC | - | غير محدد
        RTAX_LOCK | __u32 | حقل بتات يشير إلى سمات RTAX_* الموصدة.
        RTAX_MTU | __u32 | وحدة الإرسال القصوى لهذا المسار.
        RTAX_WINDOW | __u32 | الحجم الأقصى لنافذة الاستقبال لهذا المسار.
        RTAX_RTT | __u32 | وقت الذهاب والإياب المقدّر لهذا المسار.
        RTAX_RTTVAR | __u32 | تباين وقت الذهاب والإياب المقدّر لهذا المسار.
        RTAX_SSTHRESH | __u32 | عتبة البداية البطيئة لاستخدامها لهذا المسار.
        RTAX_CWND | __u32 | الحجم الأقصى لنافذة الازدحام لهذا المسار.
        RTAX_ADVMSS | __u32 | حجم القطعة الأقصى المُراد الإعلان عنه لهذا المسار.
        RTAX_REORDERING | __u32 | مستوى إعادة ترتيب الحزم المبدئي لهذا المسار.
        RTAX_HOPLIMIT | __u32 | حد القفزات (TTL) لاستخدامه لهذا المسار.
        RTAX_INITCWND | __u32 | نافذة الازدحام المبدئية لاستخدامها لهذا المسار.
        RTAX_FEATURES | __u32 | المزايا المراد تمكينها لهذا المسار على وجه التحديد.
        RTAX_RTO_MIN | __u32 | مهلة إعادة الإرسال الدنيا لاستخدامها لهذا المسار.
        RTAX_INITRWND | __u32 | الحجم المبدئي لنافذة الاستقبال لهذا المسار.
        RTAX_QUICKACK | __u32 | استخدم الإقرار السريع (quick ack) لهذا المسار.
        RTAX_CC_ALGO | سلسلة asciiz | خوارزمية التحكم في الازدحام لاستخدامها لهذا المسار.
        RTAX_FASTOPEN_NO_COOKIE | __u32 | اسمح بفتح TCP السريع بدون ملف تعريف ارتباط (cookie).

    المقاييس الموصدة بـ RTAX_LOCK لها الأسبقية على القيم التي تستخدمها الـ نواة عادةً (المحسوبة أو المخصصة بواسطة sysctl أو setsockopt(2)). لذا، فإن بعض المقاييس، مثل RTAX_RTO_MIN، ليس لها تأثير ما لم يُضبط البت الخاص بها في RTAX_LOCK.

    تحتوي RTA_MULTIPATH على عدة حالات محزومة من struct rtnexthop مع RTAs متداخلة (RTA_GATEWAY):

        struct rtnexthop {
            unsigned short rtnh_len;     /* طول البنية + طول
                                            RTAs */
            unsigned char  rtnh_flags;   /* أعلام (انظر
                                            linux/rtnetlink.h) */
            unsigned char  rtnh_hops;    /* أولوية القفزة التالية */
            int            rtnh_ifindex; /* فهرس الواجهة لهذه
                                            القفزة التالية */
        }

    توجد مجموعة من ماكروهات RTNH_* المشابهة لماكروهات RTA_* و NLHDR_* المفيدة للتعامل مع هذه البنى.

        struct rtvia {
            unsigned short rtvia_family;
            unsigned char  rtvia_addr[0];
        };

    rtvia_addr هو العنوان، و rtvia_family هو نوع عائلته.

    قد تحتوي RTA_PREF على القيم ICMPV6_ROUTER_PREF_LOW، و ICMPV6_ROUTER_PREF_MEDIUM، و ICMPV6_ROUTER_PREF_HIGH المُعرَّفة في <linux/icmpv6.h>.

    قد تحتوي RTA_ENCAP_TYPE على القيم LWTUNNEL_ENCAP_MPLS، أو LWTUNNEL_ENCAP_IP، أو LWTUNNEL_ENCAP_ILA، أو LWTUNNEL_ENCAP_IP6 المُعرَّفة في <linux/lwtunnel.h>.

    املأ هذه القيم!

RTM_NEWNEIGH
RTM_DELNEIGH
RTM_GETNEIGH
    أضف معلومات حول مدخل جدول مجاور (مثل مدخل ARP)، أو أزلها، أو استقبلها. تحتوي الرسالة على بنية ndmsg.

        struct ndmsg {
            unsigned char ndm_family;
            int           ndm_ifindex;  /* فهرس الواجهة */
            __u16         ndm_state;    /* الحالة */
            __u8          ndm_flags;    /* أعلام */
            __u8          ndm_type;
        };

        struct nda_cacheinfo {
            __u32         ndm_confirmed;
            __u32         ndm_used;
            __u32         ndm_updated;
            __u32         ndm_refcnt;
        };

    ndm_state هو قناع بتات للحالات التالية:
    NUD_INCOMPLETE | مدخل خبيئة يُحلّ حاليًا
    NUD_REACHABLE | مدخل خبيئة عامل ومؤكَّد
    NUD_STALE | مدخل خبيئة منتهي الصلاحية
    NUD_DELAY | مدخل ينتظر مؤقتًا
    NUD_PROBE | مدخل خبيئة يُعاد سبره حاليًا
    NUD_FAILED | مدخل خبيئة غير صالح
    NUD_NOARP | جهاز ليس له خبيئة وجهة
    NUD_PERMANENT | مدخل ساكن

    أعلام ndm_flags الصالحة هي:
    NTF_PROXY | مدخل arp وكيل
    NTF_ROUTER | موجّه IPv6

    بنية rtattr لها المعاني التالية لحقل rta_type:
    NDA_UNSPEC | نوع غير معروف
    NDA_DST | عنوان وجهة لطبقة الشبكة في خبيئة المجاورة
    NDA_LLADDR | عنوان لطبقة الوصلة في خبيئة المجاورة
    NDA_CACHEINFO | إحصائيات الـ خبيئة

    إذا كان حقل rta_type هو NDA_CACHEINFO، فستتبعه ترويسة struct nda_cacheinfo.

RTM_NEWRULE
RTM_DELRULE
RTM_GETRULE
    أضف قاعدة توجيه، أو احذفها، أو استرجعها. تحمل struct rtmsg

RTM_NEWQDISC
RTM_DELQDISC
RTM_GETQDISC
    أضف نظام جدولة طوابير (queueing discipline)، أو أزله، أو احصل عليه. تحتوي الرسالة على struct tcmsg وقد تتبعها سلسلة من السمات.

        struct tcmsg {
            unsigned char    tcm_family;
            int              tcm_ifindex;   /* فهرس الواجهة */
            __u32            tcm_handle;    /* مقبض Qdisc */
            __u32            tcm_parent;    /* Qdisc الأب */
            __u32            tcm_info;
        };
    سمات
    rta_type | نوع القيمة | الوصف
    TCA_UNSPEC | - | غير محدد
    TCA_KIND | سلسلة asciiz | اسم نظام جدولة الطوابير
    TCA_OPTIONS | تسلسل بايتات | تليها الخيارات الخاصة بـ Qdisc
    TCA_STATS | struct tc_stats | إحصائيات Qdisc
    TCA_XSTATS | خاص بـ qdisc | إحصائيات خاصة بالوحدة
    TCA_RATE | struct tc_estimator | حد المعدل

    بالإضافة إلى ذلك، تُسمح بسمات متنوعة أخرى خاصة بوحدات qdisc. لمزيد من المعلومات راجع ملفات التضمين المناسبة.

RTM_NEWTCLASS
RTM_DELTCLASS
RTM_GETTCLASS
    أضِف فئة حركة مرور، أو أزلها، أو احصل عليها. تحتوي هذه الرسائل على struct tcmsg كما هو موضح أعلاه.

RTM_NEWTFILTER
RTM_DELTFILTER
RTM_GETTFILTER
    أضِف مرشح حركة مرور، أو أزله، أو استلم معلومات عنه. تحتوي هذه الرسائل على struct tcmsg كما هو موضح أعلاه.

الإصدارات
تُعد rtnetlink ميزة جديدة في لينكس 2.2.

العلل
صفحة الدليل هذه غير مكتملة.

انظر أيضًا
cmsg(3)، وrtnetlink(3)، وip(7)، وnetlink(7)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.