- 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
+16 -3
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 // 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)
+11
View File
@@ -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
+24
View File
@@ -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)
{ {
+1
View File
@@ -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);
+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->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;
+4 -1
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); 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));