Added build timestamps for logging

This commit is contained in:
Joseph Henry
2017-09-21 23:20:06 -07:00
parent 82aff7ebb4
commit 83b641dd77
5 changed files with 88 additions and 87 deletions

View File

@@ -133,7 +133,7 @@ endif
# Build with address sanitization library for advanced debugging (clang)
# TODO: Add GCC version as well
ifeq ($(LIBZT_SANITIZE),1)
SANFLAGS+=-x c++ -O -g -fsanitize=address -DASAN_OPTIONS=symbolize=1 \
SANFLAGS+=-x c++ -g -fsanitize=address -DASAN_OPTIONS=symbolize=1 \
-DASAN_SYMBOLIZER_PATH=$(shell which llvm-symbolizer)
endif
@@ -254,6 +254,7 @@ static_lib: picotcp $(ZTO_OBJS)
mv ext/picotcp/build/lib/*.o obj
mv ext/picotcp/build/modules/*.o obj
$(ARTOOL) $(ARFLAGS) -o $(STATIC_LIB) obj/*.o
@date +"Build script finished on %F %T"
endif
ifeq ($(STACK_LWIP),1)
static_lib: lwip $(ZTO_OBJS)
@@ -263,6 +264,7 @@ static_lib: lwip $(ZTO_OBJS)
$(STACK_DRIVER_FILES) -c
mv *.o obj
$(ARTOOL) $(ARFLAGS) -o $(STATIC_LIB) $(STACK_LIB) obj/*.o
@date +"Build script finished on %F %T"
endif
# for layer-2 only (this will omit all userspace network stack code)
ifeq ($(NO_STACK),1)
@@ -271,6 +273,7 @@ static_lib: $(ZTO_OBJS)
$(CXX) $(CXXFLAGS) $(ZT_FLAGS) $(ZT_INCLUDES) $(LIBZT_FLAGS) $(LIBZT_INCLUDES) $(LIBZT_FILES) -c
mv *.o obj
$(ARTOOL) $(ARFLAGS) -o $(STATIC_LIB) obj/*.o
@date +"Build script finished on %F %T"
endif
##############################################################################
@@ -319,19 +322,23 @@ selftest:
$(SANFLAGS) $(LIBZT_INCLUDES) $(ZT_INCLUDES) $(ZT_UTILS) test/selftest.cpp -o \
$(BUILD)/selftest -L$(BUILD) -lzt -lpthread
@./check.sh $(BUILD)/selftest
@date +"Build script finished on %F %T"
nativetest:
$(CXX) $(CXXFLAGS) -D__NATIVETEST__ $(STACK_DRIVER_FLAGS) $(SANFLAGS) \
$(LIBZT_INCLUDES) $(ZT_INCLUDES) test/selftest.cpp -o $(BUILD)/nativetest
@./check.sh $(BUILD)/nativetest
@date +"Build script finished on %F %T"
ztproxy:
$(CXX) $(CXXFLAGS) $(SANFLAGS) $(LIBZT_INCLUDES) $(ZT_INCLUDES) \
examples/ztproxy/ztproxy.cpp -o $(BUILD)/ztproxy $< -L$(BUILD) -lzt
@./check.sh $(BUILD)/ztproxy
@date +"Build script finished on %F %T"
intercept:
$(CXX) $(CXXFLAGS) $(SANFLAGS) $(STACK_DRIVER_FLAGS) $(LIBZT_INCLUDES) \
$(ZT_INCLUDES) examples/intercept/intercept.cpp -D_GNU_SOURCE \
-shared -o $(BUILD)/intercept.so $< -ldl
@./check.sh $(BUILD)/intercept.so
@date +"Build script finished on %F %T"
##############################################################################
## Misc ##
@@ -350,3 +357,5 @@ clean:
-find . -type f \( -name '*.a' -o -name '*.o' -o -name '*.so' -o -name \
'*.o.d' -o -name '*.out' -o -name '*.log' -o -name '*.dSYM' \) -delete
time:
@date +"Build script finished on %F %T"

View File

@@ -542,36 +542,34 @@ ssize_t zts_recvmsg(ZT_RECVMSG_SIG);
/**
* Read bytes from socket onto buffer
* - Note, this function isn't strictly necessary, you can
* use a regular read() call as long as the socket fd was
* created via a zts_socket() call.
* - Note, this function isn't strictly necessary, you can use a regular read()
* call as long as the socket file descriptor was created via a zts_socket() call.
*/
int zts_read(ZT_READ_SIG);
/**
* Write bytes from buffer to socket
* - Note, this function isn't strictly necessary, you can
* use a regular write() call as long as the socket fd was
* created via a zts_socket() call.
* - Note, this function isn't strictly necessary, you can use a regular write()
* call as long as the socket file descriptor was created via a zts_socket() call.
*/
int zts_write(ZT_WRITE_SIG);
/*
/**
* Sends a FIN segment
*/
int zts_shutdown(ZT_SHUTDOWN_SIG);
/*
/**
* Returns a vector of network routes { target, via, metric, etc... }
*/
std::vector<ZT_VirtualNetworkRoute> *zts_get_network_routes(char *nwid);
/*
/**
* Adds a DNS nameserver for the network stack to use
*/
int zts_add_dns_nameserver(struct sockaddr *addr);
/*
/**
* Removes a DNS nameserver
*/
int zts_del_dns_nameserver(struct sockaddr *addr);
@@ -593,7 +591,7 @@ namespace ZeroTier
struct InetAddress;
}
/*
/**
* Whether we can add a new socket or not. Depends on stack in use
*/
bool can_provision_new_socket(int socket_type);
@@ -607,7 +605,7 @@ bool can_provision_new_socket(int socket_type);
*/
int zts_num_active_virt_sockets();
/*
/**
* Returns maximum number of sockets allowed by network stack
*/
int zts_maxsockets(int socket_type);
@@ -624,46 +622,47 @@ ZeroTier::VirtualTap *getTapByName(char *ifname);
ZeroTier::VirtualTap *getTapByIndex(int index);
ZeroTier::VirtualTap *getAnyTap();
/*
* Returns a pointer to a VirtualSocket for a given fd
/**
* Returns a pointer to a VirtualSocket for a given file descriptor
*/
ZeroTier::VirtualSocket *get_virt_socket(int fd);
/*
/**
* Removes a VirtualSocket
*/
int del_virt_socket(int fd);
/*
/**
* Adds a virtualSocket
*/
int add_unassigned_virt_socket(int fd, ZeroTier::VirtualSocket *vs);
/*
/**
* Removes unassigned VirtualSocket
*/
int del_unassigned_virt_socket(int fd);
/*
/**
* Adds an assigned VirtualSocket
*/
int add_assigned_virt_socket(ZeroTier::VirtualTap *tap, ZeroTier::VirtualSocket *vs, int fd);
/*
/**
* Removes an assigned VirtualSocket
*/
int del_assigned_virt_socket(ZeroTier::VirtualTap *tap, ZeroTier::VirtualSocket *vs, int fd);
/*
/**
* Gets a pair of associated virtual objects (VirtualSocket bound to a VirtualTap)
*/
std::pair<ZeroTier::VirtualSocket*, ZeroTier::VirtualTap*> *get_assigned_virtual_pair(int fd);
/*
/**
* Disable all virtual tap devices
*/
void disableTaps();
/*
/**
* Get device ID (from file)
*/
int zts_get_device_id_from_file(const char *filepath, char *devID);
@@ -673,8 +672,8 @@ int zts_get_device_id_from_file(const char *filepath, char *devID);
*/
void *zts_start_service(void *thread_id);
/*
*
/**
* Should be called wherever libzt enters a condition where undefined behaviour might occur
*/
void handle_general_failure();

