netlink - netlink マクロ
#include <asm/types.h>
#include <linux/netlink.h>
int NLMSG_ALIGN(size_t len);
int NLMSG_LENGTH(size_t len);
int NLMSG_SPACE(size_t len);
void *NLMSG_DATA(struct nlmsghdr *nlh);
struct nlmsghdr *NLMSG_NEXT(struct nlmsghdr *nlh, int len);
int NLMSG_OK(struct nlmsghdr *nlh, int len);
int NLMSG_PAYLOAD(struct nlmsghdr *nlh, int len);
<linux/netlink.h> では、 netlink
データグラムにアクセスしたり、これを作成するための
標準マクロがいくつか定義されている。
これらは
cmsg(3)
で定義されている補助データ
(auxiliary data) 用のマクロと、
その精神において似ているものである。
netlink
ソケットに対してやりとりされるバッファーには、
必ずこれらのマクロだけを使ってアクセスすべきである。
- NLMSG_ALIGN
- netlink
メッセージの長さを丸めて正しく揃える。
- NLMSG_LENGTH
- 格納領域 (payload)
の長さ len
を引数にとり、 nlmsghdr
の nlmsg_len
フィールドに代入できる
揃えられた長さ (aligned length)
を返す。
- NLMSG_SPACE
- ペイロードの長さが
len の netlink
メッセージのバイト数を返す。
- NLMSG_DATA
- 与えた nlmsghdr
に関連づけられた格納領域へのポインターを返す。
- NLMSG_NEXT
- マルチパートメッセージにおいて、次の
nlmsghdr
を入手する。これを呼び出すときには、
現在の nlmsghdr で NLMSG_DONE
がセットされていないことを
確認しなければならない。この関数は終端で
NULL
を返さないからである。
len
引数はメッセージバッファーの残り長さが入った左辺値である。
このマクロはこの引数からメッセージヘッダーの長さ分を差し引く。
- NLMSG_OK
- Netlink
メッセージが途切れておらず、かつ解釈可能な形の場合であれば真を返す。
- NLMSG_PAYLOAD
-
nlmsghdr
に関連づけられた格納領域の長さを返す。
これらのマクロは非標準で、Linux
での拡張である。
通常はカーネルの低レベルインターフェイスよりも、
libnetlink 経由で netlink
を用いるほうが良い。
libnetlink(3),
netlink(7)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。