- EMAC_MACADDR_set
- UDB fixed chksum calc. - DHCP : added more requests git-svn-id: http://moon:8086/svn/mips@222 a8ebac50-d88d-4704-bea3-6648445a41b3
This commit is contained in:
@@ -43,11 +43,13 @@ void DHCP_request_send(packet_t *pPacket, uint8_t dhcp_msg_type, uint8_t *mac_ad
|
||||
// Set msg type
|
||||
option_list_append(&options, DHCP_OPT_MSGTYPE, &dhcp_msg_type, 1);
|
||||
|
||||
#ifdef WITH_CLIENT_ID
|
||||
// Set vendor ID
|
||||
const char vendor[] = "AVM multid FRITZ!Box 7362 SL (UI)";
|
||||
option_list_append(&options, DHCP_OPT_VENDORID, vendor, strlen(vendor));
|
||||
|
||||
// Set client ID
|
||||
size = data_entry_create(buffer, TYPE_HW_ETH10, mac_addr_src, 6);
|
||||
option_list_append(&options, DHCP_OPT_CLIENTID, buffer, size);
|
||||
#endif
|
||||
|
||||
// Set client name
|
||||
option_list_append(&options, DHCP_OPT_HOSTNAME, hostname, strlen(hostname));
|
||||
@@ -57,6 +59,17 @@ void DHCP_request_send(packet_t *pPacket, uint8_t dhcp_msg_type, uint8_t *mac_ad
|
||||
case DHCP_MSG_DHCPDISCOVER:
|
||||
{
|
||||
pDHCP->xid = (uint32_t)rand();
|
||||
|
||||
// Request subnet mask
|
||||
size = 0;
|
||||
buffer[size++] = DHCP_OPT_SUBNETMASK;
|
||||
buffer[size++] = DHCP_OPT_ROUTER;
|
||||
buffer[size++] = DHCP_OPT_DOMAIN_NS;
|
||||
buffer[size++] = 121;
|
||||
buffer[size++] = 249;
|
||||
buffer[size++] = 42;
|
||||
buffer[size++] = 158;
|
||||
option_list_append(&options, DHCP_OPT_PARAM_REQ_LIST, buffer, size);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -76,7 +89,7 @@ void DHCP_request_send(packet_t *pPacket, uint8_t dhcp_msg_type, uint8_t *mac_ad
|
||||
option_list_append(&options, DHCP_OPT_END, NULL, 0);
|
||||
|
||||
// Create packet
|
||||
UDP_create(pPacket, inet_addr_src, 68, inet_addr_dst, 67, &dhcp, sizeof(DHCP)- sizeof(dhcp_option_t) + options.size);
|
||||
UDP_create(pPacket, inet_addr_src, 68, inet_addr_dst, 67, &dhcp, sizeof(DHCP));
|
||||
}
|
||||
|
||||
void option_list_init(option_list_t *pObj, void *pBuffer, size_t size)
|
||||
@@ -122,4 +135,4 @@ size_t data_entry_create(void *pDst, uint8_t type, void const *pData, size_t siz
|
||||
pDst8 += size;
|
||||
|
||||
return (size_t)(pDst8 - (uint8_t*)pDst);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,10 +53,21 @@ typedef struct _soption_list_t
|
||||
|
||||
#define DHCP_FLAGS_BROADCAST 0x8000
|
||||
|
||||
#define DHCP_OPT_SUBNETMASK 1
|
||||
#define DHCP_OPT_TIME_OFFSET 2
|
||||
#define DHCP_OPT_ROUTER 3
|
||||
#define DHCP_OPT_TIMESERVER 4
|
||||
|
||||
#define DHCP_OPT_NAMESERVER 5
|
||||
#define DHCP_OPT_DOMAIN_NS 6
|
||||
#define DHCP_OPT_HOSTNAME 12
|
||||
#define DHCP_OPT_DOMAIN_NAME 15
|
||||
#define DHCP_OPT_REQIP 50
|
||||
#define DHCP_OPT_MSGTYPE 53
|
||||
#define DHCP_OPT_SERVERID 54
|
||||
#define DHCP_OPT_PARAM_REQ_LIST 55
|
||||
|
||||
#define DHCP_OPT_VENDORID 60
|
||||
#define DHCP_OPT_CLIENTID 61
|
||||
#define DHCP_OPT_END 255
|
||||
|
||||
|
||||
@@ -8,6 +8,30 @@
|
||||
|
||||
#include <libsys/libsys.h>
|
||||
|
||||
void EMAC_MACADDR_set(uint8_t const *macAddr)
|
||||
{
|
||||
volatile uint32_t *pEmac_maddr = (uint32_t*)SYS_EMAC_MADDR;
|
||||
uint32_t dword = 0;
|
||||
|
||||
int idx = 0;
|
||||
while(idx < 4)
|
||||
{
|
||||
dword <<= 8;
|
||||
dword |= (uint32_t)macAddr[idx++];
|
||||
}
|
||||
*(pEmac_maddr+0) = dword;
|
||||
|
||||
dword = 0;
|
||||
while(idx < 6)
|
||||
{
|
||||
dword <<= 8;
|
||||
dword |= (uint32_t)macAddr[idx++];
|
||||
}
|
||||
dword <<= 16;
|
||||
*(pEmac_maddr+1) = dword;
|
||||
|
||||
}
|
||||
|
||||
void EMAC_TX_commit(void)
|
||||
{
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <libsys/libsys.h>
|
||||
|
||||
void EMAC_MACADDR_set(uint8_t const *macAddr);
|
||||
void EMAC_TX_commit(void);
|
||||
void EMAC_TX_alloc(uint32_t size);
|
||||
uint32_t EMAC_TX_is_avail(void);
|
||||
|
||||
@@ -27,9 +27,9 @@ uint8_t *IPV4_create(packet_t *pPacket, uint16_t proto, uint16_t len, uint8_t *i
|
||||
pIPv4_hdr->ver_ihl = 0x45;
|
||||
pIPv4_hdr->tos = 0x00;
|
||||
pIPv4_hdr->len = sizeof(IPV4) + len;
|
||||
pIPv4_hdr->id = 0x1234;
|
||||
pIPv4_hdr->id = 0x0000;
|
||||
pIPv4_hdr->flag_foff = 0; //IPV4_FLAG_DF;
|
||||
pIPv4_hdr->ttl = 0x10;
|
||||
pIPv4_hdr->ttl = 0x40;
|
||||
pIPv4_hdr->proto = proto;
|
||||
|
||||
pIPv4_hdr->hdr_chksum = 0x0000;
|
||||
|
||||
@@ -33,7 +33,10 @@ uint8_t *UDP_create(packet_t *pPacket, uint8_t *inet_addr_src, uint16_t port_src
|
||||
pseudo_hdr.len = len + sizeof(UDP);
|
||||
|
||||
// Calculate checksums
|
||||
pUDP->chksum = ~IPv4ChkSum((uint16_t*)&pseudo_hdr, pUDP->chksum, sizeof(UDPPP));
|
||||
uint16_t chksum = 0;
|
||||
chksum = IPv4ChkSum((uint16_t*)&pseudo_hdr, chksum, sizeof(UDPPP));
|
||||
chksum = IPv4ChkSum((uint16_t*)pUDP, chksum, sizeof(UDP));
|
||||
pUDP->chksum = ~IPv4ChkSum((uint16_t*)pUDP_payload, chksum, len);
|
||||
|
||||
// Commit header
|
||||
pData = (uint8_t*)Eth_pkt_append(pPacket, sizeof(UDP));
|
||||
@@ -57,4 +60,4 @@ void UDP_append(packet_t *pPacket, void const *pData, uint16_t len)
|
||||
memcpy(pPacket->pData, pData, len);
|
||||
Eth_pkt_append(pPacket, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user