peers2zebra-Visitor.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from xml.dom.ext.reader import PyExpat
  2. from xml.dom import Node
  3. from xml.dom.ext import Visitor
  4. from xml.dom.ext.reader import Sax2
  5. from xml.dom.ext import ReleaseNode
  6. peersfile = "/usr/local/gitoyen-peers/peers.xml"
  7. ix = "sfinx"
  8. class NsVisitor(Visitor.Visitor):
  9. def visit(self, node):
  10. if node.nodeType == Node.ELEMENT_NODE:
  11. #if node.nodeName == "peer" and node.getAttribute ('ix') == ix:
  12. if node.nodeName == "peer":
  13. neighbor = {}
  14. for element in node.childNodes:
  15. if element.nodeName == "name":
  16. neighbor["name"] = element.childNodes[0].nodeValue
  17. elif element.nodeName == "ip":
  18. neighbor["ip"] = element.childNodes[0].nodeValue
  19. elif element.nodeName == "as":
  20. neighbor["as"] = element.childNodes[0].nodeValue
  21. elif element.nodeName == "prefix-in":
  22. neighbor["prefix-in"] = element.childNodes[0].nodeValue
  23. print "neighbor ", neighbor["ip"], \
  24. " description ", neighbor["name"]
  25. print "neighbor ", neighbor["ip"], \
  26. " remote-as ", neighbor["as"]
  27. print "neighbor ", neighbor["ip"], "soft-reconfiguration inbound"
  28. if neighbor.has_key("prefix-in"):
  29. print "neighbor ", neighbor["ip"], "prefix-list ", \
  30. neighbor["prefix-in"], " in"
  31. else:
  32. print "neighbor ", neighbor["ip"], "prefix-list peer-in in"
  33. print "neighbor ", neighbor["ip"], "prefix-list announce-out out"
  34. print "neighbor ", neighbor["ip"], "filter-list 1 out"
  35. print "neighbor ", neighbor["ip"], "route-map " + ix + "-in in"
  36. print ""
  37. return None
  38. def Walk(xml_dom_object):
  39. visitor = NsVisitor()
  40. walker = Visitor.Walker(visitor, xml_dom_object)
  41. walker.run()
  42. if __name__ == '__main__':
  43. import sys
  44. reader = PyExpat.Reader()
  45. xml_dom_object = reader.fromUri(peersfile)
  46. print "! Peers at " + ix
  47. Walk(xml_dom_object)
  48. reader.releaseNode(xml_dom_object)