From 57e22a5d3ca98dd5403c2cfd3f7e87eda480cde4 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 16 Jun 2014 17:51:17 -0400 Subject: [PATCH] Support #:pseudo-header in ip-checksum --- checksum.rkt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/checksum.rkt b/checksum.rkt index 7c09b2c..a56ffb3 100644 --- a/checksum.rkt +++ b/checksum.rkt @@ -22,14 +22,16 @@ (define r (bitwise-and #xffff (bitwise-not x))) (if (= r 0) #xffff r)) -(define (ip-checksum offset blob) +(define (ip-checksum offset blob #:pseudo-header [pseudo-header #""]) (bit-string-case blob ([ (prefix :: binary bytes offset) (:: binary bytes 2) (suffix :: binary) ] (log-info "Packet pre checksum:\n~a" (dump-bytes->string blob)) - (define result (ones-complement-+16 (ones-complement-sum16 prefix) - (ones-complement-sum16 suffix))) + (define result (ones-complement-+16 + (ones-complement-sum16 pseudo-header) + (ones-complement-+16 (ones-complement-sum16 prefix) + (ones-complement-sum16 suffix)))) (log-info "result: ~a" (number->string result 16)) (define checksum (ones-complement-negate16-safely result)) (log-info "Checksum ~a" (number->string checksum 16))