NETLINK 7

中文man手册

目录

NETLINK

NAME åç§°
SYNOPSIS æ»æ½
DESCRIPTION æè¿°
å°åæ ¼å¼
BUGS
NOTES 注æ
VERSIONS çæ¬
å¦è§
[䏿çç»´æ¤äºº]
[ä¸æçææ°æ´æ°]
ãä¸å½linux论åmanæå页翻è¯è®¡åã:
è·

NAME åç§°

netlink, PF_NETLINK - åæ ¸ä¸ç¨æ·ä¹é´çé讯

SYNOPSIS æ»æ½

#include <asm/types.h>
#include <sys/socket.h>
#include <linux/netlink.h>

netlink_socket = socket(PF_NETLINK, socket_type, netlink_family);

DESCRIPTION æè¿°

Netlink ç¨äºå¨å核模åä¸å¨ç¨æ·å°å空é´ä¸çè¿ç¨ä¹é´ä¼ éæ¶æ¯çãå®å å«äºç¨äºç¨æ·è¿ç¨çåºäºæ å奿¥åçæ¥å£åç¨äºå核模åçä¸ä¸ªå鍿 ¸å¿ APIãæå³è¿ä¸ªå鍿 ¸å¿æ¥å£çèµææ²¡æåå«å¨æ¤æå页ä¸ãåæ ·è¿æ ä¸ä¸ªè¿æ¶çéè¿ netlink å符设å¤çæ¥å£ä¹æ²¡æåå«å¨æ¤ï¼å®åªæ¯æä¾ åä¸å¼å®¹ç¹æ§ã

Netlink æ¯ä¸ä¸ªé¢åæ°æ®åçæå¡ã SOCK_RAW å SOCK_DGRAM 齿¯ socket_type çææå¼ãç¶è netlink åè®®å¯¹æ°æ®å datagram åå奿¥åï¼raw socketsï¼ å¹¶ä¸ä½åºåã

netlink_family éæ©æ ¸å¿æ¨¡åæ netlink ç»è¿è¡é讯ãç°æå¯æå®ç netlink çç§ç±»æï¼
NETLINK_ROUTE

æ¥æ¶è·¯ç±æ´æ°ä¿¡æ¯ï¼å¯ä»¥ç¨æ¥ä¿®æ¹ IPv4 çè·¯ç±è¡¨ã(åè§ rtnetlink(7))ã

NETLINK_FIREWALL

æ¥æ¶ IPv4 é²ç«å¢ç¼ç åéçæ°æ®åã

NETLINK_ARPD

ç¨ä»¥ç»´æ¤ç¨æ·å°å空é´éç arp 表

NETLINK_ROUTE6

æ¥æ¶ååé IPv6 è·¯ç±è¡¨æ´æ°æ¶æ¯ã

NETLINK_IP6_FW

æ¥æ¶æªéè¿ IPv6 é²ç«å¢æ£æ¥çæ°æ®å(å°æªå®ç°)

NETLINK_TAPBASE...NETLINK_TAPBASE+15

æ¯ ethertap 设å¤å®ä¾ãEthertap æ¯ä»ç¨æ·ç¨åºç©ºé´å¯¹ä»¥å¤ªç½é©±å¨ç¨åºè¿è¡ 仿ççâ伪âç½ç»éé设å¤ã

NETLINK_SKIP

Enskip çä¿çé项ã

NETLINK_USERSOCK

为ä»åç¨æ·ç¨åºç©ºé´åè®®ç¨ä¿çé项ã

Netlink æ°æ®ä¿¡æ¯ç±å·æä¸ä¸ªæå¤ä¸ª nlmsghdr æ°æ®æ¥å¤´åå¶æææ°æ®çå- èæµç»æã对äºåæå¤ä¸ªæ°æ®åç Netlink ä¿¡æ¯ï¼ æ°æ®æ¥å¤´ä¸ç NLM_F_MULTI æ å¿ä½å°è¢«è®¾ç½®ï¼é¤äºæåä¸ä¸ªåçæ¥å¤´å·ææ å¿ NLMSG_DONEå¤ã å- èæµåºåªè½ç¨æ åç NLMSG_* 宿¥è®¿é®ï¼åé netlink(3).

Netlink 䏿¯å¯é çåè®®ãå®åªæ¯å°½å¯è½å°å°ä¿¡æ¯ä¼ è¾å°ç®çå°ï¼ä½å¨ååè å°½æåçå¶ä»é误æ¶ï¼å®ä¼ä¸¢å¤±ä¿¡æ¯ã为ä¿è¯ä¿¡æ¯å¯éä¼ è¾ï¼å¯ä»¥è®¾ç½®æ å¿ NLM_F_ACK æ¥è¦æ±æ¥æ¶æ¹ç¡®è®¤ãæ°æ®æ¥æ¶ç¡®è®¤æ¯ä¸ä¸ª NLMSG_ERROR æ°æ®åï¼åä¸çåºéåæ®µè®¾ç½®ä¸º 0ãåºç¨ç¨åºå¿é¡»èªå·±å建æ¶å°ä¿¡æ¯ç¡®è®¤æ¶æ¯ã å¨ä¿¡æ¯ä¼ éè¿ç¨ä¸- ï¼åæ ¸ä¸ç´(å°è¯)对æ¯ä¸ªåºéçæ°æ®ååé NLMSG_ERROR æ¶æ¯ãç¨æ·è¿ç¨ä¹åºå½éµå¾ªè¿ä¸ä¸ªæ¯ä¾ã

