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)
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
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
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