From c798860f90049e616cf59b1a562922f038436b7f Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Tue, 28 Jun 2016 15:20:30 -0700 Subject: [PATCH] Removed old attic files. Updated test checks --- attic/httpserver.js | 7 - attic/ifaddrs.c | 603 ------------------------------------- attic/ifaddrs.h | 54 ---- attic/install-intercept.sh | 10 - attic/kq.c | 270 ----------------- attic/kq.h | 1 - attic/kq_old.c | 103 ------- attic/ztproxy.c | 10 - attic/ztproxy.h | 0 make-freebsd.mk | 65 ---- make-linux.mk | 35 ++- make-mac.mk | 39 +-- tests/udp_client | Bin 8956 -> 0 bytes tests/udp_server | Bin 9004 -> 0 bytes udp_client | Bin 8892 -> 0 bytes 15 files changed, 49 insertions(+), 1148 deletions(-) delete mode 100644 attic/httpserver.js delete mode 100644 attic/ifaddrs.c delete mode 100644 attic/ifaddrs.h delete mode 100755 attic/install-intercept.sh delete mode 100644 attic/kq.c delete mode 100644 attic/kq.h delete mode 100644 attic/kq_old.c delete mode 100644 attic/ztproxy.c delete mode 100644 attic/ztproxy.h delete mode 100644 make-freebsd.mk delete mode 100755 tests/udp_client delete mode 100755 tests/udp_server delete mode 100755 udp_client diff --git a/attic/httpserver.js b/attic/httpserver.js deleted file mode 100644 index 5c2c011..0000000 --- a/attic/httpserver.js +++ /dev/null @@ -1,7 +0,0 @@ -var http = require('http'); -var server = http.createServer(function (request, response) { - response.writeHead(200, {"Content-Type": "text/plain"}); - response.end("\n\nWelcome to the machine!\n\n"); -}); -server.listen(80); -console.log("Server running!"); diff --git a/attic/ifaddrs.c b/attic/ifaddrs.c deleted file mode 100644 index cad3194..0000000 --- a/attic/ifaddrs.c +++ /dev/null @@ -1,603 +0,0 @@ -/* -Copyright (c) 2013, Kenneth MacKay -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ifaddrs.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "jni_utils.h" - -typedef struct NetlinkList -{ - struct NetlinkList *m_next; - struct nlmsghdr *m_data; - unsigned int m_size; -} NetlinkList; - -static int netlink_socket(void) -{ - int l_socket = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE); - if(l_socket < 0) - { - return -1; - } - - struct sockaddr_nl l_addr; - memset(&l_addr, 0, sizeof(l_addr)); - l_addr.nl_family = AF_NETLINK; - if(bind(l_socket, (struct sockaddr *)&l_addr, sizeof(l_addr)) < 0) - { - close(l_socket); - return -1; - } - - return l_socket; -} - -static int netlink_send(int p_socket, int p_request) -{ - char l_buffer[NLMSG_ALIGN(sizeof(struct nlmsghdr)) + NLMSG_ALIGN(sizeof(struct rtgenmsg))]; - memset(l_buffer, 0, sizeof(l_buffer)); - struct nlmsghdr *l_hdr = (struct nlmsghdr *)l_buffer; - struct rtgenmsg *l_msg = (struct rtgenmsg *)NLMSG_DATA(l_hdr); - - l_hdr->nlmsg_len = NLMSG_LENGTH(sizeof(*l_msg)); - l_hdr->nlmsg_type = p_request; - l_hdr->nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST; - l_hdr->nlmsg_pid = 0; - l_hdr->nlmsg_seq = p_socket; - l_msg->rtgen_family = AF_UNSPEC; - - struct sockaddr_nl l_addr; - memset(&l_addr, 0, sizeof(l_addr)); - l_addr.nl_family = AF_NETLINK; - return (sendto(p_socket, l_hdr, l_hdr->nlmsg_len, 0, (struct sockaddr *)&l_addr, sizeof(l_addr))); -} - -static int netlink_recv(int p_socket, void *p_buffer, size_t p_len) -{ - struct msghdr l_msg; - struct iovec l_iov = { p_buffer, p_len }; - struct sockaddr_nl l_addr; - int l_result; - - for(;;) - { - l_msg.msg_name = (void *)&l_addr; - l_msg.msg_namelen = sizeof(l_addr); - l_msg.msg_iov = &l_iov; - l_msg.msg_iovlen = 1; - l_msg.msg_control = NULL; - l_msg.msg_controllen = 0; - l_msg.msg_flags = 0; - int l_result = recvmsg(p_socket, &l_msg, 0); - - if(l_result < 0) - { - if(errno == EINTR) - { - continue; - } - return -2; - } - - if(l_msg.msg_flags & MSG_TRUNC) - { // buffer was too small - return -1; - } - return l_result; - } -} - -static struct nlmsghdr *getNetlinkResponse(int p_socket, int *p_size, int *p_done) -{ - size_t l_size = 4096; - void *l_buffer = NULL; - - for(;;) - { - free(l_buffer); - l_buffer = malloc(l_size); - - int l_read = netlink_recv(p_socket, l_buffer, l_size); - *p_size = l_read; - if(l_read == -2) - { - free(l_buffer); - return NULL; - } - if(l_read >= 0) - { - pid_t l_pid = getpid(); - struct nlmsghdr *l_hdr; - for(l_hdr = (struct nlmsghdr *)l_buffer; NLMSG_OK(l_hdr, (unsigned int)l_read); l_hdr = (struct nlmsghdr *)NLMSG_NEXT(l_hdr, l_read)) - { - if((pid_t)l_hdr->nlmsg_pid != l_pid || (int)l_hdr->nlmsg_seq != p_socket) - { - continue; - } - - if(l_hdr->nlmsg_type == NLMSG_DONE) - { - *p_done = 1; - break; - } - - if(l_hdr->nlmsg_type == NLMSG_ERROR) - { - free(l_buffer); - return NULL; - } - } - return l_buffer; - } - - l_size *= 2; - } -} - -static NetlinkList *newListItem(struct nlmsghdr *p_data, unsigned int p_size) -{ - NetlinkList *l_item = malloc(sizeof(NetlinkList)); - l_item->m_next = NULL; - l_item->m_data = p_data; - l_item->m_size = p_size; - return l_item; -} - -static void freeResultList(NetlinkList *p_list) -{ - NetlinkList *l_cur; - while(p_list) - { - l_cur = p_list; - p_list = p_list->m_next; - free(l_cur->m_data); - free(l_cur); - } -} - -static NetlinkList *getResultList(int p_socket, int p_request) -{ - if(netlink_send(p_socket, p_request) < 0) - { - return NULL; - } - - NetlinkList *l_list = NULL; - NetlinkList *l_end = NULL; - int l_size; - int l_done = 0; - while(!l_done) - { - struct nlmsghdr *l_hdr = getNetlinkResponse(p_socket, &l_size, &l_done); - if(!l_hdr) - { // error - freeResultList(l_list); - return NULL; - } - - NetlinkList *l_item = newListItem(l_hdr, l_size); - if(!l_list) - { - l_list = l_item; - } - else - { - l_end->m_next = l_item; - } - l_end = l_item; - } - return l_list; -} - -static size_t maxSize(size_t a, size_t b) -{ - return (a > b ? a : b); -} - -static size_t calcAddrLen(sa_family_t p_family, int p_dataSize) -{ - switch(p_family) - { - case AF_INET: - return sizeof(struct sockaddr_in); - case AF_INET6: - return sizeof(struct sockaddr_in6); - case AF_PACKET: - return maxSize(sizeof(struct sockaddr_ll), offsetof(struct sockaddr_ll, sll_addr) + p_dataSize); - default: - return maxSize(sizeof(struct sockaddr), offsetof(struct sockaddr, sa_data) + p_dataSize); - } -} - -static void makeSockaddr(sa_family_t p_family, struct sockaddr *p_dest, void *p_data, size_t p_size) -{ - switch(p_family) - { - case AF_INET: - memcpy(&((struct sockaddr_in*)p_dest)->sin_addr, p_data, p_size); - break; - case AF_INET6: - memcpy(&((struct sockaddr_in6*)p_dest)->sin6_addr, p_data, p_size); - break; - case AF_PACKET: - memcpy(((struct sockaddr_ll*)p_dest)->sll_addr, p_data, p_size); - ((struct sockaddr_ll*)p_dest)->sll_halen = p_size; - break; - default: - memcpy(p_dest->sa_data, p_data, p_size); - break; - } - p_dest->sa_family = p_family; -} - -static void addToEnd(struct ifaddrs **p_resultList, struct ifaddrs *p_entry) -{ - if(!*p_resultList) - { - *p_resultList = p_entry; - } - else - { - struct ifaddrs *l_cur = *p_resultList; - while(l_cur->ifa_next) - { - l_cur = l_cur->ifa_next; - } - l_cur->ifa_next = p_entry; - } -} - -static void interpretLink(struct nlmsghdr *p_hdr, struct ifaddrs **p_links, struct ifaddrs **p_resultList) -{ - struct ifinfomsg *l_info = (struct ifinfomsg *)NLMSG_DATA(p_hdr); - - size_t l_nameSize = 0; - size_t l_addrSize = 0; - size_t l_dataSize = 0; - - size_t l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifinfomsg)); - struct rtattr *l_rta; - for(l_rta = (struct rtattr *)(((char *)l_info) + NLMSG_ALIGN(sizeof(struct ifinfomsg))); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) - { - void *l_rtaData = RTA_DATA(l_rta); - size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); - switch(l_rta->rta_type) - { - case IFLA_ADDRESS: - case IFLA_BROADCAST: - l_addrSize += NLMSG_ALIGN(calcAddrLen(AF_PACKET, l_rtaDataSize)); - break; - case IFLA_IFNAME: - l_nameSize += NLMSG_ALIGN(l_rtaSize + 1); - break; - case IFLA_STATS: - l_dataSize += NLMSG_ALIGN(l_rtaSize); - break; - default: - break; - } - } - - struct ifaddrs *l_entry = malloc(sizeof(struct ifaddrs) + l_nameSize + l_addrSize + l_dataSize); - memset(l_entry, 0, sizeof(struct ifaddrs)); - l_entry->ifa_name = ""; - - char *l_name = ((char *)l_entry) + sizeof(struct ifaddrs); - char *l_addr = l_name + l_nameSize; - char *l_data = l_addr + l_addrSize; - - l_entry->ifa_flags = l_info->ifi_flags; - - l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifinfomsg)); - for(l_rta = (struct rtattr *)(((char *)l_info) + NLMSG_ALIGN(sizeof(struct ifinfomsg))); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) - { - void *l_rtaData = RTA_DATA(l_rta); - size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); - switch(l_rta->rta_type) - { - case IFLA_ADDRESS: - case IFLA_BROADCAST: - { - size_t l_addrLen = calcAddrLen(AF_PACKET, l_rtaDataSize); - makeSockaddr(AF_PACKET, (struct sockaddr *)l_addr, l_rtaData, l_rtaDataSize); - ((struct sockaddr_ll *)l_addr)->sll_ifindex = l_info->ifi_index; - ((struct sockaddr_ll *)l_addr)->sll_hatype = l_info->ifi_type; - if(l_rta->rta_type == IFLA_ADDRESS) - { - l_entry->ifa_addr = (struct sockaddr *)l_addr; - } - else - { - l_entry->ifa_broadaddr = (struct sockaddr *)l_addr; - } - l_addr += NLMSG_ALIGN(l_addrLen); - break; - } - case IFLA_IFNAME: - strncpy(l_name, l_rtaData, l_rtaDataSize); - l_name[l_rtaDataSize] = '\0'; - l_entry->ifa_name = l_name; - break; - case IFLA_STATS: - memcpy(l_data, l_rtaData, l_rtaDataSize); - l_entry->ifa_data = l_data; - break; - default: - break; - } - } - - addToEnd(p_resultList, l_entry); - p_links[l_info->ifi_index - 1] = l_entry; -} - -static void interpretAddr(struct nlmsghdr *p_hdr, struct ifaddrs **p_links, struct ifaddrs **p_resultList) -{ - struct ifaddrmsg *l_info = (struct ifaddrmsg *)NLMSG_DATA(p_hdr); - - size_t l_nameSize = 0; - size_t l_addrSize = 0; - - int l_addedNetmask = 0; - - size_t l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifaddrmsg)); - struct rtattr *l_rta; - for(l_rta = (struct rtattr *)(((char *)l_info) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) - { - void *l_rtaData = RTA_DATA(l_rta); - size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); - if(l_info->ifa_family == AF_PACKET) - { - continue; - } - - switch(l_rta->rta_type) - { - case IFA_ADDRESS: - case IFA_LOCAL: - if((l_info->ifa_family == AF_INET || l_info->ifa_family == AF_INET6) && !l_addedNetmask) - { // make room for netmask - l_addrSize += NLMSG_ALIGN(calcAddrLen(l_info->ifa_family, l_rtaDataSize)); - l_addedNetmask = 1; - } - case IFA_BROADCAST: - l_addrSize += NLMSG_ALIGN(calcAddrLen(l_info->ifa_family, l_rtaDataSize)); - break; - case IFA_LABEL: - l_nameSize += NLMSG_ALIGN(l_rtaSize + 1); - break; - default: - break; - } - } - - struct ifaddrs *l_entry = malloc(sizeof(struct ifaddrs) + l_nameSize + l_addrSize); - memset(l_entry, 0, sizeof(struct ifaddrs)); - l_entry->ifa_name = p_links[l_info->ifa_index - 1]->ifa_name; - - char *l_name = ((char *)l_entry) + sizeof(struct ifaddrs); - char *l_addr = l_name + l_nameSize; - - l_entry->ifa_flags = l_info->ifa_flags | p_links[l_info->ifa_index - 1]->ifa_flags; - - l_rtaSize = NLMSG_PAYLOAD(p_hdr, sizeof(struct ifaddrmsg)); - for(l_rta = (struct rtattr *)(((char *)l_info) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))); RTA_OK(l_rta, l_rtaSize); l_rta = RTA_NEXT(l_rta, l_rtaSize)) - { - void *l_rtaData = RTA_DATA(l_rta); - size_t l_rtaDataSize = RTA_PAYLOAD(l_rta); - switch(l_rta->rta_type) - { - case IFA_ADDRESS: - case IFA_BROADCAST: - case IFA_LOCAL: - { - size_t l_addrLen = calcAddrLen(l_info->ifa_family, l_rtaDataSize); - makeSockaddr(l_info->ifa_family, (struct sockaddr *)l_addr, l_rtaData, l_rtaDataSize); - if(l_info->ifa_family == AF_INET6) - { - if(IN6_IS_ADDR_LINKLOCAL((struct in6_addr *)l_rtaData) || IN6_IS_ADDR_MC_LINKLOCAL((struct in6_addr *)l_rtaData)) - { - ((struct sockaddr_in6 *)l_addr)->sin6_scope_id = l_info->ifa_index; - } - } - - if(l_rta->rta_type == IFA_ADDRESS) - { // apparently in a point-to-point network IFA_ADDRESS contains the dest address and IFA_LOCAL contains the local address - if(l_entry->ifa_addr) - { - l_entry->ifa_dstaddr = (struct sockaddr *)l_addr; - } - else - { - l_entry->ifa_addr = (struct sockaddr *)l_addr; - } - } - else if(l_rta->rta_type == IFA_LOCAL) - { - if(l_entry->ifa_addr) - { - l_entry->ifa_dstaddr = l_entry->ifa_addr; - } - l_entry->ifa_addr = (struct sockaddr *)l_addr; - } - else - { - l_entry->ifa_broadaddr = (struct sockaddr *)l_addr; - } - l_addr += NLMSG_ALIGN(l_addrLen); - break; - } - case IFA_LABEL: - strncpy(l_name, l_rtaData, l_rtaDataSize); - l_name[l_rtaDataSize] = '\0'; - l_entry->ifa_name = l_name; - break; - default: - break; - } - } - - if(l_entry->ifa_addr && (l_entry->ifa_addr->sa_family == AF_INET || l_entry->ifa_addr->sa_family == AF_INET6)) - { - unsigned l_maxPrefix = (l_entry->ifa_addr->sa_family == AF_INET ? 32 : 128); - unsigned l_prefix = (l_info->ifa_prefixlen > l_maxPrefix ? l_maxPrefix : l_info->ifa_prefixlen); - char l_mask[16] = {0}; - unsigned i; - for(i=0; i<(l_prefix/8); ++i) - { - l_mask[i] = 0xff; - } - l_mask[i] = 0xff << (8 - (l_prefix % 8)); - - makeSockaddr(l_entry->ifa_addr->sa_family, (struct sockaddr *)l_addr, l_mask, l_maxPrefix / 8); - l_entry->ifa_netmask = (struct sockaddr *)l_addr; - } - - addToEnd(p_resultList, l_entry); -} - -static void interpret(int p_socket, NetlinkList *p_netlinkList, struct ifaddrs **p_links, struct ifaddrs **p_resultList) -{ - pid_t l_pid = getpid(); - for(; p_netlinkList; p_netlinkList = p_netlinkList->m_next) - { - unsigned int l_nlsize = p_netlinkList->m_size; - struct nlmsghdr *l_hdr; - for(l_hdr = p_netlinkList->m_data; NLMSG_OK(l_hdr, l_nlsize); l_hdr = NLMSG_NEXT(l_hdr, l_nlsize)) - { - if((pid_t)l_hdr->nlmsg_pid != l_pid || (int)l_hdr->nlmsg_seq != p_socket) - { - continue; - } - - if(l_hdr->nlmsg_type == NLMSG_DONE) - { - break; - } - - if(l_hdr->nlmsg_type == RTM_NEWLINK) - { - interpretLink(l_hdr, p_links, p_resultList); - } - else if(l_hdr->nlmsg_type == RTM_NEWADDR) - { - interpretAddr(l_hdr, p_links, p_resultList); - } - } - } -} - -static unsigned countLinks(int p_socket, NetlinkList *p_netlinkList) -{ - unsigned l_links = 0; - pid_t l_pid = getpid(); - for(; p_netlinkList; p_netlinkList = p_netlinkList->m_next) - { - unsigned int l_nlsize = p_netlinkList->m_size; - struct nlmsghdr *l_hdr; - for(l_hdr = p_netlinkList->m_data; NLMSG_OK(l_hdr, l_nlsize); l_hdr = NLMSG_NEXT(l_hdr, l_nlsize)) - { - if((pid_t)l_hdr->nlmsg_pid != l_pid || (int)l_hdr->nlmsg_seq != p_socket) - { - continue; - } - - if(l_hdr->nlmsg_type == NLMSG_DONE) - { - break; - } - - if(l_hdr->nlmsg_type == RTM_NEWLINK) - { - ++l_links; - } - } - } - - return l_links; -} - -int getifaddrs(struct ifaddrs **ifap) -{ - LOGV("getifaddrs\n"); - if(!ifap) - { - return -1; - } - *ifap = NULL; - - int l_socket = netlink_socket(); - if(l_socket < 0) - { - return -1; - } - - NetlinkList *l_linkResults = getResultList(l_socket, RTM_GETLINK); - if(!l_linkResults) - { - close(l_socket); - return -1; - } - - NetlinkList *l_addrResults = getResultList(l_socket, RTM_GETADDR); - if(!l_addrResults) - { - close(l_socket); - freeResultList(l_linkResults); - return -1; - } - - unsigned l_numLinks = countLinks(l_socket, l_linkResults) + countLinks(l_socket, l_addrResults); - struct ifaddrs *l_links[l_numLinks]; - memset(l_links, 0, l_numLinks * sizeof(struct ifaddrs *)); - - interpret(l_socket, l_linkResults, l_links, ifap); - interpret(l_socket, l_addrResults, l_links, ifap); - - freeResultList(l_linkResults); - freeResultList(l_addrResults); - close(l_socket); - return 0; -} - -void freeifaddrs(struct ifaddrs *ifa) -{ - struct ifaddrs *l_cur; - while(ifa) - { - l_cur = ifa; - ifa = ifa->ifa_next; - free(l_cur); - } -} diff --git a/attic/ifaddrs.h b/attic/ifaddrs.h deleted file mode 100644 index 9cd19fe..0000000 --- a/attic/ifaddrs.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 1995, 1999 - * Berkeley Software Design, Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * THIS SOFTWARE IS PROVIDED BY Berkeley Software Design, Inc. ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design, Inc. BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * BSDI ifaddrs.h,v 2.5 2000/02/23 14:51:59 dab Exp - */ - -#ifndef _IFADDRS_H_ -#define _IFADDRS_H_ - -struct ifaddrs { - struct ifaddrs *ifa_next; - char *ifa_name; - unsigned int ifa_flags; - struct sockaddr *ifa_addr; - struct sockaddr *ifa_netmask; - struct sockaddr *ifa_dstaddr; - void *ifa_data; -}; - -/* - * This may have been defined in . Note that if is - * to be included it must be included before this header file. - */ -#ifndef ifa_broadaddr -#define ifa_broadaddr ifa_dstaddr /* broadcast address interface */ -#endif - -#include - -__BEGIN_DECLS -extern int getifaddrs(struct ifaddrs **ifap); -extern void freeifaddrs(struct ifaddrs *ifa); -__END_DECLS - -#endif diff --git a/attic/install-intercept.sh b/attic/install-intercept.sh deleted file mode 100755 index b3da8aa..0000000 --- a/attic/install-intercept.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -# This script is only needed for debugging purposes - -cp libzerotierintercept.so /lib/libzerotierintercept.so -ln -sf /lib/libzerotierintercept.so /lib/libzerotierintercept -/usr/bin/install -c zerotier-intercept /usr/bin - -# rm -r /lib/libzerotierintercept.so -# rm -r /lib/libzerotierintercept -# rm -r /usr/bin/zerotier-intercept diff --git a/attic/kq.c b/attic/kq.c deleted file mode 100644 index 5b09a1d..0000000 --- a/attic/kq.c +++ /dev/null @@ -1,270 +0,0 @@ -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - - -#include "netcon.h" -#include "RPC.h" - -void monitor_fds(); -void test_poll_loop(); - -#define MIN_FD 3 -#define SET_SZ 10 - -void die(const char *str) { - perror(str); - exit(EXIT_FAILURE); -} - -int make_nonblocking(int fd) { - int flags; - if (-1 == (flags = fcntl(fd, F_GETFL))) - return -1; - flags |= O_NONBLOCK; - if (-1 == fcntl(fd, F_SETFL, flags)) - return -1; - return 0; -} - -void changeling() -{ - set_netpath("/root/dev/ztest/nc_e5cd7a9e1c7d408c"); - pthread_t monitor_thread; - pthread_t poll_thread; - int i = 7; - // Socket monitor and swap thread - if(pthread_create(&monitor_thread, NULL, monitor_fds, (void *)i)) { - die("unable to start changeling thread\n"); - } - // Test poll loop thread - if(pthread_create(&poll_thread, NULL, test_poll_loop, (void *)i)) { - die("unable to start test poll loop thread\n"); - } -} - - - -void test_poll_loop() -{ - printf("[POLL test thread]\n"); - fd_set in_set, rfds, wfds, efds; - struct timeval tmout; - //tmout.tv_usec = 8000000; - int ev; - - for(;;) - { - //printf("polling...\n"); - FD_ZERO(&in_set); - FD_SET(4, &in_set); - ev = select(4+1, &rfds, &wfds, &efds, NULL); - if(ev == -1) - { - // perror("select"); - } - if(ev > 0) { - printf("ev = %d\n", ev); - if(FD_ISSET(4, &rfds)) { - printf("[Read] event detected!, ev = %d\n", ev); - } - if(FD_ISSET(4, &wfds)) { - printf("[Write] event detected!, ev = %d\n", ev); - } - if(FD_ISSET(4, &efds)) { - printf("[Exception] event detected!, ev = %d\n", ev); - } - sleep(1); - } - } -} - -unsigned int vnode_events = NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_LINK | NOTE_RENAME | NOTE_REVOKE; - -char *flagstring(int flags) -{ - static char ret[512]; - char *or = ""; - - ret[0]='\0'; // clear the string. - if (flags & NOTE_DELETE) {strcat(ret,or);strcat(ret,"NOTE_DELETE");or="|";} - if (flags & NOTE_WRITE) {strcat(ret,or);strcat(ret,"NOTE_WRITE");or="|";} - if (flags & NOTE_EXTEND) {strcat(ret,or);strcat(ret,"NOTE_EXTEND");or="|";} - if (flags & NOTE_ATTRIB) {strcat(ret,or);strcat(ret,"NOTE_ATTRIB");or="|";} - if (flags & NOTE_LINK) {strcat(ret,or);strcat(ret,"NOTE_LINK");or="|";} - if (flags & NOTE_RENAME) {strcat(ret,or);strcat(ret,"NOTE_RENAME");or="|";} - if (flags & NOTE_REVOKE) {strcat(ret,or);strcat(ret,"NOTE_REVOKE");or="|";} - - return ret; -} - - -void monitor_fds(){ - printf("[MONITOR thread]\n"); - struct timespec tmout = { 0, /* s */ 500000 /* ns */ }; - struct kevent evSet[SET_SZ]; - struct kevent evList[32]; - int fd, kq, nev, i; - struct sockaddr_storage addr; - socklen_t socklen = sizeof(addr); - - int s = 3; - - // Get new kernel event queue - kq = kqueue(); - - // For tracking changes in open fds - int watch_list_sz = SET_SZ; - int registered_sz = 0; - int last_registered_sz = 0; - - int swap = 0; - - for (;;) - { - registered_sz=0; - /* Register range of idents */ - for(int i=MIN_FD; i last_registered_sz; - if(fd_delta) { - printf("NEW fd registered!\n"); - } - last_registered_sz = registered_sz; - - - - int s=4; - - // Check on newly created sockets - if(!swap && fd_delta && true==false) - { - swap = 1; - printf("new socket detected zt_socket = %p\n", (void*)&zt_socket); - - int opt; - socklen_t opt_len; - int err; - - int newsock = zt_socket(AF_INET, SOCK_STREAM, 0); - printf("newsock = %d\n", newsock); - err = dup2(newsock, s); - //printf("dup2() = %d\n", err); - sleep(5); - - /* - if((err = getsockopt(s, SOL_SOCKET, SO_TYPE, (void*)&opt, &opt_len)) < 0) { - printf("getsockopt(): err = %d\n", err); - } - if(opt && SOCK_STREAM) { - printf("SOCK_STREAM socket detected!\n"); - sleep(1); - } - else - { - printf("opt = %d\n", opt); - }*/ - } - //printf("Complete\n"); - - // Check on incoming connections - if(fd_delta && true == false) - { - // Peer name check - socklen_t len; - struct sockaddr_storage addr; - char ipstr[INET6_ADDRSTRLEN]; - int port; - - len = sizeof(addr); - getpeername(s, (struct sockaddr *)&addr, &len); - - if (addr.ss_family == AF_INET) { - struct sockaddr_in *s = (struct sockaddr_in *)&addr; - port = ntohs(s->sin_port); - inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof ipstr); - } - /* else { // AF_INET6 - struct sockaddr_in6 *s = (struct sockaddr_in6 *)&addr; - port = ntohs(s->sin6_port); - inet_ntop(AF_INET6, &s->sin6_addr, ipstr, sizeof ipstr); - } - */ - - printf("Peer IP address: %s\n", ipstr); - printf("Peer port : %d\n", port); - - sleep(10); - - printf("calling zt_socket()...\n"); - int intercepted_fd = zt_socket(AF_INET, SOCK_STREAM, 0); - if(-1 == dup2(evList[i].ident, intercepted_fd)) { - perror("dup2():"); - } - } - - - /* Process events */ - if(nev /*&& fd_delta*/) - { - printf("kevent() = %d\n", nev); - for (int i = 0; i < nev; i++) { - - /* - if(evList[i].ident == 4) - { - printf("calling zt_socket()...\n"); - int intercepted_fd = zt_socket(AF_INET, SOCK_STREAM, 0); - if(-1 == dup2(evList[i].ident, intercepted_fd)) { - perror("dup2():"); - } - } - */ - - printf("\tEVENT on (%d)\n", evList[i].ident); - printf("\t\tevent[%d].ident = %d\n", i, evList[i].ident); - printf("\t\tevent[%d].filter = %d\n", i, evList[i].filter); - printf("\t\tevent[%d].flags = %d\n", i, evList[i].flags); - if(evList[i].flags & EVFILT_READ) { printf("\t\t\tEVFILT_READ\n"); } - if(evList[i].flags & EVFILT_WRITE) { printf("\t\t\tEVFILT_WRITE\n"); } - if(evList[i].flags & EVFILT_AIO) { printf("\t\t\tEVFILT_AIO\n"); } - if(evList[i].flags & EVFILT_VNODE) { printf("\t\t\tEVFILT_VNODE\n"); } - if(evList[i].flags & EVFILT_PROC) { printf("\t\t\tEVFILT_PROC\n"); } - printf("\t\tevent[%d].fflags = %d\n", i, evList[i].fflags); - if(evList[i].fflags > 0) - printf("\t\t\tfflags = %s\n", flagstring(evList[i].fflags)); - printf("\t\tevent[%d].data = %d\n", i, evList[i].data); - } - } - } -} \ No newline at end of file diff --git a/attic/kq.h b/attic/kq.h deleted file mode 100644 index 63df4da..0000000 --- a/attic/kq.h +++ /dev/null @@ -1 +0,0 @@ -int changeling(); diff --git a/attic/kq_old.c b/attic/kq_old.c deleted file mode 100644 index 0e38494..0000000 --- a/attic/kq_old.c +++ /dev/null @@ -1,103 +0,0 @@ -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -void monitor_fds(); - -#define MIN_FD 0 -#define SET_SZ 10 - -void die(const char *str) { - perror(str); - exit(EXIT_FAILURE); -} - -int make_nonblocking(int fd) { - int flags; - if (-1 == (flags = fcntl(fd, F_GETFL))) - return -1; - flags |= O_NONBLOCK; - if (-1 == fcntl(fd, F_SETFL, flags)) - return -1; - return 0; -} - -void changeling() -{ - pthread_t thread; - int i = 7; - if(pthread_create(&thread, NULL, monitor_fds, (void *)i)) { - die("unable to start changeling thread\n"); - } -} - -struct timespec tmout = { 0, /* s */ 500000 /* ns */ }; - -void monitor_fds(){ - sleep(5); - printf("monitor_fds()...\n"); - /* - struct kevent changeList[SET_SZ]; - struct kevent eventList[SET_SZ]; - int sockfd, nev, kq; - ssize_t nbytes; - int error; - char buf[BUFSIZ]; - - if (-1 == (kq = kqueue())) - die("kqueue()"); - for(int i=MIN_FD;i - -#include "RPC.h" -#include "netcon.h" -#include "ztproxy.h" - -int main() -{ - printf("hello from proxy\n"); -} \ No newline at end of file diff --git a/attic/ztproxy.h b/attic/ztproxy.h deleted file mode 100644 index e69de29..0000000 diff --git a/make-freebsd.mk b/make-freebsd.mk deleted file mode 100644 index 7148896..0000000 --- a/make-freebsd.mk +++ /dev/null @@ -1,65 +0,0 @@ -CC=cc -CXX=c++ - -INCLUDES= -DEFS= -LIBS= - -include objects.mk -OBJS+=osdep/BSDEthernetTap.o - -# "make official" is a shortcut for this -ifeq ($(ZT_OFFICIAL_RELEASE),1) - DEFS+=-DZT_OFFICIAL_RELEASE -endif - -# Build with ZT_ENABLE_CLUSTER=1 to build with cluster support -ifeq ($(ZT_ENABLE_CLUSTER),1) - DEFS+=-DZT_ENABLE_CLUSTER -endif - -# "make debug" is a shortcut for this -ifeq ($(ZT_DEBUG),1) - DEFS+=-DZT_TRACE - CFLAGS+=-Wall -g -pthread $(INCLUDES) $(DEFS) - LDFLAGS+= - STRIP=echo - # The following line enables optimization for the crypto code, since - # C25519 in particular is almost UNUSABLE in heavy testing without it. -ext/lz4/lz4.o node/Salsa20.o node/SHA512.o node/C25519.o node/Poly1305.o: CFLAGS = -Wall -O2 -g -pthread $(INCLUDES) $(DEFS) -else - CFLAGS?=-O3 -fstack-protector - CFLAGS+=-Wall -fPIE -fvisibility=hidden -fstack-protector -pthread $(INCLUDES) -DNDEBUG $(DEFS) - LDFLAGS+=-pie -Wl,-z,relro,-z,now - STRIP=strip --strip-all -endif - -CXXFLAGS+=$(CFLAGS) -fno-rtti - -all: one - -one: $(OBJS) service/OneService.o one.o - $(CXX) $(CXXFLAGS) $(LDFLAGS) -o zerotier-one $(OBJS) service/OneService.o one.o $(LIBS) - $(STRIP) zerotier-one - ln -sf zerotier-one zerotier-idtool - ln -sf zerotier-one zerotier-cli - -selftest: $(OBJS) selftest.o - $(CXX) $(CXXFLAGS) $(LDFLAGS) -o zerotier-selftest selftest.o $(OBJS) $(LIBS) - $(STRIP) zerotier-selftest - -# No installer on FreeBSD yet -#installer: one FORCE -# ./buildinstaller.sh - -clean: - rm -rf *.o node/*.o controller/*.o osdep/*.o service/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o build-* zerotier-one zerotier-idtool zerotier-selftest zerotier-cli ZeroTierOneInstaller-* - -debug: FORCE - make -j 4 ZT_DEBUG=1 - -#official: FORCE -# make -j 4 ZT_OFFICIAL_RELEASE=1 -# ./buildinstaller.sh - -FORCE: diff --git a/make-linux.mk b/make-linux.mk index 5fa37cd..ff9c773 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -87,18 +87,39 @@ linux_shared_lib: $(OBJS) ln -sf zerotier-sdk-service zerotier-cli ln -sf zerotier-sdk-service zerotier-idtool +# Check for the presence of built frameworks/bundles/libaries check: - ./check.sh build/lwip/liblwip.so - ./check.sh build/linux_shared_lib/libztintercept.so + ./check.sh build/lwip/liblwip.so + ./check.sh build/linux_shared_lib/libztintercept.so + + ./check.sh build/ + ./check.sh build/android_jni_lib/arm64-v8a/libZeroTierJNI.so + ./check.sh build/android_jni_lib/armeabi/libZeroTierJNI.so + ./check.sh build/android_jni_lib/armeabi-v7a/libZeroTierJNI.so + ./check.sh build/android_jni_lib/mips/libZeroTierJNI.so + ./check.sh build/android_jni_lib/mips64/libZeroTierJNI.so + ./check.sh build/android_jni_lib/x86/libZeroTierJNI.so + ./check.sh build/android_jni_lib/x86_64/libZeroTierJNI.so + + +# Tests +TEST_OBJDIR := build/tests +TEST_SOURCES := $(wildcard tests/*.c) +TEST_TARGETS := $(addprefix build/tests/,$(notdir $(TEST_SOURCES:.c=.out))) + +build/tests/%.out: tests/%.c + -$(CC) $(CC_FLAGS) -c -o $@ $< + +$(TEST_OBJDIR): + mkdir -p $(TEST_OBJDIR) + +tests: $(TEST_OBJDIR) $(TEST_TARGETS) + mkdir -p build/tests; clean: - rm -rf ${GENERATED_FILES} rm -rf zerotier-cli zerotier-idtool rm -rf build/* - find . -type f -name '*.a' -delete - find . -type f -name '*.o' -delete - find . -type f -name '*.so' -delete - find . -type f -name '*.o.d' -delete + find . -type f \( -name '*.o' -o -name '*.so' -o -name '*.o.d' -o -name '*.out' \) -delete # Remove junk generated by Android builds cd integrations/Android/proj; ./gradlew clean rm -rf integrations/Android/proj/.gradle diff --git a/make-mac.mk b/make-mac.mk index 7098da2..9494e4a 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -96,6 +96,7 @@ osx_shared_lib: $(OBJS) prep: cp integrations/android/android_jni_lib/java/libs/* build +# Check for the presence of built frameworks/bundles/libaries check: ./check.sh build/lwip/liblwip.so @@ -107,37 +108,39 @@ check: ./check.sh build/ios_unity3d_bundle/Debug-iphoneos/ZeroTierSDK_Unity3D_iOS.bundle ./check.sh build/ - ./check.sh build/android_jni_lib/ - ./check.sh build/android_jni_lib/ - ./check.sh build/android_jni_lib/ - ./check.sh build/android_jni_lib/ - ./check.sh build/android_jni_lib/ - ./check.sh build/android_jni_lib/ - ./check.sh build/android_jni_lib/ - ./check.sh build/android_jni_lib/ + ./check.sh build/android_jni_lib/arm64-v8a/libZeroTierJNI.so + ./check.sh build/android_jni_lib/armeabi/libZeroTierJNI.so + ./check.sh build/android_jni_lib/armeabi-v7a/libZeroTierJNI.so + ./check.sh build/android_jni_lib/mips/libZeroTierJNI.so + ./check.sh build/android_jni_lib/mips64/libZeroTierJNI.so + ./check.sh build/android_jni_lib/x86/libZeroTierJNI.so + ./check.sh build/android_jni_lib/x86_64/libZeroTierJNI.so - ./check.sh build/ - ./check.sh build/ -selftest: +# Tests +TEST_OBJDIR := build/tests +TEST_SOURCES := $(wildcard tests/*.c) +TEST_TARGETS := $(addprefix build/tests/,$(notdir $(TEST_SOURCES:.c=.out))) +build/tests/%.out: tests/%.c + -$(CC) $(CC_FLAGS) -c -o $@ $< + +$(TEST_OBJDIR): + mkdir -p $(TEST_OBJDIR) + +tests: $(TEST_OBJDIR) $(TEST_TARGETS) + mkdir -p build/tests; clean: rm -rf zerotier-cli zerotier-idtool - rm -rf build/* - find . -type f -name '*.o' -delete - find . -type f -name '*.so' -delete - find . -type f -name '*.o.d' -delete - + find . -type f \( -name '*.o' -o -name '*.so' -o -name '*.o.d' -o -name '*.out' \) -delete # android JNI lib project cd integrations/android/android_jni_lib/proj; ./gradlew clean rm -rf integrations/android/android_jni_lib/proj/.gradle rm -rf integrations/android/android_jni_lib/proj/.idea rm -rf integrations/android/android_jni_lib/proj/build - # example android app project cd integrations/android/example_app; ./gradlew clean rm -rf integrations/android/example_app/.idea rm -rf integrations/android/example_app/.gradle -FORCE: diff --git a/tests/udp_client b/tests/udp_client deleted file mode 100755 index 07f3dab369333e489fe6ec9a7e54c73a844f893a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8956 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%0D^l)igMII5nCJc z=qbPsoVif&o|2gNlEmbIq-vFoX!CKq2k-FUpa;i1xX*+4d$8%j?|bkk9{jlnF9PPB zI`5l#vbO}42T;5x#+0qQY#i}e|I5G;4@=#@9V6j3esgQ<-e7NI%&2(@XyGcU)+(vi qDi!QZYo8TZ?7eDlI(xenY_z;B=58)`TixAI?pAU)(Sl9S3H}A9o0!4? diff --git a/udp_client b/udp_client deleted file mode 100755 index 7b5537edf37ab07195b0968051c0c595d5f0dfc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8892 zcmeHNU2GIp6ut{oOQ9AXFg0i#kVYXngX)%uVh+ z-*@i0XU?2^Cp&ZRetGkkKW`TzFjI*AGlUQ=sG>oLqR@!MU8p*$l>NPr2X_RYeTLfl z5~!!QWc2ej45i#0+_t&iM2(+UuM-YOYz#+LT1aUc`%EIcO!GGvH-oNz-V6))EF0PF zEU~|qN|`qc;ryh^>#zR~+uy^Eh0EOmjgG(D9EI&q#*Jjw$U*1zcgXSgykk%9hN@K4 z;)~?XTq3=D(tmyaeslbdI{oCerOr1xq%5TOCel%vNXIgY*ZVt$1;G4q&RNL4KI|U5 z<-B&QdF|`n+*{Lw`J*3q9=($DiZ!Py&7|C&shL*rTl;IIF$?^2yjz(6*)D;UGM$w9 z!BjYtlvy)3&0nJvpR>#axz}G)oxf!0pZv8t{@lEg*ZSlAVku6Rspo3L6Hh-C?0dp} zCNxjpz*#Pfo>kEn1k%2KHzfdP}*_7D*oDJLQmR_%09*%Xu6EYJ}`A{Tz_CNZyKr2 zwVj9~5rz@U{iwX&xMt_C!{N-2U;GUC8SpdUXTZN|7SnB15@A1>A zmzsaVn~PqWty>$%$BOU#F)_irw?+>G>DGy1CB}}4%0n<8D;@-A85&i{D(-`#rT7TO zoZ?S$*EMU*x=@)5Y$;>Mu%(E1ON{3Q0zlQ*(N+Nv$(jPJD<4Av{08txJ$8H#`(A5a58QWX<4FW= z!trVT?Ca%1rKIAviYDTytVPezxM(TgXUDMwgD_wn)KigK#Vl;A*J0B2`zd~3Sm*Te z=m;G&E6e?W=oM!wNM)%=I&?N*DNt#I$r&~3X4fUXe1hZLAd>X)4X0X5u&3qVy|&>I80sbE#QMy-f}3~+9ab?;ujMswtL_tYUV4-9 z!C;p%h=NqtVM6s%!?&<1l{rItN$8IT$F1^nAokRiip2VX^ISc{*kv8#FnK#=zRyT>R z<((^5uITJSUA0PVHIk7`%FxV=X2uO|V<-|&qz#czyl7-%?cqYKLtCS@MVmw@n@~Ph zYep`Y$!UAziKL-LGU>DtG4c7<*(CaNnQ+obX?Y_Zg+_~p%#auWfph3g_|d|H2&74* zrBcxKgK$znr+pdq?teFKg{4+vnW~rIl@P3(obNzleuvD($a!isNc|^-Qh1xg7|)40 z;>ZsjdD4+*9eLT2UpewSM^+r^_3Lv#1AYel4EP!FGvH^y&w!r+KLdUS{0#UR@H60N z;J?qn{Kc)?dDZznl1JB}$Q~Jq?~%I;ph!X$+