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;
|