applied the except and raise fixers to the master branch to close the gap with py3
[nepi.git] / src / nepi / resources / netns / netnsroute.py
1 #
2 #    NEPI, a framework to manage network experiments
3 #    Copyright (C) 2014 INRIA
4 #
5 #    This program is free software: you can redistribute it and/or modify
6 #    it under the terms of the GNU General Public License version 2 as
7 #    published by the Free Software Foundation;
8 #
9 #    This program is distributed in the hope that it will be useful,
10 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
11 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 #    GNU General Public License for more details.
13 #
14 #    You should have received a copy of the GNU General Public License
15 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 #
17 # Author: Alina Quereilhac <alina.quereilhac@inria.fr>
18
19 from nepi.execution.attribute import Attribute, Flags, Types
20 from nepi.execution.resource import clsinit_copy
21 from nepi.resources.netns.netnsbase import NetNSBase
22
23 @clsinit_copy
24 class NetNSIPv4Route(NetNSBase):
25     _rtype = "netns::IPv4Route"
26
27     @classmethod
28     def _register_attributes(cls):
29         network = Attribute("network", "Network address", flags=Flags.Design)
30         prefix = Attribute("prefix", "IP prefix length", flags=Flags.Design)
31         nexthop = Attribute("nexthop", "Nexthop IP", flags=Flags.Design)
32
33         cls._register_attribute(network)
34         cls._register_attribute(prefix)
35         cls._register_attribute(nexthop)
36
37     @property
38     def emulation(self):
39         return self.node.emulation
40
41     @property
42     def node(self):
43         from nepi.resources.netns.netnsnode import NetNSNode
44         node = self.get_connected(NetNSNode.get_rtype())
45
46         if not node: 
47             msg = "Route not connected to Node!!"
48             self.error(msg)
49             raise RuntimeError(msg)
50
51         return node[0]
52
53     @property
54     def _rms_to_wait(self):
55         return [self.node]
56
57     def _instantiate_object(self):
58          self._uuid = self.emulation.invoke(self.device.uuid, "add_route",
59                 prefix=self.get("network"), prefix_len=self.get("prefix"),
60                 nexthop=self.get("nexthop"))
61
62