def mod_flow_entry(dp, flow, cmd):
    cookie = str_to_int(flow.get('cookie', 0))
    priority = str_to_int(flow.get('priority',
                                   dp.ofproto.OFP_DEFAULT_PRIORITY))
    buffer_id = UTIL.ofp_buffer_from_user(
        flow.get('buffer_id', dp.ofproto.OFP_NO_BUFFER))
    out_port = UTIL.ofp_port_from_user(
        flow.get('out_port', dp.ofproto.OFPP_NONE))
    flags = str_to_int(flow.get('flags', 0))
    idle_timeout = str_to_int(flow.get('idle_timeout', 0))
    hard_timeout = str_to_int(flow.get('hard_timeout', 0))
    actions = to_actions(dp, flow.get('actions', []))
    match = to_match(dp, flow.get('match', {}))

    flow_mod = dp.ofproto_parser.OFPFlowMod(datapath=dp,
                                            match=match,
                                            cookie=cookie,
                                            command=cmd,
                                            idle_timeout=idle_timeout,
                                            hard_timeout=hard_timeout,
                                            priority=priority,
                                            buffer_id=buffer_id,
                                            out_port=out_port,
                                            flags=flags,
                                            actions=actions)

    ofctl_utils.send_msg(dp, flow_mod, LOG)
def mod_group_entry(dp, group, cmd):
    group_type = str(group.get('type', 'ALL'))
    t = UTIL.ofp_group_type_from_user(group_type)
    group_type = t if t != group_type else None
    if group_type is None:
        LOG.error('Unknown group type: %s', group.get('type'))

    group_id = UTIL.ofp_group_from_user(group.get('group_id', 0))

    buckets = []
    for bucket in group.get('buckets', []):
        weight = str_to_int(bucket.get('weight', 0))
        watch_port = str_to_int(bucket.get('watch_port', dp.ofproto.OFPP_ANY))
        watch_group = str_to_int(bucket.get('watch_group',
                                            dp.ofproto.OFPG_ANY))
        actions = []
        for dic in bucket.get('actions', []):
            action = to_action(dp, dic)
            if action is not None:
                actions.append(action)
        buckets.append(
            dp.ofproto_parser.OFPBucket(weight, watch_port, watch_group,
                                        actions))

    group_mod = dp.ofproto_parser.OFPGroupMod(dp, cmd, group_type, group_id,
                                              buckets)

    ofctl_utils.send_msg(dp, group_mod, LOG)
Beispiel #3
0
def mod_group_entry(dp, group, cmd):

    type_convert = {'ALL': dp.ofproto.OFPGT_ALL,
                    'SELECT': dp.ofproto.OFPGT_SELECT,
                    'INDIRECT': dp.ofproto.OFPGT_INDIRECT,
                    'FF': dp.ofproto.OFPGT_FF}

    type_ = type_convert.get(group.get('type', 'ALL'))
    if type_ is None:
        LOG.error('Unknown group type: %s', group.get('type'))

    group_id = UTIL.ofp_group_from_user(group.get('group_id', 0))

    buckets = []
    for bucket in group.get('buckets', []):
        weight = int(bucket.get('weight', 0))
        watch_port = int(bucket.get('watch_port', dp.ofproto.OFPP_ANY))
        watch_group = int(bucket.get('watch_group', dp.ofproto.OFPG_ANY))
        actions = []
        for dic in bucket.get('actions', []):
            action = to_action(dp, dic)
            if action is not None:
                actions.append(action)
        buckets.append(dp.ofproto_parser.OFPBucket(
            weight, watch_port, watch_group, actions))

    group_mod = dp.ofproto_parser.OFPGroupMod(
        dp, cmd, type_, group_id, buckets)

    ofctl_utils.send_msg(dp, group_mod, LOG)
