Как ifconfg fetch активировал сетевые адаптеры?

Шаг 1. Посмотрите свободное пространство в группе томов (VG)

 $ sudo vgs
 $ sudo vgdisplay #for details

Если вы видите свободное пространство в vg

выполните шаг 2:

 $ sudo lvextend -L +145G /dev/centos/home
 $ sudo xfs_growfs /dev/centos/home
1
15.06.2016, 09:36
2 ответа

man ifconfig говорит:

Ifconfig используется для настройки резидентных сетевых интерфейсов ядра. Он используется во время загрузки для настройки интерфейсов по мере необходимости. После этого он обычно требуется только при отладке или настройке системы.

Если аргументы не указаны, ifconfig отображает состояние активных в данный момент интерфейсов.

Если указан единственный аргумент интерфейса, он отображает только состояние данного интерфейса;

если указан единственный аргумент -a, он отображает состояние всех интерфейсов , даже тех, которые не работают.

В противном случае он настраивает интерфейс.

man netdevice также может пролить свет на этот вопрос. Он использует системный вызов ioctl ().

Другой метод - использовать strace .

Он дает вам список всех системных вызовов, сделанных любой программой, которую вы ей передаете, вместе с их аргументами и возвращаемыми значениями. Если ваша программа просто сбрасывает некоторую информацию и завершает работу, вместо того, чтобы работать в течение длительного времени, может быть довольно просто просто задействовать человека для всех системных вызовов, которые вы видите, которые выглядят так, как будто они могут предоставить информацию, которую вы ищете.

Когда я запускаю

strace ifconfig

Вот некоторые из интересных вызовов:

open("/proc/net/dev", O_RDONLY)         = 6

, за которыми следует куча ioctl:

ioctl(5, SIOCGIFFLAGS, {ifr_name="eth0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
ioctl(5, SIOCGIFHWADDR, {ifr_name="eth0", ifr_hwaddr=12:cd:4b:bb:7f:39}) = 0
ioctl(5, SIOCGIFMETRIC, {ifr_name="eth0", ifr_metric=0}) = 0
ioctl(5, SIOCGIFMTU, {ifr_name="eth0", ifr_mtu=9001}) = 0
2
27.01.2020, 23:35

Спасибо за помощь, Малый. Вот мой тестовый код.

check_ifup.c

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>

int main(int argc, char* argv[])
{
    if (argc < 2)
    {   
        printf("Usage: ./check_ifup interface_name\n");
        return 0;
    }   

    struct ifreq ifr;
    int sockfd;

    sockfd = socket(AF_INET, SOCK_DGRAM, 0); 
    bzero(&ifr, sizeof(ifr));
    strcpy(ifr.ifr_name, argv[1]);
    ioctl(sockfd, SIOCGIFFLAGS, &ifr);

    if (ifr.ifr_flags & IFF_UP)    
        printf("%s is up\n", argv[1]);
    else
        printf("%s is down or unknown\n", argv[1]);                                                            

    close(sockfd);
    return 0
}

Ссылка:

  1. Определение флагов интерфейса
  2. ifconfig.c
  3. Некоторое руководство (китайский язык)
  4. Разница между IFF_UP и IFF_RUNNING
0
27.01.2020, 23:35

Теги

Похожие вопросы