def __init__(self, log, vpp_cmd_queue_len=None): self.LOG = log jsonfiles = [] for root, dirnames, filenames in os.walk('/usr/share/vpp/api/'): for filename in fnmatch.filter(filenames, '*.api.json'): jsonfiles.append(os.path.join(root, filename)) self._vpp = vpp_papi.VPP(jsonfiles) # Sometimes a callback fires unexpectedly. We need to catch them # because vpp_papi will traceback otherwise self._vpp.register_event_callback(self._queue_cb) self.registered_callbacks = {} for event in self.CallbackEvents: self.registered_callbacks[event] = [] # NB: a real threading lock self.event_q_lock = Lock() self.event_q = [] if vpp_cmd_queue_len is not None: self._vpp.connect("python-VPPInterface", rx_qlen=vpp_cmd_queue_len) else: self._vpp.connect("python-VPPInterface") eventlet.spawn_n(self.vpp_watcher_thread)
# # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. import vpp_papi conn = vpp_papi.VPP() conn.connect('debug-acl-client') def vpp_call(func, *args, **kwargs): global conn if hasattr(conn, 'api'): return getattr(conn.api, func)(*args, **kwargs) return getattr(conn, func)(*args, **kwargs) def decode_acl_rule(t): return { "is_permit": t.is_permit, 'src_prefix': t.src_prefix, 'dst_prefix': t.dst_prefix,