View File

@@ -27,23 +27,23 @@
#ifndef UTILITIES_HPP
#define UTILITIES_HPP
/*
/**
* Returns masked address for subnet comparisons
*/
//ZeroTier::InetAddress *ztipv6_mask(ZeroTier::InetAddress *addr, unsigned int bits);
bool ipv6_in_subnet(ZeroTier::InetAddress *subnet, ZeroTier::InetAddress *addr);
/*
/**
* Convert protocol numbers to human-readable strings
*/
char *beautify_eth_proto_nums(int proto);
/*
/**
* Convert a struct sockaddr to a ZeroTier::InetAddress
*/
void sockaddr2inet(int socket_family, const struct sockaddr *addr, ZeroTier::InetAddress *inet);
/*
/**
* Convert a raw MAC address byte array into a human-readable string
*/
void mac2str(char *macbuf, int len, unsigned char* addr);
@@ -54,7 +54,7 @@ void mac2str(char *macbuf, int len, unsigned char* addr);
(ipaddr)->addr[2] = ZeroTier::Utils::hton(((e & 0xffff) << 16) | (f & 0xffff)); \
(ipaddr)->addr[3] = ZeroTier::Utils::hton(((g & 0xffff) << 16) | (h & 0xffff)); } while(0)
/*
/**
* Convert from standard IPV6 address structure to an lwIP native structure
*/
inline void in6_to_ip6(ip6_addr_t *ba, struct sockaddr_in6 *in6)

