"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "include/n2n.h" between
n2n-2.8.tar.gz and n2n-3.0.tar.gz

About: n2n is a layer-two peer-to-peer virtual private network (VPN) which allows bypassing intermediate firewalls.

n2n.h  (n2n-2.8):n2n.h  (n2n-3.0)
/** /**
* (C) 2007-20 - ntop.org and contributors * (C) 2007-21 - ntop.org and contributors
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or * the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not see see <http://www.gnu.org/licenses/> * along with this program; if not see see <http://www.gnu.org/licenses/>
* *
*/ */
#ifndef _N2N_H_ #ifndef _N2N_H_
#define _N2N_H_ #define _N2N_H_
/* /*
tunctl -t tun0 tunctl -t tun0
tunctl -t tun1 tunctl -t tun1
ifconfig tun0 1.2.3.4 up ifconfig tun0 1.2.3.4 up
ifconfig tun1 1.2.3.5 up ifconfig tun1 1.2.3.5 up
./edge -d tun0 -l 2000 -r 127.0.0.1:3000 -c hello ./edge -d tun0 -l 2000 -r 127.0.0.1:3000 -c hello
./edge -d tun1 -l 3000 -r 127.0.0.1:2000 -c hello ./edge -d tun1 -l 3000 -r 127.0.0.1:2000 -c hello
tunctl -u UID -t tunX tunctl -u UID -t tunX
*/ */
#define N2N_HAVE_DAEMON /* needs to be defined before it gets undefined */
#define N2N_HAVE_TCP /* needs to be defined before it gets undefined */
/* #define N2N_CAN_NAME_IFACE */ /* #define N2N_CAN_NAME_IFACE */
/* Moved here to define _CRT_SECURE_NO_WARNINGS before all the including takes p lace */ /* Moved here to define _CRT_SECURE_NO_WARNINGS before all the including takes p lace */
#ifdef WIN32 #ifdef WIN32
#include "win32/n2n_win32.h" #ifndef CMAKE_BUILD
#ifdef _MSC_VER
#include "config.h" /* Visual C++ */ #include "config.h" /* Visual C++ */
#else #else
#include "win32/winconfig.h" #include "winconfig.h"
#endif #endif
#define N2N_CAN_NAME_IFACE 1 #define N2N_CAN_NAME_IFACE 1
#undef N2N_HAVE_DAEMON #undef N2N_HAVE_DAEMON
#undef N2N_HAVE_TCP /* as explained on https://github.com/ntop/n2n/pul l/627#issuecomment-782093706 */
#undef N2N_HAVE_SETUID #undef N2N_HAVE_SETUID
#else #else
#ifndef CMAKE_BUILD #ifndef CMAKE_BUILD
#include "config.h" #include "config.h"
#endif #endif
#endif #endif
#define PACKAGE_BUILDDATE (__DATE__ " " __TIME__) #define PACKAGE_BUILDDATE (__DATE__ " " __TIME__)
#include <time.h> #include <time.h>
skipping to change at line 84 skipping to change at line 86
#include <unistd.h> #include <unistd.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/param.h> #include <sys/param.h>
#include <pthread.h> #include <pthread.h>
#ifdef __linux__ #ifdef __linux__
#define N2N_CAN_NAME_IFACE 1 #define N2N_CAN_NAME_IFACE 1
#include <linux/netlink.h> #include <linux/netlink.h>
#include <linux/rtnetlink.h> #include <linux/rtnetlink.h>
#include <sys/syscall.h>
#include <unistd.h> #include <unistd.h>
#include <net/if_arp.h> #include <net/if_arp.h>
#include <net/if.h> #include <net/if.h>
#include <linux/if_tun.h> #include <linux/if_tun.h>
#include <linux/netlink.h> #include <linux/netlink.h>
#include <linux/rtnetlink.h> #include <linux/rtnetlink.h>
#define GRND_NONBLOCK 1
#endif /* #ifdef __linux__ */ #endif /* #ifdef __linux__ */
#ifdef __FreeBSD__ #ifdef __FreeBSD__
#include <netinet/in_systm.h> #include <netinet/in_systm.h>
#endif /* #ifdef __FreeBSD__ */ #endif /* #ifdef __FreeBSD__ */
#include <syslog.h> #include <syslog.h>
#include <sys/wait.h> #include <sys/wait.h>
#if defined (__RDRND__) || defined (__RDSEED__)
#include <immintrin.h>
#endif
#define ETH_ADDR_LEN 6
struct ether_hdr
{
uint8_t dhost[ETH_ADDR_LEN];
uint8_t shost[ETH_ADDR_LEN];
uint16_t type; /* higher layer protocol encapsulated */
} __attribute__ ((__packed__));
typedef struct ether_hdr ether_hdr_t;
#ifdef HAVE_LIBZSTD #ifdef HAVE_LIBZSTD
#include <zstd.h> #include <zstd.h>
#endif #endif
#include <netinet/in.h> #include <netinet/in.h>
#include <netinet/ip.h> #include <netinet/ip.h>
#include <netinet/udp.h> #include <netinet/udp.h>
#include <netinet/tcp.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/time.h> #include <sys/time.h>
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#include <assert.h> #include <assert.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <stdint.h> #include <stdint.h>
#ifdef N2N_HAVE_AES #if defined (HAVE_OPENSSL_1_1)
#include <openssl/opensslv.h> #include <openssl/opensslv.h>
#include <openssl/crypto.h> #include <openssl/crypto.h>
#endif #endif
#define closesocket(a) close(a) #define closesocket(a) close(a)
#endif /* #ifndef WIN32 */ #endif /* #ifndef WIN32 */
#include "minilzo.h" #include "minilzo.h"
#include "n2n_define.h"
#include <signal.h> #include <signal.h>
#include <string.h> #include <string.h>
#include <stdarg.h> #include <stdarg.h>
#include "uthash.h"
#include "lzoconf.h" #include "lzoconf.h"
#include "uthash.h"
#include "n2n_define.h"
#include "n2n_typedefs.h"
#ifdef WIN32 #ifdef WIN32
#include "win32/wintap.h" #include <winsock2.h> /* for tcp */
#define SHUT_RDWR SD_BOTH /* for tcp */
#include "wintap.h"
#include <sys/stat.h> #include <sys/stat.h>
#else #else
#include <pwd.h> #include <pwd.h>
#endif /* #ifdef WIN32 */ #endif /* #ifdef WIN32 */
#include "n2n_wire.h" #include "n2n_wire.h"
#include "n2n_transforms.h"
#include "random_numbers.h" #include "random_numbers.h"
#include "pearson.h" #include "pearson.h"
#include "portable_endian.h" #include "portable_endian.h"
#include "aes.h"
#include "cc20.h"
#include "speck.h" #include "speck.h"
#include "curve25519.h"
#ifdef WIN32 #include "n2n_regex.h"
#define N2N_IFNAMSIZ 64 #include "sn_selection.h"
#else #include "network_traffic_filter.h"
#define N2N_IFNAMSIZ 16 /* 15 chars * NULL */ #include "auth.h"
#endif
#ifndef WIN32
typedef struct tuntap_dev {
int fd;
int if_idx;
uint8_t mac_addr[6];
uint32_t ip_addr, device_mask;
uint16_t mtu;
char dev_name[N2N_IFNAMSIZ];
} tuntap_dev;
#define SOCKET int
#endif /* #ifndef WIN32 */
/** Uncomment this to enable the MTU check, then try to ssh to generate a fragme
nted packet. */
/** NOTE: see doc/MTU.md for an explanation on the 1400 value */
//#define MTU_ASSERT_VALUE 1400
/** Common type used to hold stringified IP addresses. */
typedef char ipstr_t[32];
/** Common type used to hold stringified MAC addresses. */
#define N2N_MACSTR_SIZE 32
typedef char macstr_t[N2N_MACSTR_SIZE];
struct peer_info {
n2n_mac_t mac_addr;
n2n_sock_t sock;
int timeout;
time_t last_seen;
time_t last_p2p;
time_t last_sent_query;
uint64_t last_valid_time_stamp;
UT_hash_handle hh; /* makes this structure hashable */
};
typedef struct speck_context_t he_context_t;
typedef char n2n_sn_name_t[N2N_EDGE_SN_HOST_SIZE];
typedef struct n2n_route {
in_addr_t net_addr;
int net_bitlen;
in_addr_t gateway;
} n2n_route_t;
typedef struct n2n_edge n2n_edge_t;
/* *************************************************** */
typedef enum {
N2N_ACCEPT = 0,
N2N_DROP = 1
} n2n_verdict;
/* *************************************************** */
/* Callbacks allow external programs to attach functions in response to
* N2N events. */
typedef struct n2n_edge_callbacks {
/* The supernode registration has been updated */
void (*sn_registration_updated)(n2n_edge_t *eee, time_t now, const n2n_sock_t
*sn);
/* A packet has been received from a peer. N2N_DROP can be returned to
* drop the packet. The packet payload can be modified. This only allows
* the packet size to be reduced */
n2n_verdict (*packet_from_peer)(n2n_edge_t *eee, const n2n_sock_t *peer, uint8
_t *payload, uint16_t *payload_size);
/* A packet has been received from the TAP interface. N2N_DROP can be
* returned to drop the packet. The packet payload can be modified.
* This only allows the packet size to be reduced */
n2n_verdict (*packet_from_tap)(n2n_edge_t *eee, uint8_t *payload, uint16_t *pa
yload_size);
/* Called whenever the IP address of the TAP interface changes. */
void (*ip_address_changed)(n2n_edge_t *eee, uint32_t old_ip, uint32_t new_ip);
/* Called periodically in the main loop. */
void (*main_loop_period)(n2n_edge_t *eee, time_t now);
} n2n_edge_callbacks_t;
/* ***************************************************** */
typedef struct n2n_tuntap_priv_config {
char tuntap_dev_name[N2N_IFNAMSIZ];
char ip_mode[N2N_IF_MODE_SIZE];
char ip_addr[N2N_NETMASK_STR_SIZE];
char netmask[N2N_NETMASK_STR_SIZE];
char device_mac[N2N_MACNAMSIZ];
int mtu;
uint8_t got_s;
uint8_t daemon;
#ifndef WIN32
uid_t userid;
gid_t groupid;
#endif
} n2n_tuntap_priv_config_t;
/* *************************************************** */
typedef struct n2n_edge_conf {
n2n_sn_name_t sn_ip_array[N2N_EDGE_NUM_SUPERNODES];
n2n_route_t *routes; /**< Networks to route through n2n
*/
n2n_community_t community_name; /**< The community. 16 full octets
. */
uint8_t header_encryption; /**< Header encryption indicator. *
/
he_context_t *header_encryption_ctx; /**< Header encryption cipher conte
xt. */
he_context_t *header_iv_ctx; /**< Header IV ecnryption cipher co
ntext, REMOVE as soon as seperte fileds for checksum and replay protection avail
able */
n2n_transform_t transop_id; /**< The transop to use. */
uint16_t compression; /**< Compress outgoing data packets
before encryption */
uint16_t num_routes; /**< Number of routes in routes */
uint8_t dyn_ip_mode; /**< Interface IP address is dynam
ically allocated, eg. DHCP. */
uint8_t allow_routing; /**< Accept packet no to interface
address. */
uint8_t drop_multicast; /**< Multicast ethernet addresses.
*/
uint8_t disable_pmtu_discovery; /**< Disable the Path MTU discover
y. */
uint8_t allow_p2p; /**< Allow P2P connection */
uint8_t sn_num; /**< Number of supernode addresses
defined. */
uint8_t tos; /** TOS for sent packets */
char *encrypt_key;
int register_interval; /**< Interval for supernode regist
ration, also used for UDP NAT hole punching. */
int register_ttl; /**< TTL for registration packet w
hen UDP NAT hole punching through supernode. */
int local_port;
int mgmt_port;
} n2n_edge_conf_t;
struct n2n_edge_stats {
uint32_t tx_p2p;
uint32_t rx_p2p;
uint32_t tx_sup;
uint32_t rx_sup;
uint32_t tx_sup_broadcast;
uint32_t rx_sup_broadcast;
};
struct n2n_edge {
n2n_edge_conf_t conf;
/* Status */
uint8_t sn_idx; /**< Currently active superno
de. */
uint8_t sn_wait; /**< Whether we are waiting f
or a supernode response. */
size_t sup_attempts; /**< Number of remaining atte
mpts to this supernode. */
tuntap_dev device; /**< All about the TUNTAP dev
ice */
n2n_trans_op_t transop; /**< The transop to use when
encoding */
n2n_cookie_t last_cookie; /**< Cookie sent in last REGI
STER_SUPER. */
n2n_route_t *sn_route_to_clean; /**< Supernode route to clean
*/
n2n_edge_callbacks_t cb; /**< API callbacks */
void *user_data; /**< Can hold user data */
uint64_t sn_last_valid_time_stamp;/*< last valid time stamp f
rom supernode */
/* Sockets */
n2n_sock_t supernode;
int udp_sock;
int udp_mgmt_sock; /**< socket for status info.
*/
#ifndef SKIP_MULTICAST_PEERS_DISCOVERY
n2n_sock_t multicast_peer; /**< Multicast peer group (fo
r local edges) */
int udp_multicast_sock; /**< socket for local multica
st registrations. */
int multicast_joined; /**< 1 if the group has been
joined.*/
#endif
/* Peers */
struct peer_info * known_peers; /**< Edges we are connected t
o. */
struct peer_info * pending_peers; /**< Edges we have tried to r
egister with. */
/* Timers */
time_t last_register_req; /**< Check if time to re-regi
ster with super*/
time_t last_p2p; /**< Last time p2p traffic wa
s received. */
time_t last_sup; /**< Last time a packet arriv
ed from supernode. */
time_t start_time; /**< For calculating uptime *
/
/* Statistics */
struct n2n_edge_stats stats;
/* Tuntap config */
n2n_tuntap_priv_config_t tuntap_priv_conf;
};
typedef struct sn_stats
{
size_t errors; /* Number of errors encountered. */
size_t reg_super; /* Number of REGISTER_SUPER requests received. */
size_t reg_super_nak; /* Number of REGISTER_SUPER requests declined. */
size_t fwd; /* Number of messages forwarded. */
size_t broadcast; /* Number of messages broadcast to a community. */
time_t last_fwd; /* Time when last message was forwarded. */
time_t last_reg_super; /* Time when last REGISTER_SUPER was received. */
} sn_stats_t;
struct sn_community
{
char community[N2N_COMMUNITY_SIZE];
uint8_t header_encryption; /* Header encryption indicator. */
he_context_t *header_encryption_ctx; /* Header encryption cipher contex
t. */
he_context_t *header_iv_ctx; /* Header IV ecnryption cipher cont
ext, REMOVE as soon as seperate fields for checksum and replay protection availa
ble */
struct peer_info *edges; /* Link list of registered edges. *
/
int64_t number_enc_packets; /* Number of encrypted packets hand
led so far, required for sorting from time to time */
UT_hash_handle hh; /* makes this structure hashable */
};
typedef struct n2n_sn
{
time_t start_time; /* Used to measure uptime. */
sn_stats_t stats;
int daemon; /* If non-zero then daemonise. */
uint16_t lport; /* Local UDP port to bind to. */
uint16_t mport; /* Management UDP port to bind to. */
int sock; /* Main socket for UDP traffic with edges. */
int mgmt_sock; /* management socket. */
#ifndef WIN32
uid_t userid;
gid_t groupid;
#endif
int lock_communities; /* If true, only loaded communities can be used. */
struct sn_community *communities;
} n2n_sn_t;
/* ************************************** */ /* ************************************** */
#include "header_encryption.h" #include "header_encryption.h"
#include "twofish.h" #include "tf.h"
#ifndef TRACE_ERROR #ifndef TRACE_ERROR
#define TRACE_ERROR 0, __FILE__, __LINE__ #define TRACE_ERROR 0, __FILE__, __LINE__
#define TRACE_WARNING 1, __FILE__, __LINE__ #define TRACE_WARNING 1, __FILE__, __LINE__
#define TRACE_NORMAL 2, __FILE__, __LINE__ #define TRACE_NORMAL 2, __FILE__, __LINE__
#define TRACE_INFO 3, __FILE__, __LINE__ #define TRACE_INFO 3, __FILE__, __LINE__
#define TRACE_DEBUG 4, __FILE__, __LINE__ #define TRACE_DEBUG 4, __FILE__, __LINE__
#endif #endif
/* ************************************** */ /* ************************************** */
/* Transop Init Functions */ /* Transop Init Functions */
int n2n_transop_null_init(const n2n_edge_conf_t *conf, n2n_trans_op_t *ttt); int n2n_transop_null_init (const n2n_edge_conf_t *conf, n2n_trans_op_t *ttt);
int n2n_transop_twofish_init(const n2n_edge_conf_t *conf, n2n_trans_op_t *ttt); int n2n_transop_tf_init (const n2n_edge_conf_t *conf, n2n_trans_op_t *ttt);
#ifdef N2N_HAVE_AES int n2n_transop_aes_init (const n2n_edge_conf_t *conf, n2n_trans_op_t *ttt);
int n2n_transop_aes_cbc_init(const n2n_edge_conf_t *conf, n2n_trans_op_t *ttt); int n2n_transop_cc20_init (const n2n_edge_conf_t *conf, n2n_trans_op_t *ttt);
#endif int n2n_transop_speck_init (const n2n_edge_conf_t *conf, n2n_trans_op_t *ttt);
#ifdef HAVE_OPENSSL_1_1
int n2n_transop_cc20_init(const n2n_edge_conf_t *conf, n2n_trans_op_t *ttt);
#endif
int n2n_transop_speck_init(const n2n_edge_conf_t *conf, n2n_trans_op_t *ttt);
/* Log */ /* Log */
void setTraceLevel(int level); void setTraceLevel (int level);
void setUseSyslog(int use_syslog); void setUseSyslog (int use_syslog);
void setTraceFile(FILE *f); void setTraceFile (FILE *f);
int getTraceLevel(); int getTraceLevel ();
void closeTraceFile(); void closeTraceFile ();
void traceEvent(int eventTraceLevel, char* file, int line, char * format, ...); void traceEvent (int eventTraceLevel, char* file, int line, char * format, ...);
/* Tuntap API */ /* Tuntap API */
int tuntap_open(tuntap_dev *device, char *dev, const char *address_mode, char *d int tuntap_open (struct tuntap_dev *device, char *dev, const char *address_mode,
evice_ip, char *device_ip,
char *device_mask, const char * device_mac, int mtu); char *device_mask, const char * device_mac, int mtu
int tuntap_read(struct tuntap_dev *tuntap, unsigned char *buf, int len); #ifdef WIN32
int tuntap_write(struct tuntap_dev *tuntap, unsigned char *buf, int len); , int metric
void tuntap_close(struct tuntap_dev *tuntap); #endif
void tuntap_get_address(struct tuntap_dev *tuntap); );
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 */ /* Utils */
char* intoa(uint32_t addr, char* buf, uint16_t buf_len); char* intoa (uint32_t addr, char* buf, uint16_t buf_len);
char* macaddr_str(macstr_t buf, const n2n_mac_t mac); uint32_t bitlen2mask (uint8_t bitlen);
int str2mac( uint8_t * outmac /* 6 bytes */, const char * s ); uint8_t mask2bitlen (uint32_t mask);
uint8_t is_multi_broadcast(const uint8_t * dest_mac); char* macaddr_str (macstr_t buf, const n2n_mac_t mac);
char* msg_type2str(uint16_t msg_type); int str2mac (uint8_t * outmac /* 6 bytes */, const char * s);
void hexdump(const uint8_t * buf, size_t len); int supernode2sock (n2n_sock_t * sn, const n2n_sn_name_t addrIn);
void print_n2n_version(); uint8_t is_multi_broadcast (const n2n_mac_t dest_mac);
int is_empty_ip_address(const n2n_sock_t * sock); uint8_t is_broadcast (const n2n_mac_t dest_mac);
void print_edge_stats(const n2n_edge_t *eee); uint8_t is_null_mac (const n2n_mac_t dest_mac);
char* msg_type2str (uint16_t msg_type);
void hexdump (const uint8_t * buf, size_t len);
void print_n2n_version ();
int is_empty_ip_address (const n2n_sock_t * sock);
void print_edge_stats (const n2n_edge_t *eee);
int memrnd (uint8_t *address, size_t len);
int memxor (uint8_t *destination, const uint8_t *source, size_t len);
/* Sockets */ /* Sockets */
char* sock_to_cstr( n2n_sock_str_t out, char* sock_to_cstr (n2n_sock_str_t out,
const n2n_sock_t * sock ); const n2n_sock_t * sock);
SOCKET open_socket(int local_port, int bind_any); char * ip_subnet_to_str (dec_ip_bit_str_t buf, const n2n_ip_subnet_t *ipaddr);
int sock_equal( const n2n_sock_t * a, SOCKET open_socket (int local_port, in_addr_t address, int type);
const n2n_sock_t * b ); int sock_equal (const n2n_sock_t * a,
const n2n_sock_t * b);
/* Header encryption */ /* Header encryption */
uint64_t time_stamp(void); uint64_t time_stamp (void);
uint64_t initial_time_stamp (void); uint64_t initial_time_stamp (void);
int time_stamp_verify_and_update (uint64_t stamp, uint64_t * previous_stamp); int time_stamp_verify_and_update (uint64_t stamp, uint64_t * previous_stamp, int allow_jitter);
/* Operations on peer_info lists. */ /* Operations on peer_info lists. */
size_t purge_peer_list( struct peer_info ** peer_list, size_t purge_peer_list (struct peer_info ** peer_list,
time_t purge_before ); SOCKET socket_not_to_close,
size_t clear_peer_list( struct peer_info ** peer_list ); n2n_tcp_connection_t **tcp_connections,
size_t purge_expired_registrations( struct peer_info ** peer_list, time_t* p_las time_t purge_before);
t_purge );
size_t clear_peer_list (struct peer_info ** peer_list);
size_t purge_expired_nodes (struct peer_info **peer_list,
SOCKET socket_not_to_close,
n2n_tcp_connection_t **tcp_connections,
time_t *p_last_purge,
int frequency, int timeout);
/* Edge conf */ /* Edge conf */
void edge_init_conf_defaults(n2n_edge_conf_t *conf); void edge_init_conf_defaults (n2n_edge_conf_t *conf);
int edge_verify_conf(const n2n_edge_conf_t *conf); int edge_verify_conf (const n2n_edge_conf_t *conf);
int edge_conf_add_supernode(n2n_edge_conf_t *conf, const char *ip_and_port); int edge_conf_add_supernode (n2n_edge_conf_t *conf, const char *ip_and_port);
const n2n_edge_conf_t* edge_get_conf(const n2n_edge_t *eee); const n2n_edge_conf_t* edge_get_conf (const n2n_edge_t *eee);
void edge_term_conf(n2n_edge_conf_t *conf); void edge_term_conf (n2n_edge_conf_t *conf);
/* Public functions */ /* Public functions */
n2n_edge_t* edge_init(const tuntap_dev *dev, const n2n_edge_conf_t *conf, int *r n2n_edge_t* edge_init (const n2n_edge_conf_t *conf, int *rv);
v); void update_supernode_reg (n2n_edge_t * eee, time_t nowTime);
void edge_term(n2n_edge_t *eee); void readFromIPSocket (n2n_edge_t * eee, int in_sock);
void edge_set_callbacks(n2n_edge_t *eee, const n2n_edge_callbacks_t *callbacks); void edge_term (n2n_edge_t *eee);
void edge_set_userdata(n2n_edge_t *eee, void *user_data); void edge_set_callbacks (n2n_edge_t *eee, const n2n_edge_callbacks_t *callbacks)
void* edge_get_userdata(n2n_edge_t *eee); ;
void edge_send_packet2net(n2n_edge_t *eee, uint8_t *tap_pkt, size_t len); void edge_set_userdata (n2n_edge_t *eee, void *user_data);
void edge_read_from_tap(n2n_edge_t *eee); void* edge_get_userdata (n2n_edge_t *eee);
int edge_get_n2n_socket(n2n_edge_t *eee); void edge_send_packet2net (n2n_edge_t *eee, uint8_t *tap_pkt, size_t len);
int edge_get_management_socket(n2n_edge_t *eee); void edge_read_from_tap (n2n_edge_t *eee);
int run_edge_loop(n2n_edge_t *eee, int *keep_running); int edge_get_n2n_socket (n2n_edge_t *eee);
int quick_edge_init(char *device_name, char *community_name, int edge_get_management_socket (n2n_edge_t *eee);
char *encrypt_key, char *device_mac, int run_edge_loop (n2n_edge_t *eee);
char *local_ip_address, int quick_edge_init (char *device_name, char *community_name,
char *supernode_ip_address_port, char *encrypt_key, char *device_mac,
int *keep_on_running); char *local_ip_address,
int sn_init(n2n_sn_t *sss); char *supernode_ip_address_port,
void sn_term(n2n_sn_t *sss); int *keep_on_running);
int run_sn_loop(n2n_sn_t *sss, int *keep_running); int comm_init (struct sn_community *comm, char *cmn);
const char* compression_str(uint8_t cmpr); int sn_init_defaults (n2n_sn_t *sss);
const char* transop_str(enum n2n_transform tr); void sn_init (n2n_sn_t *sss);
void sn_term (n2n_sn_t *sss);
int supernode2sock (n2n_sock_t * sn, const n2n_sn_name_t addrIn);
struct peer_info* add_sn_to_list_by_mac_or_sock (struct peer_info **sn_list, n2n
_sock_t *sock, const n2n_mac_t mac, int *skip_add);
int run_sn_loop (n2n_sn_t *sss);
int assign_one_ip_subnet (n2n_sn_t *sss, struct sn_community *comm);
const char* compression_str (uint8_t cmpr);
const char* transop_str (enum n2n_transform tr);
void handleMgmtJson (n2n_edge_t *eee, char *udp_buf, const struct sockaddr_in se
nder_sock);
void handleMgmtJson_sn (n2n_sn_t *sss, char *udp_buf, const struct sockaddr_in s
ender_sock);
#endif /* _N2N_H_ */ #endif /* _N2N_H_ */
 End of changes. 33 change blocks. 
370 lines changed or deleted 132 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)