예제 #1
0
    def _datapath_connect(self, ryu_event):
        """Handle any/all re/connection of a datapath.

        Args:
            ryu_event (ryu.controller.ofp_event.Event)
        """
        now = time.time()
        valve, ryu_dp, _ = self._get_valve(ryu_event)
        if valve is None:
            return
        discovered_up_ports = [
            port.port_no for port in list(ryu_dp.ports.values())
            if valve_of.port_status_from_state(port.state) and not valve_of.ignore_port(port.port_no)]
        self._send_flow_msgs(valve, valve.datapath_connect(now, discovered_up_ports))
예제 #2
0
파일: faucet.py 프로젝트: trentindav/faucet
    def _datapath_connect(self, ryu_event):
        """Handle any/all re/connection of a datapath.

        Args:
            ryu_event (ryu.controller.ofp_event.Event)
        """
        now = time.time()
        valve, ryu_dp, _ = self._get_valve(ryu_event)
        if valve is None:
            return
        discovered_up_ports = [
            port.port_no for port in list(ryu_dp.ports.values())
            if (valve_of.port_status_from_state(port.state) and
                not valve_of.ignore_port(port.port_no))]
        self._send_flow_msgs(valve, valve.datapath_connect(now, discovered_up_ports))
예제 #3
0
    def port_status_handler(self, ryu_event):
        """Handle a port status change event.

        Args:
            ryu_event (ryu.controller.ofp_event.EventOFPPortStatus): trigger.
        """
        msg = ryu_event.msg
        ryu_dp = msg.datapath
        dp_id = ryu_dp.id
        valve = self._get_valve(ryu_dp, 'port_status_handler', msg)
        if valve is None:
            return
        if not valve.dp.running:
            return
        port_no = msg.desc.port_no
        reason = msg.reason
        port_status = valve_of.port_status_from_state(msg.desc.state)
        self.logger.info('%s port state %u (reason %u)', dpid_log(dp_id),
                         msg.desc.state, reason)
        flowmods = valve.port_status_handler(port_no, reason, port_status)
        self._send_flow_msgs(dp_id, flowmods)
예제 #4
0
 def port_up_valid(port):
     """Return True if port is up and in valid range."""
     return valve_of.port_status_from_state(
         port.state) and not valve_of.ignore_port(port.port_no)