Ejemplo n.º 1
0
def nas_vlan_op(op, data_dict):
    if op == 'get':
        obj = cps_object.CPSObject(nas_if.get_if_key(), data=data_dict)
    else:
        if op in intf_rpc_op_type_map:
            data_dict[intf_rpc_op_attr_id] = intf_rpc_op_type_map[op]
        obj = cps_object.CPSObject(intf_rpc_key_id, data=data_dict)
        op = 'rpc'
    nas_common.get_cb_method(op)(obj)
Ejemplo n.º 2
0
def nas_vlan_op(op, data_dict):
    if op == 'get':
        obj = cps_object.CPSObject(nas_if.get_if_key(), data=data_dict)
    else:
        if op in intf_rpc_op_type_map:
            data_dict[intf_rpc_op_attr_id] = intf_rpc_op_type_map[op]
        else:
            print 'Unknown operation type %s' % op
            return False
        obj = cps_object.CPSObject(intf_rpc_key_id, data=data_dict)
        op = 'rpc'
    nas_common.get_cb_method(op)(obj)
Ejemplo n.º 3
0
def set_intf_rpc_cb(methods, params):
    if params['operation'] != 'rpc':
        nas_if.log_err('Operation '+str(params['operation'])+' not supported')
        return False
    cps_obj = cps_object.CPSObject(obj = params['change'])

    try:
        if def_vlan_mode_attr_name in params['change']['data']:
            return _handle_global_vlan_config(cps_obj)
    except:
        pass

    if_type = if_config.get_intf_type(cps_obj)
    if if_type == 'loopback':
        return _handle_loopback_intf(cps_obj, params)
    elif if_type == 'management':
        return False
    elif if_type == 'macvlan':
        return _handle_macvlan_intf(cps_obj, params)

    op = _get_op_id(cps_obj)
    if op is None:
        return False

    member_port = None
    try:
        member_port = cps_obj.get_attr_data('dell-if/if/interfaces/interface/member-ports/name')
    except ValueError:
        member_port = None

    have_fp_attr = True
    front_panel_port = None
    try:
        front_panel_port = cps_obj.get_attr_data(fp_port_attr_name)
    except ValueError:
        have_fp_attr = False

    if_name = nas_if.get_cps_attr(cps_obj, ifname_attr_name)
    nas_if.log_info('Logical interface configuration: op %s if_name %s if_type %s' % (
                     op, if_name if if_name != None else '-', if_type))
    if ((op == 'create' or (op == 'set' and have_fp_attr == True and front_panel_port is not None))
        and member_port is None):
        if op == 'set' and if_type is None:
            # For set operation, if front_panel_port is given, if_type should be front-panel
            if_type = 'front-panel'
        nas_if.log_info('Interface MAC address setup for type %s' % if_type)
        try:
            mac_addr = cps_obj.get_attr_data(mac_attr_name)
        except ValueError:
            mac_addr = None
        if mac_addr is None:
            nas_if.log_info('No mac address given in input object, get assigned mac address')
            try:
                param_list = get_alloc_mac_addr_params(if_type, cps_obj)
            except Exception:
                logging.exception('Failed to get params')
                return False
            if param_list != None:
                try:
                    mac_addr = ma.if_get_mac_addr(**param_list)
                except:
                    logging.exception('Failed to get mac address')
                    return False
                if mac_addr is None:
                    nas_if.log_err('Failed to get mac address')
                    return False
                if len(mac_addr) > 0:
                    nas_if.log_info('Assigned mac address: %s' % mac_addr)
                    cps_obj.add_attr(mac_attr_name, mac_addr)

    if op == 'set' or op == 'create':
        if have_fp_attr == True:
            subport_id = 0
            try:
                subport_id = cps_obj.get_attr_data(subport_attr_name)
            except ValueError:
                # use default value if no attribute found in object
                pass
            if front_panel_port is None:
                npu_id = None
                port_id = None
            else:
                try:
                    (npu_id, port_id, hw_port) = fp_utils.get_npu_port_from_fp(
                                                            front_panel_port, subport_id)
                except ValueError as inst:
                    nas_if.log_info(inst.args[0])
                    return False
                nas_if.log_info('Front panel port %d, NPU port %d' % (front_panel_port, port_id))
                in_phy_mode = if_config.get_intf_phy_mode(cps_obj)
                if in_phy_mode != None:
                    phy_mode = port_utils.hw_port_to_phy_mode(port_list, npu_id, hw_port)
                    if in_phy_mode != phy_mode:
                        nas_if.log_err('Input PHY mode %d mis-match with physical port mode %d' % (
                                       in_phy_mode, phy_mode))
                        return False
            cps_obj.add_attr(npu_attr_name, npu_id)
            cps_obj.add_attr(port_attr_name, port_id)

        try:
            if _if_update_config(op, cps_obj) == False:
                params['change'] = cps_obj.get()
                nas_if.log_err( "Interface update config failed during set or create ")
                return False
        except Exception:
            nas_if.log_err( "Interface update config failed during set or create ")
            logging.exception('Error:')

    module_name = nas_if.get_if_key()
    in_obj = copy.deepcopy(cps_obj)
    in_obj.set_key(cps.key_from_name('target', module_name))
    in_obj.root_path = module_name + '/'
    obj = in_obj.get()
    if op_attr_name in obj['data']:
        del obj['data'][op_attr_name]
    upd = (op, obj)
    trans = cps_utils.CPSTransaction([upd])
    ret_data = trans.commit()
    if ret_data == False:
        nas_if.log_err('Failed to commit request')
        ret_data = trans.get_objects()
        if len(ret_data) > 0 and 'change' in ret_data[0]:
            ret_obj = cps_object.CPSObject(obj = ret_data[0]['change'])
            try:
                ret_code = ret_obj.get_attr_data(retcode_attr_name)
                ret_str = ret_obj.get_attr_data(retstr_attr_name)
            except ValueError:
                nas_if.log_info('Return code and string not found from returned object')
                return False
            cps_obj.add_attr(retcode_attr_name, ret_code)
            cps_obj.add_attr(retstr_attr_name, ret_str)
            params['change'] = cps_obj.get()
        return False
    if op == 'delete':
        try:
            _if_update_config(op, in_obj)
        except:
            nas_if.log_err('update config failed for delete operation')
            logging.exception('Error:')
        return True
    if len(ret_data) == 0 or not 'change' in ret_data[0]:
        nas_if.log_err('Invalid return object from cps request')
        return False
    if (op == 'create' and member_port is None):
        ret_obj = cps_object.CPSObject(obj = ret_data[0]['change'])
        try:
            ifindex = ret_obj.get_attr_data(ifindex_attr_name)
        except ValueError:
            nas_if.log_err('Ifindex not found from returned object')
            return False
        cps_obj.add_attr(ifindex_attr_name, ifindex)

    params['change'] = cps_obj.get()
    return True
