Beispiel #1
0
def net_restart_network():
    # ifdown all
    name_list = net_card_info.net_get_name_list()
    cmd_line = ''

    # ifdown phy interface
    _logger.debug("name list {}".format(name_list))
    for i in range(len(name_list)):
        if net_card_info.net_type_check(name_list[i]) == _NET_TYPE_NAME_PHY:
            cmd_line += 'ifdown ' + name_list[i] + ';'
    net_common.get_info_from_syscmd(cmd_line)

    # del not exist phy interface cfg file
    net_del_not_exist_cfg_file()

    # restart net
    cmd_line = '/etc/init.d/network restart'
    retval = net_common.get_info_from_syscmd(cmd_line)
    if retval[0] != 0:
        _logger.error("get info from sys cmd {} failed,ret value {}".format(
            cmd_line, retval))
        net_common.get_info_from_syscmd('journalctl -xe', 2)
        return -1
    retval = net_restart_service()
    if retval != 0:
        _logger.error("net_restart_service failed ret {}".format(retval))
        return -1
    return 0
Beispiel #2
0
def set_root_passwd(passwdinfo):
    cmdline = 'mount -no remount, rw /boot'
    retval = net_common.get_info_from_syscmd(cmdline)
    _logger.debug('remount /boot {} {}'.format(retval[0], retval[1]))
    tmpfile = '/dev/shm/tempstr'
    mpasswd = json.loads(passwdinfo)
    _logger.debug("set root pwd info {}       {}".format(passwdinfo, mpasswd))
    retval = net_common.set_info_to_file(tmpfile, mpasswd, 'w')
    if retval != 0:
        _logger.error('set passwd write file failed,ret {}'.format(retval))
        xlogging.raise_system_error('set passwd failed,{}'.format(retval),
                                    'set passwd failed,{}'.format(retval), -1,
                                    _logger)
    cmdline = 'set_passwd -f {}'.format(tmpfile)
    retval = net_common.get_info_from_syscmd(cmdline)
    if retval[0] != 0:
        _logger.error('set passwd failed,ret {} {}'.format(
            retval[0], retval[1]))
        xlogging.raise_system_error('set passwd failed,{}'.format(retval[0]),
                                    'set passwd failed,{}'.format(retval[0]),
                                    -1, _logger)
    else:
        _logger.debug('set passwd success')

    cmdline = 'umount /boot'
    retval = net_common.get_info_from_syscmd(cmdline)
    _logger.debug('umount /boot {} {}'.format(retval[0], retval[1]))

    cmdline = 'mount -o ro /dev/mapper/boot /boot'
    retval = net_common.get_info_from_syscmd(cmdline)
    _logger.debug('mount /dev/mapper/boot /boot {} {}'.format(
        retval[0], retval[1]))
Beispiel #3
0
def smb_del_hostpath(username, hostname):
    hostpath = smb_get_hostpath(username, hostname)
    _logger.debug('del host path: user {} host {} host path {}'.format(username, hostname, hostpath))
    if os.path.isdir(hostpath):
        cmdline = 'rm -rf "{hostpath}"'.format(hostpath=hostpath)
        net_common.get_info_from_syscmd(cmdline)
    smb_del_userpath(username)
    return 0, 'success'
Beispiel #4
0
 def _create_br(self):
     name = 'takeoverbr0'
     if _is_adpter_name_exist(name):
         return
     net_common.get_info_from_syscmd(r'ip link add takeoverbr0 type bridge')
     # net_common.get_info_from_syscmd(r'ifconfig takeoverbr0 0.0.0.0 promisc up')
     net_common.get_info_from_syscmd(r'ifconfig takeoverbr0 {} up'.format(
         self.__aio_server_ip))
Beispiel #5
0
 def unmount(self):
     _cmd_u = 'umount -f -l "{}"'.format(self.mount_point)
     _fuser_k = 'fuser -k "{}"'.format(self.mount_point)
     while True:
         code, _, stderr = net_common.get_info_from_syscmd(_cmd_u, timeout=5)
         if code == 0 or 'not mounted' in stderr:
             break
         net_common.get_info_from_syscmd(_fuser_k)
         time.sleep(2)
     _logger.info('unmount {} successful'.format(self.mount_point))
