Exemple #1
0
def main():
    """Create a CLI parser for the SFC Agent and execute appropriate actions"""
    #: default values
    agent_port = 5000
    odl_auto_sff = False
    ovs_local_sff_cp_ip = '0.0.0.0'
    debug_level = True

    #: setup parser -----------------------------------------------------------
    parser = argparse.ArgumentParser(description='SFC Agent',
                                     usage=("\npython3.5 sfc_agent "
                                            "--rest "
                                            "--nfq-class "
                                            "--odl-get-sff "
                                            "--debug-level "
                                            "--NSH-type"
                                            "--legacy-vxlan"
                                            "--ovs-sff-cp-ip <local SFF IP dataplane address> "
                                            "--odl-ip-port=<ODL REST IP:port> --sff-name=<my SFF name>"
                                            "--sff-os=<agent os>"
                                            " --agent-port=<agent listening port>"
                                            "\n\nnote:\n"
                                            "root privileges are required "
                                            "if `--nfq-class` flag is used"))

    parser.add_argument('--odl-get-sff', action='store_true',
                        help='Get SFF from ODL')

    parser.add_argument('--auto-sff-name', action='store_true',
                        help='Automatically get SFF name')

    parser.add_argument('--nfq-class', action='store_true',
                        help='Flag to use NFQ Classifier')

    parser.add_argument('-r', '--rest', action='store_true',
                        help='Flag to use REST')

    parser.add_argument('--sff-name',
                        help='Set SFF name')

    parser.add_argument('--debug-level', action='store_true',
                        help='Set logging level to DEBUG')

    parser.add_argument('--odl-ip-port',
                        help='Set ODL IP and port in form <IP>:<PORT>. '
                             'Default is %s' % sfc_globals.get_odl_locator())

    parser.add_argument('--NSH-type',
                        choices=['1', '3'],
                        help='Set NSH type '
                             'Default is %s' % sfc_globals.get_nsh_type())

    parser.add_argument('--legacy-vxlan', action='store_true',
                        help='Using Vxlan header instead of Vxlan-gpe')

    parser.add_argument('--ovs-sff-cp-ip',
                        help='Set local SFF Open vSwitch IP. '
                             'Default is %s' % ovs_local_sff_cp_ip)

    parser.add_argument('--sff-os',
                        choices=['XE', 'XR', 'OVS'],
                        help='Set SFF switch OS')

    parser.add_argument('--agent-port', type=int,
                        help='Set SFC Agent port. Default is %s' % agent_port)

    #: parse CMD arguments ----------------------------------------------------
    args = parser.parse_args()

    if args.odl_ip_port is not None:
        sfc_globals.set_odl_locator(args.odl_ip_port)
        logger.info('ODL locator: %s', sfc_globals.get_odl_locator())

    if args.agent_port is not None:
        agent_port = args.agent_port

    if args.ovs_sff_cp_ip is not None:
        ovs_local_sff_cp_ip = args.ovs_sff_cp_ip

    if args.auto_sff_name:
        odl_auto_sff = True
        args.odl_get_sff = True

    if args.sff_name is not None:
        sfc_globals.set_my_sff_name(args.sff_name)

    if args.NSH_type is not None:
        sfc_globals.set_nsh_type(args.NSH_type)

    if args.legacy_vxlan is not None:
        sfc_globals.set_legacy_vxlan(True)
    else:
        sfc_globals.set_legacy_vxlan(False)

    if args.debug_level is not None:
        debug_level = args.debug_level

    if args.sff_os is not None:
        sff_os = args.sff_os

        sfc_globals.set_sff_os(sff_os)
        if sff_os not in sfc_globals.sff_os_set:
            logger.error(sff_os + ' is an unsupported SFF switch OS')
            sys.exit()

        if sff_os == "OVS":
            ovs_cli.init_ovs()

    #: execute actions --------------------------------------------------------
    try:
        #if debug_level:
        #    logging.basicConfig(level=logging.DEBUG)
        #else:
        #    logging.basicConfig(level=logging.INFO)

        logging.basicConfig(level=logging.DEBUG)

        logger.info("\n\n====== STARTING SFC AGENT ======")
        logger.info("\n\nSFC Agent will listen to Opendaylight REST Messages and take any\n"
                    "appropriate action such as creating, deleting, updating  SFs, SFFs,\n "
                    "or classifier. \n")

        if args.odl_get_sff:
            get_sffs_from_odl(sfc_globals.get_odl_locator())

        if odl_auto_sff:
            auto_sff_name()

        if args.nfq_class:
            classifier.start_classifier()

        if args.rest:
            app.run(port=agent_port,
                    host=ovs_local_sff_cp_ip,
                    debug=False,
                    use_reloader=False)
    except KeyboardInterrupt:
        pass
    finally:
        classifier.clear_classifier()

    # not a great way how to exit, but it works and prevents the
    # `Exception ignored in: ...` message from beeing displayed
    os.kill(os.getpid(), signal.SIGTERM)