Beispiel #4
0
def mod_port_behavior(dp, port_config):
    ofp = dp.ofproto
    parser = dp.ofproto_parser
    port_no = UTIL.ofp_port_from_user(port_config.get('port_no', 0))
    hw_addr = str(port_config.get('hw_addr'))
    config = int(port_config.get('config', 0))
    mask = int(port_config.get('mask', 0))
    properties = port_config.get('properties')

    prop = []
    for p in properties:
        type_ = UTIL.ofp_port_mod_prop_type_from_user(p['type'])
        length = None
        if type_ == ofp.OFPPDPT_ETHERNET:
            advertise = UTIL.ofp_port_features_from_user(p['advertise'])
            prop.append(
                parser.OFPPortModPropEthernet(type_, length, advertise))
        elif type_ == ofp.OFPPDPT_OPTICAL:
            prop.append(
                parser.OFPPortModPropOptical(
                    type_, length, p['configure'], p['freq_lmda'],
                    p['fl_offset'], p['grid_span'], p['tx_pwr']))
        elif type_ == ofp.OFPPDPT_EXPERIMENTER:
            prop.append(
                parser.OFPPortModPropExperimenter(
                    type_, length, p['experimenter'], p['exp_type'],
                    p['data']))
        else:
            LOG.error('Unknown port desc prop type: %s', type_)

    port_mod = dp.ofproto_parser.OFPPortMod(
        dp, port_no, hw_addr, config, mask, prop)

    ofctl_utils.send_msg(dp, port_mod, LOG)
Beispiel #5
0
def mod_port_behavior(dp, port_config):
    ofp = dp.ofproto
    parser = dp.ofproto_parser
    port_no = UTIL.ofp_port_from_user(port_config.get('port_no', 0))
    hw_addr = str(port_config.get('hw_addr'))
    config = int(port_config.get('config', 0))
    mask = int(port_config.get('mask', 0))
    properties = port_config.get('properties')

    prop = []
    for p in properties:
        type_ = UTIL.ofp_port_mod_prop_type_from_user(p['type'])
        length = None
        if type_ == ofp.OFPPDPT_ETHERNET:
            advertise = UTIL.ofp_port_features_from_user(p['advertise'])
            prop.append(parser.OFPPortModPropEthernet(type_, length,
                                                      advertise))
        elif type_ == ofp.OFPPDPT_OPTICAL:
            prop.append(
                parser.OFPPortModPropOptical(type_, length, p['configure'],
                                             p['freq_lmda'], p['fl_offset'],
                                             p['grid_span'], p['tx_pwr']))
        elif type_ == ofp.OFPPDPT_EXPERIMENTER:
            prop.append(
                parser.OFPPortModPropExperimenter(type_, length,
                                                  p['experimenter'],
                                                  p['exp_type'], p['data']))
        else:
            LOG.error('Unknown port desc prop type: %s', type_)

    port_mod = dp.ofproto_parser.OFPPortMod(dp, port_no, hw_addr, config, mask,
                                            prop)

    ofctl_utils.send_msg(dp, port_mod, LOG)
Beispiel #6
0
def mod_flow_entry(dp, flow, cmd):
    cookie = int(flow.get('cookie', 0))
    cookie_mask = int(flow.get('cookie_mask', 0))
    table_id = UTIL.ofp_table_from_user(flow.get('table_id', 0))
    idle_timeout = int(flow.get('idle_timeout', 0))
    hard_timeout = int(flow.get('hard_timeout', 0))
    priority = int(flow.get('priority', 0))
    buffer_id = UTIL.ofp_buffer_from_user(
        flow.get('buffer_id', dp.ofproto.OFP_NO_BUFFER))
    out_port = UTIL.ofp_port_from_user(
        flow.get('out_port', dp.ofproto.OFPP_ANY))
    out_group = UTIL.ofp_group_from_user(
        flow.get('out_group', dp.ofproto.OFPG_ANY))
    importance = int(flow.get('importance', 0))
    flags = int(flow.get('flags', 0))
    match = to_match(dp, flow.get('match', {}))
    inst = to_instructions(dp, flow.get('instructions', []))

    flow_mod = dp.ofproto_parser.OFPFlowMod(dp, cookie, cookie_mask, table_id,
                                            cmd, idle_timeout, hard_timeout,
                                            priority, buffer_id, out_port,
                                            out_group, importance, flags,
                                            match, inst)

    ofctl_utils.send_msg(dp, flow_mod, LOG)
