some serializers
This commit is contained in:
parent
8ac12c2a10
commit
901cd5beee
55
msg.rkt
55
msg.rkt
|
@ -43,16 +43,6 @@
|
||||||
;; networks : [Listof [List Subnet IP]]
|
;; networks : [Listof [List Subnet IP]]
|
||||||
#:transparent)
|
#:transparent)
|
||||||
|
|
||||||
;; Msg -> String
|
|
||||||
(define (msg-type m)
|
|
||||||
(cond
|
|
||||||
[(msg:update? m) "update"]
|
|
||||||
[(msg:revoke? m) "revoke"]
|
|
||||||
[(msg:data? m) "data"]
|
|
||||||
[(msg:no-route? m) "no route"]
|
|
||||||
[(msg:dump? m) "dump"]
|
|
||||||
[(msg:table? m) "table"]))
|
|
||||||
|
|
||||||
;; Any -> Msg
|
;; Any -> Msg
|
||||||
(define (jsexpr->msg j)
|
(define (jsexpr->msg j)
|
||||||
(define src (string->ip (hash-ref j 'src)))
|
(define src (string->ip (hash-ref j 'src)))
|
||||||
|
@ -93,7 +83,52 @@
|
||||||
(define (bytes->msg bs)
|
(define (bytes->msg bs)
|
||||||
(jsexpr->msg (bytes->jsexpr bs)))
|
(jsexpr->msg (bytes->jsexpr bs)))
|
||||||
|
|
||||||
|
;; Msg -> String
|
||||||
|
(define (msg-type m)
|
||||||
|
(cond
|
||||||
|
[(msg:update? m) "update"]
|
||||||
|
[(msg:revoke? m) "revoke"]
|
||||||
|
[(msg:data? m) "data"]
|
||||||
|
[(msg:no-route? m) "no route"]
|
||||||
|
[(msg:dump? m) "dump"]
|
||||||
|
[(msg:table? m) "table"]))
|
||||||
|
|
||||||
|
;; Msg -> Any
|
||||||
|
(define (msg->jsexpr msg)
|
||||||
|
(hash 'src (ip->string (msg-src msg))
|
||||||
|
'dst (ip->string (msg-dst msg))
|
||||||
|
'type (msg-type msg)
|
||||||
|
'msg (match msg
|
||||||
|
[(msg:data _ _ data) data]
|
||||||
|
[(msg:no-route _ _) (hash)]
|
||||||
|
[_ (error 'msg->jsexpr
|
||||||
|
(format "unimplemented ~a" (msg-type msg)))])))
|
||||||
|
|
||||||
|
;; Msg -> Bytes
|
||||||
|
(define (msg->bytes msg)
|
||||||
|
(jsexpr->bytes (msg->jsexpr msg)))
|
||||||
|
|
||||||
(module+ test
|
(module+ test
|
||||||
|
#;
|
||||||
|
(check-equal? (msg->jsexpr
|
||||||
|
(msg:update
|
||||||
|
(string->ip "1.2.3.4")
|
||||||
|
(string->ip "1.2.3.7")
|
||||||
|
(route (subnet (string->ip "1.2.3.5") 7)
|
||||||
|
100
|
||||||
|
#t
|
||||||
|
'(1 2)
|
||||||
|
'UNK)))
|
||||||
|
(hash 'src "1.2.3.4"
|
||||||
|
'dst "1.2.3.7"
|
||||||
|
'type "update"
|
||||||
|
'msg (hash 'network "1.2.3.5"
|
||||||
|
'netmask "255.255.255.128"
|
||||||
|
'localpref 100
|
||||||
|
'selfOrigin #t
|
||||||
|
'ASPath '(1 2)
|
||||||
|
'origin "UNK")))
|
||||||
|
|
||||||
(check-equal? (jsexpr->msg
|
(check-equal? (jsexpr->msg
|
||||||
(hash 'src "1.2.3.4"
|
(hash 'src "1.2.3.4"
|
||||||
'dst "1.2.3.7"
|
'dst "1.2.3.7"
|
||||||
|
|
Loading…
Reference in New Issue