[Network]
- added broadcast flag - removed hw types from dhcp [test_emac] - do dhcp discover on startup git-svn-id: http://moon:8086/svn/mips@214 a8ebac50-d88d-4704-bea3-6648445a41b3
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
#include "dhcp.h"
|
||||
|
||||
#define WITH_CLIENT_ID 1
|
||||
const char hostname[] = "ML-402";
|
||||
const char hostname[] = "ml402";
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Testing
|
||||
@@ -33,7 +33,7 @@ void DHCP_request_send(packet_t *pPacket, uint32_t dhcp_msg_type, uint8_t *mac_a
|
||||
pDHCP->hlen = 6;
|
||||
pDHCP->hops = 0;
|
||||
pDHCP->secs = 0;
|
||||
pDHCP->flags = 0;
|
||||
pDHCP->flags = DHCP_FLAGS_BROADCAST;
|
||||
memcpy(pDHCP->chaddr, mac_addr_src, pDHCP->hlen);
|
||||
|
||||
switch(dhcp_msg_type)
|
||||
@@ -69,7 +69,7 @@ void DHCP_request_send(packet_t *pPacket, uint32_t dhcp_msg_type, uint8_t *mac_a
|
||||
option_size += size;
|
||||
|
||||
size = 1;
|
||||
pDHCP->options[option_size] = HWTYPE_ETHERNET;
|
||||
pDHCP->options[option_size] = TYPE_HW_ETH10;
|
||||
option_size += size;
|
||||
|
||||
size = 6;
|
||||
@@ -124,7 +124,7 @@ void DHCP_request_send(packet_t *pPacket, uint32_t dhcp_msg_type, uint8_t *mac_a
|
||||
option_size += size;
|
||||
|
||||
size = 1;
|
||||
pDHCP->options[option_size] = HWTYPE_ETHERNET;
|
||||
pDHCP->options[option_size] = TYPE_HW_ETH10;
|
||||
option_size += size;
|
||||
|
||||
size = 6;
|
||||
|
||||
@@ -41,6 +41,8 @@ typedef struct _sdhcp_opt_hdr_t
|
||||
|
||||
} __attribute__ ((__packed__)) dhcp_opt_hdr_t;
|
||||
|
||||
#define DHCP_FLAGS_BROADCAST 0x8000
|
||||
|
||||
#define DHCP_OPT_HOSTNAME 12
|
||||
#define DHCP_OPT_REQIP 50
|
||||
#define DHCP_OPT_MSGTYPE 53
|
||||
@@ -56,27 +58,6 @@ typedef struct _sdhcp_opt_hdr_t
|
||||
#define DHCP_MSG_DHCPNAK 6
|
||||
#define DHCP_MSG_DHCPRELEASE 7
|
||||
|
||||
// Hardware types RFC 1340
|
||||
#define HWTYPE_ETHERNET 1
|
||||
/*
|
||||
1 Ethernet (10Mb) [JBP]
|
||||
2 Experimental Ethernet (3Mb) [JBP]
|
||||
3 Amateur Radio AX.25 [PXK]
|
||||
4 Proteon ProNET Token Ring [JBP]
|
||||
5 Chaos [GXP]
|
||||
6 IEEE 802 Networks [JBP]
|
||||
7 ARCNET [JBP]
|
||||
8 Hyperchannel [JBP]
|
||||
9 Lanstar [TU]
|
||||
10 Autonet Short Address [MXB1]
|
||||
11 LocalTalk [JKR1]
|
||||
12 LocalNet (IBM PCNet or SYTEK LocalNET) [JXM]
|
||||
13 Ultra link [RXD2]
|
||||
14 SMDS [GXC1]
|
||||
15 Frame Relay [AGM]
|
||||
16 Asynchronous Transmission Mode (ATM) [JXB2]
|
||||
*/
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
void DHCP_request_send(packet_t *pPacket, uint32_t dhcp_msg_type, uint8_t *mac_addr_src, uint8_t *inet_addr_src, uint8_t *inet_addr_dst, DHCP *pLast);
|
||||
|
||||
|
||||
+71
-70
@@ -303,7 +303,10 @@ int main()
|
||||
interrupt_enable(6);
|
||||
|
||||
*pEmac_rx_ctrl |= EMAC_RX_CTRL_INTEN;
|
||||
|
||||
|
||||
uint32_t dhcp_state = 1;
|
||||
sleep(200);
|
||||
|
||||
while(1)
|
||||
{
|
||||
|
||||
@@ -326,79 +329,77 @@ int main()
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
res = gpio_read(&gpio_btn_data);
|
||||
#ifdef WITH_DHCP_CLIENT
|
||||
sleep(1000);
|
||||
{
|
||||
ARP *pARP;
|
||||
IPV4 *pIPV4;
|
||||
UDP *pUDP;
|
||||
DHCP *pDHCP;
|
||||
if (dhcp_state == 1)
|
||||
{
|
||||
printf("---------------------------------------------------------------\n");
|
||||
printf("- Send DHCP Discover ------------------------------------------\n");
|
||||
printf("---------------------------------------------------------------\n");
|
||||
Eth_pkt_create(&packet, TYPE_PROTO_IP, eth_myself, eth_bcst);
|
||||
DHCP_request_send(&packet, DHCP_MSG_DHCPDISCOVER, eth_myself, ip_zero, ip_bcast, NULL);
|
||||
PrintBuffer8((uint8_t*)packet.pkt_buf, 16, packet.size);
|
||||
Eth_pkt_send(&packet);
|
||||
dhcp_state = 0;
|
||||
}
|
||||
|
||||
if (dhcp_state == 2)
|
||||
{
|
||||
printf("---------------------------------------------------------------\n");
|
||||
printf("- Send DHCP Request -------------------------------------------\n");
|
||||
printf("---------------------------------------------------------------\n");
|
||||
Eth_pkt_create(&packet, TYPE_PROTO_IP, eth_myself, eth_bcst);
|
||||
DHCP_request_send(&packet, DHCP_MSG_DHCPREQUEST, eth_myself, ip_zero, ip_bcast, pDHCP);
|
||||
Eth_pkt_send(&packet);
|
||||
}
|
||||
|
||||
if (dhcp_state == 3)
|
||||
{
|
||||
printf("---------------------------------------------------------------\n");
|
||||
printf("- Send ARP Request --------------------------------------------\n");
|
||||
printf("---------------------------------------------------------------\n");
|
||||
Eth_pkt_create(&packet, TYPE_PROTO_ARP, eth_myself, eth_bcst);
|
||||
ArpRequest(&packet, eth_myself, myIP, eth_zero, arpIpDst);
|
||||
Eth_pkt_send(&packet);
|
||||
|
||||
sleep(500);
|
||||
Eth_pkt_recv(buffer);
|
||||
pARP = (ARP*)&buffer[sizeof(eth_hdr_t)];
|
||||
}
|
||||
|
||||
if (dhcp_state == 4)
|
||||
{
|
||||
printf("---------------------------------------------------------------\n");
|
||||
printf("- Send ICMP ---------------------------------------------------\n");
|
||||
printf("---------------------------------------------------------------\n");
|
||||
Eth_pkt_create(&packet, TYPE_PROTO_IP, eth_myself, pARP->eth_addr_src);
|
||||
ICMPSendRequest(&packet, myIP, arpIpDst, data, sizeof(data));
|
||||
Eth_pkt_send(&packet);
|
||||
}
|
||||
|
||||
if (dhcp_state == 5)
|
||||
{
|
||||
printf("---------------------------------------------------------------\n");
|
||||
printf("- Send ARP UDP ------------------------------------------------\n");
|
||||
printf("---------------------------------------------------------------\n");
|
||||
Eth_pkt_create(&packet, TYPE_PROTO_IP, eth_myself, pARP->eth_addr_src);
|
||||
UDP_create(&packet, myIP, 10001, arpIpDst, 10002, data, sizeof(data));
|
||||
Eth_pkt_send(&packet);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
continue;
|
||||
|
||||
res = gpio_read(&gpio_btn_data);
|
||||
if (!res)
|
||||
continue;
|
||||
|
||||
#ifdef WITH_DHCP_CLIENT
|
||||
ARP *pARP;
|
||||
IPV4 *pIPV4;
|
||||
UDP *pUDP;
|
||||
DHCP *pDHCP;
|
||||
|
||||
printf("---------------------------------------------------------------\n");
|
||||
printf("- Send DHCP Discover ------------------------------------------\n");
|
||||
printf("---------------------------------------------------------------\n");
|
||||
Eth_pkt_create(&packet, TYPE_PROTO_IP, eth_myself, eth_bcst);
|
||||
DHCP_request_send(&packet, DHCP_MSG_DHCPDISCOVER, eth_myself, ip_zero, ip_bcast, NULL);
|
||||
PrintBuffer8((uint8_t*)packet.pkt_buf, 16, packet.size);
|
||||
Eth_pkt_send(&packet);
|
||||
|
||||
sleep(1000);
|
||||
continue;
|
||||
|
||||
while(fifo_read(&rx_descr_fifo, (uint8_t*)&rx_descr, sizeof(rx_descr_t), 0, FIFO_NONBLOCK))
|
||||
{
|
||||
PrintBuffer8((uint8_t*)rx_descr.pBuf, 16, rx_descr.size);
|
||||
pIPV4 = (IPV4*)&buffer[sizeof(eth_hdr_t)];
|
||||
pUDP = (UDP*)&buffer[sizeof(eth_hdr_t) + sizeof(IPV4)];
|
||||
pDHCP = (DHCP*)&buffer[sizeof(eth_hdr_t) + sizeof(IPV4) + sizeof(UDP)];
|
||||
if (pUDP->dst_port == 68)
|
||||
{
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
printf("---------------------------------------------------------------\n");
|
||||
printf("- Send DHCP Request -------------------------------------------\n");
|
||||
printf("---------------------------------------------------------------\n");
|
||||
Eth_pkt_create(&packet, TYPE_PROTO_IP, eth_myself, eth_bcst);
|
||||
DHCP_request_send(&packet, DHCP_MSG_DHCPREQUEST, eth_myself, ip_zero, ip_bcast, pDHCP);
|
||||
Eth_pkt_send(&packet);
|
||||
|
||||
sleep(500);
|
||||
continue;
|
||||
|
||||
printf("---------------------------------------------------------------\n");
|
||||
printf("- Send ARP Request --------------------------------------------\n");
|
||||
printf("---------------------------------------------------------------\n");
|
||||
Eth_pkt_create(&packet, TYPE_PROTO_ARP, eth_myself, eth_bcst);
|
||||
ArpRequest(&packet, eth_myself, myIP, eth_zero, arpIpDst);
|
||||
Eth_pkt_send(&packet);
|
||||
|
||||
sleep(500);
|
||||
Eth_pkt_recv(buffer);
|
||||
pARP = (ARP*)&buffer[sizeof(eth_hdr_t)];
|
||||
|
||||
printf("---------------------------------------------------------------\n");
|
||||
printf("- Send ICMP ---------------------------------------------------\n");
|
||||
printf("---------------------------------------------------------------\n");
|
||||
Eth_pkt_create(&packet, TYPE_PROTO_IP, eth_myself, pARP->eth_addr_src);
|
||||
ICMPSendRequest(&packet, myIP, arpIpDst, data, sizeof(data));
|
||||
Eth_pkt_send(&packet);
|
||||
|
||||
printf("---------------------------------------------------------------\n");
|
||||
printf("- Send ARP UDP ------------------------------------------------\n");
|
||||
printf("---------------------------------------------------------------\n");
|
||||
Eth_pkt_create(&packet, TYPE_PROTO_IP, eth_myself, pARP->eth_addr_src);
|
||||
UDP_create(&packet, myIP, 10001, arpIpDst, 10002, data, sizeof(data));
|
||||
Eth_pkt_send(&packet);
|
||||
|
||||
continue;
|
||||
#endif
|
||||
|
||||
start = clock();
|
||||
Eth_pkt_create(&packet, TYPE_PROTO_IP, eth_myself, eth_bcst);
|
||||
UDP_create(&packet, myIP, 10001, arpIpDst, 10002, data, sizeof(data));
|
||||
|
||||
Reference in New Issue
Block a user