コード例 #1
0
ファイル: rest_api.py プロジェクト: MI-OSiRIS/zof-topology
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"}
コード例 #2
0
ファイル: rest_api.py プロジェクト: MI-OSiRIS/zof-topology
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"}
コード例 #3
0
ファイル: rest_api.py プロジェクト: MI-OSiRIS/zof-topology
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}
コード例 #4
0
    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:
コード例 #5
0
        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
コード例 #6
0
ファイル: rest_api.py プロジェクト: MI-OSiRIS/zof-topology
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
''')