/*
- * Copyright (c) 2002-2003 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2002-2005, 2007, 2008, 2011 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
#include "cache.h"
#include "ev_ipv4.h"
-#ifndef kSCEntNetIPv4ARPCollision
-#define kSCEntNetIPv4ARPCollision CFSTR("IPv4ARPCollision")
-#endif kSCEntNetIPv4ARPCollision
+#ifndef kSCEntNetIPv4ARPCollision
+#define kSCEntNetIPv4ARPCollision CFSTR("IPv4ARPCollision")
+#endif /* kSCEntNetIPv4ARPCollision */
+
+#if !TARGET_OS_IPHONE
+#ifndef kSCEntNetIPv4PortInUse
+#define kSCEntNetIPv4PortInUse CFSTR("PortInUse")
+#endif /* kSCEntNetIPv4PortInUse */
+#endif /* !TARGET_OS_IPHONE */
#define IP_FORMAT "%d.%d.%d.%d"
#define IP_CH(ip, i) (((u_char *)(ip))[i])
static CFMutableDictionaryRef
-getIF(CFStringRef key, CFMutableDictionaryRef oldIFs, CFMutableDictionaryRef newIFs)
+copyIF(CFStringRef key, CFMutableDictionaryRef oldIFs, CFMutableDictionaryRef newIFs)
{
CFDictionaryRef dict = NULL;
CFMutableDictionaryRef newDict = NULL;
} else if (dict) {
cache_SCDynamicStoreRemoveValue(store, key);
}
+ network_changed = TRUE;
}
return;
&kCFTypeDictionaryValueCallBacks);
if (!ifap) {
- if (getifaddrs(&ifap_temp) < 0) {
+ if (getifaddrs(&ifap_temp) == -1) {
SCLog(TRUE, LOG_ERR, CFSTR("getifaddrs() failed: %s"), strerror(errno));
goto error;
}
kSCEntNetIPv4);
CFRelease(interface);
- newDict = getIF(key, oldIFs, newIFs);
+ newDict = copyIF(key, oldIFs, newIFs);
- sin = (struct sockaddr_in *)ifa->ifa_addr;
+ /* ALIGN: cast ok, this should be aligned (getifaddrs). */
+ sin = (struct sockaddr_in *)(void *)ifa->ifa_addr;
appendAddress(newDict, kSCPropNetIPv4Addresses, &sin->sin_addr);
if (ifa->ifa_flags & IFF_POINTOPOINT) {
struct sockaddr_in *dst;
- dst = (struct sockaddr_in *)ifa->ifa_dstaddr;
+ /* ALIGN: cast ok, this should be aligned (getifaddrs). */
+ dst = (struct sockaddr_in *)(void *)ifa->ifa_dstaddr;
appendAddress(newDict, kSCPropNetIPv4DestAddresses, &dst->sin_addr);
} else {
struct sockaddr_in *brd;
struct sockaddr_in *msk;
- brd = (struct sockaddr_in *)ifa->ifa_broadaddr;
- appendAddress(newDict, kSCPropNetIPv4BroadcastAddresses, &brd->sin_addr);
- msk = (struct sockaddr_in *)ifa->ifa_netmask;
+ /* ALIGN: cast ok, this should be aligned (getifaddrs). */
+ brd = (struct sockaddr_in *)(void *)ifa->ifa_broadaddr;
+ appendAddress(newDict, kSCPropNetIPv4BroadcastAddresses,&brd->sin_addr);
+
+ /* ALIGN: cast ok, this should be aligned (getifaddrs). */
+ msk = (struct sockaddr_in *)(void *)ifa->ifa_netmask;
appendAddress(newDict, kSCPropNetIPv4SubnetMasks, &msk->sin_addr);
}
kSCEntNetIPv4);
CFRelease(interface);
- newDict = getIF(key, oldIFs, newIFs);
+ newDict = copyIF(key, oldIFs, newIFs);
CFDictionarySetValue(newIFs, key, newDict);
CFRelease(newDict);
CFRelease(if_name_cf);
return;
}
+
+#if !TARGET_OS_IPHONE
+__private_extern__
+void
+port_in_use_ipv4(uint16_t port, pid_t req_pid)
+{
+ CFStringRef key;
+
+ key = SCDynamicStoreKeyCreate(NULL,
+ CFSTR("%@/%@/Protocol/%@/%@/%d/%d"),
+ kSCDynamicStoreDomainState,
+ kSCCompNetwork,
+ kSCEntNetIPv4,
+ kSCEntNetIPv4PortInUse,
+ port, req_pid);
+ cache_SCDynamicStoreNotifyValue(store, key);
+ CFRelease(key);
+ return;
+}
+#endif /* !TARGET_OS_IPHONE */