æ¯ä¸ä¸ª netlink æ°æ®ç±»é½æä¸ä¸ª32ä½å¹¿æåç»ï¼å½ 坹奿¥åè°ç¨ bind(2) æ¶ï¼ sockaddr_nl ä¸ç nl_groups åæ®µè®¾ç½®ææè¦ä¾¦å¬ç广æ- ç»ç使©ç ãå¶é»è®¤å¼ä¸º 0ï¼è¡¨ç¤ºä¸æ¥æ¶ä»»ä½å¹¿æã

ä¸ä¸ªå¥æ¥åå¯ä»¥å¯¹ä»»æä¸ä¸ªå¤å广æç»å¹¿ææ¶æ¯ï¼åªè¦å¨è°ç¨ sendmsg(2) æè°ç¨ connect(2) æ¶ï¼å°ä½æ©ç nl_groups 设置æè¦åéæ¶æ¯ç广æ- ç»çå¼å°±å¯ä»¥äºã åªæå·æææ uid 为 0 çç¨æ·æå·æ

CAP_NET_ADMIN æéçç¨æ·æå¯è½åéæä¾¦å¬é对 netlink å¤å广æç»çæ¶æ¯ã ä»»ä½ä¸ä¸ªå¯¹å¤å广æç»æ¶æ¯çååºéååè¿ç¨æ è¯ pid å广æç»å°åã

struct nlmsghdr
{
__u32 nlmsg_len; /* 忬æ¥å¤´å¨åçæ¶æ¯é¿åº¦*/
__u16 nlmsg_type; /* æ¶æ¯æ£æ */
__u16 nlmsg_flags; /* éå æ å¿*/
__u32 nlmsg_seq; /* åºåå·*/
__u32 nlmsg_pid; /* åéè¿ç¨å· PID */
};

struct nlmsgerr
{
int error; /* è´æ°è¡¨ç¤ºçåºéå· errno æä¸º 0 è¦æ±ç¡®è®¤ acks*/
struct nlmsghdr msg; /* é æåºéçæ¶æ¯æ¥å¤´*/
};

卿¯ä¸ª nlmsghdr åè·éçæææ°æ®ã nlmsg_type å¯ä»¥æä¸ºæ åæ¶æ¯çç±»åï¼ NLMSG_NOOP å¯ä»¥å¿½ç¥çæ¶æ¯ï¼ NLMSG_ERROR ååºé误åççæ¶æ¯ï¼æå³æ°æ®ä¸- åå«ä¸ä¸ª nlmsgerr ç»æï¼ NLMSG_DONE ä¸ä¸ªå¤æ°æ®åæ¶æ¯ç»æçä¿¡æ¯ã

ä¸ä¸ª netlink ç±»é常æå®æ´å¤çæ¶æ¯ç±»åï¼è¯·åéæå³æå页ï¼å¦ NETLINK_ROUTE. ä¸ç rtnetlink(7)

     

Image grohtml-3015223-1.png

   

Image grohtml-3015223-2.png

     

Image grohtml-3015223-3.png

注 NLM_F_ATOMIC è¦æ±ç¨æ·æ CAP_NET_ADMIN æè¶çº§ç¨æ·æã

å°åæ ¼å¼

sockaddr_nl æè¿°äºå¨ç¨æ·ç©ºé´æå¨æ ¸å¿ç©ºé´éä¸ä¸ª netlink 客æ·å¯¹è±¡çæ°æ®ç»æã ä¸ä¸ª sockaddr_nl 对象å¯ä»¥æ¯åå广ææå¯¹ä¸ä¸ª netlink å¤åç» (nl_groups ä¸ä¸º 0).

struct sockaddr_nl
{
sa_family_t nl_family; /* AF_NETLINK */
unsigned short nl_pad; /* é¶ */
pid_t nl_pid; /* è¿ç¨æ è¯å·pid */
__u32 nl_groups; /* å¤å广æç»æ©ç */
};

nl_pid æ¯ç¨æ·ç©ºé´ä¸ netlink çè¿ç¨æ è¯å· pidï¼å¦ææ¯å¨åæ ¸æ¶æ¤å¼ä¸º 0ã nl_groups æ¯ä¸ä¸ªä»£è¡¨ neltlink ç»å·ç使©ç ã

BUGS

æ¬æå页并ä¸å®æ´ã

NOTES 注æ

éè¿ libnetlink è°ç¨ netlink åè½é常æ¯éè¿ä½å±åæ ¸æ¥å£è¦æ¥å¾å¥½äºã

VERSIONS çæ¬

netlink 奿¥åæ¥å£æ¯ Linux 2.2 æ°ç¹æ§

Linux 2.0 æ¯ææ´å¤çåºäºnetlinkæ¥å£çåå§è®¾å¤(ä½ä¸ºåä¸å¼å®¹ç¹æ§ï¼ è¿äºè®¾å¤ç®åä»å¯ä½¿ç¨ãæ§æ¥å£ç¹æ§æ²¡æå¨æ¤åè¿°ã

å¦è§

cmsg(3), rtnetlink(7), netlink(3).

ftp://ftp.inr.ac.ru/ip-routing/iproute2* æå³ libnetlink é¨å

[䏿çç»´æ¤äºº]

LetBright <letbright@netease.com>

[ä¸æçææ°æ´æ°]

2000/11/09

ãä¸å½linux论åmanæå页翻è¯è®¡åã:

http://cmpp.linuxforum.net

è·

æ¬é¡µé¢ä¸æçç±ä¸æ man æå页计åæä¾ã
䏿 man æå页计åï¼https://github.com/man-pages-zh/manpages-zh