示例#1
0
    def __init__(self, socket, address):
        super(Datapath, self).__init__()

        self.socket = socket
        #  TCP_NODELAY 不使用Nagle算法
        self.socket.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
        # 设置阻塞时间
        self.socket.settimeout(CONF.socket_timeout)
        self.address = address
        self.is_active = True

        # The limit is arbitrary. We need to limit queue size to
        # prevent it from eating memory up.
        # 限制是任意的。
        # 我们需要限制队列大小以防止它占用内存。
        self.send_q = hub.Queue(16)
        # 有限信号量
        self._send_q_sem = hub.BoundedSemaphore(self.send_q.maxsize)

        self.echo_request_interval = CONF.echo_request_interval
        self.max_unreplied_echo_requests = CONF.maximum_unreplied_echo_requests
        self.unreplied_echo_requests = []

        self.xid = random.randint(0, self.ofproto.MAX_XID)
        self.id = None  # datapath_id is unknown yet
        self._ports = None
        self.flow_format = ofproto_v1_0.NXFF_OPENFLOW10
        self.ofp_brick = ryu.base.app_manager.lookup_service_brick('ofp_event')
        # 状态标识
        self.state = None  # for pylint
        self.set_state(HANDSHAKE_DISPATCHER)
示例#2
0
    def __init__(self, *_args, **_kwargs):
        super(RyuApp, self).__init__()
        self.name = self.__class__.__name__
        self.event_handlers = {}  # ev_cls -> handlers:list
        self.observers = {}  # ev_cls -> observer-name -> states:set
        self.threads = []
        self.main_thread = None
        self.events = hub.Queue(128)
        self._events_sem = hub.BoundedSemaphore(self.events.maxsize)
        if hasattr(self.__class__, 'LOGGER_NAME'):
            self.logger = logging.getLogger(self.__class__.LOGGER_NAME)
        else:
            self.logger = logging.getLogger(self.name)
        self.CONF = cfg.CONF
        #modify by hmily
        if self.CONF.enable_debugger:
            self.logger.setLevel(logging.DEBUG)
        self.logger.debug("[debug]--ryuApp init")

        # prevent accidental creation of instances of this class outside RyuApp
        class _EventThreadStop(event.EventBase):
            pass

        self._event_stop = _EventThreadStop()
        self.is_active = True
示例#3
0
    def __init__(self, *_args, **_kwargs):
        super(RyuApp, self).__init__()
        # 其name 即为类的名字
        self.name = self.__class__.__name__
        # 事件 与 句柄列表 的字典
        self.event_handlers = {}  # ev_cls -> handlers:list
        self.observers = {}  # ev_cls -> observer-name -> states:set
        # 线程列表
        self.threads = []
        self.main_thread = None
        # hub.Queue 并发队列,其最大数量为128
        # 存放 事件及状态
        self.events = hub.Queue(128)
        # 声明有限信号量,其最大个数与hub.Queue.maxsize相同,即128
        self._events_sem = hub.BoundedSemaphore(self.events.maxsize)
        # 判断是否含有LOGGER_NAME 属性,self.__class__即指向该类
        if hasattr(self.__class__, 'LOGGER_NAME'):
            self.logger = logging.getLogger(self.__class__.LOGGER_NAME)
        else:
            self.logger = logging.getLogger(self.name)
        self.CONF = cfg.CONF

        # prevent accidental creation of instances of this class outside RyuApp
        # 防止在RyuApp之外意外创建此类的实例
        class _EventThreadStop(event.EventBase):
            pass

        self._event_stop = _EventThreadStop()
        # 标识
        self.is_active = True
示例#4
0
    def __init__(self, *_args, **_kwargs):
        super(RyuApp, self).__init__()
        self.name = self.__class__.__name__
        # {注册事件:该事件处理函数(可能有多个)}
        self.event_handlers = {}  # ev_cls -> handlers:list
        self.observers = {}  # ev_cls -> observer-name -> states:set
        self.threads = []
        self.main_thread = None
        self.events = hub.Queue(128)
        self._events_sem = hub.BoundedSemaphore(self.events.maxsize)
        if hasattr(self.__class__, 'LOGGER_NAME'):
            self.logger = logging.getLogger(self.__class__.LOGGER_NAME)
        else:
            self.logger = logging.getLogger(self.name)
        self.CONF = cfg.CONF

        # prevent accidental creation of instances of this class outside RyuApp
        class _EventThreadStop(event.EventBase):
            pass

        self._event_stop = _EventThreadStop()
        self.is_active = True