Implement router-dump

This commit is contained in:
xenia 2020-01-31 23:39:42 -05:00
parent 549f486168
commit 8ac12c2a10
2 changed files with 17 additions and 1 deletions

View File

@ -2,7 +2,7 @@
(require "iputil.rkt")
(provide make-rt rt-update! rt-lookup rt-dump)
(provide make-rt rt-update! rt-lookup rt-dump rt-flatten)
(struct rt-node [edge0 edge1 data] #:transparent #:mutable)
(struct rt-edge [label target] #:transparent)
@ -82,6 +82,15 @@
[(list _ ... visited)
visited])))
(define (rt-flatten node)
(if node
(let* ([e1 (rt-node-edge0 node)]
[e2 (rt-node-edge1 node)]
[data (rt-node-data node)]
[rst (append (rt-flatten e1) (rt-flatten e2))])
(if (equal? data empty-node-data) rst (cons data rst)))
'()))
; (define test (make-rt))
; (define (test-insert! x)
; (rt-update!

7
router
View File

@ -63,6 +63,13 @@
[(list* (cons peer _) _) peer]
[_ #f]))
;; Router -> Msg
;; Dumps routing table
(define (router-dump rt src dst)
(msg:table (sub1 src) src
(map (lambda (route) (list (route-subnet route) (route-nexthop route)))
(rt-flatten rt))))
;; Str [Listof Peer-Conn] -> Void
;; --
;; Runs router logic, given a list of peer connections.