std1.0.0-beta-7 SafeC docs

Source net/udp.h

View in the repository

// SafeC Standard Library — UDP Layer
// Freestanding-safe.
#pragma once
#include <std/net/ipv4.h>

#define UDP_HDR_LEN  8

namespace std {

struct UdpHdr {
    unsigned short src_port;   // host byte order
    unsigned short dst_port;   // host byte order
    unsigned short length;     // total UDP datagram length (header + payload)
    unsigned short checksum;
};

// Parse UDP header from pkt at byte offset `offset`.
// Returns 0 on success, -1 on truncation.
int udp_parse(&PacketBuf pkt, unsigned long offset,
              &UdpHdr hdr_out);

// Write UDP header into pkt at `offset`. payload_len = bytes of data after header.
// Checksum is left 0 (optional in IPv4).
// Returns byte offset of first payload byte.
unsigned long udp_build(&PacketBuf pkt, unsigned long offset,
                        unsigned short src_port, unsigned short dst_port,
                        unsigned short payload_len);

// Full frame: Ethernet + IPv4 + UDP header, then caller fills payload.
// Returns offset where payload should be written.
// pkt is reset first.
unsigned long udp_frame(&PacketBuf pkt,
                        const unsigned char eth_src[NET_MAC_LEN],
                        const unsigned char eth_dst[NET_MAC_LEN],
                        unsigned int ip_src, unsigned int ip_dst,
                        unsigned short src_port, unsigned short dst_port,
                        unsigned short payload_len);

} // namespace std