def __init__(self, *args, **kwargs):
        super(SimpleSwitch13, self).__init__(*args, **kwargs)
        self.mac_to_port = {}
        self.stp = kwargs['stplib']

        # Sample of stplib config.
        #  please refer to stplib.Stp.set_config() for details.
        config = {
            dpid_lib.str_to_dpid('0000000000000001'): {
                'bridge': {
                    'priority': 0x8000
                }
            },
            dpid_lib.str_to_dpid('0000000000000002'): {
                'bridge': {
                    'priority': 0x9000
                }
            },
            dpid_lib.str_to_dpid('0000000000000003'): {
                'bridge': {
                    'priority': 0xa000
                }
            }
        }
        self.stp.set_config(config)
Exemple #2
0
 def __init__(self, *args, **kwargs):
     super(SimpleSwitchLacp, self).__init__(*args, **kwargs)
     self.mac_to_port = {}
     self._lacp = kwargs['lacplib']
     # in this sample application, bonding i/fs of the switchs
     # shall be set up as follows:
     # - the port 1 and 2 of the datapath 1 face the slave i/fs.
     # - the port 3, 4 and 5 of the datapath 1 face the others.
     # - the port 1 and 2 of the datapath 2 face the others.
     self._lacp.add(dpid=str_to_dpid('0000000000000001'), ports=[1, 2])
     self._lacp.add(dpid=str_to_dpid('0000000000000001'), ports=[3, 4, 5])
     self._lacp.add(dpid=str_to_dpid('0000000000000002'), ports=[1, 2])
Exemple #3
0
    def lldp_parse(data):
        pkt = packet.Packet(data)
        i = iter(pkt)
        eth_pkt = six.next(i)
        assert type(eth_pkt) == ethernet.ethernet

        lldp_pkt = six.next(i)
        if type(lldp_pkt) != lldp.lldp:
            raise LLDPPacket.LLDPUnknownFormat()

        tlv_chassis_id = lldp_pkt.tlvs[0]
        if tlv_chassis_id.subtype != lldp.ChassisID.SUB_LOCALLY_ASSIGNED:
            raise LLDPPacket.LLDPUnknownFormat(
                msg='unknown chassis id subtype %d' % tlv_chassis_id.subtype)
        chassis_id = tlv_chassis_id.chassis_id.decode('utf-8')
        if not chassis_id.startswith(LLDPPacket.CHASSIS_ID_PREFIX):
            raise LLDPPacket.LLDPUnknownFormat(
                msg='unknown chassis id format %s' % chassis_id)
        src_dpid = str_to_dpid(chassis_id[LLDPPacket.CHASSIS_ID_PREFIX_LEN:])

        tlv_port_id = lldp_pkt.tlvs[1]
        if tlv_port_id.subtype != lldp.PortID.SUB_PORT_COMPONENT:
            raise LLDPPacket.LLDPUnknownFormat(
                msg='unknown port id subtype %d' % tlv_port_id.subtype)
        port_id = tlv_port_id.port_id
        if len(port_id) != LLDPPacket.PORT_ID_SIZE:
            raise LLDPPacket.LLDPUnknownFormat(msg='unknown port id %d' %
                                               port_id)
        (src_port_no, ) = struct.unpack(LLDPPacket.PORT_ID_STR, port_id)

        return src_dpid, src_port_no
Exemple #4
0
 def _switches(self, req, **kwargs):
     dpid = None
     if 'dpid' in kwargs:
         dpid = dpid_lib.str_to_dpid(kwargs['dpid'])
     switches = get_switch(self.topology_api_app, dpid)
     body = json.dumps([switch.to_dict() for switch in switches])
     return Response(content_type='application/json', body=body)
Exemple #5
0
 def _links(self, req, **kwargs):
     dpid = None
     if 'dpid' in kwargs:
         dpid = dpid_lib.str_to_dpid(kwargs['dpid'])
     links = get_link(self.topology_api_app, dpid)
     body = json.dumps([link.to_dict() for link in links])
     return Response(content_type='application/json', body=body)
Exemple #6
0
 def _hosts(self, req, **kwargs):
     dpid = None
     if 'dpid' in kwargs:
         dpid = dpid_lib.str_to_dpid(kwargs['dpid'])
     hosts = get_host(self.topology_api_app, dpid)
     body = json.dumps([host.to_dict() for host in hosts])
     return Response(content_type='application/json', body=body)
Exemple #7
0
 def __init__(self, *args, **kwargs):
     super(SimpleSwitchIgmp, self).__init__(*args, **kwargs)
     self.mac_to_port = {}
     self._snoop = kwargs['igmplib']
     # if you want a switch to operate as a querier,
     # set up as follows:
     self._snoop.set_querier_mode(
         dpid=str_to_dpid('0000000000000001'), server_port=2)
