IP结构与操作之inet_addr_onlink

 1 /* 根据指定设备的ip配置块,判断地址a,b是否在同一子网 */
 2 /* 
 3     --邻居项要求,在同一子网中的两个设备,
 4     至少有一个接口有相同的子网配置,
 5     --也就是说对端的in_dev->ifa_list中也能找到一个与当前
 6     in_dev->ifa_list中相同的ifa_mask
 7     --如果有这样一个ifa_mask使得两个地址与其计算后
 8     网络部分相同,则在同一子网
 9 */
10 int inet_addr_onlink(struct in_device *in_dev, __be32 a, __be32 b)
11 {
12     rcu_read_lock();
13 
14     /* 遍历主地址 */
15     for_primary_ifa(in_dev) {
16         /* a与ifa在同一网段 */
17         if (inet_ifa_match(a, ifa)) {
18             /* b不存在,或者b与ifa在同一网段 */
19             if (!b || inet_ifa_match(b, ifa)) {
20                 rcu_read_unlock();
21 
22                 /* ab在同一子网 */
23                 return 1;
24             }
25         }
26     } endfor_ifa(in_dev);
27     rcu_read_unlock();
28     return 0;
29 }

 

posted @ 2017-09-17 21:41  AlexAlex  阅读(453)  评论(0编辑  收藏  举报