summaryrefslogtreecommitdiff
path: root/src/data.lisp
diff options
context:
space:
mode:
authorLinus Nordberg <linus@nordberg.se>2009-06-26 05:03:25 +0200
committerLinus Nordberg <linus@nordberg.se>2009-06-26 05:03:25 +0200
commit7765d85438a0b681725a5539f1924b189402f41c (patch)
treefe062e9ca06c1d6278798309bef5adfff2106d92 /src/data.lisp
parent45b772581b6c4e227756ef2e437649a44dcc3e23 (diff)
* src/data.lisp (new-entries): Store AS-PATH.
* src/start-bgpstore.sh: Fix bug in start args and add default host and port.
Diffstat (limited to 'src/data.lisp')
-rw-r--r--src/data.lisp25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/data.lisp b/src/data.lisp
index e2c4b9b..b9cd1e1 100644
--- a/src/data.lisp
+++ b/src/data.lisp
@@ -82,7 +82,7 @@ TOP-ELEM is an XML document element."
(dom:get-attribute p "label")))
prefixes))))
- ;; Populate the template.
+ ;; TIMESTAMP and PRECISION_TIME --> template.
(let ((ts (aref (dom:get-elements-by-tag-name time "TIMESTAMP") 0))
(pt (aref (dom:get-elements-by-tag-name time "PRECISION_TIME") 0)))
(setf (timestamp templ)
@@ -90,11 +90,28 @@ TOP-ELEM is an XML document element."
(setf (precision-time templ)
(dom:data (aref (dom:child-nodes pt) 0))))
- ;; Add octets to templ.
+ ;; AS-PATH --> template. Note that we want AS_PATH->AS
+ ;; only, to avoid getting COMMUNITY->AS.
+ (setf (path templ)
+ (let* ((as-paths (dom:get-elements-by-tag-name update
+ "AS_PATH")))
+ (if (= 0 (length as-paths))
+ "{}"
+ (let ((str "{"))
+ (map nil (lambda (node)
+ (let ((as (dom:data (aref (dom:child-nodes node) 0))))
+ (setf str (concatenate 'string
+ str
+ (format nil "~A," as)))))
+ (dom:child-nodes (aref as-paths 0)))
+ (concatenate 'string
+ (subseq str 0 (- (length str) 1))
+ "}")))))
+
+ ;; OCTETS --> template.
(when (> (length octet-msgs) 0)
(let* ((oct (aref (dom:get-elements-by-tag-name
- (aref octet-msgs 0) "OCTETS")
- 0))
+ (aref octet-msgs 0) "OCTETS") 0))
(txt (aref (dom:child-nodes oct) 0)))
(setf (bgp-octets templ) (dom:data txt))))