[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"
|
#include "dhcp.h"
|
||||||
|
|
||||||
#define WITH_CLIENT_ID 1
|
#define WITH_CLIENT_ID 1
|
||||||
const char hostname[] = "ML-402";
|
const char hostname[] = "ml402";
|
||||||
|
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// Testing
|
// 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->hlen = 6;
|
||||||
pDHCP->hops = 0;
|
pDHCP->hops = 0;
|
||||||
pDHCP->secs = 0;
|
pDHCP->secs = 0;
|
||||||
pDHCP->flags = 0;
|
pDHCP->flags = DHCP_FLAGS_BROADCAST;
|
||||||
memcpy(pDHCP->chaddr, mac_addr_src, pDHCP->hlen);
|
memcpy(pDHCP->chaddr, mac_addr_src, pDHCP->hlen);
|
||||||
|
|
||||||
switch(dhcp_msg_type)
|
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;
|
option_size += size;
|
||||||
|
|
||||||
size = 1;
|
size = 1;
|
||||||
pDHCP->options[option_size] = HWTYPE_ETHERNET;
|
pDHCP->options[option_size] = TYPE_HW_ETH10;
|
||||||
option_size += size;
|
option_size += size;
|
||||||
|
|
||||||
size = 6;
|
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;
|
option_size += size;
|
||||||
|
|
||||||
size = 1;
|
size = 1;
|
||||||
pDHCP->options[option_size] = HWTYPE_ETHERNET;
|
pDHCP->options[option_size] = TYPE_HW_ETH10;
|
||||||
option_size += size;
|
option_size += size;
|
||||||
|
|
||||||
size = 6;
|
size = 6;
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ typedef struct _sdhcp_opt_hdr_t
|
|||||||
|
|
||||||
} __attribute__ ((__packed__)) dhcp_opt_hdr_t;
|
} __attribute__ ((__packed__)) dhcp_opt_hdr_t;
|
||||||
|
|
||||||
|
#define DHCP_FLAGS_BROADCAST 0x8000
|
||||||
|
|
||||||
#define DHCP_OPT_HOSTNAME 12
|
#define DHCP_OPT_HOSTNAME 12
|
||||||
#define DHCP_OPT_REQIP 50
|
#define DHCP_OPT_REQIP 50
|
||||||
#define DHCP_OPT_MSGTYPE 53
|
#define DHCP_OPT_MSGTYPE 53
|
||||||
@@ -56,27 +58,6 @@ typedef struct _sdhcp_opt_hdr_t
|
|||||||
#define DHCP_MSG_DHCPNAK 6
|
#define DHCP_MSG_DHCPNAK 6
|
||||||
#define DHCP_MSG_DHCPRELEASE 7
|
#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);
|
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);
|
interrupt_enable(6);
|
||||||
|
|
||||||
*pEmac_rx_ctrl |= EMAC_RX_CTRL_INTEN;
|
*pEmac_rx_ctrl |= EMAC_RX_CTRL_INTEN;
|
||||||
|
|
||||||
|
uint32_t dhcp_state = 1;
|
||||||
|
sleep(200);
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -326,79 +329,77 @@ int main()
|
|||||||
printf("\n");
|
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)
|
if (!res)
|
||||||
continue;
|
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();
|
start = clock();
|
||||||
Eth_pkt_create(&packet, TYPE_PROTO_IP, eth_myself, eth_bcst);
|
Eth_pkt_create(&packet, TYPE_PROTO_IP, eth_myself, eth_bcst);
|
||||||
UDP_create(&packet, myIP, 10001, arpIpDst, 10002, data, sizeof(data));
|
UDP_create(&packet, myIP, 10001, arpIpDst, 10002, data, sizeof(data));
|
||||||
|
|||||||
Reference in New Issue
Block a user