Beispiel #6
0
 def _create_macvtap(self):
     rev = net_common.get_info_from_syscmd(
         'ip link add link {} name {} address {} type macvtap mode bridge'.
         format(self._physical_nic_name, self.tap_name, self._mac_address))
     if rev[0] != 0:
         xlogging.raise_system_error('NetMacVTapMgr add tap fail',
                                     'NetMacVTapMgr add tap fail', 131)
     rev = net_common.get_info_from_syscmd('ip link set dev {} up'.format(
         self.tap_name))
     if rev[0] != 0:
         xlogging.raise_system_error('NetTap add tap fail',
                                     'NetTap add tap fail', 132)
Beispiel #7
0
def ignore_kvm_msrs():
    # 启用ignore_msrs
    value, outs, errs = get_info_from_syscmd(
        'echo 1 > /sys/module/kvm/parameters/ignore_msrs')
    # 查看ignore_msrs信息
    if value == 0:
        value, outs, errs = get_info_from_syscmd(
            'cat /sys/module/kvm/parameters/ignore_msrs')
        if 'Y' in outs:
            logging.info('启用ignore_msrs成功'.format(outs))
        else:
            logging.warning('启用ignore_msrs失败'.format(errs))
    else:
        logging.warning('启用ignore_msrs失败'.format(errs))
Beispiel #8
0
 def _create_tap(self):
     rev = net_common.get_info_from_syscmd(
         'ip tuntap add {} mode tap'.format(self.tap_name))
     if rev[0] != 0:
         xlogging.raise_system_error('NetTap add tap fail',
                                     'NetTap add tap fail', 131)
     rev = net_common.get_info_from_syscmd(
         'ip link set {} master takeoverbr0'.format(self.tap_name))
     if rev[0] != 0:
         xlogging.raise_system_error('NetTap add tap fail',
                                     'NetTap add tap fail', 132)
     rev = net_common.get_info_from_syscmd('ifconfig {} 0.0.0.0 up'.format(
         self.tap_name))
     if rev[0] != 0:
         xlogging.raise_system_error('NetTap add tap fail',
                                     'NetTap add tap fail', 133)
Beispiel #9
0
def net_get_bond_only_attr_one(in_name):
    cmd_line = 'cat /proc/net/bonding/' + in_name
    retval = net_common.get_info_from_syscmd(cmd_line)
    if retval[0] != 0:
        _logger.error("get_info_from_syscmd failed,cmd {},retval {}".format(
            cmd_line, retval[0]))
        return -1
    mstr = retval[1]
    mdict = {
        'Bonding Mode:': ['bondmode'],
        'Currently Active Slave:': ['curslave'],
        'MII Status:': ['miistatus'],
        'MII Polling Interval (ms):': ['miiinterval']
    }
    net_common.get_itemdict_from_str(mstr, mdict)
    for key in mdict:
        mlist = mdict[key]
        mlen = len(mlist)
        if mlist[0] not in bond_only_attr_header:
            continue
        if mlen >= 2:
            if mlist[0] == 'bondmode':
                if mlist[1] in bond_mode_attr:
                    mstr = bond_mode_attr[mlist[1]]
                    mlist[1] = mstr
                else:
                    _logger.error("get inavlid bond mode {}".format(mlist[1]))
                    continue
            net_card_info.net_set_item(in_name, mlist[0], mlist[1])
    return 0
Beispiel #10
0
 def unmount(self):
     if self.is_mount:
         net_common.get_info_from_syscmd(r"sync")
         if self.__cmd_unmount_nbd:
             cmd_nbd = self.__cmd_unmount_nbd
         else:
             if self.use_qemu_nbd:
                 cmd_nbd = "{} -d {}".format(_QEMU_NDB_EXEC_PATH,
                                             self.device_path)
             else:
                 cmd_nbd = "{} -d {}".format(_EXEC_PATH, self.device_path)
         _logger.info("unmount : {}".format(cmd_nbd))
         status = net_common.get_info_from_syscmd(cmd_nbd)[0]
         _logger.info("unmount end : {} - {}".format(status, cmd_nbd))
         if self.use_qemu_nbd and status == 0:
             self.is_mount = False
