summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-09-22 10:00:00 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-09-22 10:00:00 -0700
commit0271e3d3aca9631fe11309ab3b0432c18421202e (patch)
tree7265728a3cea04d314e1d0541812ca6d07bc73f9
parent00cb8dbda8d72176a0d6920cea1e4a535581a09b (diff)
downloadinfinitytier-0271e3d3aca9631fe11309ab3b0432c18421202e.tar.gz
infinitytier-0271e3d3aca9631fe11309ab3b0432c18421202e.zip
.
-rw-r--r--netcon/NetconEthernetTap.cpp46
1 files changed, 37 insertions, 9 deletions
diff --git a/netcon/NetconEthernetTap.cpp b/netcon/NetconEthernetTap.cpp
index 1de827f3..77a8a5db 100644
--- a/netcon/NetconEthernetTap.cpp
+++ b/netcon/NetconEthernetTap.cpp
@@ -326,18 +326,22 @@ void NetconEthernetTap::closeConnection(NetconConnection *conn)
------------------------ low-level Interface functions -------------------------
------------------------------------------------------------------------------*/
+#define ZT_LWIP_TCP_TIMER_INTERVAL (ARP_TMR_INTERVAL / 5000)
+#define ZT_LWIP_IP_TIMER_INTERVAL (IP_TMR_INTERVAL / 1000)
void NetconEthernetTap::threadMain()
throw()
{
- unsigned long tcp_time = ARP_TMR_INTERVAL / 5000;
- unsigned long etharp_time = IP_TMR_INTERVAL / 1000;
- unsigned long prev_tcp_time = 0;
- unsigned long prev_etharp_time = 0;
- unsigned long curr_time;
- unsigned long since_tcp;
- unsigned long since_etharp;
- struct timeval tv;
+ //unsigned long tcp_time = ARP_TMR_INTERVAL / 5000;
+ //unsigned long etharp_time = IP_TMR_INTERVAL / 1000;
+ //unsigned long prev_tcp_time = 0;
+ //unsigned long prev_etharp_time = 0;
+ //unsigned long curr_time;
+ //unsigned long since_tcp;
+ //unsigned long since_etharp;
+ //struct timeval tv;
+ uint64_t prev_tcp_time = 0;
+ uint64_t prev_etharp_time = 0;
fprintf(stderr, "- MEM_SIZE = %dM\n", MEM_SIZE / (1024*1024));
fprintf(stderr, "- TCP_SND_BUF = %dK\n", TCP_SND_BUF / 1024);
@@ -358,9 +362,32 @@ void NetconEthernetTap::threadMain()
fprintf(stderr, "- IP_TMR_INTERVAL = %d\n", IP_TMR_INTERVAL);
fprintf(stderr, "- DEFAULT_READ_BUFFER_SIZE = %d\n", DEFAULT_READ_BUFFER_SIZE);
-
// Main timer loop
while (_run) {
+ uint64_t now = OSUtils::now();
+
+ uint64_t since_tcp = now - prev_tcp_time;
+ uint64_t since_etharp = now - prev_etharp_time;
+
+ uint64_t tcp_remaining = ZT_LWIP_TCP_TIMER_INTERVAL;
+ uint64_t etharp_remaining = ZT_LWIP_IP_TIMER_INTERVAL;
+
+ if (since_tcp >= ZT_LWIP_TCP_TIMER_INTERVAL) {
+ prev_tcp_time = now;
+ lwipstack->tcp_tmr();
+ } else {
+ tcp_remaining = ZT_LWIP_TCP_TIMER_INTERVAL - since_tcp;
+ }
+ if (since_etharp >= ZT_LWIP_IP_TIMER_INTERVAL) {
+ prev_etharp_time = now;
+ lwipstack->etharp_tmr();
+ } else {
+ etharp_remaining = ZT_LWIP_IP_TIMER_INTERVAL - since_etharp;
+ }
+
+ _phy.poll((unsigned long)std::min(tcp_remaining,etharp_remaining));
+
+ /*
gettimeofday(&tv, NULL);
curr_time = (unsigned long)(tv.tv_sec) * 1000 + (unsigned long)(tv.tv_usec) / 1000;
since_tcp = curr_time - prev_tcp_time;
@@ -382,6 +409,7 @@ void NetconEthernetTap::threadMain()
lwipstack->etharp_tmr();
}
_phy.poll(50); // conversion from usec to millisec, TODO: double check
+ */
}
closeAllClients();
// TODO: cleanup -- destroy LWIP state, kill any clients, unload .so, etc.