- refactored network
git-svn-id: http://moon:8086/svn/mips@204 a8ebac50-d88d-4704-bea3-6648445a41b3
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
// -------------------------------------------------------------------------
|
||||
// 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, uint8_t *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;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user