3 #include "net/endianess.h"
6 #include "debug/hexview.h"
9 uint16_t udp_calculate_checksum(udp_packet_t * packet) {
14 void udp_send_packet(
netcard_entry_t* card, uint8_t * dst_ip, uint16_t src_port, uint16_t dst_port,
void * data,
int len) {
15 size_t length =
sizeof(udp_packet_t) + len;
17 udp_packet_t* packet = kcalloc(1, length);
19 packet->src_port = htons(src_port);
20 packet->dst_port = htons(dst_port);
21 packet->length = htons(length);
22 packet->checksum = udp_calculate_checksum(packet);
24 memcpy((
char*)packet +
sizeof(udp_packet_t), data, len);
26 qemu_log(
"UDP Packet sent");
27 ipv4_send_packet(card, dst_ip, packet, length, IP_PROTOCOL_UDP);
31 uint16_t src_port = ntohs(packet->src_port);
32 uint16_t dst_port = ntohs(packet->dst_port);
33 uint16_t length = ntohs(packet->length);
35 void* data_ptr = (
char*)packet +
sizeof(udp_packet_t);
37 qemu_log(
"UDP: Source port: %d; Destination port: %d; Length: %d", src_port, dst_port, length);
42 dhcp_handle_packet(card, data_ptr);
void * memcpy(void *restrict destination, const void *restrict source, size_t n)
Копирование непересекающихся массивов используя SSE.