Beispiel #11
0
def get_ext_vmlinux(src_vm):

    # 已经是解压缩文件,并且可用。
    try:
        if check_is_elf_file(src_vm):
            if is_include_setion(src_vm):
                with open(src_vm, "rb") as f:
                    return io.BytesIO(f.read())
    except:
        # 忽略错误。
        pass

    try:
        os.makedirs(_TMP_VM_DIR)
    except:
        pass

    exe_sc = os.path.join(loadIce.current_dir, "extract_vmlinux")
    tmp_file = os.path.join(_TMP_VM_DIR, str(uuid.uuid4().hex))

    try:
        # extract-vmlinux >> /tmp/xxxx.bmp
        cmd = "{} {} >> {}".format(exe_sc, src_vm, tmp_file)
        retval, outs, errinfo = net_common.get_info_from_syscmd(cmd)
        _logger.info("drv3: runcmd {} return:{} out:{} errorinfo:{}".format(
            retval, cmd, outs, errinfo))
        if not check_is_elf_file(tmp_file):
            _str = "drv3: 不是标准的elf文件:{}".format(tmp_file)
            _logger.error(_str)
            raise Exception(_str)

        # 有可能没有开始CRC 功能。
        #if not is_include_setion(tmp_file, "__kcrctab"):
        #    _str = "drv3: elf文件:{}不包含__kcrctab".format(tmp_file)
        #    _logger.error(_str)
        #    raise Exception(_str)

        f = open(tmp_file, "rb")
        _vm_iobs = io.BytesIO(f.read())
        f.close()
        os.remove(tmp_file)
        return _vm_iobs

    except Exception as e:
        try:
            os.remove(tmp_file)
        except:
            pass
        xlogging.raise_system_error(
            'drv3: decompress vm ({}) failed{}'.format(src_vm, e),
            '解开({})vm 失败:{}'.format(src_vm, e), 8, _logger)

    try:
        os.remove(tmp_file)
    except:
        pass
    xlogging.raise_system_error(
        'drv3: error vmlinux file ({}) failed'.format(src_vm),
        "错误的vm file({})vm".format(src_vm), 9, _logger)
Beispiel #12
0
def smb_clear_all():
    # 清理残留的共享目录
    while True:
        rev = net_common.get_info_from_syscmd('grep -qs cifs /proc/mounts', timeout=5)
        if rev[0] != 0:
            break
        net_common.get_info_from_syscmd('umount -a -t cifs -l', timeout=5)
        time.sleep(2)

    userlist = smb_get_user_list()
    _logger.debug('get user list {}'.format(userlist))
    for i in range(len(userlist)):
        name = userlist[i]
        smb_del_user(name)
    for k, _ in psutil.net_if_addrs().items():
        if k.startswith('sharetap'):
            net_common.get_info_from_syscmd('ip tuntap del {} mode tap'.format(k))
Beispiel #13
0
def smb_umount_path(hostpath):
    if not os.path.isdir(hostpath):
        _logger.error('umount host path not exist {}'.format(hostpath))
        return 0, 'success'
    mountlist = psutil.disk_partitions()
    umountlist = list()
    for diskpart in mountlist:
        mountpoint = diskpart.mountpoint
        if mountpoint.startswith(hostpath):
            umountlist.append(mountpoint)
    if len(umountlist) > 0:
        sortlist = sorted(umountlist, key=(lambda x: len(x)), reverse=True)
        _logger.debug('umount sort list {}'.format(sortlist))
        for mountpoint in sortlist:
            _logger.debug('umount path {}'.format(mountpoint))
            cmdline = 'fuser -k "{mountpoint}";fuser -k "{mountpoint}";fuser -k "{mountpoint}";umount "{mountpoint}"'.format(
                mountpoint=mountpoint)
            net_common.get_info_from_syscmd(cmdline)
Beispiel #14
0
def depends_forms_modinfo(old_modfile, path0):
    modinfo_result = get_info_from_syscmd('cd ' + path0 + ';modinfo ' +
                                          old_modfile)
    modinfo_result_list = modinfo_result[1].replace(' ', '').split('\n')
    dep = []
    for filed in modinfo_result_list:
        temp = filed.split(':')
        if temp[0] == 'depends':
            dep = temp[1]
    return dep
Beispiel #15
0
 def _sort_files(self):
     st = time.time()
     self._logger.debug('sort_files start')
     result = get_info_from_syscmd(
         'python /sbin/aio/logic_service/merge_hash_helper.py {}'.format(
             self._tmp_dir), 600)
     if result[0] != 0:
         xlogging.raise_system_error('生成hash去重文件失败', 'sort fail', 1111)
     self._logger.debug(
         'sort_files end, cost time:{:.1f}s'.format(time.time() - st))
