|
Message
From: cvs at opencores.org<cvs@o...>
Date: Mon Jan 28 04:04:41 CET 2008
Subject: [cvs-checkins] MODIFIED: mlite ...
Date: 00/08/01 28:04:04 Modified: mlite/kernel tcpip.c Log: Permit IPInit() to set macAddress and name; packet retry timeout in ticks Revision Changes Path 1.14 mlite/kernel/tcpip.c http://www.opencores.org/cvsweb.shtml/mlite/kernel/tcpip.c.diff?r1=1.13&r2=1.14 (In the diff below, changes in quantity of whitespace are not shown.) Index: tcpip.c =================================================================== RCS file: /cvsroot/rhoads/mlite/kernel/tcpip.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -b -r1.13 -r1.14 --- tcpip.c 22 Sep 2007 05:30:14 -0000 1.13 +++ tcpip.c 28 Jan 2008 03:04:40 -0000 1.14 @@ -186,7 +186,7 @@ static uint32 ipAddressDns; //changed by DHCP static OS_Mutex_t *IPMutex; -static int FrameFreeCount=FRAME_COUNT; +static int FrameFreeCount; static IPFrame *FrameFreeHead; static IPFrame *FrameSendHead; static IPFrame *FrameSendTail; @@ -211,7 +211,7 @@ 0x01, 0x01, 0x06, 0x00, 0x69, 0x26, 0xb5, 0x52 //dhcp }; -static const unsigned char dhcpOptions[] = { +static unsigned char dhcpOptions[] = { 0x63, 0x82, 0x53, 0x63, //cookie 0x35, 0x01, 0x01, //DHCP Discover 0x3d, 0x07, 0x01, 0x00, 0x10, 0xdd, 0xce, 0x15, 0xd4, //Client identifier @@ -234,10 +234,12 @@ state = OS_CriticalBegin(); if(FrameFreeCount > freeCount) { - --FrameFreeCount; frame = FrameFreeHead; if(FrameFreeHead) + { FrameFreeHead = FrameFreeHead->next; + --FrameFreeCount; + } } OS_CriticalEnd(state); if(frame) @@ -375,7 +377,7 @@ else { //Put on resend list until TCP ACK'ed - frame->timeout = RETRANSMIT_TIME; + frame->timeout = RETRANSMIT_TIME * frame->retryCnt; FrameInsert(&FrameResendHead, &FrameResendTail, frame); } } @@ -551,7 +553,7 @@ memcpy(packetOut+DHCP_MAGIC_COOKIE+10, ethernetAddressPlasma, 6); IPSendPacket(NULL, frame, 400); request = DHCP_DISCOVER; - DhcpRetrySeconds = RETRANSMIT_TIME; + DhcpRetrySeconds = 2; } else if(state == 2 && memcmp(packet+DHCP_CLIENT_ETHERNET, ethernetAddressPlasma, 6) == 0) { @@ -693,7 +695,7 @@ return 0; memcpy(socketNew, socket, sizeof(IPSocket)); socketNew->state = IP_TCP; - socketNew->timeout = RETRANSMIT_TIME * 3; + socketNew->timeout = SOCKET_TIMEOUT; socketNew->ack = seq; socketNew->seq = socketNew->ack + 0x12345678; socketNew->seqReceived = socketNew->seq; @@ -1100,11 +1102,15 @@ //Set FrameSendFunction only if single threaded -void IPInit(IPFuncPtr frameSendFunction) +void IPInit(IPFuncPtr frameSendFunction, uint8 macAddress[6], char name[6]) { int i; IPFrame *frame; + if(macAddress) + memcpy(ethernetAddressPlasma, macAddress, 6); + if(name) + memcpy(dhcpOptions+18, name, 6); FrameSendFunc = frameSendFunction; IPMutex = OS_MutexCreate("IPSem"); IPMQueue = OS_MQueueCreate("IPMQ", FRAME_COUNT*2, 32); @@ -1116,6 +1122,7 @@ frame->prev = NULL; FrameFreeHead = frame; } + FrameFreeCount = FRAME_COUNT;
UartPacketConfig(MyPacketGet, PACKET_SIZE, IPMQueue);
if(frameSendFunction == NULL)
IPThread = OS_ThreadCreate("TCP/IP", IPMainThread, NULL, 240, 6000);
@@ -1476,10 +1483,15 @@
{
IPFrame *frame, *frame2;
IPSocket *socket, *socket2;
+ unsigned long ticks;
+ static unsigned long ticksPrev=0, ticksPrev2=0;
+ ticks = OS_ThreadTime();
+ if(ticks - ticksPrev >= 95)
+ {
if(IPVerbose && (Seconds % 60) == 0)
{
- if(FrameFreeCount == FRAME_COUNT)
+ if(FrameFreeCount >= FRAME_COUNT-1)
printf("T");
else
printf("T(%d)", FrameFreeCount);
@@ -1487,8 +1499,7 @@
++Seconds;
if(--DhcpRetrySeconds <= 0)
IPDhcp(NULL, 400, 1); //DHCP request
- //if(Seconds == 10)
- // IPResolve("plasmacpu.no-ip.org", ShowIP);
+ }
OS_MutexPend(IPMutex);
@@ -1497,7 +1508,8 @@
{
frame2 = frame;
frame = frame->next;
- if(--frame2->timeout == 0)
+ frame2->timeout -= ticks - ticksPrev2;
+ if(--frame2->timeout <= 0)
{
if(IPVerbose)
printf("r");
@@ -1506,6 +1518,8 @@
}
}
+ if(ticks - ticksPrev >= 95)
+ {
//Close timed out sockets
for(socket = SocketHead; socket; )
{
@@ -1525,7 +1539,10 @@
IPClose2(socket2);
}
}
+ ticksPrev = ticks;
+ }
OS_MutexPost(IPMutex);
+ ticksPrev2 = ticks;
}
|
 |