Подсказки относительно перевода в рабочее состояние сетевого драйвера UNIX
Если Вы никогда не переводили сетевой драйвер в рабочее состояние в операционной системе UNIX прежде, Вы захотите узнать об инструментах, которые можно использовать, чтобы установить интерфейсы, передачу тестового пакета и прием, и собрать информацию. Подробная документация этих инструментов выходит за рамки этого руководства, но можно всегда использовать UNIX man команда для отображения стандартных страниц руководства по системе в Окне терминала.
Эта глава предполагает использование двух машин для перевода в рабочее состояние драйвера, тот, имеющий драйвер и другой для действия как источник или место назначения для сетевого трафика. Рисунок 3-1 показывает типичную установку с Ethernet-адресами и IP-адресами, которые будут использоваться. Машина, содержащая Ваш драйвер, будет упоминаться как цель. Вторая машина обычно является машиной, которую Вы используете для отладки драйвера и будете именоваться здесь как узел отладки.

Показанные IP-адреса являются просто примерами. Если Вы отлаживаете в более широкой сети (который не рекомендуется), необходимо использовать юридические IP-адреса для той сети. Если Вы отлаживаете по частному каналу между этими двумя машинами, можно выбрать любые IP-адреса, пока Вы устанавливаете статическую привязку по адресу как показано ниже.
Активация сетевого канала
После загрузки использования сетевого драйвера kextload, необходимо узнать, какое имя сетевого интерфейса это было присвоено, и затем переведите сетевой канал в рабочее состояние для того интерфейса. Вы используете ifconfig программа, чтобы сделать это. При использовании выделенного канала между двумя машинами, чтобы избежать лавинно рассылать более широкую сеть, Вам, вероятно, также придется перевести выделенный канал в рабочее состояние на узле отладки.
Для получения списка сетевых интерфейсов работать ifconfig с -a флаг. Интерфейс для Вашего драйвера должен быть перечислен без «inet» поля, и с Ethernet-адресом контроллера. Вот пример для целевой машины, показанной на рисунке 3-1:
# ifconfig -a |
lo0: flags=8009<UP,LOOPBACK,MULTICAST> mtu 16384 |
inet 127.0.0.1 netmask 0xff000000 |
en0: flags=8863<UP,BROADCAST,b6,RUNNING,SIMPLEX,MULTICAST> mtu 1500 |
inet 17.202.40.235 netmask 0xfffffc00 broadcast 17.202.43.255 |
ether 00:05:02:3b:45:cb |
en1: flags=822<BROADCAST,b6,SIMPLEX> mtu 1500 |
ether 00:90:27:94:8f:21 |
В этом случае, существующий интерфейс en0 представляет встроенный порт Ethernet на компьютере. Интерфейс en1 представляет новый переводимый в рабочее состояние драйвер. Для перевода в рабочее состояние ссылки в добавленном интерфейсе работать ifconfig на нем с IP-адресом и сетевой маской, и указывают up, как показано здесь:
# ifconfig en1 inet 192.168.1.1 netmask 255.255.255.0 up |
Когда Вы работаете ifconfig с up параметр, Вы непосредственно вызываете драйвер устройства enable функция. Эта функция будет описана подробно в записи Драйвера для Контроллера Ethernet.
Если Вы используете частный канал и не сконфигурировали машину отладки для установки ее ссылки при запуске, можно использовать ifconfig на нем также. С установкой в качестве примера команда была бы похожа на это:
# ifconfig en2 inet 192.168.1.2 netmask 255.255.255.0 up |
Для создания некоторых аспектов из тестирования проще можно хотеть установить статическую привязку IP-адреса для этих двух машин. Обычно эта задача выполняется автоматически Вашим компьютером, но если Ваш сетевой драйвер не передаст и получит пакеты, то привязка никогда не будет завершаться. Вы делаете это путем выполнения arp команда на каждой машине, давая IP-адрес и аппаратный адрес для другой машины. На основе примеров выше, на целевом узле Вы ввели бы эту команду:
# arp -s 192.168.1.2 00:90:27:23:12:f3 |
И на узле отладки Вы ввели бы эту команду:
# arp -s 192.168.1.1 00:90:27:94:8f:21 |
С этим у Вас есть сетевое соединение между этими двумя системами, которые можно использовать для тестирования драйвера.
Тестирование I/O
При разработке драйвера Вы захотите протестировать тот или получение или передача работают, прежде чем оба. Так как Ваш драйвер еще не способен к обработке сетевого трафика туда и обратно, необходимо использовать различные инструменты для проверки этих двух случаев. Вы будете, вероятно, использовать много входа в систему Вашего драйвера также, чтобы удостовериться, что вещи работают, как Вы ожидаете.
Чтобы проверить, что Ваш драйвер получает пакеты, можно использовать ping утилита от отладки размещает для отправки пакетов в целевую машину и использования, входящего в систему водительский код пакетного приема, чтобы проверить, что получаются пакеты. Выполнение ping обычно выполняет запрос ARP для получения аппаратного адреса для цели. Если Ваш драйвер еще не может передать, ping если Вы не устанавливали статическую привязку IP-адреса с, перестанет работать arp команда. Если Вы не хотите устанавливать статическую привязку IP-адреса, можно работать ping на широковещательном адресе для частной сети, обходя определение адресов.
Чтобы проверить, что Ваш драйвер отправляет пакеты, можно использовать ping на целевой машине для отправки пакетов в узел отладки. Если Ваш драйвер еще не поддерживает получение, можно использовать tcpdump утилита на отладке размещает, чтобы проверить, что пакеты прибывают из целевой машины. Чтобы сделать это, укажите -v флаг для многословного вывода, и -i отметьте для именования интерфейса для исследования.
Если машина отладки подключена к цели в интерфейсе en2, например, Вы ввели бы эту команду:
# tcpdump -v -i en2 |
С tcpdump выполнение, можно запустить ping на целевой машине и исследуют вывод tcpdump на узле отладки. Если нет никакого вывода, Ваш драйвер не передает. Если там выводится, проверьте, что IP-адрес для Вашего водительского сетевого интерфейса в целевой системе появляется в выводе. Если это делает, Ваш драйвер успешно передает пакеты.
Как только Ваш драйвер может и получить и передать, можно просто использовать ping не настраивая статическую привязку IP-адреса, и выполняют тесты для проверки целостности данных.
Тестирование сбора статистики
При реализации общего сбора статистики в сетевом драйвере можно проверить, что это работает с netstat программа. Выполните эту программу с -I флаг, сопровождаемый именем Вашего водительского сетевого интерфейса. Вот пример:
% netstat -I en1 |
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll |
en1 1500 <Link> 00.90.27.94.8f.21 17 0 19 0 0 |
en1 1500 192.168.1 192.168.1.1 17 0 19 0 0 |
Вывод показывает, что драйвер получил 17 пакетов (Ipkts или входящие пакеты) и передал 19 (Opkts или исходящие пакеты). См. страницу справочника UNIX для netstat для получения дополнительной информации.
Разгрузка драйвера
Как только Вы включили коммуникацию IP на использовании устройства ifconfig, протокол IP присоединен к Вашему драйверу в сетевом стеке ядра. (См. Сетевое Руководство по программированию Расширений ядра для получения дополнительной информации о сетевом стеке.), Как только протокол присоединяется, Ваш драйвер не может быть разгружен, пока Вы не отсоединяете протокол.
Для отсоединения протокола IP от сетевого устройства можно дать следующую команду из командной строки:
ipconfig set en1 NONE |
Замените надлежащим именем интерфейса вместо en1, конечно. Это отключит IP, объединяющийся в сеть для интерфейса. Можно тогда разгрузить драйвер использование KEXT kextunload.
Для получения дополнительной информации см. страницы руководства для ipconfig(8) и kextunload(8).