1 # Copyright 2016 Intel Corporation.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 """Packet forwarder controller for Physical to Physical deployment
19 from conf import settings
21 class PktFwdController(object):
22 """Packet forwarder controller for P2P deployment scenario.
25 _pktfwd_class: The packet forwarder class to be used.
26 _pktfwd: The packet forwarder object controlled by this controller
28 def __init__(self, deployment, pktfwd_class):
29 """Initializes up the prerequisites for the P2P deployment scenario.
31 :vswitch_class: the vSwitch class to be used.
33 self._deployment = deployment
34 self._logger = logging.getLogger(__name__)
35 self._pktfwd_class = pktfwd_class
36 self._pktfwd = pktfwd_class(guest=True if deployment == "pvp" and
37 settings.getValue('VNF') != "QemuPciPassthrough" else False)
38 self._logger.debug('Creation using %s', str(self._pktfwd_class))
41 """Sets up the packet forwarder for p2p.
43 self._logger.debug('Setup using %s', str(self._pktfwd_class))
51 def get_vswitch(self):
52 """See IVswitchController for description
56 def setup_for_guest(self):
57 """Sets up the packet forwarder for pvp.
59 self._logger.debug('Setup using %s', str(self._pktfwd_class))
62 self._pktfwd.start_for_guest()
68 """Tears down the packet forwarder created in setup().
70 self._logger.debug('Stop using %s', str(self._pktfwd_class))
74 if self._deployment.find("p2p") == 0:
76 elif self._deployment == "pvp" and settings.getValue('VNF') != "QemuPciPassthrough":
77 self.setup_for_guest()
79 def __exit__(self, type_, value, traceback):
80 if self._deployment.find("p2p") == 0:
82 elif self._deployment == "pvp" and settings.getValue('VNF') != "QemuPciPassthrough":
86 """Get the controlled packet forwarder
88 :return: The controlled IPktFwd
92 def dump_vswitch_flows(self):
93 """ Dumps flows from vswitch
95 raise NotImplementedError(
96 "The PktFwdController does not implement the "
97 "\"dump_vswitch_flows\" function.")