def set_intf_cb(methods, params):
    if params['operation'] != 'rpc':
        nas_if.log_err('Operation ' + str(params['operation']) +
                       ' not supported')
        return False
    cps_obj = cps_object.CPSObject(obj=params['change'])

    if_type = _get_intf_type(cps_obj)
    if if_type == 'loopback':
        return _handle_loopback_intf(cps_obj, params)
    elif if_type == 'management':
        return False

    op = _get_op_id(cps_obj)
    if op == None:
        return False

    member_port = None
    try:
        member_port = cps_obj.get_attr_data(
            'dell-if/if/interfaces/interface/member-ports/name')
    except ValueError:
        member_port = None

    if (op == 'create' and member_port == None):
        nas_if.log_info('Create interface, type: %s' % if_type)
        mac_addr = None
        try:
            mac_addr = cps_obj.get_attr_data(mac_attr_name)
        except ValueError:
            pass
        if mac_addr == None:
            nas_if.log_info(
                'No mac address given in input object, get assigned mac address'
            )
            param_list = get_alloc_mac_addr_params(if_type, cps_obj)
            if param_list != None:
                mac_addr = ma.if_get_mac_addr(**param_list)
                if mac_addr == None:
                    nas_if.log_err('Failed to get mac address')
                    return False
                if len(mac_addr) > 0:
                    nas_if.log_info('Assigned mac address: %s' % mac_addr)
                    cps_obj.add_attr(mac_attr_name, mac_addr)

    if op == 'set' or op == 'create':
        try:
            _if_update_config(op, cps_obj)
        except:
            nas_if.log_err("update config failed during set or create ")
            pass
    module_name = nas_if.get_if_key()
    in_obj = copy.deepcopy(cps_obj)
    in_obj.set_key(cps.key_from_name('target', module_name))
    in_obj.root_path = module_name + '/'
    obj = in_obj.get()
    if op_attr_name in obj['data']:
        del obj['data'][op_attr_name]
    upd = (op, obj)
    ret_data = cps_utils.CPSTransaction([upd]).commit()
    if ret_data == False:
        nas_if.log_err('Failed to commit request')
        return False
    if op == 'delete':
        try:
            _if_update_config(op, in_obj)
        except:
            nas_if.log_err('update config failed for delete operation')
            pass
        return True
    if len(ret_data) == 0 or not 'change' in ret_data[0]:
        nas_if.log_err('Invalid return object from cps request')
        return False
    if (op == 'create' and member_port == None):
        ret_obj = cps_object.CPSObject(obj=ret_data[0]['change'])
        try:
            ifindex = ret_obj.get_attr_data(ifindex_attr_name)
        except ValueError:
            nas_if.log_err('Ifindex not found from returned object')
            return False
        cps_obj.add_attr(ifindex_attr_name, ifindex)

    params['change'] = cps_obj.get()
    return True
