summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhochikong <1097225749@qq.com>2016-08-17 14:35:58 +0800
committerhochikong <1097225749@qq.com>2016-08-17 14:35:58 +0800
commit5fd94939d24cf731421ed4a566d38bb57a5f6f61 (patch)
tree890df6b6b0157e89b41e200267eff272d1ca9d5f
parent314750af29226259aceb27dfa39e1ef7aee67563 (diff)
downloadpython-vyos-mgmt-5fd94939d24cf731421ed4a566d38bb57a5f6f61.tar.gz
python-vyos-mgmt-5fd94939d24cf731421ed4a566d38bb57a5f6f61.zip
T86 Python management library methods give timeouts
Add the BGP configure support
-rw-r--r--vyroute/Router.py123
-rw-r--r--vyroute/basic_function/BGPRoute.py102
2 files changed, 225 insertions, 0 deletions
diff --git a/vyroute/Router.py b/vyroute/Router.py
index 476414a..7eb6cc5 100644
--- a/vyroute/Router.py
+++ b/vyroute/Router.py
@@ -6,6 +6,7 @@ from vyroute.basic_function import StaticRoute
from vyroute.basic_function import RIPRoute
from vyroute.basic_function import OSPFRoute
from vyroute.basic_function import DeleteRoute
+from vyroute.basic_function import BGPRoute
class Router(object):
@@ -553,3 +554,125 @@ class BasicRouter(Router):
return {"Error": "Router object not connect to a router."}
except Exception as e:
return {"Error": e}
+
+ def bgp_as(self, self_as, neighbor, multihop, remote_as, update_source):
+ """VyOS BGP router basic setting
+
+ :param self_as: The AS number of the router you login
+ :param neighbor: The neighbor router address
+ :param multihop: The amount of hops
+ :param remote_as: The remote AS number
+ :param update_source: The update source
+ :return: A message
+ """
+ try:
+ if self.__status["status"] == "login":
+ if self.__status["configure"] == "Yes":
+ res = BGPRoute.bgp_as(self.__conn, self_as, neighbor, multihop, remote_as, update_source)
+ if "Result" in res:
+ if self.__status["commit"] == "No":
+ pass
+ else:
+ self.__status["commit"] = "No"
+ if self.__status["save"] == "No":
+ pass
+ else:
+ self.__status["save"] = "No"
+ return res
+ else:
+ return res
+ else:
+ return "Error:You are not in configure mode."
+ else:
+ return "Error:Router object not connect to a router."
+ except Exception as e:
+ return e
+
+ def bgp_network(self, self_as, network_range):
+ """Add a network to BGP router
+
+ :param self_as: The AS number of the router you login
+ :param network_range: The target network,don't forget the netmask
+ :return: A message
+ """
+ try:
+ if self.__status["status"] == "login":
+ if self.__status["configure"] == "Yes":
+ res = BGPRoute.bgp_network(self.__conn, self_as, network_range)
+ if "Result" in res:
+ if self.__status["commit"] == "No":
+ pass
+ else:
+ self.__status["commit"] = "No"
+ if self.__status["save"] == "No":
+ pass
+ else:
+ self.__status["save"] = "No"
+ return res
+ else:
+ return res
+ else:
+ return "Error:You are not in configure mode."
+ else:
+ return "Error:Router object not connect to a router."
+ except Exception as e:
+ return e
+
+ def bgp_router_id(self, self_as, router_id):
+ """Set a router id for the router you login
+
+ :param self_as: The AS number of the router you login
+ :param router_id: The router id,or you can use the router address as router id
+ :return: A message
+ """
+ try:
+ if self.__status["status"] == "login":
+ if self.__status["configure"] == "Yes":
+ res = BGPRoute.bgp_router_id(self.__conn, self_as, router_id)
+ if "Result" in res:
+ if self.__status["commit"] == "No":
+ pass
+ else:
+ self.__status["commit"] = "No"
+ if self.__status["save"] == "No":
+ pass
+ else:
+ self.__status["save"] = "No"
+ return res
+ else:
+ return res
+ else:
+ return "Error:You are not in configure mode."
+ else:
+ return "Error:Router object not connect to a router."
+ except Exception as e:
+ return e
+
+ def bgp_blackhole_route(self, network_range):
+ """Set a blackhole route
+
+ :param network_range: The target network,don't forget the netmask
+ :return: A message
+ """
+ try:
+ if self.__status["status"] == "login":
+ if self.__status["configure"] == "Yes":
+ res = BGPRoute.bgp_blackhole_route(self.__conn, network_range)
+ if "Result" in res:
+ if self.__status["commit"] == "No":
+ pass
+ else:
+ self.__status["commit"] = "No"
+ if self.__status["save"] == "No":
+ pass
+ else:
+ self.__status["save"] = "No"
+ return res
+ else:
+ return res
+ else:
+ return "Error:You are not in configure mode."
+ else:
+ return "Error:Router object not connect to a router."
+ except Exception as e:
+ return e
diff --git a/vyroute/basic_function/BGPRoute.py b/vyroute/basic_function/BGPRoute.py
new file mode 100644
index 0000000..bcb891d
--- /dev/null
+++ b/vyroute/basic_function/BGPRoute.py
@@ -0,0 +1,102 @@
+# Copyright (c) 2016 Hochikong
+def bgp_as(obj, self_as, neighbor, multihop, remote_as, update_source):
+ """VyOS BGP router basic setting about AS
+
+ :param obj: A connection object
+ :param self_as: The AS number of the router you login
+ :param neighbor: The neighbor router address
+ :param multihop: The amount of hops
+ :param remote_as: The remote AS number
+ :param update_source: The update source
+ :return: A message
+ """
+ bgp_multihop_configuration = "set protocols bgp %s neighbor %s ebgp-multihop %s"
+ bgp_remote_as_configuration = "set protocols bgp %s neighbor %s remote-as %s"
+ bgp_update_source_configuration = "set protocols bgp %s neighbor %s update-source %s"
+
+ try:
+ reg = 0
+ error_message = []
+ obj.sendline(bgp_multihop_configuration % (self_as, neighbor, multihop))
+ obj.prompt()
+ if len(obj.before) > obj.before.index('\r\n') + 2:
+ error_message.append(obj.before)
+ reg += 1
+ obj.sendline(bgp_remote_as_configuration % (self_as, neighbor, remote_as))
+ obj.prompt()
+ if len(obj.before) > obj.before.index('\r\n') + 2:
+ error_message.append(obj.before)
+ reg += 1
+ obj.sendline(bgp_update_source_configuration % (self_as, neighbor, update_source))
+ obj.prompt()
+ if len(obj.before) > obj.before.index('\r\n') + 2:
+ error_message.append(obj.before)
+ reg += 1
+ if reg > 0:
+ return error_message
+ else:
+ return "Result:Configured successfully"
+ except Exception as e:
+ return e
+
+
+def bgp_network(obj, self_as, network_range):
+ """Add a network to BGP router
+
+ :param obj: A connection object
+ :param self_as: The AS number of the router you login
+ :param network_range: The target network,don't forget the netmask
+ :return: A message
+ """
+ bgp_network_configuration = "set protocols bgp %s network %s"
+
+ try:
+ obj.sendline(bgp_network_configuration % (self_as, network_range))
+ obj.prompt()
+ if len(obj.before) > obj.before.index('\r\n') + 2:
+ return obj.before
+ else:
+ return "Result:Configured successfully"
+ except Exception as e:
+ return e
+
+
+def bgp_router_id(obj, self_as, router_id):
+ """Set a router id for the router you login
+
+ :param obj:A connection object
+ :param self_as: The AS number of the router you login
+ :param router_id: The router id,or you can use the router address as router id
+ :return: A message
+ """
+ bgp_router_id_configuration = "set protocols bgp %s parameters router-id %s"
+
+ try:
+ obj.sendline(bgp_router_id_configuration % (self_as, router_id))
+ obj.prompt()
+ if len(obj.before) > obj.before.index('\r\n') + 2:
+ return obj.before
+ else:
+ return "Result:Configured successfully"
+ except Exception as e:
+ return e
+
+
+def bgp_blackhole_route(obj, network_range):
+ """Set a blackhole route
+
+ :param obj: A connection object
+ :param network_range: The target network,don't forget the netmask
+ :return: A message
+ """
+ bgp_blackhole_configuration = "set protocols static route %s blackhole distance '254' "
+
+ try:
+ obj.sendline(bgp_blackhole_configuration % network_range)
+ obj.prompt()
+ if len(obj.before) > obj.before.index('\r\n') + 2:
+ return obj.before
+ else:
+ return "Result:Configured successfully"
+ except Exception as e:
+ return e