OpenCores
URL https://opencores.org/ocsvn/mlite/mlite/trunk

Subversion Repositories mlite

[/] [mlite/] [trunk/] [kernel/] [tcpip.c] - Diff between revs 174 and 206

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 174 Rev 206
Line 170... Line 170...
#define PING_DATA             44
#define PING_DATA             44
 
 
static void IPClose2(IPSocket *Socket);
static void IPClose2(IPSocket *Socket);
 
 
static uint8 ethernetAddressNull[] =    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
static uint8 ethernetAddressNull[] =    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
static uint8 ethernetAddressPlasma[] =  {0x00, 0x10, 0xdd, 0xce, 0x15, 0xd4};
 
static uint8 ethernetAddressGateway[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
static uint8 ethernetAddressGateway[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
 
#ifndef WIN32
 
static uint8 ethernetAddressPlasma[] =  {0x00, 0x10, 0xdd, 0xce, 0x15, 0xd4};
 
#else
 
static uint8 ethernetAddressPlasma[] =  {0x00, 0x10, 0xdd, 0xce, 0x15, 0xd5};
 
#endif
 
 
static uint8 ipAddressPlasma[] =  {0x9d, 0xfe, 0x28, 10};   //changed by DHCP
static uint8 ipAddressPlasma[] =  {0x9d, 0xfe, 0x28, 10};   //changed by DHCP
static uint8 ipAddressGateway[] = {0xff, 0xff, 0xff, 0xff}; //changed by DHCP
static uint8 ipAddressGateway[] = {0xff, 0xff, 0xff, 0xff}; //changed by DHCP
static uint32 ipAddressDns;                                 //changed by DHCP
static uint32 ipAddressDns;                                 //changed by DHCP
 
 
Line 207... Line 211...
 
 
static const unsigned char dhcpOptions[] = {
static const unsigned char dhcpOptions[] = {
   0x63, 0x82, 0x53, 0x63,      //cookie
   0x63, 0x82, 0x53, 0x63,      //cookie
   0x35, 0x01, 0x01,            //DHCP Discover
   0x35, 0x01, 0x01,            //DHCP Discover
   0x3d, 0x07, 0x01, 0x00, 0x10, 0xdd, 0xce, 0x15, 0xd4, //Client identifier
   0x3d, 0x07, 0x01, 0x00, 0x10, 0xdd, 0xce, 0x15, 0xd4, //Client identifier
 
#ifndef WIN32
   0x0c, 0x06, 'p', 'l', 'a', 's', 'm', 'a',             //Host name
   0x0c, 0x06, 'p', 'l', 'a', 's', 'm', 'a',             //Host name
 
#else
 
   0x0c, 0x06, 'p', 'l', 'a', 's', 'm', 'b',             //Host name
 
#endif
   0x37, 0x03, DHCP_PARAM_SUBNET, DHCP_PARAM_ROUTER, DHCP_PARAM_DNS, //Parameters
   0x37, 0x03, DHCP_PARAM_SUBNET, DHCP_PARAM_ROUTER, DHCP_PARAM_DNS, //Parameters
   DHCP_END_OPTION
   DHCP_END_OPTION
};
};
 
 
 
 
Line 557... Line 565...
         memset(packetOut, 0, 512);
         memset(packetOut, 0, 512);
         memcpy(packetOut, dhcpDiscover, sizeof(dhcpDiscover));
         memcpy(packetOut, dhcpDiscover, sizeof(dhcpDiscover));
         memcpy(packetOut+ETHERNET_SOURCE, ethernetAddressPlasma, 6);
         memcpy(packetOut+ETHERNET_SOURCE, ethernetAddressPlasma, 6);
         memcpy(packetOut+DHCP_CLIENT_ETHERNET, ethernetAddressPlasma, 6);
         memcpy(packetOut+DHCP_CLIENT_ETHERNET, ethernetAddressPlasma, 6);
         memcpy(packetOut+DHCP_MAGIC_COOKIE, dhcpOptions, sizeof(dhcpOptions));
         memcpy(packetOut+DHCP_MAGIC_COOKIE, dhcpOptions, sizeof(dhcpOptions));
         //memcpy(packetOut+DHCP_MAGIC_COOKIE+10, ethernetAddressPlasma, 6);
         memcpy(packetOut+DHCP_MAGIC_COOKIE+10, ethernetAddressPlasma, 6);
         request = DHCP_REQUEST;
         request = DHCP_REQUEST;
         packetOut[DHCP_MAGIC_COOKIE+6] = DHCP_REQUEST;
         packetOut[DHCP_MAGIC_COOKIE+6] = DHCP_REQUEST;
         ptr = packetOut+DHCP_MAGIC_COOKIE+sizeof(dhcpOptions)-1;
         ptr = packetOut+DHCP_MAGIC_COOKIE+sizeof(dhcpOptions)-1;
         ptr[0] = DHCP_REQUEST_IP;
         ptr[0] = DHCP_REQUEST_IP;
         ptr[1] = 4;
         ptr[1] = 4;
Line 844... Line 852...
         {
         {
            frameOut->packet[TCP_FLAGS] = TCP_FLAGS_ACK;
            frameOut->packet[TCP_FLAGS] = TCP_FLAGS_ACK;
            TCPSendPacket(socket, frameOut, TCP_DATA);
            TCPSendPacket(socket, frameOut, TCP_DATA);
         }
         }
      }
      }
 
      if(socket->funcPtr)
 
         socket->funcPtr(socket);
   }
   }
   return 0;
   return 0;
}
}
 
 
 
 
Line 1177... Line 1187...
   OS_MutexPost(IPMutex);
   OS_MutexPost(IPMutex);
 
 
   if(Mode == IP_MODE_TCP && IPAddress)
   if(Mode == IP_MODE_TCP && IPAddress)
   {
   {
      //Send TCP SYN
      //Send TCP SYN
 
      socket->seq = 0x01234567;
      frame = IPFrameGet(0);
      frame = IPFrameGet(0);
      if(frame)
      if(frame)
      {
      {
         frame->packet[TCP_FLAGS] = TCP_FLAGS_SYN;
         frame->packet[TCP_FLAGS] = TCP_FLAGS_SYN;
         frame->packet[TCP_DATA] = 2;    //maximum segment size = 536
         frame->packet[TCP_DATA] = 2;    //maximum segment size = 536
Line 1212... Line 1223...
 
 
uint32 IPWrite(IPSocket *Socket, const uint8 *Buf, uint32 Length)
uint32 IPWrite(IPSocket *Socket, const uint8 *Buf, uint32 Length)
{
{
   IPFrame *frameOut;
   IPFrame *frameOut;
   uint8 *packetOut;
   uint8 *packetOut;
   uint32 bytes, count=0, tries;
   uint32 bytes, count=0, tries=0;
   int offset;
   int offset;
   OS_Thread_t *self;
   OS_Thread_t *self;
 
 
   //printf("IPWrite(0x%x, %d)", Socket, Length);
   //printf("IPWrite(0x%x, %d)", Socket, Length);
   self = OS_ThreadSelf();
   self = OS_ThreadSelf();
   while(Length)
   while(Length)
   {
   {
 
      //Rate limit output
 
      if(Socket->seq - Socket->seqReceived >= 5120)
 
      {
 
         if(self == IPThread || ++tries > 200)
 
            break;
 
         else
 
         {
 
            OS_ThreadSleep(1);
 
            continue;
 
         }
 
      }
      tries = 0;
      tries = 0;
      while(Socket->frameSend == NULL)
      while(Socket->frameSend == NULL)
      {
      {
         Socket->frameSend = IPFrameGet(FRAME_COUNT_SEND);
         Socket->frameSend = IPFrameGet(FRAME_COUNT_SEND);
         Socket->sendOffset = 0;
         Socket->sendOffset = 0;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.