+mDNSlocal mDNSBool skipSameSubnetRegistration(mDNS *const m, mDNSInterfaceID *regID, mDNSu32 count, mDNSInterfaceID intfid)
+{
+ NetworkInterfaceInfo *intf;
+ NetworkInterfaceInfo *newIntf;
+ mDNSu32 i;
+
+ newIntf = FirstInterfaceForID(m, intfid);
+ if (newIntf == mDNSNULL)
+ {
+ LogMsg("%s : Could not get Interface for id %d", __func__, intfid);
+ return (mDNSfalse);
+ }
+
+ for ( i = 0; i < count; i++)
+ {
+ intf = FirstInterfaceForID(m, regID[i]);
+ if (intf == mDNSNULL)
+ {
+ LogMsg("%s : Could not get Interface for id %d", __func__, regID[i]);
+ return (mDNSfalse);
+ }
+
+ if ((newIntf->ip.type == mDNSAddrType_IPv4) &&
+ (((intf->ip.ip.v4.NotAnInteger ^ newIntf->ip.ip.v4.NotAnInteger) & intf->mask.ip.v4.NotAnInteger) == 0))
+ {
+ LogSPS("%s : Already registered for the same subnet (IPv4) for interface %s", __func__, intf->ifname);
+ return (mDNStrue);
+ }
+
+ if ( (newIntf->ip.type == mDNSAddrType_IPv6) &&
+ ((((intf->ip.ip.v6.l[0] ^ newIntf->ip.ip.v6.l[0]) & intf->mask.ip.v6.l[0]) == 0) &&
+ (((intf->ip.ip.v6.l[1] ^ newIntf->ip.ip.v6.l[1]) & intf->mask.ip.v6.l[1]) == 0) &&
+ (((intf->ip.ip.v6.l[2] ^ newIntf->ip.ip.v6.l[2]) & intf->mask.ip.v6.l[2]) == 0) &&
+ (((intf->ip.ip.v6.l[3] ^ newIntf->ip.ip.v6.l[3]) & intf->mask.ip.v6.l[3]) == 0)))
+ {
+ LogSPS("%s : Already registered for the same subnet (IPv6) for interface %s", __func__, intf->ifname);
+ return (mDNStrue);
+ }
+ }
+ return (mDNSfalse);
+}
+