Beispiel #7
0
def mod_flow_entry(dp, flow, cmd):
    cookie = int(flow.get("cookie", 0))
    cookie_mask = int(flow.get("cookie_mask", 0))
    table_id = UTIL.ofp_table_from_user(flow.get("table_id", 0))
    idle_timeout = int(flow.get("idle_timeout", 0))
    hard_timeout = int(flow.get("hard_timeout", 0))
    priority = int(flow.get("priority", 0))
    buffer_id = UTIL.ofp_buffer_from_user(flow.get("buffer_id", dp.ofproto.OFP_NO_BUFFER))
    out_port = UTIL.ofp_port_from_user(flow.get("out_port", dp.ofproto.OFPP_ANY))
    out_group = UTIL.ofp_group_from_user(flow.get("out_group", dp.ofproto.OFPG_ANY))
    importance = int(flow.get("importance", 0))
    flags = int(flow.get("flags", 0))
    match = to_match(dp, flow.get("match", {}))
    inst = to_instructions(dp, flow.get("instructions", []))

    flow_mod = dp.ofproto_parser.OFPFlowMod(
        dp,
        cookie,
        cookie_mask,
        table_id,
        cmd,
        idle_timeout,
        hard_timeout,
        priority,
        buffer_id,
        out_port,
        out_group,
        importance,
        flags,
        match,
        inst,
    )

    ofctl_utils.send_msg(dp, flow_mod, LOG)
Beispiel #8
0
def mod_group_entry(dp, group, cmd):
    group_type = str(group.get("type", "ALL"))
    t = UTIL.ofp_group_type_from_user(group_type)
    group_type = t if t != group_type else None
    if group_type is None:
        LOG.error("Unknown group type: %s", group.get("type"))

    group_id = UTIL.ofp_group_from_user(group.get("group_id", 0))

    buckets = []
    for bucket in group.get("buckets", []):
        weight = int(bucket.get("weight", 0))
        watch_port = int(bucket.get("watch_port", dp.ofproto.OFPP_ANY))
        watch_group = int(bucket.get("watch_group", dp.ofproto.OFPG_ANY))
        actions = []
        for dic in bucket.get("actions", []):
            action = to_action(dp, dic)
            if action is not None:
                actions.append(action)
        b = dp.ofproto_parser.OFPBucket(weight, watch_port, watch_group, actions)
        buckets.append(b)

    group_mod = dp.ofproto_parser.OFPGroupMod(dp, cmd, group_type, group_id, buckets)

    ofctl_utils.send_msg(dp, group_mod, LOG)
Beispiel #9
0
def mod_group_entry(dp, group, cmd):
    group_type = str(group.get('type', 'ALL'))
    t = UTIL.ofp_group_type_from_user(group_type)
    group_type = t if t != group_type else None
    if group_type is None:
        LOG.error('Unknown group type: %s', group.get('type'))

    group_id = UTIL.ofp_group_from_user(group.get('group_id', 0))

    buckets = []
    for bucket in group.get('buckets', []):
        weight = int(bucket.get('weight', 0))
        watch_port = int(bucket.get('watch_port', dp.ofproto.OFPP_ANY))
        watch_group = int(bucket.get('watch_group', dp.ofproto.OFPG_ANY))
        actions = []
        for dic in bucket.get('actions', []):
            action = to_action(dp, dic)
            if action is not None:
                actions.append(action)
        buckets.append(dp.ofproto_parser.OFPBucket(
            weight, watch_port, watch_group, actions))

    group_mod = dp.ofproto_parser.OFPGroupMod(
        dp, cmd, group_type, group_id, buckets)

    ofctl_utils.send_msg(dp, group_mod, LOG)
Beispiel #10
0
def mod_group_entry(dp, group, cmd):

    type_convert = {
        'ALL': dp.ofproto.OFPGT_ALL,
        'SELECT': dp.ofproto.OFPGT_SELECT,
        'INDIRECT': dp.ofproto.OFPGT_INDIRECT,
        'FF': dp.ofproto.OFPGT_FF
    }

    type_ = type_convert.get(group.get('type', 'ALL'))
    if type_ is None:
        LOG.error('Unknown group type: %s', group.get('type'))

    group_id = UTIL.ofp_group_from_user(group.get('group_id', 0))

    buckets = []
    for bucket in group.get('buckets', []):
        weight = int(bucket.get('weight', 0))
        watch_port = int(bucket.get('watch_port', dp.ofproto.OFPP_ANY))
        watch_group = int(bucket.get('watch_group', dp.ofproto.OFPG_ANY))
        actions = []
        for dic in bucket.get('actions', []):
            action = to_action(dp, dic)
            if action is not None:
                actions.append(action)
        buckets.append(
            dp.ofproto_parser.OFPBucket(weight, watch_port, watch_group,
                                        actions))

    group_mod = dp.ofproto_parser.OFPGroupMod(dp, cmd, type_, group_id,
                                              buckets)

    ofctl_utils.send_msg(dp, group_mod, LOG)
