Esempio n. 1
0
    def __init__(self, eap_output_queue, radius_output_queue, src_mac, timer_scheduler,
                 auth_handler, failure_handler, logoff_handler, log_prefix):
        """

        Args:
            auth_handler (callable): callable that takes input of src_mac. Called on EAP-Success.
            eap_output_queue (Queue): where to put Messages to send to supplicant
            failure_handler (callable): callable that takes input of src_mac. Called on EAP-Failure.
            logoff_handler (callable): callable that takes input of src_mac. Called on EAP-Logoff.
            radius_output_queue (Queue): where to put Messages to send to AAA server
            src_mac (MacAddress): MAC address this statemachine (sm) belongs to.
            timer_scheduler (Scheduler): where to put timer events. (useful for Retransmits)
        """
        self.eap_output_messages = eap_output_queue
        self.radius_output_messages = radius_output_queue
        self.src_mac = src_mac
        self.timer_scheduler = timer_scheduler
        self.auth_handler = auth_handler
        self.failure_handler = failure_handler
        self.logoff_handler = logoff_handler

        self.machine = Machine(model=self, states=FullEAPStateMachine.STATES,
                               transitions=FullEAPStateMachine.TRANSITIONS,
                               queued=True,
                               initial=FullEAPStateMachine.NO_STATE)

        # TODO dynamically assign this or make a way to give it multiple methods
        # and self.m is the one currently in use.
        # if we want to deal with each method locally.
        self.m = MPassthrough()  # pylint: disable=invalid-name
        logname = ".SM - %s" % self.src_mac
        self.logger = get_logger(log_prefix + logname)
Esempio n. 2
0
    def __init__(self, radius_output_queue, src_mac, timer_scheduler,
                 auth_handler, failure_handler, log_prefix):
        """

        Args:
            auth_handler (callable): callable that takes input of src_mac. Called on MAB-Success
            failure_handler (callable): callable that takes input of src_mac. Called on MAB-Failure.
            radius_output_queue (Queue): where to put Messages to send to AAA server
            src_mac (MacAddress): MAC address this statemachine (sm) belongs to.
            timer_scheduler (Scheduler): where to put timer events. (useful for Retransmits)
            log_prefix (String): the prefix used when outputting logs
        """
        self.radius_output_messages = radius_output_queue
        self.src_mac = src_mac
        self.timer_scheduler = timer_scheduler
        self.auth_handler = auth_handler
        self.failure_handler = failure_handler
        self.aaa_sent_count = 0
        self.set_timer = None
        self.machine = Machine(
            model=self,
            states=MacAuthenticationBypassStateMachine.STATES,
            transitions=MacAuthenticationBypassStateMachine.TRANSITIONS,
            queued=True,
            initial=MacAuthenticationBypassStateMachine.DISABLED)

        self.logger = get_logger(log_prefix)

        self.reset_variables()
        self.port_enabled = True
        self.eth_received = True
Esempio n. 3
0
    def __init__(self,
                 interface_name,
                 logger=None,
                 auth_handler=None,
                 failure_handler=None,
                 logoff_handler=None,
                 radius_server_ip=None,
                 radius_server_port=None,
                 radius_server_secret=None,
                 chewie_id=None):

        self.interface_name = interface_name
        self.log_name = Chewie.__name__
        if logger:
            self.log_name = logger.name + "." + Chewie.__name__

        self.logger = get_logger(self.log_name)
        self.auth_handler = auth_handler
        self.failure_handler = failure_handler
        self.logoff_handler = logoff_handler

        self.radius_server_ip = radius_server_ip
        self.radius_secret = radius_server_secret
        self.radius_server_port = self.RADIUS_UDP_PORT
        if radius_server_port:
            self.radius_server_port = radius_server_port
        self.radius_listen_ip = "0.0.0.0"
        self.radius_listen_port = 0

        self.chewie_id = "44-44-44-44-44-44:"  # used by the RADIUS Attribute
        # 'Called-Station' in Access-Request
        if chewie_id:
            self.chewie_id = chewie_id

        self.state_machines = {}  # port_id_str: { mac : state_machine}
        self.port_to_eapol_id = {
        }  # port_id: last ID used in preemptive identity request.
        # TODO for port_to_eapol_id - may want to set ID to null (-1...) if sent from the
        #  state machine.
        self.port_status = {}  # port_id: status (true=up, false=down)
        self.port_to_identity_job = {}  # port_id: timerJob

        self.eap_output_messages = Queue()
        self.radius_output_messages = Queue()

        self.radius_lifecycle = RadiusLifecycle(self.radius_secret,
                                                self.chewie_id, self.logger)
        self.timer_scheduler = timer_scheduler.TimerScheduler(self.logger)

        self.eap_socket = None
        self.mab_socket = None
        self.pool = None
        self.eventlets = None
        self.radius_socket = None
        self.interface_index = None

        self.eventlets = []
Esempio n. 4
0
 def __init__(
         self,
         listen_ip,
         listen_port,
         server_ip,  # pylint: disable=too-many-arguments
         server_port,
         log_prefix):
     self.socket = None
     self.listen_ip = listen_ip
     self.listen_port = listen_port
     self.server_ip = server_ip
     self.server_port = server_port
     self.logger = get_logger(log_prefix)
Esempio n. 5
0
    def __init__(self, port_id, log_prefix, timer_scheduler,
                 eap_output_messages, radius_output_messages):
        self.port_id = port_id
        self.logger = get_logger(log_prefix)
        self.supplicant_output_messages = eap_output_messages
        self.radius_output_messages = radius_output_messages

        self.state_machines = {}  # mac : state_machine
        self.current_preemtive_eapol_id = None
        self.port_status = False  # port_id: status (true=up, false=down)
        self.identity_job = None  # timerJob
        self.session_job = None  # timerJob
        self.timer_scheduler = timer_scheduler
Esempio n. 6
0
    def __init__(self,
                 interface_name,
                 logger=None,
                 auth_handler=None,
                 failure_handler=None,
                 logoff_handler=None,
                 radius_server_ip=None,
                 radius_server_port=None,
                 radius_server_secret=None,
                 chewie_id=None):
        self.interface_name = interface_name
        self.logger = get_logger(logger.name + "." + Chewie.__name__)
        self.auth_handler = auth_handler
        self.failure_handler = failure_handler
        self.logoff_handler = logoff_handler

        self.radius_server_ip = radius_server_ip
        self.radius_secret = radius_server_secret
        self.radius_server_port = self.RADIUS_UDP_PORT
        if radius_server_port:
            self.radius_server_port = radius_server_port
        self.radius_listen_ip = "0.0.0.0"
        self.radius_listen_port = 0

        self.chewie_id = "44-44-44-44-44-44:"  # used by the RADIUS Attribute
        # 'Called-Station' in Access-Request
        if chewie_id:
            self.chewie_id = chewie_id

        self.state_machines = {}  # mac: state_machine

        self.eap_output_messages = Queue()
        self.radius_output_messages = Queue()

        self.radius_lifecycle = RadiusLifecycle(self.radius_secret,
                                                self.chewie_id, self.logger)
        self.timer_scheduler = timer_scheduler.TimerScheduler(self.logger)

        self.eap_socket = None
        self.pool = None
        self.eventlets = None
        self.radius_socket = None
        self.interface_index = None

        self.eventlets = []
Esempio n. 7
0
 def __init__(self, interface_name, log_prefix):
     self.socket = None
     self.interface_index = None
     self.interface_name = interface_name
     self.logger = get_logger(log_prefix)