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 }