예제 #1
0
 def get_ports(self, device_id, port_type):
     id = ID()
     id.id = device_id
     p_type = IntType()
     p_type.val = port_type
     to_topic = createSubTopic(self.core_topic, device_id)
     reply_topic = createSubTopic(self.listening_topic, device_id)
     res = yield self.invoke(rpc="GetPorts",
                             to_topic=to_topic,
                             reply_topic=reply_topic,
                             device_id=id,
                             port_type=p_type)
     returnValue(res)
예제 #2
0
    def child_devices_state_update(self,
                                   parent_device_id,
                                   oper_status=None,
                                   connect_status=None):

        id = ID()
        id.id = parent_device_id
        o_status = IntType()
        if oper_status or oper_status == OperStatus.UNKNOWN:
            o_status.val = oper_status
        else:
            o_status.val = -1
        c_status = IntType()
        if connect_status or connect_status == ConnectStatus.UNKNOWN:
            c_status.val = connect_status
        else:
            c_status.val = -1

        to_topic = createSubTopic(self.core_topic, parent_device_id)
        reply_topic = createSubTopic(self.listening_topic, parent_device_id)
        res = yield self.invoke(rpc="child_devices_state_update",
                                to_topic=to_topic,
                                reply_topic=reply_topic,
                                parent_device_id=id,
                                oper_status=o_status,
                                connect_status=c_status)
        returnValue(res)
예제 #3
0
 def send_packet_in(self, device_id, port, packet):
     log.debug("send_packet_in", device_id=device_id)
     proto_id = ID()
     proto_id.id = device_id
     p = IntType()
     p.val = port
     pac = Packet()
     pac.payload = packet
     to_topic = createSubTopic(self.core_topic, device_id)
     reply_topic = createSubTopic(self.listening_topic, device_id)
     res = yield self.invoke(rpc="PacketIn",
                             to_topic=to_topic,
                             reply_topic=reply_topic,
                             device_id=proto_id,
                             port=p,
                             packet=pac)
     returnValue(res)
예제 #4
0
 def _to_proto(self, **kwargs):
     encoded = {}
     for k, v in kwargs.iteritems():
         if isinstance(v, Message):
             encoded[k] = v
         elif type(v) == int:
             i_proto = IntType()
             i_proto.val = v
             encoded[k] = i_proto
         elif type(v) == str:
             s_proto = StrType()
             s_proto.val = v
             encoded[k] = s_proto
         elif type(v) == bool:
             b_proto = BoolType()
             b_proto.val = v
             encoded[k] = b_proto
     return encoded
예제 #5
0
    def port_state_update(self, device_id, port_type, port_no, oper_status):
        id = ID()
        id.id = device_id
        pt = IntType()
        pt.val = port_type
        pNo = IntType()
        pNo.val = port_no
        o_status = IntType()
        o_status.val = oper_status

        to_topic = createSubTopic(self.core_topic, device_id)
        reply_topic = createSubTopic(self.listening_topic, device_id)
        res = yield self.invoke(rpc="PortStateUpdate",
                                to_topic=to_topic,
                                reply_topic=reply_topic,
                                device_id=id,
                                port_type=pt,
                                port_no=pNo,
                                oper_status=o_status)
        returnValue(res)
예제 #6
0
    def get_ofp_port_info(self, device, port_no):
        d = Device()
        if device:
            device.Unpack(d)
        else:
            return False, Error(code=ErrorCode.INVALID_PARAMETERS,
                                reason="device-invalid")
        p = IntType()
        if port_no:
            port_no.Unpack(p)
        else:
            return False, Error(code=ErrorCode.INVALID_PARAMETERS,
                                reason="port-no-invalid")

        return True, self.adapter.get_ofp_port_info(d, p.val)
예제 #7
0
 def child_device_detected(self, parent_device_id, parent_port_no,
                           child_device_type, channel_id, **kw):
     id = ID()
     id.id = parent_device_id
     ppn = IntType()
     ppn.val = parent_port_no
     cdt = StrType()
     cdt.val = child_device_type
     channel = IntType()
     channel.val = channel_id
     to_topic = createSubTopic(self.core_topic, parent_device_id)
     reply_topic = createSubTopic(self.listening_topic, parent_device_id)
     args = self._to_proto(**kw)
     res = yield self.invoke(rpc="ChildDeviceDetected",
                             to_topic=to_topic,
                             reply_topic=reply_topic,
                             parent_device_id=id,
                             parent_port_no=ppn,
                             child_device_type=cdt,
                             channel_id=channel,
                             **args)
     returnValue(res)