Exemple #8
0
 def _do_key(dpid, key, func, ret_func):
     dpid = dpid_lib.str_to_dpid(dpid)
     try:
         ret = func(dpid, key)
     except KeyError:
         return Response(status=http_client.NOT_FOUND,
                         body='no dpid/key is found %s %s' %
                         (dpid_lib.dpid_to_str(dpid), key))
     return ret_func(ret)
Exemple #9
0
    def _do_switch(dpid, func, ret_func):
        dpid = dpid_lib.str_to_dpid(dpid)
        try:
            ret = func(dpid)
        except KeyError:
            return Response(status=http_client.NOT_FOUND,
                            body='no dpid is found %s' %
                            dpid_lib.dpid_to_str(dpid))

        return ret_func(ret)
Exemple #10
0
    def list_mac_table(self, req, **kwargs):

        simple_switch = self.simple_switch_app
        dpid = dpid_lib.str_to_dpid(kwargs['dpid'])

        if dpid not in simple_switch.mac_to_port:
            return Response(status=404)

        mac_table = simple_switch.mac_to_port.get(dpid, {})
        body = json.dumps(mac_table)
        return Response(content_type='application/json', body=body)
Exemple #11
0
    def _get_dp_ids(tables):
        dp_ids = []

        bridges = tables.get('Bridge')

        if not bridges:
            return dp_ids

        for bridge in bridges.rows.values():
            datapath_ids = bridge.datapath_id
            dp_ids.extend(dpidlib.str_to_dpid(dp_id) for dp_id in datapath_ids)

        return dp_ids
Exemple #12
0
    def _get_dp_ids(tables):
        bridges = tables.get('Bridge')

        if not bridges:
            return None

        for bridge in bridges.rows.values():
            datapath_ids = [dpidlib.str_to_dpid(dp_id)
                            for dp_id in bridge.datapath_id]

            if datapath_id in datapath_ids:
                openvswitch = tables['Open_vSwitch'].rows

                if openvswitch:
                    row = openvswitch.get(list(openvswitch.keys())[0])
                    return row.external_ids.get('system-id')

        return None
Exemple #13
0
    def put_mac_table(self, req, **kwargs):

        simple_switch = self.simple_switch_app
        dpid = dpid_lib.str_to_dpid(kwargs['dpid'])
        try:
            new_entry = req.json if req.body else {}
        except ValueError:
            raise Response(status=400)

        if dpid not in simple_switch.mac_to_port:
            return Response(status=404)

        try:
            mac_table = simple_switch.set_mac_to_port(dpid, new_entry)
            body = json.dumps(mac_table)
            return Response(content_type='application/json', body=body)
        except Exception as e:
            return Response(status=500)
Exemple #14
0
    def get_ofs(self, dp_id):
        if len(self) == 0:
            raise ValueError('qos sw is not connected.')

        dps = {}
        if dp_id == REST_ALL:
            dps = self
        else:
            try:
                dpid = dpid_lib.str_to_dpid(dp_id)
            except:
                raise ValueError('Invalid switchID.')

            if dpid in self:
                dps = {dpid: self[dpid]}
            else:
                msg = 'qos sw is not connected. : switchID=%s' % dp_id
                raise ValueError(msg)

        return dps
Exemple #15
0
    def get_ofs(self, dp_id):
        LOG.info('%s(): caller(): %s', log_utils.get_fname(1),
                 log_utils.get_fname(2))
        if len(self) == 0:
            raise ValueError('qos sw is not connected.')

        dps = {}
        if dp_id == REST_ALL:
            dps = self
        else:
            try:
                dpid = dpid_lib.str_to_dpid(dp_id)
            except:
                raise ValueError('Invalid switchID.')

            if dpid in self:
                dps = {dpid: self[dpid]}
            else:
                msg = 'qos sw is not connected. : switchID=%s' % dp_id
                raise ValueError(msg)

        return dps
Exemple #16
0
 def __init__(self, *args, **kwargs):
     super(SimpleSwitchLacp13, self).__init__(*args, **kwargs)
     self.mac_to_port = {}
     self._lacp = kwargs['lacplib']
     self._lacp.add(dpid=str_to_dpid('0000000000000001'), ports=[1, 2])
 def __init__(self, *args, **kwargs):
     super(SimpleSwitchIgmp13, self).__init__(*args, **kwargs)
     self.mac_to_port = {}
     self._snoop = kwargs['igmplib']
     self._snoop.set_querier_mode(dpid=str_to_dpid('0000000000000001'),
                                  server_port=2)
Exemple #18
0
 def _match_fn(row):
     row_dpid = dpidlib.str_to_dpid(str(row.datapath_id[0]))
     return row_dpid == datapath_id