Implement route<

This commit is contained in:
xenia 2020-01-31 23:13:49 -05:00
parent 90275458ed
commit 549f486168
2 changed files with 18 additions and 4 deletions

View File

@ -12,7 +12,8 @@
(struct msg [src dst] (struct msg [src dst]
#:transparent) #:transparent)
(struct route [subnet pref self-origin? as-path origin] (struct route [nexthop subnet pref self-origin? as-path origin]
;; nexthop : IP
;; subnet : Subnet ;; subnet : Subnet
;; pref : Int ;; pref : Int
;; self-origin? : Boolean ;; self-origin? : Boolean
@ -66,7 +67,8 @@
(match type (match type
["update" ["update"
(msg:update src dst (msg:update src dst
(route (hash->subnet data) (route src
(hash->subnet data)
(hash-ref data 'localpref) (hash-ref data 'localpref)
(hash-ref data 'selfOrigin) (hash-ref data 'selfOrigin)
(hash-ref data 'ASPath) (hash-ref data 'ASPath)
@ -105,7 +107,8 @@
(msg:update (msg:update
(string->ip "1.2.3.4") (string->ip "1.2.3.4")
(string->ip "1.2.3.7") (string->ip "1.2.3.7")
(route (subnet (string->ip "1.2.3.5") 7) (route (string->ip "1.2.3.4")
(subnet (string->ip "1.2.3.5") 7)
100 100
#t #t
'(1 2) '(1 2)

13
router
View File

@ -40,7 +40,18 @@
If multiple routes have the best origin... If multiple routes have the best origin...
5. The path from the neighbor router with the lowest IP address. 5. The path from the neighbor router with the lowest IP address.
|# |#
#t) (let/ec meow
(define (cmp mapper)
(let ([x2 (mapper r1)]
[y2 (mapper r2)])
(cond [(< x2 y2) (meow #t)]
[(> x2 y2) (meow #f)])))
(cmp (compose - route-pref))
(cmp (lambda (x) (if (route-self-origin? x) 1 0)))
(cmp (compose length route-as-path))
(cmp (lambda (x) (match (route-origin x) ['IGP 3] ['EGP 2] ['UNK 1])))
(cmp route-nexthop)
(error "your router is angery...")))
;; Router IP -> (U Peer #f) ;; Router IP -> (U Peer #f)
(define (router-find-best rt src-ip) (define (router-find-best rt src-ip)