Files
mips/src/common/network/udp.c
T
jens 5fe751ef97 - simplified DHCP
-added UdpAppend()


git-svn-id: http://moon:8086/svn/mips@219 a8ebac50-d88d-4704-bea3-6648445a41b3
2021-11-25 07:06:41 +00:00

60 lines
1.5 KiB
C

// -------------------------------------------------------------------------
// udp.c
//
// 29.12.2003, J. Ahrensfeld
//
// -------------------------------------------------------------------------
#include "ethernet.h"
#include "ipv4.h"
#include "udp.h"
#include "string.h"
// -------------------------------------------------------------------------
// Testing
uint8_t *UDP_create(packet_t *pPacket, uint8_t *inet_addr_src, uint16_t port_src, uint8_t *inet_addr_dst, uint16_t port_dst, void const *pUDP_payload, uint16_t len)
{
uint16_t sum;
UDP *pUDP;
UDPPP pseudo_hdr;
uint8_t *pData;
pUDP = (UDP*)IPV4_create(pPacket, IP_TYPE_UDP, sizeof(UDP)+len, inet_addr_src, inet_addr_dst);
// Fill UDP header
pUDP->src_port = port_src;
pUDP->dst_port = port_dst;
pUDP->len = len + sizeof(UDP);
pUDP->chksum = 0x0000;
// Fill pseudo header
memcpy(&pseudo_hdr.inet_addr_src, inet_addr_src, 4);
memcpy(&pseudo_hdr.inet_addr_dst, inet_addr_dst, 4);
pseudo_hdr.proto = IP_TYPE_UDP;
pseudo_hdr.len = len + sizeof(UDP);
// Calculate checksums
pUDP->chksum = ~IPv4ChkSum((uint16_t*)&pseudo_hdr, pUDP->chksum, sizeof(UDPPP));
// Commit header
pData = (uint8_t*)Eth_pkt_append(pPacket, sizeof(UDP));
// Commit data
if (pUDP_payload)
{
memcpy(pData, pUDP_payload, len);
return Eth_pkt_append(pPacket, len);
}
return pData;
}
void UDP_append(packet_t *pPacket, void const *pData, uint16_t len)
{
// Commit data
if (pData)
{
memcpy(pPacket->pData, pData, len);
Eth_pkt_append(pPacket, len);
}
}