+
+#if !TARGET_OS_IPHONE
+__private_extern__
+void
+ipv4_port_in_use(uint16_t port, pid_t req_pid)
+{
+ CFStringRef key;
+
+ key = SCDynamicStoreKeyCreate(NULL,
+ CFSTR("%@/%@/Protocol/%@/%@/%d/%d"),
+ kSCDynamicStoreDomainState,
+ kSCCompNetwork,
+ kSCEntNetIPv4,
+ kSCEntNetIPv4PortInUse,
+ port, req_pid);
+ SC_log(LOG_DEBUG, "Post port-in-use: %@", key);
+ SCDynamicStoreNotifyValue(store, key);
+ CFRelease(key);
+ return;
+}
+#endif /* !TARGET_OS_IPHONE */
+
+static void
+interface_notify_entity(const char * if_name, const char * type, CFStringRef entity)
+{
+ CFStringRef if_name_cf;
+ CFStringRef key;
+
+ if_name_cf = CFStringCreateWithCString(NULL, if_name,
+ kCFStringEncodingASCII);
+ key = SCDynamicStoreKeyCreateNetworkInterfaceEntity(NULL,
+ kSCDynamicStoreDomainState,
+ if_name_cf,
+ entity);
+ CFRelease(if_name_cf);
+ SC_log(LOG_DEBUG, "Post %s: %@", type, key);
+ SCDynamicStoreNotifyValue(store, key);
+ CFRelease(key);
+ return;
+}
+
+__private_extern__ void
+ipv4_router_arp_failure(const char * if_name)
+{
+ interface_notify_entity(if_name, "Router ARP failure", kSCEntNetIPv4RouterARPFailure);
+ return;
+}
+
+__private_extern__ void
+ipv4_router_arp_alive(const char * if_name)
+{
+ interface_notify_entity(if_name, "Router ARP alive", kSCEntNetIPv4RouterARPAlive);
+ return;
+}