Beispiel #16
0
def is_include_setion(elf_file, section_name):
    cmd = 'readelf  -S  "{}"'.format(elf_file)
    retval, outs, errinfo = net_common.get_info_from_syscmd(cmd)
    _logger.info("drv3: runcmd {} return:{} out:{} errorinfo:{}".format(
        retval, cmd, outs, errinfo))
    if retval != 0:
        return False
    if section_name in outs:
        return True
    return False
Beispiel #17
0
def net_set_dns(in_dns_list):
    _logger.info("net start set dns {}".format(in_dns_list))
    list_len = len(in_dns_list)
    if list_len <= 0:
        _logger.warning('dns list is empty, start clean nameserver')
        net_common.get_info_from_syscmd(
            "sed -i /nameserver/d /etc/resolv.conf")
    else:
        mstr = ''
        for i in range(list_len):
            if i > 0:
                mstr += 'nameserver '
            mstr += in_dns_list[i] + '\n'
        mdict = {'nameserver ': ['ca', mstr]}
        retval = net_common.set_itemdict_in_file(net_dns_cfg_file, mdict)
        if retval != 0:
            _logger.error("net set dns failedret value is {}".format(retval))
            return -1
    return 0
Beispiel #18
0
def net_bond_driver_check():
    net_common.get_info_from_syscmd('modprobe bonding')
    strcmd = "lsmod | grep bonding"
    _logger.info("start check bond driver with cmd '{}'".format(strcmd))
    p = subprocess.Popen(strcmd,
                         shell=True,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.STDOUT)
    retval = p.wait()
    _logger.info("subprocess ret value {}".format(retval))

    for line in p.stdout.readlines():
        _logger.info("chech bonding driver success,cmd '{}',retval {}".format(
            strcmd, line))
        return 0

    _logger.error(
        "chech bonding driver failed,with cmd '{}' and no return".format(
            strcmd))
    return -1
def run_tape_cmd(cmd):
    _logger.info("runcmd {}".format(cmd))
    retval, outs, errinfo = get_info_from_syscmd(cmd)
    _logger.info("runcmd {} return:{} out:{} errorinfo:{}".format(
        retval, cmd, outs, errinfo))
    if retval != 0:
        str = "runcmd {} return:{} out:{} errorinfo:{}".format(
            retval, cmd, outs, errinfo)
        print(str)
        raise Exception(str)
    return retval, outs, errinfo
Beispiel #20
0
def smb_add_hostpath(user_name, hostname):
    hostpath = smb_get_hostpath(user_name, hostname)
    if os.path.exists(hostpath):
        _logger.error('smb_add_hostpath host {} already exist'.format(hostpath))
        return -1, ''
    cmdline = 'mkdir -p -m 755 "{hostpath}"'.format(hostpath=hostpath)
    ret = net_common.get_info_from_syscmd(cmdline)
    if ret[0] != 0:
        _logger.debug('add hostpath failed {}'.format(ret))
        return -1, 'failed'
    return 0, 'success'
Beispiel #21
0
def smb_add_userpath(username, userpwd, read_only):
    userpath = smb_get_userpath(username)

    cmd_line = 'useradd {username}; chmod 755 {userpath_dir}; ' \
               'mkdir -p -m 755 "{userpath}";chown {username}:{username} "{userpath}"'.format(
        username=username, userpath=userpath, userpath_dir=os.path.dirname(userpath))
    net_common.get_info_from_syscmd(cmd_line)
    cmd_line = '(echo "{}";echo "{}")|smbpasswd -a "{}"'.format(userpwd, userpwd, username)
    net_common.get_info_from_syscmd(cmd_line)
    retval = smb_add_cfg(username, read_only)
    if retval != 0:
        _logger.error("smb user {} create cfg file failed".format(username))
        smb_del_userpath(username)
        return -1, 'create smb cfg file failed,user {}'.format(username)
    userinfo = net_common.get_info_from_syscmd('pdbedit -L')
    if userinfo[0] != 0:
        return -1, 'create smb cfg file failed,user {}'.format(username)
    if username not in userinfo[1]:
        return -1, 'create smb cfg file failed,user {}'.format(username)
    _logger.debug('smb_create_smbuser user {} pwd {} success'.format(username, userpwd))
    return 0, 'success'
