在rtnetlink(Linux)中,IFA_LOCAL和IFA_ADDRESS有什么区别?

17

我尝试理解IFA_LOCAL和IFA_ADDRESS之间的区别。

下面是来自man的内容:

IFA_ADDRESS  raw protocol address  interface address
IFA_LOCAL  raw protocol address  local address 

我不明白本地地址和接口地址的区别。

能否有人给我解释一下?或者告诉我在哪里可以找到答案?

谢谢。

2个回答

18

这段来自if_addr.h的注释应该可以解释清楚:

/*
 * Important comment:
 * IFA_ADDRESS is prefix address, rather than local interface address.
 * It makes no difference for normally configured broadcast interfaces,
 * but for point-to-point IFA_ADDRESS is DESTINATION address,
 * local address is supplied in IFA_LOCAL attribute.
*/

0
# ip a
51: ppp0@if51: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1432 qdisc fq_codel state UNKNOWN group default qlen 3
    link/ppp  link-netnsid 0
    inet 10.128.0.1 peer 10.128.140.125/32 scope global ppp0
       valid_lft forever preferred_lft forever

from pr2modules.iproute import IPRoute
from pprint import pprint

pprint(IPRoute().get_addr(index=51))

({'attrs': [('IFA_ADDRESS', '10.128.140.125'),
            ('IFA_LOCAL', '10.128.0.1'),
            ('IFA_LABEL', 'ppp0'),
            ('IFA_FLAGS', 128),

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接