diff options
Diffstat (limited to 'vicn/resource/linux/phy_link.py')
-rw-r--r-- | vicn/resource/linux/phy_link.py | 51 |
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)() |