aboutsummaryrefslogtreecommitdiffstats
path: root/vicn/resource/linux/phy_link.py
diff options
context:
space:
mode:
Diffstat (limited to 'vicn/resource/linux/phy_link.py')
-rw-r--r--vicn/resource/linux/phy_link.py51
1 files changed, 47 insertions, 4 deletions
diff --git a/vicn/resource/linux/phy_link.py b/vicn/resource/linux/phy_link.py
index 878cf7c6..2976b7f0 100644
--- a/vicn/resource/linux/phy_link.py
+++ b/vicn/resource/linux/phy_link.py
@@ -16,10 +16,12 @@
# limitations under the License.
#
-from vicn.core.attribute import Attribute
-from vicn.core.task import inline_task
+from vicn.core.attribute import Attribute, Reference
+from vicn.core.task import inline_task, async_task
+from vicn.core.task import inherit_parent
from vicn.resource.channel import Channel
from vicn.resource.linux.phy_interface import PhyInterface
+from vicn.resource.vpp.interface import VPPInterface
class PhyLink(Channel):
"""
@@ -28,12 +30,53 @@ class PhyLink(Channel):
Physical Link to inform the orchestrator about Layer2 connectivity.
"""
- src = Attribute(PhyInterface, description = 'Source interface',
+ src = Attribute(PhyInterface, description = 'Source interface',
mandatory = True)
- dst = Attribute(PhyInterface, description = 'Destination interface',
+ dst = Attribute(PhyInterface, description = 'Destination interface',
mandatory = True)
+ @inherit_parent
@inline_task
def __initialize__(self):
self.src.set('channel', self)
self.dst.set('channel', self)
+
+ #--------------------------------------------------------------------------
+ # Internal methods
+ #--------------------------------------------------------------------------
+
+ async def _commit(self):
+ manager = self._state.manager
+
+ # Disable rp_filtering
+ # self.src.rp_filter = False
+ # self.dst.rp_filter = False
+
+ #XXX VPP
+ vpp_src = VPPInterface(parent = self.src,
+ vpp = self.src.node.vpp,
+ ip4_address = Reference(self.src, 'ip4_address'),
+ ip6_address = Reference(self.src, 'ip6_address'),
+ device_name = self.src.device_name)
+ manager.commit_resource(vpp_src)
+
+
+ vpp_dst = VPPInterface(parent = self.dst,
+ vpp = self.dst.node.vpp,
+ ip4_address = Reference(self.dst, 'ip4_address'),
+ ip6_address = Reference(self.dst, 'ip6_address'),
+ device_name = self.dst.device_name)
+ manager.commit_resource(vpp_dst)
+
+ #--------------------------------------------------------------------------
+ # Resource lifecycle
+ #--------------------------------------------------------------------------
+
+ def __get__(self):
+ return async_task(self._commit)()
+
+ def __create__(self):
+ assert self.src.node.get_type() == 'lxccontainer'
+ assert self.dst.node.get_type() == 'lxccontainer'
+
+ return async_task(self._commit)()