async def post_flowentry_delete(post_data): dpid = post_data['dpid'] result = zof.compile({ "type": "FLOW_MOD", "msg": { "cookie": 0, "cookie_mask": 0xFFFFFFFFFFFFFFFF, "table_id": post_data.get('table', 0), "command": "DELETE_STRICT", "priority": post_data['priority'], "buffer_id": "NO_BUFFER", "out_port": "ANY", "out_group": "ANY", "match": [{ "field": k.upper(), "value": v } for k, v in post_data['match'].items()], "instructions": [] } }) result.send(datapath_id=_parse_dpid(dpid)) return {dpid: "SUCCESS"}
async def post_flowentry(post_data): dpid = post_data['dpid'] actions = [] for v in post_data['actions']: actions.append({"action": v['type'], **v}) del actions[-1]['type'] zof.compile({ "type": "FLOW_MOD", "msg": { "cookie": 0, "cookie_mask": 0xFFFFFFFFFFFFFFFF, "table_id": post_data.get('table', 0), "command": "ADD", "priority": post_data['priority'], "buffer_id": "NO_BUFFER", "out_port": "ANY", "out_group": "ANY", "match": [{ "field": k.upper(), "value": v } for k, v in post_data['match'].items()], "instructions": [{ "instruction": "APPLY_ACTIONS", "actions": actions }, { "instruction": "GOTO_TABLE", "table_id": post_data.get('goto_table', 1) }] } }).send(datapath_id=_parse_dpid(dpid)) return {dpid: "SUCCESS"}
async def post_flows(dpid, post_data): match = pktview_to_list(post_data.get('match', {})) flow_req = zof.compile({ 'type': 'REQUEST.FLOW_DESC', 'msg': { 'table_id': post_data.get('table_id', 'ALL'), 'out_port': post_data.get('out_port', 'ANY'), 'out_group': post_data.get('out_group', 'ANY'), 'cookie': post_data.get('cookie', 0), 'cookie_mask': post_data.get('cookie_mask', 0), 'match': match } }) result = [] async for ofmsg in flow_req.request(datapath_id=_parse_dpid(dpid)): _translate_flows(ofmsg['msg']) result.extend(ofmsg['msg']) return {dpid: result}
APP.logger.info("Inserting FORWARD_TABLE_1") FORWARD_TABLE_1.send() APP.logger.info("Inserting LLDP_FLOW") LLDP_FLOW.send() APP.SDN.handle_switch_enter(event) OUTPUT_NORMAL_FLOW = zof.compile(''' # Add permanent flow entry to table 0 type: FLOW_MOD msg: command: ADD table_id: 1 priority: 0 instructions: - instruction: APPLY_ACTIONS actions: - action: OUTPUT port_no: NORMAL max_len: NO_BUFFER ''') FORWARD_TABLE_1 = zof.compile(''' # Forward general traffic to table 1 type: FLOW_MOD msg: command: ADD table_id: 0 priority: 0 instructions:
pass APP.logger.info('%s Remove %s vlan %s (%s)', datapath_id, eth_dst, vlan_vid, reason) @APP.message(any) def other_message(event): """Log ignored messages.""" APP.logger.debug('Ignored message: %r', event) DELETE_FLOWS = zof.compile(''' # Delete flows in table 0. type: FLOW_MOD msg: command: DELETE table_id: 0 ''') BARRIER = zof.compile(''' type: BARRIER_REQUEST ''') TABLE_MISS_FLOW = zof.compile(''' # Add permanent table miss flow entry to table 0 type: FLOW_MOD msg: command: ADD table_id: 0 priority: 0
async def get_portdesc_specific(dpid, port): # FIXME(bfish): Filter by port... return await get_portdesc(dpid) @WEB.get('/stats/portdesc/{dpid}', 'json') async def get_portdesc(dpid): result = await PORTDESC_REQ.request(datapath_id=_parse_dpid(dpid)) return {dpid: result['msg']} FLOWDESC_REQ = zof.compile(''' type: REQUEST.FLOW_DESC msg: table_id: ALL out_port: ANY out_group: ANY cookie: 0 cookie_mask: 0 match: [] ''') GROUPDESC_REQ = zof.compile(''' type: REQUEST.GROUP_DESC ''') PORTSTATS_REQ = zof.compile(''' type: REQUEST.PORT_STATS msg: port_no: $port_no ''')