- 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:
2021-11-25 20:46:33 +00:00
parent d668370db8
commit 1f4776d42c
6 changed files with 60 additions and 8 deletions
+17 -4
View File
@@ -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);
}
}
+11
View File
@@ -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
+24
View File
@@ -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)
{
+1
View File
@@ -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);
+2 -2
View File
@@ -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;
+5 -2
View File
@@ -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);
}
}
}