rtnetlink(3)

الاسم
rtnetlink - وحدات ماكرو لمعالجة رسائل rtnetlink

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#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);

int RTA_OK(struct rtattr *rta, int size);

void *RTA_DATA(struct rtattr *rta);
unsigned int RTA_PAYLOAD(struct rtattr *rta);

struct rtattr *RTA_NEXT(struct rtattr *rta, unsigned int size);

unsigned int RTA_LENGTH(unsigned int size);
unsigned int RTA_SPACE(unsigned int size);

الوصف
جميع رسائل rtnetlink(7) تتكون من رأس رسالة netlink(7) وسمات ملحقة. يجب معالجة السمات فقط باستخدام وحدات الماكرو المقدمة هنا.

RTA_OK(rta, size) تُرجع صحيحًا إذا كان rta يشير إلى سمة توجيه صالحة؛ size هو الحجم الجاري للمخزن المؤقت للسمات. عندما لا يكون صحيحًا، يجب افتراض عدم وجود سمات أخرى في الرسالة، حتى لو كان size غير صفري.

RTA_DATA(rta) تُرجع مؤشرًا إلى بداية بيانات هذه السمة.

RTA_PAYLOAD(rta) تُرجع حجم بيانات هذه السمة.

RTA_NEXT(rta, size) تحصل على السمة التالية بعد rta. استدعاء هذه الماكرو يُحدّث size. يجب استخدام RTA_OK للتحقق من صحة المؤشر المُعاد.

RTA_LENGTH(size) تُرجع الحجم المطلوب لـ size بايت من البيانات بالإضافة إلى الرأس.

RTA_SPACE(size) تُرجع مقدار المساحة المطلوبة في رسالة تحتوي على size بايت من البيانات.

المعايير
لينكس.

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

أمثلة
إنشاء رسالة rtnetlink لتعيين MTU لجهاز:

    #include <linux/rtnetlink.h>

    ...

    struct {
        struct nlmsghdr  nh;
        struct ifinfomsg if;
        char             attrbuf[512];
    } req;

    struct rtattr *rta;
    unsigned int mtu = 1000;

    int rtnetlink_sk = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);

    memset(&req, 0, sizeof(req));
    req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(req.if));
    req.nh.nlmsg_flags = NLM_F_REQUEST;
    req.nh.nlmsg_type = RTM_NEWLINK;
    req.if.ifi_family = AF_UNSPEC;
    req.if.ifi_index = INTERFACE_INDEX;
    req.if.ifi_change = 0xffffffff; /* ??? */
    rta = (struct rtattr *) ((char *) &req +
                             NLMSG_ALIGN(req.nh.nlmsg_len));
    rta->rta_type = IFLA_MTU;
    rta->rta_len = RTA_LENGTH(sizeof(mtu));
    req.nh.nlmsg_len = NLMSG_ALIGN(req.nh.nlmsg_len) +
                                  RTA_LENGTH(sizeof(mtu));
    memcpy(RTA_DATA(rta), &mtu, sizeof(mtu));
    send(rtnetlink_sk, &req, req.nh.nlmsg_len, 0);

انظر أيضًا
netlink(3), netlink(7), rtnetlink(7)

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

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

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