Beispiel #11
0
def mod_port_behavior(dp, port_config):
    ofp = dp.ofproto
    parser = dp.ofproto_parser
    port_no = UTIL.ofp_port_from_user(port_config.get("port_no", 0))
    hw_addr = str(port_config.get("hw_addr"))
    config = int(port_config.get("config", 0))
    mask = int(port_config.get("mask", 0))
    properties = port_config.get("properties")

    prop = []
    for p in properties:
        type_ = UTIL.ofp_port_mod_prop_type_from_user(p["type"])
        length = None
        if type_ == ofp.OFPPDPT_ETHERNET:
            advertise = UTIL.ofp_port_features_from_user(p["advertise"])
            m = parser.OFPPortModPropEthernet(type_, length, advertise)
        elif type_ == ofp.OFPPDPT_OPTICAL:
            m = parser.OFPPortModPropOptical(
                type_, length, p["configure"], p["freq_lmda"], p["fl_offset"], p["grid_span"], p["tx_pwr"]
            )
        elif type_ == ofp.OFPPDPT_EXPERIMENTER:
            m = parser.OFPPortModPropExperimenter(type_, length, p["experimenter"], p["exp_type"], p["data"])
        else:
            LOG.error("Unknown port desc prop type: %s", type_)
            continue
        prop.append(m)

    port_mod = dp.ofproto_parser.OFPPortMod(dp, port_no, hw_addr, config, mask, prop)

    ofctl_utils.send_msg(dp, port_mod, LOG)
