#ifndef _IP_PLUGIN_H
#define _IP_PLUGIN_H
#include <netinet/in.h>
#include <SystemConfiguration/SCPrivate.h>
#include <net/if.h>
#ifdef TEST_IPV4_ROUTELIST
#define TEST_ROUTELIST
#endif
#ifdef TEST_IPV6_ROUTELIST
#define TEST_ROUTELIST
#endif
#ifndef countof
#define countof(array) (sizeof(array) / sizeof((array)[0]))
#endif
#define kIsNULL CFSTR("IsNULL")
#ifdef TEST_ROUTELIST
#define my_log(__level, fmt, ...) SCPrint(TRUE, stdout, CFSTR(fmt "\n"), ## __VA_ARGS__)
#else
#define my_log(__level, fmt, ...) SCLoggerLog(my_log_get_logger(), __level, CFSTR(fmt), ## __VA_ARGS__)
SCLoggerRef my_log_get_logger();
#endif
boolean_t
cfstring_to_ip(CFStringRef str, struct in_addr * ip_p);
boolean_t
cfstring_to_ip6(CFStringRef str, struct in6_addr * ip6_p);
unsigned int
my_if_nametoindex(const char * ifname);
const char *
my_if_indextoname(unsigned int idx, char if_name[IFNAMSIZ]);
boolean_t
service_contains_protocol(CFDictionaryRef service, int af);
boolean_t
service_is_scoped_only(CFDictionaryRef service);
boolean_t
check_if_service_expensive(CFStringRef serviceID);
CFDictionaryRef
ipv4_dict_create(CFDictionaryRef state_dict);
CFDictionaryRef
ipv6_dict_create(CFDictionaryRef state_dict);
#endif // _IP_PLUGIN_H