Implement route<
This commit is contained in:
parent
90275458ed
commit
549f486168
9
msg.rkt
9
msg.rkt
|
@ -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
13
router
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue