Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

Реализация низкоуровневой поддержки шины PCI в ядре операционной системы Linux


Владимир Мешков

В данной статье на примере решения простой задачи – определения MAC-адреса сетевой карты – рассмотрена реализация низкоуровневой поддержки (low-level support) шины PCI в ядре операционной системы Linux.

Постановка задачи и исходные данные

Исходные данные – имеется компьютер, функционирующий под управлением ОС Linux, версия ядра 2.4.24. В PCI-слот установлен сетевой адаптер на чипсете RTL8139C (далее – адаптер RTL8139C).

Задача – определить MAC-адрес этого адаптера.

Путей решения этой задачи несколько. Можно воспользоваться командами dmesg или ifconfig:

root@bob~/# dmesg | grep eth0

 

eth0: RealTek RTL8139 at 0xc000, 00:02:44:72:5e:4e, IRQ 11

eth0: Identified 8139 chip type 'RTL-8100B/8139D'

 

root@bob~/# ifconfig | grep eth0

 

eth0      Link encap:Ethernet  HWaddr 00:02:44:72:5E:4E

Можно написать небольшое приложение следующего вида:

/* get_mac.c */

#include <stdio.h>

#include <sys/socket.h>

#include <sys/ioctl.h>

#include <linux/if.h>

 

int main() {

 

    int fd;

    struct ifreq ifr;

    unsigned char mac[6];

 

    fd=socket(AF_INET,SOCK_DGRAM,0);

    memset(&ifr,0,sizeof(struct ifreq));

    memcpy(ifr.ifr_name,"eth0",4);

    ioctl(fd,SIOCGIFHWADDR,&ifr);

    memcpy(mac,(char *)&(ifr.ifr_hwaddr.sa_data),sizeof(struct sockaddr));

 

    printf("%.2x:%.2x:%.2x:%.2x:%.2x:%.2x ",

    mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);

 

    return 0;

}

Можно извлечь MAC-адрес из самого адаптера RTL8139C. Рассмотрим, как это делается.

Согласно спецификации на сетевой адаптер RTL8139C, MAC-адрес занимает первые 6 байт в пространстве портов ввода/вывода (I/O), отведенного адаптеру. Задавая смещение относительно базового порта I/O, можно прочитать все 6 байт MAC-адреса.

Пример функции, выполняющей процедуру чтения MAC-адреса, приведен ниже:


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100