diff --git a/driver.rkt b/driver.rkt index 7060f7a..5fb97ce 100644 --- a/driver.rkt +++ b/driver.rkt @@ -43,19 +43,16 @@ (transition 'no-state ;; (spawn udp-spy #:debug-name 'udp-spy) (spawn udp-driver #:debug-name 'udp-driver) - (spawn (nested-vm - 'dns-vm + (spawn (nested-vm #:debug-name 'dns-vm (transition 'no-state (spawn dns-spy #:debug-name 'dns-spy) (spawn (dns-read-driver local-addr) #:debug-name 'dns-read-driver) (spawn (dns-write-driver local-addr) #:debug-name 'dns-write-driver) - (role 'error-logger (topic-subscriber (bad-dns-packet (wild) (wild) (wild) (wild))) - #:state w + (role (topic-subscriber (bad-dns-packet (wild) (wild) (wild) (wild))) [p (begin (log-error (pretty-format p)) - w)]) - (role 'request-booter (topic-subscriber (dns-request (wild) (wild) (wild))) - #:state w - [r (transition w (map send-message (handle-request soa-rr zone r)))]))) + '())]) + (role (topic-subscriber (dns-request (wild) (wild) (wild))) + [r (map send-message (handle-request soa-rr zone r))]))) #:debug-name 'dns-vm)))) (define (handle-request soa-rr zone request) diff --git a/network-query.rkt b/network-query.rkt index 3fcb1f0..216157a 100644 --- a/network-query.rkt +++ b/network-query.rkt @@ -264,7 +264,8 @@ (define rpc-id (gensym 'network-query/allocate-query-id)) (transition w (send-message `(request ,rpc-id allocate-query-id)) - (role rpc-id (topic-subscriber `(reply ,rpc-id ,(wild))) + (role (topic-subscriber `(reply ,rpc-id ,(wild))) + #:name rpc-id #:state w [`(reply ,(== rpc-id) ,id) (sequence-actions (send-request (struct-copy network-query-state w @@ -309,9 +310,9 @@ (transition w (send-message (dns-request query s server-ip)) (send-message (set-timer subscription-id (* timeout 1000) 'relative)) - (role subscription-id - (set (topic-subscriber (timer-expired subscription-id (wild))) - (topic-subscriber (dns-reply (wild) (wild) s))) + (role (set (topic-subscriber (timer-expired subscription-id (wild))) + (topic-subscriber (dns-reply (wild) (wild) s))) + #:name subscription-id #:state w [(timer-expired (== subscription-id) _) (log-debug (format "Timed out ~v ~v to ~v ~v after ~v seconds" diff --git a/os2-dns.rkt b/os2-dns.rkt index b3975ec..ab748b6 100644 --- a/os2-dns.rkt +++ b/os2-dns.rkt @@ -21,8 +21,7 @@ (define (dns-read-driver s) (transition 'no-state (at-meta-level - (role 'packet-reader - (topic-subscriber (udp-packet (wild) s (wild))) + (role (topic-subscriber (udp-packet (wild) s (wild))) #:state w [(udp-packet source (== s) #"") (log-info "Debug dump packet received") @@ -43,16 +42,15 @@ (at-meta-level (send-message (udp-packet s sink (dns-message->packet message)))))) (transition 'no-state - (role 'packet-writer - (set (topic-subscriber (dns-request (wild) s (wild))) - (topic-subscriber (dns-reply (wild) s (wild)))) + (role (set (topic-subscriber (dns-request (wild) s (wild))) + (topic-subscriber (dns-reply (wild) s (wild)))) #:state w [(dns-request message (== s) sink) (transition w (translate message sink))] [(dns-reply message (== s) sink) (transition w (translate message sink))]))) (define dns-spy (transition 'none - (role 'spy (topic-subscriber (wild) #:monitor? #t) + (role (topic-subscriber (wild) #:monitor? #t) #:state w [(dns-request message source sink) (log-info (format "DNS: ~v asks ~v ~v~n : ~v" diff --git a/proxy.rkt b/proxy.rkt index bb001e8..73658c6 100644 --- a/proxy.rkt +++ b/proxy.rkt @@ -36,8 +36,7 @@ ;;(spawn udp-spy) (spawn udp-driver #:debug-name 'udp-driver) (spawn (timer-driver 'timer-driver) #:debug-name 'timer-driver) - (spawn (nested-vm - 'dns-vm + (spawn (nested-vm #:debug-name 'dns-vm (transition 'no-state (spawn dns-spy #:debug-name 'dns-spy) (spawn (timer-relay 'timer-relay:dns) #:debug-name 'timer-relay) @@ -55,7 +54,7 @@ ;; TODO: track how many are allocated and throttle requests if too ;; many are in flight (transition (set) ;; SetOf, all active query IDs - (role 'query-id-request-handler (topic-subscriber `(request ,(wild) allocate-query-id)) + (role (topic-subscriber `(request ,(wild) allocate-query-id)) #:state allocated [`(request ,reply-addr allocate-query-id) (let recheck () @@ -64,20 +63,20 @@ (recheck) (transition (set-add allocated n) (send-message `(reply ,reply-addr ,n)))))]) - (role 'query-id-release-handler (topic-subscriber `(release-query-id ,(wild))) + (role (topic-subscriber `(release-query-id ,(wild))) #:state allocated [`(release-query-id ,n) (transition (set-remove allocated n))]))) (define (packet-dispatcher s) (transition (set) ;; SetOf - (role 'error-logger (topic-subscriber (bad-dns-packet (wild) (wild) (wild) (wild))) + (role (topic-subscriber (bad-dns-packet (wild) (wild) (wild) (wild))) #:state old-active-requests [p (log-error (pretty-format p)) ;; TODO: ^ perhaps use metalevel events? perhaps don't bother though old-active-requests]) - (role 'request-booter (topic-subscriber (dns-request (wild) (wild) s)) + (role (topic-subscriber (dns-request (wild) (wild) s)) #:state old-active-requests [(and r (dns-request m source (== s))) ;; We only listen for requests on our server socket (define req-id (active-request source (dns-message-id m))) @@ -87,7 +86,7 @@ old-active-requests ;; ignore retransmitted duplicates (transition (set-add old-active-requests req-id) (spawn (packet-relay req-id r) #:debug-name (list 'packet-relay req-id))))]) - (role 'reply-cleanup (topic-subscriber (dns-reply (wild) s (wild))) + (role (topic-subscriber (dns-reply (wild) s (wild))) #:state old-active-requests [(and r (dns-reply m (== s) sink)) (define req-id (active-request sink (dns-message-id m))) @@ -164,7 +163,7 @@ (define-values (cleaned-seed-zone initial-timers) (zone-expire seed-zone)) (sequence-actions (transition-and-set-timers cleaned-seed-zone initial-timers) ;; TODO: consider deduping questions here too? - (role 'debug-dumper (topic-subscriber `(debug-dump)) + (role (topic-subscriber `(debug-dump)) #:state zone [`(debug-dump) (with-output-to-file "zone-proxy.zone" @@ -192,7 +191,7 @@ #:mode 'text #:exists 'append) zone]) - (role 'question-handler-factory (topic-subscriber (question (wild) (wild) (wild) (wild))) + (role (topic-subscriber (question (wild) (wild) (wild) (wild))) #:state zone [(? question? q) (transition zone @@ -207,13 +206,12 @@ [else (spawn (question-handler zone q client-sock) #:debug-name (list 'question-handler q))]))]) - (role 'network-reply-snoop (topic-subscriber (network-reply (wild) (wild))) + (role (topic-subscriber (network-reply (wild) (wild))) #:state zone [(network-reply _ answer) (define-values (new-zone timers) (incorporate-complete-answer answer zone)) (transition-and-set-timers new-zone timers)]) - (role 'timer-expiry-handler - (topic-subscriber (timer-expired (list 'check-dns-expiry (wild)) (wild))) + (role (topic-subscriber (timer-expired (list 'check-dns-expiry (wild)) (wild))) #:state zone [(timer-expired (list 'check-dns-expiry name) now-msec) (zone-expire-name zone name (/ now-msec 1000.0))]))) @@ -252,7 +250,8 @@ (map rr-rdata (set->list nameserver-rrs)) referral-id) #:debug-name (list 'network-query q)) - (role referral-id (topic-subscriber (network-reply referral-id (wild))) + (role (topic-subscriber (network-reply referral-id (wild))) + #:name referral-id #:state w [(network-reply (== referral-id) #f) ;; name-error/NXDOMAIN (transition w