Beispiel #22
0
def smb_del_userpath(user_name):
    # del sys usr
    userpath = smb_get_userpath(user_name)
    have_host = 0
    if os.path.isdir(userpath):
        for hostname in os.listdir(userpath):
            hostpath = os.path.join(userpath, hostname)
            if os.path.isdir(hostpath):
                have_host += 1
                break
    if have_host == 0:
        # del sys user
        cmd_line = 'userdel -r -f "{}"'.format(user_name)
        _logger.debug("start del sys user {},cmd {}".format(user_name, cmd_line))
        net_common.get_info_from_syscmd(cmd_line)
        # del smb user
        smb_del_cfg(user_name)
        cmd_line = 'pdbedit -x {}'.format(user_name)
        _logger.debug("start del smb user {},cmd {}".format(user_name, cmd_line))
        net_common.get_info_from_syscmd(cmd_line)
        cmdline = 'rm -rf "{userpath}"'.format(
            userpath=userpath)
        _logger.debug("start user path,cmd {}".format(cmd_line))
        net_common.get_info_from_syscmd(cmdline)
    else:
        _logger.error('already have {} host,can not del userpath {}'.format(have_host, userpath))
        return -1, "failed"

    return 0, 'success'
Beispiel #23
0
def net_get_speed_one(in_name):
    cmdline = 'ethtool ' + in_name
    retval = net_common.get_info_from_syscmd(cmdline)
    if retval[0] == 0:
        mstr = retval[1]
        mdict = {'Speed:': [], 'Duplex:': []}
        net_common.get_itemdict_from_str(mstr, mdict)
        net_card_info.net_set_item(
            in_name, 'speed',
            mdict['Speed:'][0] if len(mdict['Speed:']) else '--')
        net_card_info.net_set_item(
            in_name, 'duplex',
            mdict['Duplex:'][0] if len(mdict['Duplex:']) else '--')
    return
Beispiel #24
0
def smb_get_user_list():
    userlist = list()
    cmd_line = 'pdbedit -L'
    retval = net_common.get_info_from_syscmd(cmd_line)
    if retval[0] != 0:
        _logger.error("get info from cmd {} failed".format(cmd_line))
    else:
        mlist = retval[1].strip().split('\n')
        for i in range(len(mlist)):
            mstr = mlist[i]
            mindex = mstr.find(':')
            if mindex > 0:
                muser_name = mstr[:mindex]
                userlist.append(muser_name)
    return userlist
Beispiel #25
0
 def mount(self, readonly=True):
     """
     mount -t cifs //172.29.100.100/wuo/W2003R2PAR_1_2018-08-01T20-30-38.350867
      /mnt/smb/ -o username="******",password="******",iocharset=utf8
     :return:
     """
     assert self._server_ip
     check_readonly = 'ro'
     if not readonly:
         check_readonly = 'rw'
     cmd = r'mount -t cifs "//{samba_server}/{samba_user}/{host_name}/" "{dst_point}"' \
           r' -o username="******",password="******",iocharset=utf8,{readonly},nomapposix'.format(
         samba_server=self._server_ip, samba_user=self._key_info['username'],
         host_name=self._key_info['hostname'], samba_password=self._key_info['userpwd'],
         dst_point=self.mount_point, readonly=check_readonly)
     _logger.info('mount cmd info:{}'.format(cmd))
     rev = net_common.get_info_from_syscmd(cmd, timeout=5)
     return rev[0] == 0
Beispiel #26
0
    def get_dev_detail(dev_path):
        rs = dict()
        if not os.path.exists(dev_path):
            _logger.warning(
                'DevDetail get_dict fail, dev:{} is not found'.format(
                    dev_path))
            return rs

        cmd = r"partx -o NR,START {} |grep -v NR".format(dev_path)
        ret = net_common.get_info_from_syscmd(cmd)
        if ret[0] == 0:
            for line in ret[1].splitlines():
                item_list = line.strip().split()
                if len(item_list) == 2:
                    offset = str(int(item_list[1]) * 512)
                    rs[offset] = "{}p{}".format(dev_path, item_list[0])
        else:
            _logger.error('get DevDetail fail:{}'.format(ret[2]))
        return rs
