RTNETLINK

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
Index JM Home Page
 

名前

rtnetlink - 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);

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

void *RTA_DATA(struct rtattr *rta);

unsigned int RTA_PAYLOAD(struct rtattr *rta);

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

unsigned int RTA_LENGTH(unsigned int length);

unsigned int RTA_SPACE(unsigned int length);  

説明

全ての rtnetlink(7) メッセージは netlink(7) メッセージヘッダーと追加属性からなる。 属性の操作は、必ずここに挙げたマクロだけを使って行うべきである。

RTA_OK(rta, attrlen) は rta が有効なルーティング属性へのポインターであれば真を返す。 attrlen は属性バッファーの実働時の長さ (running length) である。 真でなければ、例え attrlen がゼロでなくても、 メッセージ中にはもうそれ以上属性は無いと考えなければならない。

RTA_DATA(rta) はこの属性データの先頭へのポインターを返す。

RTA_PAYLOAD(rta) はこの属性データの長さを返す。

RTA_NEXT(rta, attrlen) は rta の次にある属性を取得する。 このマクロを呼ぶと attrlen が更新される。 RTA_OK を使って、返されたポインターが正しいかをチェックすべきである。

RTA_LENGTH(len) は len バイトのデータ + ヘッダーに必要な長さを返す。

RTA_SPACE(len) は len バイトのデータを持つメッセージに必要とされる容量を返す。  

準拠

これらのマクロは非標準で、Linux での拡張である。  

バグ

このマニュアルは完全ではない。  

例

デバイスの MTU をセットする rtnetlink メッセージを生成する

#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)  

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。

関連キーワード

struct   属性   rtnetlink   rtattr   nlmsg   メッセージ   sizeof   マクロ   socket   type   ポインター   操作   ヘッダー   バイト   types   netlink   ルーティング   バッファー   実働   running   length   以上   チェック   容量   拡張

Linux マニュアル 一覧

関連するコマンド・関数

rtnetlink.7   netlink.7   sendmmsg.2   CMSG_ALIGN.3   CMSG_DATA.3   CMSG_FIRSTHDR.3
 

Index

名前
書式
説明
準拠
バグ
例
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:02 GMT, October 11, 2026