( UDP header and wrapup JCB 13:22 08/24/10) : udp-header ( dst-port src-port dst-ip src-ip *ethaddr -- ) h# 11 ip-header mac-pkt-, \ src port mac-pkt-, \ dst port d# 2 mac-pkt-,0 \ length and checksum ; variable packetbase : packet packetbase @ + ; : udp-checksum ( addr -- u ) \ compute UDP checksum on packet packetbase ! ETH.IP.UDP.LENGTH packet @ d# 1 and if ETH.IP.UDP ETH.IP.UDP.LENGTH packet @ + packet dup @ h# ff00 and swap ! then ETH.IP.UDP packet ETH.IP.UDP.LENGTH packet @ 1+ 2/ mac-checksum invert d# 4 ETH.IP.SRCIP packet mac@n +1c +1c +1c +1c IP_PROTO_UDP +1c ETH.IP.UDP.LENGTH packet @ +1c invert ; : udp-checksum? true ; \ incoming udp-checksum 0= ; : udp-wrapup mac-pkt-complete dup ip-wrapup OFFSET_UDP - OFFSET_UDP_LENGTH packetout-off mac! \ outgoing udp-checksum ETH.IP.UDP.CHECKSUM packetout-off ! ;