def _list_and_update_local_logical_device_flows(self, id): # retrieve flow list res = self.get('/api/v1/local/logical_devices/{}/flows'.format(id)) len_before = len(res['items']) t0 = time() # add some flows for _ in xrange(10): req = ofp.FlowTableUpdate( id=id, flow_mod=mk_simple_flow_mod( cookie=randint(1, 10000000000), priority=randint(1, 10000), # to make it unique match_fields=[ in_port(129) ], actions=[ output(1) ] ) ) self.post('/api/v1/local/logical_devices/{}/flows'.format(id), MessageToDict(req, preserving_proto_field_name=True), expected_http_code=200) print time() - t0 res = self.get('/api/v1/local/logical_devices/{}/flows'.format(id)) len_after = len(res['items']) self.assertGreater(len_after, len_before)
def simulate_eapol_flow_install(self, ldev_id, olt_id, onu_ids): # emulate the flow mod requests that shall arrive from the SDN # controller, one for each ONU lports = self.get( '/api/v1/logical_devices/{}/ports'.format(ldev_id))['items'] # device_id -> logical port map, which we will use to construct # our flows lport_map = dict((lp['device_id'], lp) for lp in lports) for onu_id in onu_ids: # if eth_type == 0x888e => send to controller _in_port = lport_map[onu_id]['ofp_port']['port_no'] req = ofp.FlowTableUpdate( id=ldev_id, flow_mod=mk_simple_flow_mod( match_fields=[ in_port(_in_port), vlan_vid(ofp.OFPVID_PRESENT | 0), eth_type(0x888e) ], actions=[output(ofp.OFPP_CONTROLLER)], priority=1000)) res = self.post('/api/v1/logical_devices/{}/flows'.format(ldev_id), MessageToDict(req, preserving_proto_field_name=True), expected_http_code=200) # for sanity, verify that flows are in flow table of logical device flows = self.get( '/api/v1/logical_devices/{}/flows'.format(ldev_id))['items'] self.assertGreaterEqual(len(flows), 4)
def _list_and_update_logical_device_flows(self, id): # retrieve flow list res = self.get('/api/v1/logical_devices/{}/flows'.format(id)) len_before = len(res['items']) # add some flows req = ofp.FlowTableUpdate( id=id, flow_mod=mk_simple_flow_mod( cookie=randint(1, 10000000000), priority=len_before, match_fields=[ in_port(129) ], actions=[ output(1) ] ) ) res = self.post('/api/v1/logical_devices/{}/flows'.format(id), MessageToDict(req, preserving_proto_field_name=True), expected_http_code=200) # TODO check some stuff on res res = self.get('/api/v1/logical_devices/{}/flows'.format(id)) len_after = len(res['items']) self.assertGreater(len_after, len_before)