Fix gateway ARP lookup

This commit is contained in:
Tony Garnock-Jones 2016-01-23 20:17:03 -05:00
parent 279e273909
commit 54067dbeac
1 changed files with 7 additions and 7 deletions

14
ip.rkt
View File

@ -130,11 +130,10 @@
(define host-route-projector (compile-projection (host-route (?!) ? ?))) (define host-route-projector (compile-projection (host-route (?!) ? ?)))
(define gateway-route-projector (compile-projection (gateway-route (?!) (?!) ? ?))) (define gateway-route-projector (compile-projection (gateway-route (?!) (?!) ? ?)))
(define net-route-projector (compile-projection (net-route (?!) (?!) ?))) (define net-route-projector (compile-projection (net-route (?!) (?!) ?)))
(define gateway-arp-projector (compile-projection (define gateway-arp-projector (arp-query IPv4-ethertype
(arp-query IPv4-ethertype gateway-addr
gateway-addr (?! (ethernet-interface interface-name ?))
(?! (ethernet-interface interface-name ?)) (?!)))
(?!))))
(define (covered-by-some-other-route? addr routes) (define (covered-by-some-other-route? addr routes)
(for/or ([r (in-set routes)]) (for/or ([r (in-set routes)])
@ -148,8 +147,9 @@
(define host-ips (trie-project/set/single g host-route-projector)) (define host-ips (trie-project/set/single g host-route-projector))
(define gw-nets+netmasks (trie-project/set g gateway-route-projector)) (define gw-nets+netmasks (trie-project/set g gateway-route-projector))
(define net-nets+netmasks (trie-project/set g net-route-projector)) (define net-nets+netmasks (trie-project/set g net-route-projector))
(define gw-ip+hwaddr (let ((vs (trie-project/set g gateway-arp-projector))) (define gw-ip+hwaddr
(and vs (not (set-empty? vs)) (set-first vs)))) (let ((vs (trie-project/set g (compile-projection gateway-arp-projector))))
(and vs (not (set-empty? vs)) (set-first vs))))
(when (and gw-ip+hwaddr (not (gateway-route-state-gateway-hwaddr s))) (when (and gw-ip+hwaddr (not (gateway-route-state-gateway-hwaddr s)))
(log-info "Discovered gateway ~a at ~a on interface ~a." (log-info "Discovered gateway ~a at ~a on interface ~a."
(ip-address->hostname gateway-addr) (ip-address->hostname gateway-addr)