1234567891011121314151617181920212223242526272829303132333435363738394041 |
- ( 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 !
- ;
|