Beispiel #12
0
def delete_flow_entry(dp):
    match = dp.ofproto_parser.OFPMatch(
        dp.ofproto.OFPFW_ALL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

    flow_mod = dp.ofproto_parser.OFPFlowMod(
        datapath=dp, match=match, cookie=0,
        command=dp.ofproto.OFPFC_DELETE)

    ofctl_utils.send_msg(dp, flow_mod, LOG)
Beispiel #13
0
def delete_flow_entry(dp):
    match = dp.ofproto_parser.OFPMatch(
        dp.ofproto.OFPFW_ALL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

    flow_mod = dp.ofproto_parser.OFPFlowMod(
        datapath=dp, match=match, cookie=0,
        command=dp.ofproto.OFPFC_DELETE)

    ofctl_utils.send_msg(dp, flow_mod, LOG)
Beispiel #14
0
def mod_port_behavior(dp, port_config):
    port_no = UTIL.ofp_port_from_user(port_config.get('port_no', 0))
    hw_addr = str(port_config.get('hw_addr'))
    config = int(port_config.get('config', 0))
    mask = int(port_config.get('mask', 0))
    advertise = int(port_config.get('advertise'))

    port_mod = dp.ofproto_parser.OFPPortMod(
        dp, port_no, hw_addr, config, mask, advertise)

    ofctl_utils.send_msg(dp, port_mod, LOG)
Beispiel #15
0
def mod_port_behavior(dp, port_config):
    port_no = UTIL.ofp_port_from_user(port_config.get('port_no', 0))
    hw_addr = str(port_config.get('hw_addr'))
    config = int(port_config.get('config', 0))
    mask = int(port_config.get('mask', 0))
    advertise = int(port_config.get('advertise'))

    port_mod = dp.ofproto_parser.OFPPortMod(dp, port_no, hw_addr, config, mask,
                                            advertise)

    ofctl_utils.send_msg(dp, port_mod, LOG)
Beispiel #16
0
def mod_meter_entry(dp, meter, cmd):

    flags_convert = {
        'KBPS': dp.ofproto.OFPMF_KBPS,
        'PKTPS': dp.ofproto.OFPMF_PKTPS,
        'BURST': dp.ofproto.OFPMF_BURST,
        'STATS': dp.ofproto.OFPMF_STATS
    }

    flags = 0
    if 'flags' in meter:
        meter_flags = meter['flags']
        if not isinstance(meter_flags, list):
            meter_flags = [meter_flags]
        for flag in meter_flags:
            if flag not in flags_convert:
                LOG.error('Unknown meter flag: %s', flag)
                continue
            flags |= flags_convert.get(flag)

    meter_id = UTIL.ofp_meter_from_user(meter.get('meter_id', 0))

    bands = []
    for band in meter.get('bands', []):
        band_type = band.get('type')
        rate = str_to_int(band.get('rate', 0))
        burst_size = str_to_int(band.get('burst_size', 0))
        if band_type == 'DROP':
            bands.append(dp.ofproto_parser.OFPMeterBandDrop(rate, burst_size))
        elif band_type == 'DSCP_REMARK':
            prec_level = str_to_int(band.get('prec_level', 0))
            bands.append(
                dp.ofproto_parser.OFPMeterBandDscpRemark(
                    rate, burst_size, prec_level))
        elif band_type == 'EXPERIMENTER':
            experimenter = str_to_int(band.get('experimenter', 0))
            bands.append(
                dp.ofproto_parser.OFPMeterBandExperimenter(
                    rate, burst_size, experimenter))
        else:
            LOG.error('Unknown band type: %s', band_type)
    LOG.error('METER TO BE ADDED %r', meter)
    try:
        meter_mod = dp.ofproto_parser.OFPMeterMod(dp, cmd, flags, meter_id,
                                                  bands)
        req = dp.ofproto_parser.OFPMeterStatsRequest(dp, 0,
                                                     dp.ofproto.OFPM_ALL)
        LOG.error('METER ADD RESULT %r', req)
    except RuntimeError as e:
        LOG.error('Error: %s', e)

    ofctl_utils.send_msg(dp, meter_mod, LOG)
Beispiel #17
0
def mod_meter_entry(dp, meter, cmd):

    flags_convert = {'KBPS': dp.ofproto.OFPMF_KBPS,
                     'PKTPS': dp.ofproto.OFPMF_PKTPS,
                     'BURST': dp.ofproto.OFPMF_BURST,
                     'STATS': dp.ofproto.OFPMF_STATS}

    flags = 0
    if 'flags' in meter:
        meter_flags = meter['flags']
        if not isinstance(meter_flags, list):
            meter_flags = [meter_flags]
        for flag in meter_flags:
            if flag not in flags_convert:
                LOG.error('Unknown meter flag: %s', flag)
                continue
            flags |= flags_convert.get(flag)

    meter_id = UTIL.ofp_meter_from_user(meter.get('meter_id', 0))

    bands = []
    for band in meter.get('bands', []):
        band_type = band.get('type')
        rate = int(band.get('rate', 0))
        burst_size = int(band.get('burst_size', 0))
        if band_type == 'DROP':
            bands.append(
                dp.ofproto_parser.OFPMeterBandDrop(rate, burst_size))
        elif band_type == 'DSCP_REMARK':
            prec_level = int(band.get('prec_level', 0))
            bands.append(
                dp.ofproto_parser.OFPMeterBandDscpRemark(
                    rate, burst_size, prec_level))
        elif band_type == 'EXPERIMENTER':
            experimenter = int(band.get('experimenter', 0))
            bands.append(
                dp.ofproto_parser.OFPMeterBandExperimenter(
                    rate, burst_size, experimenter))
        else:
            LOG.error('Unknown band type: %s', band_type)

    meter_mod = dp.ofproto_parser.OFPMeterMod(
        dp, cmd, flags, meter_id, bands)

    ofctl_utils.send_msg(dp, meter_mod, LOG)
def mod_meter_entry(dp, meter, cmd):
    flags = 0
    if 'flags' in meter:
        meter_flags = meter['flags']
        if not isinstance(meter_flags, list):
            meter_flags = [meter_flags]
        for flag in meter_flags:
            t = UTIL.ofp_meter_flags_from_user(flag)
            f = t if t != flag else None
            if f is None:
                LOG.error('Unknown meter flag: %s', flag)
                continue
            flags |= f

    meter_id = UTIL.ofp_meter_from_user(meter.get('meter_id', 0))

    bands = []
    for band in meter.get('bands', []):
        band_type = band.get('type')
        rate = int(band.get('rate', 0))
        burst_size = int(band.get('burst_size', 0))
        if band_type == 'DROP':
            bands.append(
                dp.ofproto_parser.OFPMeterBandDrop(rate, burst_size))
        elif band_type == 'DSCP_REMARK':
            prec_level = int(band.get('prec_level', 0))
            bands.append(
                dp.ofproto_parser.OFPMeterBandDscpRemark(
                    rate, burst_size, prec_level))
        elif band_type == 'EXPERIMENTER':
            experimenter = int(band.get('experimenter', 0))
            bands.append(
                dp.ofproto_parser.OFPMeterBandExperimenter(
                    rate, burst_size, experimenter))
        else:
            LOG.error('Unknown band type: %s', band_type)

    meter_mod = dp.ofproto_parser.OFPMeterMod(
        dp, cmd, flags, meter_id, bands)

    ofctl_utils.send_msg(dp, meter_mod, LOG)
Beispiel #19
0
def mod_meter_entry(dp, meter, cmd):
    flags = 0
    if 'flags' in meter:
        meter_flags = meter['flags']
        if not isinstance(meter_flags, list):
            meter_flags = [meter_flags]
        for flag in meter_flags:
            t = UTIL.ofp_meter_flags_from_user(flag)
            f = t if t != flag else None
            if f is None:
                LOG.error('Unknown meter flag: %s', flag)
                continue
            flags |= f

    meter_id = UTIL.ofp_meter_from_user(meter.get('meter_id', 0))

    bands = []
    for band in meter.get('bands', []):
        band_type = band.get('type')
        rate = str_to_int(band.get('rate', 0))
        burst_size = str_to_int(band.get('burst_size', 0))
        if band_type == 'DROP':
            bands.append(
                dp.ofproto_parser.OFPMeterBandDrop(rate, burst_size))
        elif band_type == 'DSCP_REMARK':
            prec_level = str_to_int(band.get('prec_level', 0))
            bands.append(
                dp.ofproto_parser.OFPMeterBandDscpRemark(
                    rate, burst_size, prec_level))
        elif band_type == 'EXPERIMENTER':
            experimenter = str_to_int(band.get('experimenter', 0))
            bands.append(
                dp.ofproto_parser.OFPMeterBandExperimenter(
                    rate, burst_size, experimenter))
        else:
            LOG.error('Unknown band type: %s', band_type)

    meter_mod = dp.ofproto_parser.OFPMeterMod(
        dp, cmd, flags, meter_id, bands)

    ofctl_utils.send_msg(dp, meter_mod, LOG)
Beispiel #20
0
def mod_flow_entry(dp, flow, cmd):
    cookie = int(flow.get('cookie', 0))
    cookie_mask = int(flow.get('cookie_mask', 0))
    table_id = UTIL.ofp_table_from_user(flow.get('table_id', 0))
    idle_timeout = int(flow.get('idle_timeout', 0))
    hard_timeout = int(flow.get('hard_timeout', 0))
    priority = int(flow.get('priority', 0))
    buffer_id = UTIL.ofp_buffer_from_user(
        flow.get('buffer_id', dp.ofproto.OFP_NO_BUFFER))
    out_port = UTIL.ofp_port_from_user(
        flow.get('out_port', dp.ofproto.OFPP_ANY))
    out_group = UTIL.ofp_group_from_user(
        flow.get('out_group', dp.ofproto.OFPG_ANY))
    flags = int(flow.get('flags', 0))
    match = to_match(dp, flow.get('match', {}))
    inst = to_actions(dp, flow.get('actions', []))

    flow_mod = dp.ofproto_parser.OFPFlowMod(
        dp, cookie, cookie_mask, table_id, cmd, idle_timeout,
        hard_timeout, priority, buffer_id, out_port, out_group,
        flags, match, inst)

    ofctl_utils.send_msg(dp, flow_mod, LOG)
Beispiel #21
0
def mod_flow_entry(dp, flow, cmd):
    cookie = int(flow.get('cookie', 0))
    priority = int(flow.get('priority',
                            dp.ofproto.OFP_DEFAULT_PRIORITY))
    buffer_id = UTIL.ofp_buffer_from_user(
        flow.get('buffer_id', dp.ofproto.OFP_NO_BUFFER))
    out_port = UTIL.ofp_port_from_user(
        flow.get('out_port', dp.ofproto.OFPP_NONE))
    flags = int(flow.get('flags', 0))
    idle_timeout = int(flow.get('idle_timeout', 0))
    hard_timeout = int(flow.get('hard_timeout', 0))
    actions = to_actions(dp, flow.get('actions', []))
    match = to_match(dp, flow.get('match', {}))

    flow_mod = dp.ofproto_parser.OFPFlowMod(
        datapath=dp, match=match, cookie=cookie,
        command=cmd, idle_timeout=idle_timeout,
        hard_timeout=hard_timeout, priority=priority,
        buffer_id=buffer_id, out_port=out_port,
        flags=flags,
        actions=actions)

    ofctl_utils.send_msg(dp, flow_mod, LOG)
Beispiel #22
0
def mod_meter_entry(dp, meter, cmd):
    flags = 0
    if "flags" in meter:
        meter_flags = meter["flags"]
        if not isinstance(meter_flags, list):
            meter_flags = [meter_flags]
        for flag in meter_flags:
            t = UTIL.ofp_meter_flags_from_user(flag)
            f = t if t != flag else None
            if f is None:
                LOG.error("Unknown meter flag: %s", flag)
                continue
            flags |= f

    meter_id = UTIL.ofp_meter_from_user(meter.get("meter_id", 0))

    bands = []
    for band in meter.get("bands", []):
        band_type = band.get("type")
        rate = int(band.get("rate", 0))
        burst_size = int(band.get("burst_size", 0))
        if band_type == "DROP":
            b = dp.ofproto_parser.OFPMeterBandDrop(rate, burst_size)
        elif band_type == "DSCP_REMARK":
            prec_level = int(band.get("prec_level", 0))
            b = dp.ofproto_parser.OFPMeterBandDscpRemark(rate, burst_size, prec_level)
        elif band_type == "EXPERIMENTER":
            experimenter = int(band.get("experimenter", 0))
            b = dp.ofproto_parser.OFPMeterBandExperimenter(rate, burst_size, experimenter)
        else:
            LOG.error("Unknown band type: %s", band_type)
            continue
        bands.append(b)

    meter_mod = dp.ofproto_parser.OFPMeterMod(dp, cmd, flags, meter_id, bands)

    ofctl_utils.send_msg(dp, meter_mod, LOG)
Beispiel #23
0
def mod_group_entry(dp, group, cmd):
    ofp = dp.ofproto
    parser = dp.ofproto_parser

    group_type = str(group.get('type', 'ALL'))
    t = UTIL.ofp_group_type_from_user(group_type)
    group_type = t if t != group_type else None
    if group_type is None:
        LOG.error('Unknown group type: %s', group.get('type'))

    group_id = UTIL.ofp_group_from_user(group.get('group_id', 0))
    command_bucket_id = int(group.get('command_bucket_id', 0))

    # Note:
    # The list of group property types that are currently defined
    # are only OFPGPT_EXPERIMENTER(Experimenter defined).
    properties = []

    buckets = []
    for bucket in group.get('buckets', []):

        # get bucket_id in buckets
        bucket_id = int(bucket.get('bucket_id', 0))

        # get actions in buckets
        bucket_actions = []
        for dic in bucket.get('actions', []):
            action = to_action(dp, dic)
            if action is not None:
                bucket_actions.append(action)

        # get properties in buckets
        bucket_properties = []
        for p in bucket.get('properties', []):
            group_bp_type = str(p.get('type', 'WEIGHT'))
            t = UTIL.ofp_group_bucket_prop_type_from_user(group_bp_type)
            group_bp_type = t if t != group_bp_type else ofp.OFPGBPT_WEIGHT

            if group_bp_type == ofp.OFPGBPT_WEIGHT:
                weight = int(p.get('weight', 0))
                bucket_properties.append(
                    parser.OFPGroupBucketPropWeight(type_=group_bp_type,
                                                    weight=weight))
            elif group_bp_type == ofp.OFPGBPT_WATCH_PORT:
                watch_port = int(p.get('watch', dp.ofproto.OFPP_ANY))
                bucket_properties.append(
                    parser.OFPGroupBucketPropWatch(type_=group_bp_type,
                                                   watch=watch_port))
            elif group_bp_type == ofp.OFPGBPT_WATCH_GROUP:
                watch_group = int(p.get('watch', dp.ofproto.OFPG_ANY))
                bucket_properties.append(
                    parser.OFPGroupBucketPropWatch(type_=group_bp_type,
                                                   watch=watch_group))
            elif group_bp_type == ofp.OFPGBPT_EXPERIMENTER:
                experimenter = p.get('experimenter', 0)
                exp_type = p.get('exp_type', 0)
                data_type = p.get('data_type', 'ascii')
                if data_type not in ['ascii', 'base64']:
                    LOG.error('Unknown data type: %s', data_type)
                data = p.get('data', '')
                if data_type == 'base64':
                    data = base64.b64decode(data)
                bucket_properties.append(
                    parser.OFPGroupBucketPropExperimenter(
                        type_=group_bp_type,
                        experimenter=experimenter,
                        exp_type=exp_type,
                        data=data))
            else:
                LOG.error('Unknown group bucket prop type: %s', p['type'])

        # create bucket
        bucket = parser.OFPBucket(bucket_id=bucket_id,
                                  actions=bucket_actions,
                                  properties=bucket_properties)
        buckets.append(bucket)

    group_mod = parser.OFPGroupMod(dp, cmd, group_type, group_id,
                                   command_bucket_id, buckets, properties)

    ofctl_utils.send_msg(dp, group_mod, LOG)
Beispiel #24
0
def mod_group_entry(dp, group, cmd):
    ofp = dp.ofproto
    parser = dp.ofproto_parser

    group_type = str(group.get('type', 'ALL'))
    t = UTIL.ofp_group_type_from_user(group_type)
    group_type = t if t != group_type else None
    if group_type is None:
        LOG.error('Unknown group type: %s', group.get('type'))

    group_id = UTIL.ofp_group_from_user(group.get('group_id', 0))
    command_bucket_id = int(group.get('command_bucket_id', 0))

    # Note:
    # The list of group property types that are currently defined
    # are only OFPGPT_EXPERIMENTER(Experimenter defined).
    properties = []

    buckets = []
    for bucket in group.get('buckets', []):

        # get bucket_id in buckets
        bucket_id = int(bucket.get('bucket_id', 0))

        # get actions in buckets
        bucket_actions = []
        for dic in bucket.get('actions', []):
            action = to_action(dp, dic)
            if action is not None:
                bucket_actions.append(action)

        # get properties in buckets
        bucket_properties = []
        for p in bucket.get('properties', []):
            group_bp_type = str(p.get('type', 'WEIGHT'))
            t = UTIL.ofp_group_bucket_prop_type_from_user(group_bp_type)
            group_bp_type = t if t != group_bp_type else ofp.OFPGBPT_WEIGHT

            if group_bp_type == ofp.OFPGBPT_WEIGHT:
                weight = int(p.get('weight', 0))
                bucket_properties.append(
                    parser.OFPGroupBucketPropWeight(
                        type_=group_bp_type, weight=weight))
            elif group_bp_type == ofp.OFPGBPT_WATCH_PORT:
                watch_port = int(p.get('watch', dp.ofproto.OFPP_ANY))
                bucket_properties.append(
                    parser.OFPGroupBucketPropWatch(
                        type_=group_bp_type, watch=watch_port))
            elif group_bp_type == ofp.OFPGBPT_WATCH_GROUP:
                watch_group = int(p.get('watch', dp.ofproto.OFPG_ANY))
                bucket_properties.append(
                    parser.OFPGroupBucketPropWatch(
                        type_=group_bp_type, watch=watch_group))
            elif group_bp_type == ofp.OFPGBPT_EXPERIMENTER:
                experimenter = p.get('experimenter', 0)
                exp_type = p.get('exp_type', 0)
                data_type = p.get('data_type', 'ascii')
                if data_type not in ['ascii', 'base64']:
                    LOG.error('Unknown data type: %s', data_type)
                data = p.get('data', '')
                if data_type == 'base64':
                    data = base64.b64decode(data)
                bucket_properties.append(
                    parser.OFPGroupBucketPropExperimenter(
                        type_=group_bp_type, experimenter=experimenter,
                        exp_type=exp_type, data=data))
            else:
                LOG.error('Unknown group bucket prop type: %s', p['type'])

        # create bucket
        bucket = parser.OFPBucket(bucket_id=bucket_id,
                                  actions=bucket_actions,
                                  properties=bucket_properties)
        buckets.append(bucket)

    group_mod = parser.OFPGroupMod(dp, cmd, group_type, group_id,
                                   command_bucket_id, buckets,
                                   properties)

    ofctl_utils.send_msg(dp, group_mod, LOG)
Beispiel #25
0
def set_role(dp, role):
    r = UTIL.ofp_role_from_user(role.get('role', dp.ofproto.OFPCR_ROLE_EQUAL))
    role_request = dp.ofproto_parser.OFPRoleRequest(dp, r, 0)
    ofctl_utils.send_msg(dp, role_request, LOG)
Beispiel #26
0
def set_role(dp, role):
    r = UTIL.ofp_role_from_user(role.get('role', dp.ofproto.OFPCR_ROLE_EQUAL))
    role_request = dp.ofproto_parser.OFPRoleRequest(dp, r, 0)
    ofctl_utils.send_msg(dp, role_request, LOG)