Fsck обычно запускается при запуске, когда файловая система не была полностью размонтирована (обычно, когда вам нужно выполнить полный сброс). fsck проверит ваша файловая система перед ее монтированием и сообщает об ошибке, если обнаруживает, что что-то идет не так (несоответствия, неспособность воспроизвести журнал, потерянные inodes ...), или сообщит об ошибке, если не обнаружит никаких ошибок. Так что в вашем случае вам повезло, и с вашей файловой системой все в порядке. Есть очень интересный пост о fsck, если вам нужна дополнительная информация о том, как он работает внутри: https://lwn.net/ Статьи / 248180 /
Определение структуры показывает, что h_proto
является 16-битным -битным целым числом -с прямым порядком байтов -:
struct ethhdr {
unsigned char h_dest[ETH_ALEN]; /* destination eth addr */
unsigned char h_source[ETH_ALEN]; /* source ether addr */
__be16 h_proto; /* packet type ID field */
} __attribute__((packed));
Так что вам нужно обработать его с помощью ntohs
перед чтением. Как только вы это сделаете, вы увидите правильное значение 0x0800.
Если вы попытаетесь напечатать это объявление EtherType, вы не получите правильное значение, значит, ваша машина неправильно интерпретирует порядок следования байтов. Решение будет:
int etherType = ntohs(eth->h_proto);
printf("EtherType: 02%x", etherType);
Это даст вам именно тот EtherType, который указан в документации.