View File

@@ -56,12 +56,10 @@ namespace ZeroTier {
class VirtualTap;
/*
* Something analogous to a socket. This is a common object used by the
* libzt API, VirtualTap, and the userspace network stack driver implementations.
* In some situations the word 'Connection' would capture the meaning and
* function of this object, however I'd like to discourage this since this
* object also handles non-connection-based traffic as well.
/**
* An abstraction of a socket that operates between the application-exposed platform-sockets
* and the network stack's representation of a protocol control block. This object is used by
* the POSIX socket emulation layer and stack drivers.
*/
class VirtualSocket
{
@@ -74,6 +72,9 @@ namespace ZeroTier {
PhySocket *sock = NULL;
// State control
/**
* Sets the VirtualSocket's state value
*/
void set_state(int state) {
// states may be set by application or by stack callbacks, thus this must be guarded
_op_m.lock();
@@ -81,11 +82,13 @@ namespace ZeroTier {
//DEBUG_EXTRA("SET STATE = %d (vs=%p)", _state, this);
_op_m.unlock();
}
/**
* Gets the VirtualSocket's state value
*/
int get_state() {
//DEBUG_EXTRA("GET STATE = %d (vs=%p)", _state, this);
return _state;
}
#if defined(STACK_PICO)
struct pico_socket *picosock = NULL;
#endif
@@ -154,7 +157,7 @@ namespace ZeroTier {
}
};
/*
/**
* A helper object for passing VirtualTap(s) and VirtualSocket(s) through the stack
*/
struct VirtualBindingPair

View File

@@ -65,8 +65,8 @@ struct netif;
namespace ZeroTier {
/*
* Socket Tap -- emulates an Ethernet tap device
/**
* emulates an Ethernet tap device
*/
class VirtualTap
{
@@ -88,96 +88,96 @@ namespace ZeroTier {
void setEnabled(bool en);
bool enabled() const;
/*
/**
* Registers a device with the given address
*/
bool registerIpWithStack(const InetAddress &ip);
/*
/**
* Adds an address to the userspace stack interface associated with this VirtualTap
* - Starts VirtualTap main thread ONLY if successful
*/
bool addIp(const InetAddress &ip);
/*
/**
* Removes an address from the userspace stack interface associated with this VirtualTap
*/
bool removeIp(const InetAddress &ip);
/*
/**
* Presents data to the userspace stack
*/
void put(const MAC &from,const MAC &to,unsigned int etherType,const void *data,
unsigned int len);
/*
/**
* Get VirtualTap device name (e.g. 'libzt4-17d72843bc2c5760')
*/
std::string deviceName() const;
/*
/**
* Get Node ID (ZT address)
*/
std::string nodeId() const;
/*
/**
* Set friendly name
*/
void setFriendlyName(const char *friendlyName);
/*
/**
* Scan multicast groups
*/
void scanMulticastGroups(std::vector<MulticastGroup> &added,std::vector<MulticastGroup> &removed);
/*
/**
* Set MTU
*/
void setMtu(unsigned int mtu);
/*
/**
* Calls main network stack loops
*/
void threadMain()
throw();
/*
/**
* For moving data onto the ZeroTier virtual wire
*/
void (*_handler)(void *, void *, uint64_t, const MAC &, const MAC &, unsigned int, unsigned int,
const void *, unsigned int);
/*
/**
* Signals us to close the TcpVirtualSocket associated with this PhySocket
*/
void phyOnUnixClose(PhySocket *sock, void **uptr);
/*
/**
* Notifies us that there is data to be read from an application's socket
*/
void phyOnUnixData(PhySocket *sock, void **uptr, void *data, ssize_t len);
/*
/**
* Notifies us that we can write to an application's socket
*/
void phyOnUnixWritable(PhySocket *sock, void **uptr, bool stack_invoked);
/*
/**
* Adds a route to the virtual tap
*/
bool routeAdd(const InetAddress &addr, const InetAddress &nm, const InetAddress &gw);
/*
/**
* Deletes a route from the virtual tap
*/
bool routeDelete(const InetAddress &addr, const InetAddress &nm);
/*
/**
* Assign a VirtualSocket to the VirtualTap
*/
void addVirtualSocket(VirtualSocket *vs);
/*
/**
* Remove a VirtualSocket from the VirtualTap
*/
void removeVirtualSocket(VirtualSocket *vs);
@@ -186,12 +186,12 @@ namespace ZeroTier {
/* DNS */
/****************************************************************************/
/*
/**
* Registers a DNS nameserver with the network stack
*/
int add_DNS_Nameserver(struct sockaddr *addr);
/*
/**
* Un-registers a DNS nameserver from the network stack
*/
int del_DNS_Nameserver(struct sockaddr *addr);
@@ -258,66 +258,56 @@ namespace ZeroTier {
/* where one would put logic to select between different stacks */
/****************************************************************************/
/*
/**
* Connect to a remote host via the userspace stack interface associated with this VirtualTap
*/
int Connect(VirtualSocket *vs, const struct sockaddr *addr, socklen_t addrlen);
/*
/**
* Bind to the userspace stack interface associated with this VirtualTap
*/
int Bind(VirtualSocket *vs, const struct sockaddr *addr, socklen_t addrlen);
/*
/**
* Listen for a VirtualSocket
*/
int Listen(VirtualSocket *vs, int backlog);
/*
/**
* Accepts an incoming VirtualSocket
*/
VirtualSocket* Accept(VirtualSocket *vs);
/*
/**
* Move data from RX buffer to application's "socket"
*/
int Read(PhySocket *sock,void **uptr,bool stack_invoked);
/*
/**
* Move data from application's "socket" into network stack
*/
int Write(VirtualSocket *vs, void *data, ssize_t len);
/*
/**
* Send data to specified host
*/
int SendTo(VirtualSocket *vs, const void *buf, size_t len, int flags, const struct sockaddr *addr, socklen_t addrlen);
/*
/**
* Closes a VirtualSocket
*/
int Close(VirtualSocket *vs);
/*
/**
* Shuts down some aspect of a VirtualSocket
*/
int Shutdown(VirtualSocket *vs, int how);
/*
/**
* Disposes of previously-closed VirtualSockets
*/
void Housekeeping();
/*
* Return the address that the socket is bound to
*/
void handleGetsockname(PhySocket *sock, PhySocket *rpcsock, void **uptr, struct getsockname_st *getsockname_rpc);
/*
* Return the address of the peer connected to this socket
*/
void handleGetpeername(PhySocket *sock, PhySocket *rpcsock, void **uptr, struct getsockname_st *getsockname_rpc);
/****************************************************************************/
/* Not used in this implementation */
/****************************************************************************/