Ejemplo n.º 1
0
    def __init__(self, *ryu_args, **ryu_kwargs):
        args = self.get_args()
        if not args['debug']:
            LOG.setLevel(logging.INFO)
        LOG.debug('Args: %s', args)

        super(_OF13Hook, self).__init__(tcp_ports=args['tcp_ports'],
                                        udp_ports=args['udp_ports'],
                                        zmq_addr=args['zmq_addr'],
                                        *ryu_args, **ryu_kwargs)
Ejemplo n.º 2
0
def main():
    parser = argparse.ArgumentParser(
        description='HookSwitch for Linux netfilter queue')
    help_str = 'ZeroMQ connect address (e.g. ipc:///tmp/hookswitch-socket)'
    parser.add_argument('ZMQ_ADDR',
                        type=str,
                        help=help_str)
    parser.add_argument('-n', '--nfq-number',
                        required=True,
                        type=int,
                        help='netfilter queue number')
    parser.add_argument('--debug',
                        action='store_true',
                        help='print debug info')

    args = parser.parse_args()

    if not args.debug:
        LOG.setLevel(logging.INFO)

    hook = NFQHook(nfq_number=args.nfq_number, zmq_addr=args.ZMQ_ADDR)
    print('Starting for %s (NFQ %d)' % (args.ZMQ_ADDR, args.nfq_number))
    hook.start()
Ejemplo n.º 3
0
from abc import ABCMeta, abstractmethod
import eventlet
from eventlet.green import zmq
import six
import json

from hookswitch.internal import LOG as _LOG

LOG = _LOG.getChild(__name__)


@six.add_metaclass(ABCMeta)
class ZMQClientBase(object):

    def __init__(self, zmq_addr):
        self.zmq_addr = zmq_addr
        self.zmq_ctx = zmq.Context()
        self.zs = self.zmq_ctx.socket(zmq.PAIR)
        self.pendings = {}  # key: id(int), value: Ethernet Frame

    def start(self):
        LOG.debug('Connecting to ZMQ: %s', self.zmq_addr)
        self.zs.connect(self.zmq_addr)
        worker_handle = eventlet.spawn(self._zmq_worker)
        return worker_handle

    def _zmq_worker(self):
        while True:
            # eth_ignored will be used when 'op' == 'modify' is implemented
            metadata_str, eth_ignored = self.zs.recv_multipart()
            metadata = json.loads(metadata_str)