From d68969159995d29e4d42efb2b7397b0a13b03d7e Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Sun, 14 Apr 2019 18:08:51 +0200 Subject: [PATCH] n2n.h cleanup --- Makefile.in | 5 +-- android/edge_android.c | 2 - edge.c | 8 ++-- edge_utils.c | 42 +++++++++++-------- example_edge_embed.c | 2 +- n2n.c | 24 ++++++++--- n2n.h | 92 ++++++++++++++++-------------------------- sn.c | 4 +- version.c | 9 ----- 9 files changed, 85 insertions(+), 103 deletions(-) delete mode 100644 version.c diff --git a/Makefile.in b/Makefile.in index 1691d4d..943a6c9 100644 --- a/Makefile.in +++ b/Makefile.in @@ -48,7 +48,7 @@ N2N_OBJS=n2n.o n2n_keyfile.o wire.o minilzo.o twofish.o \ edge_utils.o \ transform_null.o transform_tf.o transform_aes.o \ tuntap_freebsd.o tuntap_netbsd.o tuntap_linux.o \ - tuntap_osx.o version.o + tuntap_osx.o LIBS_EDGE+=$(LIBS_EDGE_OPT) LIBS_SN= @@ -91,9 +91,6 @@ $(N2N_LIB): $(N2N_OBJS) ar rcs $(N2N_LIB) $(N2N_OBJS) # $(RANLIB) $@ -version.o: Makefile - $(CC) $(CFLAGS) -c version.c - clean: rm -rf $(N2N_OBJS) $(N2N_LIB) $(APPS) $(DOCS) test *.dSYM *~ diff --git a/android/edge_android.c b/android/edge_android.c index 5b078cf..d6f5258 100644 --- a/android/edge_android.c +++ b/android/edge_android.c @@ -336,8 +336,6 @@ int start_edge(const n2n_edge_cmd_t* cmd) report_edge_status(); traceEvent(TRACE_NORMAL, "edge started"); - update_supernode_reg(&eee, time(NULL)); - return run_edge_loop(&eee, &keep_on_running); } diff --git a/edge.c b/edge.c index 4b18f54..327b5da 100644 --- a/edge.c +++ b/edge.c @@ -334,7 +334,7 @@ static int setOption(int optkey, char *optargument, edge_conf_t *ec, n2n_edge_t } case 'v': /* verbose */ - traceLevel = 4; /* DEBUG */ + setTraceLevel(4); /* DEBUG */ break; default: @@ -616,7 +616,7 @@ int main(int argc, char* argv[]) { if((rc < 0) || (eee.sn_num == 0)) help(); - traceEvent(TRACE_NORMAL, "Starting n2n edge %s %s", n2n_sw_version, n2n_sw_buildDate); + traceEvent(TRACE_NORMAL, "Starting n2n edge %s %s", PACKAGE_VERSION, PACKAGE_BUILDDATE); for (i=0; i %s\n", i, (eee.sn_ip_array[i])); @@ -636,7 +636,7 @@ int main(int argc, char* argv[]) { #ifndef WIN32 if(eee.daemon) { - useSyslog = 1; /* traceEvent output now goes to syslog. */ + setUseSyslog(1); /* traceEvent output now goes to syslog. */ daemonize(); } #endif /* #ifndef WIN32 */ @@ -698,8 +698,6 @@ int main(int argc, char* argv[]) { traceEvent(TRACE_NORMAL, "edge started"); - update_supernode_reg(&eee, time(NULL)); - return run_edge_loop(&eee, &keep_on_running); } diff --git a/edge_utils.c b/edge_utils.c index dbc1552..fad77bb 100644 --- a/edge_utils.c +++ b/edge_utils.c @@ -61,6 +61,15 @@ /* ************************************** */ +static const char * supernode_ip(const n2n_edge_t * eee); +static void send_register(n2n_edge_t * eee, const n2n_sock_t * remote_peer); +static void check_peer(n2n_edge_t * eee, + uint8_t from_supernode, + const n2n_mac_t mac, + const n2n_sock_t * peer); + +/* ************************************** */ + /** Initialise an edge to defaults. * * This also initialises the NULL transform operation opstruct. @@ -232,7 +241,7 @@ static void try_send_register(n2n_edge_t * eee, /* ************************************** */ /** Update the last_seen time for this peer, or get registered. */ -void check_peer(n2n_edge_t * eee, +static void check_peer(n2n_edge_t * eee, uint8_t from_supernode, const n2n_mac_t mac, const n2n_sock_t * peer) { @@ -260,7 +269,7 @@ void check_peer(n2n_edge_t * eee, * * Called by main loop when Rx a REGISTER_ACK. */ -void set_peer_operational(n2n_edge_t * eee, +static void set_peer_operational(n2n_edge_t * eee, const n2n_mac_t mac, const n2n_sock_t * peer) { struct peer_info * prev = NULL; @@ -511,7 +520,7 @@ static void send_register_super(n2n_edge_t * eee, /* ************************************** */ /** Send a REGISTER packet to another edge. */ -void send_register(n2n_edge_t * eee, +static void send_register(n2n_edge_t * eee, const n2n_sock_t * remote_peer) { uint8_t pktbuf[N2N_PKT_BUF_SIZE]; size_t idx; @@ -582,7 +591,7 @@ static void send_register_ack(n2n_edge_t * eee, * * This is frequently called by the main loop. */ -void update_supernode_reg(n2n_edge_t * eee, time_t nowTime) { +static void update_supernode_reg(n2n_edge_t * eee, time_t nowTime) { u_int sn_idx; if(eee->sn_wait && (nowTime > (eee->last_register_req + (eee->register_lifetime/10)))) { @@ -643,7 +652,7 @@ static void send_deregister(n2n_edge_t * eee, /* ************************************** */ /** Return the IP address of the current supernode in the ring. */ -const char * supernode_ip(const n2n_edge_t * eee) { +static const char * supernode_ip(const n2n_edge_t * eee) { return (eee->sn_ip_array)[eee->sn_idx]; } @@ -742,7 +751,7 @@ static int n2n_tick_transop(n2n_edge_t * eee, time_t now) * * @return - index into the transop array, or -1 on failure. */ -int transop_enum_to_index(n2n_transform_t id) { +static int transop_enum_to_index(n2n_transform_t id) { switch (id) { case N2N_TRANSFORM_ID_TWOFISH: @@ -889,7 +898,7 @@ static void readFromMgmtSocket(n2n_edge_t * eee, int * keep_running) { if(0 == memcmp(udp_buf, "help", 4)) { msg_len=0; - ++traceLevel; + setTraceLevel(getTraceLevel()+1); msg_len += snprintf((char *)(udp_buf+msg_len), (N2N_PKT_BUF_SIZE-msg_len), "Help for edge management console:\n" @@ -913,11 +922,11 @@ static void readFromMgmtSocket(n2n_edge_t * eee, int * keep_running) { if(0 == memcmp(udp_buf, "+verb", 5)) { msg_len=0; - ++traceLevel; + setTraceLevel(getTraceLevel()+1); - traceEvent(TRACE_ERROR, "+verb traceLevel=%u", (unsigned int)traceLevel); + traceEvent(TRACE_ERROR, "+verb traceLevel=%u", (unsigned int)getTraceLevel()); msg_len += snprintf((char *)(udp_buf+msg_len), (N2N_PKT_BUF_SIZE-msg_len), - "> +OK traceLevel=%u\n", (unsigned int)traceLevel); + "> +OK traceLevel=%u\n", (unsigned int)getTraceLevel()); sendto(eee->udp_mgmt_sock, udp_buf, msg_len, 0/*flags*/, (struct sockaddr *)&sender_sock, sizeof(struct sockaddr_in)); @@ -929,19 +938,19 @@ static void readFromMgmtSocket(n2n_edge_t * eee, int * keep_running) { { msg_len=0; - if(traceLevel > 0) + if(getTraceLevel() > 0) { - --traceLevel; + setTraceLevel(getTraceLevel()-1); msg_len += snprintf((char *)(udp_buf+msg_len), (N2N_PKT_BUF_SIZE-msg_len), - "> -OK traceLevel=%u\n", traceLevel); + "> -OK traceLevel=%u\n", getTraceLevel()); } else { msg_len += snprintf((char *)(udp_buf+msg_len), (N2N_PKT_BUF_SIZE-msg_len), - "> -NOK traceLevel=%u\n", traceLevel); + "> -NOK traceLevel=%u\n", getTraceLevel()); } - traceEvent(TRACE_ERROR, "-verb traceLevel=%u", (unsigned int)traceLevel); + traceEvent(TRACE_ERROR, "-verb traceLevel=%u", (unsigned int)getTraceLevel()); sendto(eee->udp_mgmt_sock, udp_buf, msg_len, 0/*flags*/, (struct sockaddr *)&sender_sock, sizeof(struct sockaddr_in)); @@ -1512,6 +1521,7 @@ int run_edge_loop(n2n_edge_t * eee, int *keep_running) { #endif *keep_running = 1; + update_supernode_reg(eee, time(NULL)); /* Main loop * @@ -1809,7 +1819,5 @@ int quick_edge_init(char *device_name, char *community_name, if(edge_init_sockets(&eee, 0 /* ANY port */, 0 /* ANY port */) < 0) return(-3); - update_supernode_reg(&eee, time(NULL)); - return(run_edge_loop(&eee, keep_on_running)); } diff --git a/example_edge_embed.c b/example_edge_embed.c index 4bd1811..954d5b1 100644 --- a/example_edge_embed.c +++ b/example_edge_embed.c @@ -33,7 +33,7 @@ int main(int argc, char* argv[]) { int keep_on_running = 1; /* Increase tracelevel to see what's happening */ - traceLevel = 10; + setTraceLevel(10); /* NOTE diff --git a/n2n.c b/n2n.c index 6c6b635..88f6f97 100644 --- a/n2n.c +++ b/n2n.c @@ -31,9 +31,9 @@ #endif /* #if defined(DEBUG) */ -const uint8_t broadcast_addr[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; -const uint8_t multicast_addr[6] = { 0x01, 0x00, 0x5E, 0x00, 0x00, 0x00 }; /* First 3 bytes are meaningful */ -const uint8_t ipv6_multicast_addr[6] = { 0x33, 0x33, 0x00, 0x00, 0x00, 0x00 }; /* First 2 bytes are meaningful */ +static const uint8_t broadcast_addr[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; +static const uint8_t multicast_addr[6] = { 0x01, 0x00, 0x5E, 0x00, 0x00, 0x00 }; /* First 3 bytes are meaningful */ +static const uint8_t ipv6_multicast_addr[6] = { 0x33, 0x33, 0x00, 0x00, 0x00, 0x00 }; /* First 2 bytes are meaningful */ /* ************************************** */ @@ -67,8 +67,20 @@ SOCKET open_socket(int local_port, int bind_any) { return(sock_fd); } -int traceLevel = 2 /* NORMAL */; -int useSyslog = 0, syslog_opened = 0; +static int traceLevel = 2 /* NORMAL */; +static int useSyslog = 0, syslog_opened = 0; + +int getTraceLevel() { + return(traceLevel); +} + +void setTraceLevel(int level) { + traceLevel = level; +} + +void setUseSyslog(int use_syslog) { + useSyslog= use_syslog; +} #define N2N_TRACE_DATESIZE 32 void traceEvent(int eventTraceLevel, char* file, int line, char * format, ...) { @@ -252,7 +264,7 @@ void print_n2n_version() { printf("Welcome to n2n v.%s for %s\n" "Built on %s\n" "Copyright 2007-18 - ntop.org and contributors\n\n", - n2n_sw_version, n2n_sw_osName, n2n_sw_buildDate); + PACKAGE_VERSION, PACKAGE_OSNAME, PACKAGE_BUILDDATE); } /* *********************************************** */ diff --git a/n2n.h b/n2n.h index 1bddc77..e7877e3 100644 --- a/n2n.h +++ b/n2n.h @@ -44,6 +44,7 @@ #include "config.h" #endif +#define PACKAGE_BUILDDATE (__DATE__ " " __TIME__) #include #include @@ -262,89 +263,66 @@ struct n2n_edge { /* ************************************** */ -/* Variables */ -/* extern TWOFISH *tf; */ -extern int traceLevel; -extern int useSyslog; -extern const uint8_t broadcast_addr[6]; -extern const uint8_t multicast_addr[6]; +/* Log */ +void setTraceLevel(int level); +void setUseSyslog(int use_syslog); +int getTraceLevel(); +void traceEvent(int eventTraceLevel, char* file, int line, char * format, ...); -/* Functions */ -extern void traceEvent(int eventTraceLevel, char* file, int line, char * format, ...); -extern int tuntap_open(tuntap_dev *device, char *dev, const char *address_mode, char *device_ip, +/* Tuntap API */ +int tuntap_open(tuntap_dev *device, char *dev, const char *address_mode, char *device_ip, char *device_mask, const char * device_mac, int mtu); -extern int tuntap_read(struct tuntap_dev *tuntap, unsigned char *buf, int len); -extern int tuntap_write(struct tuntap_dev *tuntap, unsigned char *buf, int len); -extern void tuntap_close(struct tuntap_dev *tuntap); -extern void tuntap_get_address(struct tuntap_dev *tuntap); - -extern SOCKET open_socket(int local_port, int bind_any); +int tuntap_read(struct tuntap_dev *tuntap, unsigned char *buf, int len); +int tuntap_write(struct tuntap_dev *tuntap, unsigned char *buf, int len); +void tuntap_close(struct tuntap_dev *tuntap); +void tuntap_get_address(struct tuntap_dev *tuntap); + +/* Utils */ +char* intoa(uint32_t addr, char* buf, uint16_t buf_len); +char* macaddr_str(macstr_t buf, const n2n_mac_t mac); +int str2mac( uint8_t * outmac /* 6 bytes */, const char * s ); +uint8_t is_multi_broadcast(const uint8_t * dest_mac); +char* msg_type2str(uint16_t msg_type); +void hexdump(const uint8_t * buf, size_t len); +void print_n2n_version(); +void supernode2addr(n2n_sock_t * sn, const n2n_sn_name_t addrIn); +int is_empty_ip_address(const n2n_sock_t * sock); +const char *random_device_mac(void); -extern char* intoa(uint32_t addr, char* buf, uint16_t buf_len); -extern char* macaddr_str(macstr_t buf, const n2n_mac_t mac); -extern int str2mac( uint8_t * outmac /* 6 bytes */, const char * s ); -extern char * sock_to_cstr( n2n_sock_str_t out, +/* Sockets */ +char* sock_to_cstr( n2n_sock_str_t out, const n2n_sock_t * sock ); - -extern int sock_equal( const n2n_sock_t * a, +SOCKET open_socket(int local_port, int bind_any); +int sock_equal( const n2n_sock_t * a, const n2n_sock_t * b ); -extern uint8_t is_multi_broadcast(const uint8_t * dest_mac); -extern char* msg_type2str(uint16_t msg_type); -extern void hexdump(const uint8_t * buf, size_t len); - -void print_n2n_version(); - - /* Operations on peer_info lists. */ struct peer_info * find_peer_by_mac( struct peer_info * list, const n2n_mac_t mac ); -void peer_list_add( struct peer_info * * list, +void peer_list_add( struct peer_info * * list, struct peer_info * newp ); size_t peer_list_size( const struct peer_info * list ); size_t purge_peer_list( struct peer_info ** peer_list, time_t purge_before ); size_t clear_peer_list( struct peer_info ** peer_list ); size_t purge_expired_registrations( struct peer_info ** peer_list ); - -/* version.c */ -extern char *n2n_sw_version, *n2n_sw_osName, *n2n_sw_buildDate; - -/* egde_utils.c */ -int edge_init(n2n_edge_t * eee); -void supernode2addr(n2n_sock_t * sn, const n2n_sn_name_t addrIn); -void update_supernode_reg(n2n_edge_t * eee, time_t nowTime); -int is_empty_ip_address(const n2n_sock_t * sock); void update_peer_address(n2n_edge_t * eee, uint8_t from_supernode, const n2n_mac_t mac, const n2n_sock_t * peer, time_t when); -int transop_enum_to_index(n2n_transform_t id); + +/* Public functions */ int edge_init_keyschedule(n2n_edge_t * eee); -void update_peer_address(n2n_edge_t * eee, - uint8_t from_supernode, - const n2n_mac_t mac, - const n2n_sock_t * peer, - time_t when); -int is_empty_ip_address(const n2n_sock_t * sock); -void send_register(n2n_edge_t * eee, - const n2n_sock_t * remote_peer); void send_packet2net(n2n_edge_t * eee, uint8_t *tap_pkt, size_t len); -void check_peer(n2n_edge_t * eee, - uint8_t from_supernode, - const n2n_mac_t mac, - const n2n_sock_t * peer); -void set_peer_operational(n2n_edge_t * eee, - const n2n_mac_t mac, - const n2n_sock_t * peer); -const char * supernode_ip(const n2n_edge_t * eee); int edge_init_encryption(n2n_edge_t * eee, uint8_t *encrypt_pwd, uint32_t encrypt_pwd_len); int edge_init_sockets(n2n_edge_t *eee, int udp_local_port, int mgmt_port); -int run_edge_loop(n2n_edge_t * eee, int *keep_running); + +int edge_init(n2n_edge_t * eee); void edge_term(n2n_edge_t * eee); -const char *random_device_mac(void); +int run_edge_loop(n2n_edge_t * eee, int *keep_running); + int quick_edge_init(char *device_name, char *community_name, char *encrypt_key, char *device_mac, char *local_ip_address, diff --git a/sn.c b/sn.c index b6855eb..f98aa66 100644 --- a/sn.c +++ b/sn.c @@ -721,7 +721,7 @@ static int setOption(int optkey, char *_optarg, n2n_sn_t *sss) { break; case 'v': /* verbose */ - traceLevel = 4; /* DEBUG */ + setTraceLevel(4); /* DEBUG */ break; default: @@ -905,7 +905,7 @@ int main(int argc, char * const argv[]) { } #endif /* #if defined(N2N_HAVE_DAEMON) */ - traceEvent(TRACE_DEBUG, "traceLevel is %d", traceLevel); + traceEvent(TRACE_DEBUG, "traceLevel is %d", getTraceLevel()); sss_node.sock = open_socket(sss_node.lport, 1 /*bind ANY*/); if(-1 == sss_node.sock) { diff --git a/version.c b/version.c deleted file mode 100644 index f14ddaa..0000000 --- a/version.c +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef WIN32 -#include "config.h" -#else -#include "win32/winconfig.h" -#endif - -const char * n2n_sw_version = PACKAGE_VERSION; -const char * n2n_sw_osName = PACKAGE_OSNAME; -const char * n2n_sw_buildDate = __DATE__ " " __TIME__;