Beispiel #27
0
 def mount_fat(self, dev_path, one_line):
     try:
         dev_str = dev_path + 'p' + one_line[:5].strip()
         if not os.path.exists(dev_str):
             _logger.error('dev {} file not exist'.format(dev_str))
         else:
             # 创建目标目录
             # des_path = self.mount_dir + '/' + os.path.basename(dev_str)
             des_path = self.mount_dir + '/' + 'volume' + one_line[:5].strip(
             )
             cmd_line = 'mkdir -p "{}";mount -o ro,iocharset=utf8,codepage=936 "{}" "{}"'.format(
                 des_path, dev_str, des_path)
             _logger.debug('mount cmd {}'.format(cmd_line))
             ret = net_common.get_info_from_syscmd(cmd_line)
             if ret[0] == 0:
                 self.mount_dev_list.append(dev_str)
             else:
                 _logger.debug('cmd {} failed,ret {}'.format(cmd_line, ret))
     except Exception as e:
         _logger.error('except {}'.format(traceback.format_exc()))
def get_real_vermagic(ko_file_path):
    if not os.path.isfile(ko_file_path):
        return None
    cmd = 'modinfo "{}"'.format(ko_file_path)
    retval, outs, errinfo = net_common.get_info_from_syscmd(cmd)
    #_logger.info("drv3: runcmd {} return:{} out:{} errorinfo:{}".format(retval, cmd, outs, errinfo))
    if retval != 0:
        str = "runcmd {} return:{} out:{} errorinfo:{}".format(
            retval, cmd, outs, errinfo)
        raise Exception(str)

    all_lines = outs.split("\n")
    for _l in all_lines:
        if "vermagic:" not in _l:
            continue
        value = _l.replace("vermagic:", " ")
        # 将value前面的空格删除掉。
        for i in range(len(value)):
            if value[i] == ' ':
                continue
            return value[i:]
    return None
Beispiel #29
0
def net_get_cardtype_driver():
    global net_cardtype_driver_dict
    net_cardtype_driver_dict.clear()
    cmdline = 'lspci -v'
    retval = net_common.get_info_from_syscmd(cmdline)
    if retval[0] != 0:
        _logger.error("get_info_from_syscmd failed,cmd {},retval {}".format(
            cmdline, retval[0]))
        return -1
    card_check_str = 'Ethernet controller: '
    driver_check_str = 'Kernel driver in use: '

    mlist = retval[1].split("\n\n")
    mlist_len = len(mlist)
    for i in range(mlist_len):
        mstr = mlist[i]
        mmlist = mstr.split("\n")
        mmlist_len = len(mmlist)
        cardtype_str = ''
        for j in range(mmlist_len):
            mmstr = mmlist[j]
            if len(cardtype_str) <= 0:
                mindex = mmstr.find(card_check_str)
                if mindex > 0:
                    cardtype_str = mmstr[mindex + len(card_check_str):]
                    _logger.debug('get a cardtype {}'.format(cardtype_str))
            else:
                mindex = mmstr.find(driver_check_str)
                if mindex > 0:
                    driver_str = mmstr[mindex + len(driver_check_str):]
                    _logger.debug('get a driver_str {}'.format(driver_str))
                    if driver_str not in net_cardtype_driver_dict:
                        net_cardtype_driver_dict[driver_str] = cardtype_str

    for key in net_cardtype_driver_dict:
        _logger.debug('cardtype_driver key:{},value:{}'.format(
            key, net_cardtype_driver_dict[key]))
    return 0
Beispiel #30
0
def net_get_cardtype():
    global net_cardtype_driver_dict
    retval = net_get_cardtype_driver()
    if retval != 0:
        _logger.error('net_get_cardtype_driver failed')
        return -1
    name_list = net_card_info.net_get_name_list()
    mlen = len(name_list)
    for i in range(mlen):
        mname = name_list[i]
        if net_card_info.net_type_check(mname) != _NET_TYPE_NAME_PHY:
            continue
        cmdline = 'ethtool -i ' + mname + " | grep driver: | awk '{print$2}'"
        retval = net_common.get_info_from_syscmd(cmdline)
        if retval[0] != 0:
            _logger.error('cmd {} failed'.format(cmdline))
        else:
            driver_name = retval[1].strip(' ').strip('\n')
            if driver_name in net_cardtype_driver_dict:
                net_card_info.net_set_item(
                    mname, 'cardtype', net_cardtype_driver_dict[driver_name])
            else:
                _logger.error('invalid driver_name {}'.format(driver_name))
    return 0