Exemple #2
0
def main():
    """Create a CLI parser for the SFC Agent and execute appropriate actions"""
    #: default values
    agent_port = 5000
    odl_auto_sff = False
    ovs_local_sff_cp_ip = '0.0.0.0'
    debug_level = False

    #: setup parser -----------------------------------------------------------
    parser = argparse.ArgumentParser(
        description='SFC Agent',
        usage=("\npython3.5 sfc_agent "
               "--rest "
               "--nfq-class "
               "--odl-get-sff "
               "--debug-level "
               "--NSH-type"
               "--legacy-vxlan"
               "--ovs-sff-cp-ip <local SFF IP dataplane address> "
               "--odl-ip-port=<ODL REST IP:port> --sff-name=<my SFF name>"
               "--sff-os=<agent os>"
               " --agent-port=<agent listening port>"
               "\n\nnote:\n"
               "root privileges are required "
               "if `--nfq-class` flag is used"))

    parser.add_argument('--odl-get-sff',
                        action='store_true',
                        help='Get SFF from ODL')

    parser.add_argument('--auto-sff-name',
                        action='store_true',
                        help='Automatically get SFF name')

    parser.add_argument('--nfq-class',
                        action='store_true',
                        help='Flag to use NFQ Classifier')

    parser.add_argument('-r',
                        '--rest',
                        action='store_true',
                        help='Flag to use REST')

    parser.add_argument('--sff-name', help='Set SFF name')

    parser.add_argument('--debug-level',
                        action='store_true',
                        help='Set logging level to DEBUG')

    parser.add_argument('--odl-ip-port',
                        help='Set ODL IP and port in form <IP>:<PORT>. '
                        'Default is %s' % sfc_globals.get_odl_locator())

    parser.add_argument('--NSH-type',
                        choices=['1', '3'],
                        help='Set NSH type '
                        'Default is %s' % sfc_globals.get_nsh_type())

    parser.add_argument('--legacy-vxlan',
                        action='store_true',
                        help='Using Vxlan header instead of Vxlan-gpe')

    parser.add_argument('--ovs-sff-cp-ip',
                        help='Set local SFF Open vSwitch IP. '
                        'Default is %s' % ovs_local_sff_cp_ip)

    parser.add_argument('--sff-os',
                        choices=['XE', 'XR', 'OVS'],
                        help='Set SFF switch OS')

    parser.add_argument('--agent-port',
                        type=int,
                        help='Set SFC Agent port. Default is %s' % agent_port)

    #: parse CMD arguments ----------------------------------------------------
    args = parser.parse_args()

    if args.odl_ip_port is not None:
        sfc_globals.set_odl_locator(args.odl_ip_port)
        logger.info('ODL locator: %s', sfc_globals.get_odl_locator())

    if args.agent_port is not None:
        agent_port = args.agent_port

    if args.ovs_sff_cp_ip is not None:
        ovs_local_sff_cp_ip = args.ovs_sff_cp_ip

    if args.auto_sff_name:
        odl_auto_sff = True
        args.odl_get_sff = True

    if args.sff_name is not None:
        sfc_globals.set_my_sff_name(args.sff_name)

    if args.NSH_type is not None:
        sfc_globals.set_nsh_type(args.NSH_type)

    if args.legacy_vxlan is not None:
        sfc_globals.set_legacy_vxlan(True)
    else:
        sfc_globals.set_legacy_vxlan(False)

    if args.debug_level is not None:
        debug_level = args.debug_level

    if args.sff_os is not None:
        sff_os = args.sff_os

        sfc_globals.set_sff_os(sff_os)
        if sff_os not in sfc_globals.sff_os_set:
            logger.error(sff_os + ' is an unsupported SFF switch OS')
            sys.exit()

        if sff_os == "OVS":
            ovs_cli.init_ovs()

    #: execute actions --------------------------------------------------------
    try:
        if debug_level:
            logging.basicConfig(level=logging.DEBUG)
        else:
            logging.basicConfig(level=logging.INFO)

        logger.info("\n\n====== STARTING SFC AGENT ======")
        logger.info(
            "\n\nSFC Agent will listen to Opendaylight REST Messages and take any\n"
            "appropriate action such as creating, deleting, updating  SFs, SFFs,\n "
            "or classifier. \n")

        if args.odl_get_sff:
            get_sffs_from_odl(sfc_globals.get_odl_locator())

        if odl_auto_sff:
            auto_sff_name()

        if args.nfq_class:
            classifier.start_classifier()

        if args.rest:
            app.run(port=agent_port,
                    host=ovs_local_sff_cp_ip,
                    debug=False,
                    use_reloader=False)
    except KeyboardInterrupt:
        pass
    finally:
        classifier.clear_classifier()

    # not a great way how to exit, but it works and prevents the
    # `Exception ignored in: ...` message from beeing displayed
    os.kill(os.getpid(), signal.SIGTERM)