Ejemplo n.º 5
0
def nas_vlan_op(op, data_dict):
    obj = cps_object.CPSObject(nas_if.get_if_key(), data=data_dict)
    nas_ut.get_cb_method(op)(obj)
Ejemplo n.º 6
0
def nas_vlan_op(op, data_dict):
    obj = cps_object.CPSObject( nas_if.get_if_key(), data=data_dict)
    nas_ut.get_cb_method(op)(obj)
Ejemplo n.º 7
0
def set_intf_cb(methods, params):
    op_id_to_name_map = {1: 'create', 2: 'delete', 3: 'set'}
    if params['operation'] != 'rpc':
        print 'Operation %s not supported' % params['operation']
        return False
    op_attr_name = 'dell-base-if-cmn/set-interface/input/operation'
    cps_obj = cps_object.CPSObject(obj=params['change'])
    try:
        op_id = cps_obj.get_attr_data(op_attr_name)
    except ValueError:
        print 'No operation attribute in object'
        return False
    if not op_id in op_id_to_name_map:
        print 'Invalid operation type %d' % op_id
        return False
    op = op_id_to_name_map[op_id]

    if op == 'create':
        if_type_map = {
            'ianaift:ethernetCsmacd': 'front-panel',
            'ianaift:l2vlan': 'vlan',
            'ianaift:ieee8023adLag': 'lag',
            'base-if:management': 'management'
        }
        try:
            obj_if_type = cps_obj.get_attr_data('if/interfaces/interface/type')
        except:
            print 'No type attribute in object'
            return False
        if not obj_if_type in if_type_map:
            print 'Unknown if type: %s' % obj_if_type
            return False
        if_type = if_type_map[obj_if_type]

        print 'Create interface, type: %s' % if_type
        hw_port = None
        vlan_id = None
        lag_id = None
        npu_id = None
        if if_type == 'front-panel':
            id_tuple = get_npu_hwport_id_from_fp_obj(cps_obj)
            if id_tuple == None:
                return False
            (npu_id, hw_port) = id_tuple
        elif if_type == 'vlan':
            vlan_id = cps_obj.get_attr_data(
                'base-if-vlan/if/interfaces/interface/id')
        elif if_type == 'lag':
            lag_name = cps_obj.get_attr_data('if/interfaces/interface/name')
            lag_id = get_lag_id_from_name(lag_name)
        elif if_type == 'management':
            pass
        mac_attr_name = 'dell-if/if/interfaces/interface/phys-address'
        mac_addr = None
        try:
            mac_addr = cps_obj.get_attr_data(mac_attr_name)
        except ValueError:
            pass
        if mac_addr == None:
            mac_addr = if_get_mac_addr(if_type,
                                       npu_id=npu_id,
                                       hw_port=hw_port,
                                       vlan_id=vlan_id,
                                       lag_id=lag_id)
            if mac_addr == None:
                print 'Failed to get mac address'
                return False
            print 'Assigned mac address: %s' % mac_addr
            cps_obj.add_attr(mac_attr_name, mac_addr)
    module_name = nas_if.get_if_key()
    in_obj = copy.deepcopy(cps_obj)
    in_obj.set_key(cps.key_from_name('target', module_name))
    in_obj.root_path = module_name + '/'
    obj = in_obj.get()
    if op_attr_name in obj['data']:
        del obj['data'][op_attr_name]
    upd = (op, obj)
    ret_data = cps_utils.CPSTransaction([upd]).commit()
    if ret_data == False:
        print 'Failed to commit request'
        return False
    if op == 'delete':
        return True
    if len(ret_data) == 0 or not 'change' in ret_data[0]:
        print 'Invalid return object from cps request'
        return False
    ret_obj = cps_object.CPSObject(obj=ret_data[0]['change'])
    try:
        ifindex = ret_obj.get_attr_data(ifindex_attr_name)
    except ValueError:
        print 'Ifindex not found from returned object'
        return False
    try:
        mac_addr = cps_obj.get_attr_data(mac_attr_name)
    except ValueError:
        print 'MAC address not found from returned object'
        return False
    cps_obj = cps_object.CPSObject(obj=params['change'])
    cps_obj.add_attr(ifindex_attr_name, ifindex)
    cps_obj.add_attr(mac_attr_name, mac_addr)
    params['change'] = cps_obj.get()
    return True