Added zts_get_protocol_stats(), zts_restart(), updated API documentation
This commit is contained in:
169
src/Controls.cpp
169
src/Controls.cpp
@@ -621,11 +621,9 @@ JNIEXPORT int JNICALL Java_com_zerotier_libzt_ZeroTier_start(
|
||||
int zts_stop()
|
||||
{
|
||||
Mutex::Lock _l(_service_lock);
|
||||
bool didStop = false;
|
||||
if (__zts_can_perform_service_operation()) {
|
||||
_run_service = false;
|
||||
service->terminate();
|
||||
didStop = true;
|
||||
#if defined(_WIN32)
|
||||
WSACleanup();
|
||||
#endif
|
||||
@@ -641,6 +639,41 @@ JNIEXPORT void JNICALL Java_com_zerotier_libzt_ZeroTier_stop(
|
||||
}
|
||||
#endif
|
||||
|
||||
int zts_restart()
|
||||
{
|
||||
_service_lock.lock();
|
||||
// Store callback references
|
||||
void (*_tmpUserEventCallbackFunc)(struct zts_callback_msg *);
|
||||
_tmpUserEventCallbackFunc = _userEventCallbackFunc;
|
||||
int tmpPort = _port;
|
||||
std::string tmpPath = _path;
|
||||
// Stop the service
|
||||
if (__zts_can_perform_service_operation()) {
|
||||
_run_service = false;
|
||||
service->terminate();
|
||||
#if defined(_WIN32)
|
||||
WSACleanup();
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
_service_lock.unlock();
|
||||
return ZTS_ERR_SERVICE;
|
||||
}
|
||||
// Start again with same parameters as initial call
|
||||
_service_lock.unlock();
|
||||
while (service) {
|
||||
_api_sleep(ZTS_CALLBACK_PROCESSING_INTERVAL);
|
||||
}
|
||||
return zts_start(tmpPath.c_str(), _tmpUserEventCallbackFunc, tmpPort);
|
||||
}
|
||||
#ifdef SDK_JNI
|
||||
JNIEXPORT void JNICALL Java_com_zerotier_libzt_ZeroTier_restart(
|
||||
JNIEnv *env, jobject thisObj)
|
||||
{
|
||||
zts_restart();
|
||||
}
|
||||
#endif
|
||||
|
||||
int zts_free()
|
||||
{
|
||||
Mutex::Lock _l(_service_lock);
|
||||
@@ -868,6 +901,138 @@ int zts_get_all_network_details(struct zts_network_details *nds, int *num)
|
||||
#ifdef SDK_JNI
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Statistics //
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "lwip/stats.h"
|
||||
|
||||
extern struct stats_ lwip_stats;
|
||||
|
||||
int zts_get_all_stats(struct zts_stats *statsDest)
|
||||
{
|
||||
#if LWIP_STATS
|
||||
if (!statsDest) {
|
||||
return ZTS_ERR_INVALID_ARG;
|
||||
}
|
||||
memset(statsDest, 0, sizeof(struct zts_stats));
|
||||
// Copy lwIP stats
|
||||
memcpy(&(statsDest->link), &(lwip_stats.link), sizeof(struct stats_proto));
|
||||
memcpy(&(statsDest->etharp), &(lwip_stats.etharp), sizeof(struct stats_proto));
|
||||
memcpy(&(statsDest->ip_frag), &(lwip_stats.ip_frag), sizeof(struct stats_proto));
|
||||
memcpy(&(statsDest->ip), &(lwip_stats.ip), sizeof(struct stats_proto));
|
||||
memcpy(&(statsDest->icmp), &(lwip_stats.icmp), sizeof(struct stats_proto));
|
||||
//memcpy(&(statsDest->igmp), &(lwip_stats.igmp), sizeof(struct stats_igmp));
|
||||
memcpy(&(statsDest->udp), &(lwip_stats.udp), sizeof(struct stats_proto));
|
||||
memcpy(&(statsDest->tcp), &(lwip_stats.tcp), sizeof(struct stats_proto));
|
||||
// mem omitted
|
||||
// memp omitted
|
||||
memcpy(&(statsDest->sys), &(lwip_stats.sys), sizeof(struct stats_sys));
|
||||
memcpy(&(statsDest->ip6), &(lwip_stats.ip6), sizeof(struct stats_proto));
|
||||
memcpy(&(statsDest->icmp6), &(lwip_stats.icmp6), sizeof(struct stats_proto));
|
||||
memcpy(&(statsDest->ip6_frag), &(lwip_stats.ip6_frag), sizeof(struct stats_proto));
|
||||
memcpy(&(statsDest->mld6), &(lwip_stats.mld6), sizeof(struct stats_igmp));
|
||||
memcpy(&(statsDest->nd6), &(lwip_stats.nd6), sizeof(struct stats_proto));
|
||||
memcpy(&(statsDest->ip_frag), &(lwip_stats.ip_frag), sizeof(struct stats_proto));
|
||||
// mib2 omitted
|
||||
// Copy ZT stats
|
||||
// ...
|
||||
return ZTS_ERR_OK;
|
||||
#else
|
||||
return ZTS_ERR_NO_RESULT;
|
||||
#endif
|
||||
}
|
||||
#ifdef SDK_JNI
|
||||
// No implementation for JNI
|
||||
#endif
|
||||
|
||||
int zts_get_protocol_stats(int protocolType, void *protoStatsDest)
|
||||
{
|
||||
#if LWIP_STATS
|
||||
if (!protoStatsDest) {
|
||||
return ZTS_ERR_INVALID_ARG;
|
||||
}
|
||||
memset(protoStatsDest, 0, sizeof(struct stats_proto));
|
||||
switch (protocolType)
|
||||
{
|
||||
case ZTS_STATS_PROTOCOL_LINK:
|
||||
memcpy(protoStatsDest, &(lwip_stats.link), sizeof(struct stats_proto));
|
||||
break;
|
||||
case ZTS_STATS_PROTOCOL_ETHARP:
|
||||
memcpy(protoStatsDest, &(lwip_stats.etharp), sizeof(struct stats_proto));
|
||||
break;
|
||||
case ZTS_STATS_PROTOCOL_IP:
|
||||
memcpy(protoStatsDest, &(lwip_stats.ip), sizeof(struct stats_proto));
|
||||
break;
|
||||
case ZTS_STATS_PROTOCOL_UDP:
|
||||
memcpy(protoStatsDest, &(lwip_stats.udp), sizeof(struct stats_proto));
|
||||
break;
|
||||
case ZTS_STATS_PROTOCOL_TCP:
|
||||
memcpy(protoStatsDest, &(lwip_stats.tcp), sizeof(struct stats_proto));
|
||||
break;
|
||||
case ZTS_STATS_PROTOCOL_ICMP:
|
||||
memcpy(protoStatsDest, &(lwip_stats.icmp), sizeof(struct stats_proto));
|
||||
break;
|
||||
case ZTS_STATS_PROTOCOL_IP_FRAG:
|
||||
memcpy(protoStatsDest, &(lwip_stats.ip_frag), sizeof(struct stats_proto));
|
||||
break;
|
||||
case ZTS_STATS_PROTOCOL_IP6:
|
||||
memcpy(protoStatsDest, &(lwip_stats.ip6), sizeof(struct stats_proto));
|
||||
break;
|
||||
case ZTS_STATS_PROTOCOL_ICMP6:
|
||||
memcpy(protoStatsDest, &(lwip_stats.icmp6), sizeof(struct stats_proto));
|
||||
break;
|
||||
case ZTS_STATS_PROTOCOL_IP6_FRAG:
|
||||
memcpy(protoStatsDest, &(lwip_stats.ip6_frag), sizeof(struct stats_proto));
|
||||
break;
|
||||
default:
|
||||
return ZTS_ERR_INVALID_ARG;
|
||||
}
|
||||
return ZTS_ERR_OK;
|
||||
#else
|
||||
return ZTS_ERR_NO_RESULT;
|
||||
#endif
|
||||
}
|
||||
#ifdef SDK_JNI
|
||||
JNIEXPORT jint JNICALL Java_com_zerotier_libzt_ZeroTier_get_1protocol_1stats(
|
||||
JNIEnv *env, jobject thisObj, jint protocolType, jobject protoStatsObj)
|
||||
{
|
||||
struct stats_proto stats;
|
||||
int retval = zts_get_protocol_stats(protocolType, &stats);
|
||||
// Copy stats into Java object
|
||||
jclass c = env->GetObjectClass(protoStatsObj);
|
||||
if (!c) {
|
||||
return ZTS_ERR_INVALID_ARG;
|
||||
}
|
||||
jfieldID fid;
|
||||
fid = env->GetFieldID(c, "xmit", "I");
|
||||
env->SetIntField(protoStatsObj, fid, stats.xmit);
|
||||
fid = env->GetFieldID(c, "recv", "I");
|
||||
env->SetIntField(protoStatsObj, fid, stats.recv);
|
||||
fid = env->GetFieldID(c, "fw", "I");
|
||||
env->SetIntField(protoStatsObj, fid, stats.fw);
|
||||
fid = env->GetFieldID(c, "drop", "I");
|
||||
env->SetIntField(protoStatsObj, fid, stats.drop);
|
||||
fid = env->GetFieldID(c, "chkerr", "I");
|
||||
env->SetIntField(protoStatsObj, fid, stats.chkerr);
|
||||
fid = env->GetFieldID(c, "lenerr", "I");
|
||||
env->SetIntField(protoStatsObj, fid, stats.lenerr);
|
||||
fid = env->GetFieldID(c, "memerr", "I");
|
||||
env->SetIntField(protoStatsObj, fid, stats.memerr);
|
||||
fid = env->GetFieldID(c, "rterr", "I");
|
||||
env->SetIntField(protoStatsObj, fid, stats.rterr);
|
||||
fid = env->GetFieldID(c, "proterr", "I");
|
||||
env->SetIntField(protoStatsObj, fid, stats.proterr);
|
||||
fid = env->GetFieldID(c, "opterr", "I");
|
||||
env->SetIntField(protoStatsObj, fid, stats.opterr);
|
||||
fid = env->GetFieldID(c, "err", "I");
|
||||
env->SetIntField(protoStatsObj, fid, stats.err);
|
||||
fid = env->GetFieldID(c, "cachehit", "I");
|
||||
env->SetIntField(protoStatsObj, fid, stats.cachehit);
|
||||
return retval;
|
||||
}
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Multipath/QoS //
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -181,12 +181,30 @@ public class ZeroTier
|
||||
public static int TCP_KEEPINTVL = 0x00000004;
|
||||
public static int TCP_KEEPCNT = 0x00000005;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Statistics //
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public static int STATS_PROTOCOL_LINK = 0;
|
||||
public static int STATS_PROTOCOL_ETHARP = 1;
|
||||
public static int STATS_PROTOCOL_IP = 2;
|
||||
public static int STATS_PROTOCOL_UDP = 3;
|
||||
public static int STATS_PROTOCOL_TCP = 4;
|
||||
public static int STATS_PROTOCOL_ICMP = 5;
|
||||
public static int STATS_PROTOCOL_IP_FRAG = 6;
|
||||
public static int STATS_PROTOCOL_IP6 = 7;
|
||||
public static int STATS_PROTOCOL_ICMP6 = 8;
|
||||
public static int STATS_PROTOCOL_IP6_FRAG = 9;
|
||||
|
||||
public static native int get_protocol_stats(int protocolNum, ZeroTierProtoStats stats);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// ZeroTier Service Controls //
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public static native int start(String path, ZeroTierEventListener callbackClass, int port);
|
||||
public static native int stop();
|
||||
public static native int restart();
|
||||
public static native int join(long nwid);
|
||||
public static native int leave(long nwid);
|
||||
public static native long get_node_id();
|
||||
|
||||
19
src/java/ZeroTierProtoStats.java
Normal file
19
src/java/ZeroTierProtoStats.java
Normal file
@@ -0,0 +1,19 @@
|
||||
package com.zerotier.libzt;
|
||||
|
||||
import com.zerotier.libzt.ZeroTier;
|
||||
|
||||
public class ZeroTierProtoStats
|
||||
{
|
||||
public int xmit; /* Transmitted packets. */
|
||||
public int recv; /* Received packets. */
|
||||
public int fw; /* Forwarded packets. */
|
||||
public int drop; /* Dropped packets. */
|
||||
public int chkerr; /* Checksum error. */
|
||||
public int lenerr; /* Invalid length error. */
|
||||
public int memerr; /* Out of memory error. */
|
||||
public int rterr; /* Routing error. */
|
||||
public int proterr; /* Protocol error. */
|
||||
public int opterr; /* Error in options. */
|
||||
public int err; /* Misc error. */
|
||||
public int cachehit;
|
||||
}
|
||||
361
src/lwipopts.h
361
src/lwipopts.h
@@ -49,6 +49,7 @@
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
// Misc
|
||||
#define LWIP_STATS_LARGE 1
|
||||
#define LWIP_NOASSERT 1
|
||||
#if __ANDROID__
|
||||
#define LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS 0
|
||||
@@ -82,149 +83,49 @@
|
||||
------------------------------------ Presets -----------------------------------
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
// Embedded applications (lwIP out-of-the-box defaults)
|
||||
#if 0
|
||||
#define TCP_TMR_INTERVAL 250
|
||||
#endif
|
||||
|
||||
// Desktop-class applications
|
||||
#if 1
|
||||
#define LWIP_MTU 1500
|
||||
#define LWIP_CHKSUM_ALGORITHM 2
|
||||
// memory
|
||||
#define MEMP_NUM_NETCONN 1024
|
||||
#define MEMP_NUM_NETBUF 2
|
||||
#define MEMP_NUM_TCPIP_MSG_API 1024
|
||||
#define MEMP_NUM_TCPIP_MSG_INPKT 1024
|
||||
#define PBUF_POOL_SIZE 1024
|
||||
#define TCP_DEFAULT_LISTEN_BACKLOG 0xff
|
||||
// arp
|
||||
#define ARP_TABLE_SIZE 64
|
||||
#define ARP_MAXAGE 300
|
||||
#define ARP_QUEUEING 1
|
||||
#define ARP_QUEUE_LEN 3
|
||||
// ip
|
||||
#define IP_REASS_MAXAGE 15
|
||||
#define IP_REASS_MAX_PBUFS 32
|
||||
// tcp
|
||||
#define TCP_TMR_INTERVAL 250
|
||||
#define TCP_WND 0xffff0
|
||||
#define TCP_MAXRTX 12
|
||||
#define TCP_SYNMAXRTX 12
|
||||
#define LWIP_TCP_SACK_OUT 1
|
||||
#define LWIP_TCP_MAX_SACK_NUM 4
|
||||
#define TCP_MSS (LWIP_MTU - 40)
|
||||
#define TCP_SND_BUF (64 * TCP_MSS)
|
||||
#define TCP_SND_QUEUELEN (64 * (2 * (TCP_SND_BUF/TCP_MSS)))
|
||||
#define TCP_SNDLOWAT (0xffff - (4*TCP_MSS) - 1)
|
||||
#define TCP_SNDQUEUELOWAT LWIP_MAX(((TCP_SND_QUEUELEN)/2), 5)
|
||||
#define TCP_WND_UPDATE_THRESHOLD LWIP_MIN((TCP_WND / 4), (TCP_MSS * 4))
|
||||
#define LWIP_WND_SCALE 1
|
||||
#define TCP_RCV_SCALE 4
|
||||
// tcpip
|
||||
#define TCPIP_MBOX_SIZE 0
|
||||
#define LWIP_TCPIP_CORE_LOCKING 1
|
||||
#define LWIP_TCPIP_CORE_LOCKING_INPUT 1
|
||||
// netconn
|
||||
#define LWIP_NETCONN_FULLDUPLEX 0
|
||||
// netif
|
||||
#define LWIP_SINGLE_NETIF 0
|
||||
#define LWIP_NETIF_HWADDRHINT 1
|
||||
#define LWIP_NETIF_TX_SINGLE_PBUF 0
|
||||
#define TCPIP_THREAD_PRIO 1
|
||||
#endif
|
||||
|
||||
// Desktop-class applications
|
||||
#if 0
|
||||
#define MTU 2800
|
||||
#define LWIP_CHKSUM_ALGORITHM 2
|
||||
// memory
|
||||
#define MEMP_NUM_NETCONN 1024
|
||||
#define MEMP_NUM_NETBUF 2
|
||||
#define MEMP_NUM_TCPIP_MSG_API 64
|
||||
#define MEMP_NUM_TCPIP_MSG_INPKT 64
|
||||
#define PBUF_POOL_SIZE 128
|
||||
// arp
|
||||
#define ARP_TABLE_SIZE 64
|
||||
#define ARP_MAXAGE 300
|
||||
#define ARP_QUEUEING 1
|
||||
#define ARP_QUEUE_LEN 3
|
||||
// ip
|
||||
#define IP_REASS_MAXAGE 15
|
||||
#define IP_REASS_MAX_PBUFS 32
|
||||
// tcp
|
||||
#define TCP_TMR_INTERVAL 25
|
||||
#define TCP_WND 0xffff
|
||||
#define TCP_MAXRTX 12
|
||||
#define TCP_SYNMAXRTX 12
|
||||
#define LWIP_TCP_SACK_OUT 1
|
||||
#define LWIP_TCP_MAX_SACK_NUM 4
|
||||
#define TCP_MSS (MTU - 40)
|
||||
#define TCP_SND_BUF (32 * TCP_MSS)
|
||||
#define TCP_SND_QUEUELEN (64 * (2 * (TCP_SND_BUF/TCP_MSS)))
|
||||
#define TCP_SNDLOWAT (0xffff - (4*TCP_MSS) - 1)
|
||||
#define TCP_SNDQUEUELOWAT LWIP_MAX(((TCP_SND_QUEUELEN)/2), 5)
|
||||
#define TCP_WND_UPDATE_THRESHOLD LWIP_MIN((TCP_WND / 4), (TCP_MSS * 4))
|
||||
#define LWIP_WND_SCALE 1
|
||||
#define TCP_RCV_SCALE 0
|
||||
// tcpip
|
||||
#define TCPIP_MBOX_SIZE 0
|
||||
#define LWIP_TCPIP_CORE_LOCKING 1
|
||||
#define LWIP_TCPIP_CORE_LOCKING_INPUT 1
|
||||
// netconn
|
||||
#define LWIP_NETCONN_FULLDUPLEX 0
|
||||
// netif
|
||||
#define LWIP_SINGLE_NETIF 0
|
||||
#define LWIP_NETIF_HWADDRHINT 1
|
||||
#define LWIP_NETIF_TX_SINGLE_PBUF 0
|
||||
#define TCPIP_THREAD_PRIO 1
|
||||
#endif
|
||||
|
||||
// Stable
|
||||
#if 0
|
||||
#define MTU 2800
|
||||
#define LWIP_CHKSUM_ALGORITHM 2
|
||||
// memory
|
||||
#define MEMP_NUM_NETCONN 1024
|
||||
#define MEMP_NUM_NETBUF 2
|
||||
#define MEMP_NUM_TCPIP_MSG_API 64
|
||||
#define MEMP_NUM_TCPIP_MSG_INPKT 64
|
||||
#define PBUF_POOL_SIZE 128
|
||||
// arp
|
||||
#define ARP_TABLE_SIZE 64
|
||||
#define ARP_MAXAGE 300
|
||||
#define ARP_QUEUEING 1
|
||||
#define ARP_QUEUE_LEN 3
|
||||
// ip
|
||||
#define IP_REASS_MAXAGE 15
|
||||
#define IP_REASS_MAX_PBUFS 32
|
||||
// tcp
|
||||
#define TCP_TMR_INTERVAL 25
|
||||
#define TCP_WND 0xffff
|
||||
#define TCP_MAXRTX 12
|
||||
#define TCP_SYNMAXRTX 12
|
||||
#define LWIP_TCP_SACK_OUT 0
|
||||
#define LWIP_TCP_MAX_SACK_NUM 4
|
||||
#define TCP_MSS (MTU - 40)
|
||||
#define TCP_SND_BUF (32 * TCP_MSS)
|
||||
#define TCP_SND_QUEUELEN (64 * (2 * (TCP_SND_BUF/TCP_MSS)))
|
||||
#define TCP_SNDLOWAT (0xffff - (4*TCP_MSS) - 1)
|
||||
#define TCP_SNDLOWAT LWIP_MIN(LWIP_MAX(((TCP_SND_BUF)/2), (2 * TCP_MSS) + 1), (TCP_SND_BUF) - 1)
|
||||
#define TCP_WND_UPDATE_THRESHOLD LWIP_MIN((TCP_WND / 4), (TCP_MSS * 4))
|
||||
#define LWIP_WND_SCALE 1
|
||||
#define TCP_RCV_SCALE 0
|
||||
// tcpip
|
||||
#define TCPIP_MBOX_SIZE 0
|
||||
#define LWIP_TCPIP_CORE_LOCKING 1
|
||||
#define LWIP_TCPIP_CORE_LOCKING_INPUT 1
|
||||
// netconn
|
||||
#define LWIP_NETCONN_FULLDUPLEX 0
|
||||
// netif
|
||||
#define LWIP_SINGLE_NETIF 0
|
||||
#define LWIP_NETIF_HWADDRHINT 1
|
||||
#define LWIP_NETIF_TX_SINGLE_PBUF 0
|
||||
#define TCPIP_THREAD_PRIO 1
|
||||
#endif
|
||||
#define LWIP_MTU 1500
|
||||
#define LWIP_CHKSUM_ALGORITHM 2
|
||||
// memory
|
||||
#define MEMP_NUM_NETCONN 1024
|
||||
#define MEMP_NUM_NETBUF 2
|
||||
#define MEMP_NUM_TCPIP_MSG_API 1024
|
||||
#define MEMP_NUM_TCPIP_MSG_INPKT 1024
|
||||
#define PBUF_POOL_SIZE 1024
|
||||
#define TCP_DEFAULT_LISTEN_BACKLOG 0xff
|
||||
// arp
|
||||
#define ARP_TABLE_SIZE 64
|
||||
#define ARP_MAXAGE 300
|
||||
#define ARP_QUEUEING 1
|
||||
#define ARP_QUEUE_LEN 3
|
||||
// ip
|
||||
#define IP_REASS_MAXAGE 15
|
||||
#define IP_REASS_MAX_PBUFS 32
|
||||
// tcp
|
||||
#define TCP_TMR_INTERVAL 250
|
||||
#define TCP_WND 0xffff0
|
||||
#define TCP_MAXRTX 12
|
||||
#define TCP_SYNMAXRTX 12
|
||||
#define LWIP_TCP_SACK_OUT 1
|
||||
#define LWIP_TCP_MAX_SACK_NUM 4
|
||||
#define TCP_MSS (LWIP_MTU - 40)
|
||||
#define TCP_SND_BUF (64 * TCP_MSS)
|
||||
#define TCP_SND_QUEUELEN (64 * (2 * (TCP_SND_BUF/TCP_MSS)))
|
||||
#define TCP_SNDLOWAT (0xffff - (4*TCP_MSS) - 1)
|
||||
#define TCP_SNDQUEUELOWAT LWIP_MAX(((TCP_SND_QUEUELEN)/2), 5)
|
||||
#define TCP_WND_UPDATE_THRESHOLD LWIP_MIN((TCP_WND / 4), (TCP_MSS * 4))
|
||||
#define LWIP_WND_SCALE 1
|
||||
#define TCP_RCV_SCALE 4
|
||||
// tcpip
|
||||
#define TCPIP_MBOX_SIZE 0
|
||||
#define LWIP_TCPIP_CORE_LOCKING 1
|
||||
#define LWIP_TCPIP_CORE_LOCKING_INPUT 1
|
||||
// netconn
|
||||
#define LWIP_NETCONN_FULLDUPLEX 0
|
||||
// netif
|
||||
#define LWIP_SINGLE_NETIF 0
|
||||
#define LWIP_NETIF_HWADDRHINT 1
|
||||
#define LWIP_NETIF_TX_SINGLE_PBUF 0
|
||||
#define TCPIP_THREAD_PRIO 1
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
------------------------------------ Timers ------------------------------------
|
||||
@@ -2290,180 +2191,6 @@ happening sooner than they should.
|
||||
* @}
|
||||
*/
|
||||
|
||||
/*
|
||||
----------------------------------------
|
||||
---------- Statistics options ----------
|
||||
----------------------------------------
|
||||
*/
|
||||
/**
|
||||
* @defgroup lwip_opts_stats Statistics
|
||||
* @ingroup lwip_opts_debug
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* LWIP_STATS==1: Enable statistics collection in lwip_stats.
|
||||
*/
|
||||
#if !defined LWIP_STATS || defined __DOXYGEN__
|
||||
#define LWIP_STATS 0
|
||||
#endif
|
||||
|
||||
#if LWIP_STATS
|
||||
|
||||
/**
|
||||
* LWIP_STATS_DISPLAY==1: Compile in the statistics output functions.
|
||||
*/
|
||||
#if !defined LWIP_STATS_DISPLAY || defined __DOXYGEN__
|
||||
#define LWIP_STATS_DISPLAY 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* LINK_STATS==1: Enable link stats.
|
||||
*/
|
||||
#if !defined LINK_STATS || defined __DOXYGEN__
|
||||
#define LINK_STATS 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* ETHARP_STATS==1: Enable etharp stats.
|
||||
*/
|
||||
#if !defined ETHARP_STATS || defined __DOXYGEN__
|
||||
#define ETHARP_STATS (LWIP_ARP)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* IP_STATS==1: Enable IP stats.
|
||||
*/
|
||||
#if !defined IP_STATS || defined __DOXYGEN__
|
||||
#define IP_STATS 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* IPFRAG_STATS==1: Enable IP fragmentation stats. Default is
|
||||
* on if using either frag or reass.
|
||||
*/
|
||||
#if !defined IPFRAG_STATS || defined __DOXYGEN__
|
||||
#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* ICMP_STATS==1: Enable ICMP stats.
|
||||
*/
|
||||
#if !defined ICMP_STATS || defined __DOXYGEN__
|
||||
#define ICMP_STATS 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* IGMP_STATS==1: Enable IGMP stats.
|
||||
*/
|
||||
#if !defined IGMP_STATS || defined __DOXYGEN__
|
||||
#define IGMP_STATS (LWIP_IGMP)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* UDP_STATS==1: Enable UDP stats. Default is on if
|
||||
* UDP enabled, otherwise off.
|
||||
*/
|
||||
#if !defined UDP_STATS || defined __DOXYGEN__
|
||||
#define UDP_STATS (LWIP_UDP)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* TCP_STATS==1: Enable TCP stats. Default is on if TCP
|
||||
* enabled, otherwise off.
|
||||
*/
|
||||
#if !defined TCP_STATS || defined __DOXYGEN__
|
||||
#define TCP_STATS (LWIP_TCP)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* MEM_STATS==1: Enable mem.c stats.
|
||||
*/
|
||||
#if !defined MEM_STATS || defined __DOXYGEN__
|
||||
#define MEM_STATS ((MEM_LIBC_MALLOC == 0) && (MEM_USE_POOLS == 0))
|
||||
#endif
|
||||
|
||||
/**
|
||||
* MEMP_STATS==1: Enable memp.c pool stats.
|
||||
*/
|
||||
#if !defined MEMP_STATS || defined __DOXYGEN__
|
||||
#define MEMP_STATS (MEMP_MEM_MALLOC == 0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* SYS_STATS==1: Enable system stats (sem and mbox counts, etc).
|
||||
*/
|
||||
#if !defined SYS_STATS || defined __DOXYGEN__
|
||||
#define SYS_STATS (NO_SYS == 0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* IP6_STATS==1: Enable IPv6 stats.
|
||||
*/
|
||||
#if !defined IP6_STATS || defined __DOXYGEN__
|
||||
#define IP6_STATS (LWIP_IPV6)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* ICMP6_STATS==1: Enable ICMP for IPv6 stats.
|
||||
*/
|
||||
#if !defined ICMP6_STATS || defined __DOXYGEN__
|
||||
#define ICMP6_STATS (LWIP_IPV6 && LWIP_ICMP6)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* IP6_FRAG_STATS==1: Enable IPv6 fragmentation stats.
|
||||
*/
|
||||
#if !defined IP6_FRAG_STATS || defined __DOXYGEN__
|
||||
#define IP6_FRAG_STATS (LWIP_IPV6 && (LWIP_IPV6_FRAG || LWIP_IPV6_REASS))
|
||||
#endif
|
||||
|
||||
/**
|
||||
* MLD6_STATS==1: Enable MLD for IPv6 stats.
|
||||
*/
|
||||
#if !defined MLD6_STATS || defined __DOXYGEN__
|
||||
#define MLD6_STATS (LWIP_IPV6 && LWIP_IPV6_MLD)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* ND6_STATS==1: Enable Neighbor discovery for IPv6 stats.
|
||||
*/
|
||||
#if !defined ND6_STATS || defined __DOXYGEN__
|
||||
#define ND6_STATS (LWIP_IPV6)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* MIB2_STATS==1: Stats for SNMP MIB2.
|
||||
*/
|
||||
#if !defined MIB2_STATS || defined __DOXYGEN__
|
||||
#define MIB2_STATS 0
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#define LINK_STATS 0
|
||||
#define ETHARP_STATS 0
|
||||
#define IP_STATS 0
|
||||
#define IPFRAG_STATS 0
|
||||
#define ICMP_STATS 0
|
||||
#define IGMP_STATS 0
|
||||
#define UDP_STATS 0
|
||||
#define TCP_STATS 0
|
||||
#define MEM_STATS 0
|
||||
#define MEMP_STATS 0
|
||||
#define SYS_STATS 0
|
||||
#define LWIP_STATS_DISPLAY 0
|
||||
#define IP6_STATS 0
|
||||
#define ICMP6_STATS 0
|
||||
#define IP6_FRAG_STATS 0
|
||||
#define MLD6_STATS 0
|
||||
#define ND6_STATS 0
|
||||
#define MIB2_STATS 0
|
||||
|
||||
#endif /* LWIP_STATS */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/*
|
||||
--------------------------------------
|
||||
---------- Checksum options ----------
|
||||
|
||||
Reference in New Issue
Block a user