- 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
|
// Set msg type
|
||||||
option_list_append(&options, DHCP_OPT_MSGTYPE, &dhcp_msg_type, 1);
|
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
|
// Set client ID
|
||||||
size = data_entry_create(buffer, TYPE_HW_ETH10, mac_addr_src, 6);
|
size = data_entry_create(buffer, TYPE_HW_ETH10, mac_addr_src, 6);
|
||||||
option_list_append(&options, DHCP_OPT_CLIENTID, buffer, size);
|
option_list_append(&options, DHCP_OPT_CLIENTID, buffer, size);
|
||||||
#endif
|
|
||||||
|
|
||||||
// Set client name
|
// Set client name
|
||||||
option_list_append(&options, DHCP_OPT_HOSTNAME, hostname, strlen(hostname));
|
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:
|
case DHCP_MSG_DHCPDISCOVER:
|
||||||
{
|
{
|
||||||
pDHCP->xid = (uint32_t)rand();
|
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;
|
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);
|
option_list_append(&options, DHCP_OPT_END, NULL, 0);
|
||||||
|
|
||||||
// Create packet
|
// 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)
|
void option_list_init(option_list_t *pObj, void *pBuffer, size_t size)
|
||||||
|
|||||||
@@ -53,10 +53,21 @@ typedef struct _soption_list_t
|
|||||||
|
|
||||||
#define DHCP_FLAGS_BROADCAST 0x8000
|
#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_HOSTNAME 12
|
||||||
|
#define DHCP_OPT_DOMAIN_NAME 15
|
||||||
#define DHCP_OPT_REQIP 50
|
#define DHCP_OPT_REQIP 50
|
||||||
#define DHCP_OPT_MSGTYPE 53
|
#define DHCP_OPT_MSGTYPE 53
|
||||||
#define DHCP_OPT_SERVERID 54
|
#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_CLIENTID 61
|
||||||
#define DHCP_OPT_END 255
|
#define DHCP_OPT_END 255
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,30 @@
|
|||||||
|
|
||||||
#include <libsys/libsys.h>
|
#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)
|
void EMAC_TX_commit(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <libsys/libsys.h>
|
#include <libsys/libsys.h>
|
||||||
|
|
||||||
|
void EMAC_MACADDR_set(uint8_t const *macAddr);
|
||||||
void EMAC_TX_commit(void);
|
void EMAC_TX_commit(void);
|
||||||
void EMAC_TX_alloc(uint32_t size);
|
void EMAC_TX_alloc(uint32_t size);
|
||||||
uint32_t EMAC_TX_is_avail(void);
|
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->ver_ihl = 0x45;
|
||||||
pIPv4_hdr->tos = 0x00;
|
pIPv4_hdr->tos = 0x00;
|
||||||
pIPv4_hdr->len = sizeof(IPV4) + len;
|
pIPv4_hdr->len = sizeof(IPV4) + len;
|
||||||
pIPv4_hdr->id = 0x1234;
|
pIPv4_hdr->id = 0x0000;
|
||||||
pIPv4_hdr->flag_foff = 0; //IPV4_FLAG_DF;
|
pIPv4_hdr->flag_foff = 0; //IPV4_FLAG_DF;
|
||||||
pIPv4_hdr->ttl = 0x10;
|
pIPv4_hdr->ttl = 0x40;
|
||||||
pIPv4_hdr->proto = proto;
|
pIPv4_hdr->proto = proto;
|
||||||
|
|
||||||
pIPv4_hdr->hdr_chksum = 0x0000;
|
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);
|
pseudo_hdr.len = len + sizeof(UDP);
|
||||||
|
|
||||||
// Calculate checksums
|
// 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
|
// Commit header
|
||||||
pData = (uint8_t*)Eth_pkt_append(pPacket, sizeof(UDP));
|
pData = (uint8_t*)Eth_pkt_append(pPacket, sizeof(UDP));
|
||||||
|
|||||||
Reference in New Issue
Block a user