Официальный форум СВД Встраиваемые Системы
06 Февраля, 2012, 12:29:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Настройка сети при работе с QEMU в QNX  (Прочитано 3086 раз)
Олег Большаков
Администратор
Старожил

Сообщений: 2110


Читаю...


WWW
« : 10 Апреля, 2010, 16:51:09 »

Настройка сети при работе с QEMU в QNX
(english version)

Эмулятор аппаратного обеспечения QEMU предоставляет широкие возможности сетевой конфигурации. Этому способствует и большой набор эмулируемых сетевых контроллеров (NE2000, Intel 82551, Intel 82557B, Intel 82559ER, Realtek RTL8139, Intel E1000 и т.д.), что позволяет ожидать работу с сетью подавляющего большинства гостевых систем. Думаю, что будет сложно найти развитую операционную систему, в которой отсутствует поддержка NE2000 или RTL8139. Также немалую роль в работе сети играют и гибкие варианты конфигурации сети, сетевого взаимодействия между гостевыми и хост системами. В данной заметке будут рассмотрены различные варианты конфигурации сети при работе QEMU в QNX хост. Также стоит отметить, что дополнительную информацию по этому вопросу можно найти в сети, стоит учитывать, что сетевая подсистема QNX6 очень похожа на NetBSD.

Примечание 1. Во всех примерах для демонстрации работы сети в качестве гостевой системы будет использоваться установочный диск Archlinux (archlinux-2009.08-netinstall-i686.iso). Но точно также можно настраивать сеть и в других гостевых ОС, например, Windows, QNX 4.25 или NetBSD, с учётом их специфики. Хост система представляет собой QNX Neutrino 6.4.1, аналогично можно использовать QNX 6.4.0 или QNX 6.5.0.

Примечание 2. В примерах приняты следующие соглашения об условных обозначениях:

 -
[QNX] -- команда выполняется в QNX хост системе;
 -
[ARCH] -- команда выполняется в гостевой системе, в нашем случае в Archlinux.


Пользовательский режим работы сети

Самый простой способ соединения гостевой системы с хост системой это пользовательский (user) режим. В этом режиме QEMU обеспечивает:

 - виртуальную сеть (10.0.2.0)
 - сетевой экран, блокирующий любые входящие соединения
 - сервер DHCP (10.0.2.2)
 - шлюз (10.0.2.2)

DHCP сервер автоматически выдаёт адрес 10.0.2.15, при поступлении DHCP запроса от гостевой системы. Если хост система (QNX) имеет выход в интернет, то и гостевая система также получает доступ в глобальную сеть. Никаких дополнительных настроек не требуется.

1. [QNX] Запускаем виртуальную машину:

Код:
# qemu -net user -net nic -cdrom /home/qemu/img/archlinux-2009.08-netinstall-i686.iso

(щёлкните чтобы показать/скрыть)

2. [ARCH] Настраиваем сетевой интерфейс:

Код:
# dhcpcd eth0
# ifconfig

(щёлкните чтобы показать/скрыть)

(щёлкните чтобы показать/скрыть)

3. [ARCH] Проверяем работу сети:

Код:
# ping -c2 10.0.2.2
# telnet 10.0.2.2

(щёлкните чтобы показать/скрыть)


Объединение виртуальных сетей

Необходимо запустить первый процесс QEMU, который будет ожидать входящие соединения на определённом порту. Второй процесс QEMU будет подключаться к этому порту. Всякий раз при появлении пакета в виртуальной сети первого QEMU, он будет передан во вторую сеть, и наоборот.

Реализуем следующую конфигурацию:

 - Гостевая система 1 ожидает входящие соединения на порту 8010;
 - Гостевая система 2 подключается к гостевой системе 1 через localhost:8010.

1. [QNX] Запускаем гостевую систему 1:

Код:
# qemu  -net nic,macaddr=52:54:00:12:34:57 -net socket,listen=:8010 -cdrom /home/qemu/img/archlinux-2009.08-netinstall-i686.iso

2. [QNX] Запускаем гостевую систему 2:

Код:
# qemu  -net nic,vlan=2,macaddr=52:54:00:12:34:56 -net socket,vlan=2,connect=127.0.0.1:8010 -cdrom /home/qemu/img/archlinux-2009.08-netinstall-i686.iso

3. [ARCH1] Конфигурируем сеть в гостевой системе 1:

Код:
# ifconfig eth0 10.0.2.101 netmask 255.255.255.0 up

(щёлкните чтобы показать/скрыть)

4. [ARCH2] Конфигурируем сеть в гостевой системе 2:

Код:
# ifconfig eth0 10.0.2.102 netmask 255.255.255.0 up

(щёлкните чтобы показать/скрыть)

5. [ARCH] Проверяем работу сети в обоих гостевых системах:

Код:
# ping -c 3 10.0.2.102

(щёлкните чтобы показать/скрыть)

Код:
# ping -c 3 10.0.2.101

(щёлкните чтобы показать/скрыть)


Подключение виртуальной сети к TAP устройству

Существует другой способ организации виртуальной сети -- использование виртуального ethernet устройства при помощи TAP драйвера. Ethernet-кадры принимаемые таким устройством также появляются в виртуальной сети гостевой системы. Разумеется, ethernet-кадры посланные виртуальной сетью гостевой системы также принимаются TAP устройством.

При использования драйвера devnp-qtap.so для QNX6 приложения получают доступ к взаимодействию с сетевым устройством используя файловый дескриптор. Любые данные посланные через файловый дескриптор будут приняты на обоих сторонах. Это значит, что приложения запущенные в гостевой системе будут иметь возможность доступа и подключения к приложениям запущенным на хост системе. Если разрешена переадресация портов (port forwarding), то приложения гостевой системы также смогут иметь доступ к внешней сети (internet).

При указании параметра -net tap QEMU будет пытаться вызывать скрипты /etc/qemu-ifup для настройки TAP устройства и /etc/qemu-ifdown после завершения работы с устройством. Если скрипт /etc/qemu-ifup не будет найден, то выполнение программы прервётся. Можно изменить имена скриптов по умолчанию, либо указать, что их не надо вызывать, например так:

Код:
# qemu -net tap,script=no,downscript=no <...>

Чтобы не указывать эти параметры каждый раз, достаточно создать пустой скрипт /etc/qemu-ifup. Главное не забыть установить ему атрибуты исполняемого файла.

1. [QNX] Создаём и настраиваем TAP устройство:

Код:
# mount -T io-pkt /lib/dll/devnp-qtap.so
# ifconfig tap0 10.0.0.1 netmask 255.255.255.0 up

2. [QNX] Запускаем виртуальную машину:

Код:
# qemu -net nic -net tap,ifname=/dev/tap0 -cdrom /home/qemu/img/archlinux-2009.08-netinstall-i686.iso

3. [ARCH] Настраиваем сетевой интерфейс:

Код:
# ifconfig eth0 10.0.0.2 netmask 255.255.255.0 up
# ifconfig

(щёлкните чтобы показать/скрыть)

4. [ARCH] Проверяем работу сети:

Код:
# ping -c 2 10.0.0.1
# telnet 10.0.0.1

(щёлкните чтобы показать/скрыть)

5. [QNX] Проверяем работу сети:

Код:
# ping -c 3 10.0.0.2

(щёлкните чтобы показать/скрыть)


Подключение виртуальных сетей к TAP устройствам (две гостевые системы)

В этом примере у нас две гостевые системы (два TAP устройства). Каждая гостевая система подключается к хост системе через TAP устройство. Для того чтобы обеспечить взаимодействие между гостевыми системами необходимо настроить мост (bridge) между двумя TAP устройствами. Мост будет выступать в роли центрального сетевого узла между хостом и обоими сетевыми системами.

1.  [QNX] Создаём и настраиваем TAP устройства:

Код:
# mount -T io-pkt /lib/dll/devnp-qtap.so
# ifconfig tap0 10.0.0.1 netmask 255.255.255.0 up
# mount -T io-pkt /lib/dll/devnp-qtap.so
# ifconfig tap1 10.0.1.1 netmask 255.255.255.0 up

2. [QNX] Запускаем гостевую систему 1:

Код:
# qemu -net tap,ifname=/dev/tap0 -net nic,macaddr=80:00:00:12:34:57 -cdrom /home/qemu/img/archlinux-2009.08-netinstall-i686.iso

3. [QNX] Запускаем гостевую систему 2:

Код:
# qemu -net tap,ifname=/dev/tap1 -net nic,macaddr=80:00:00:12:34:56 -cdrom /home/qemu/img/archlinux-2009.08-netinstall-i686.iso

4. [QNX] Создаём и конфигурируем мост:

Код:
# ifconfig bridge0 create
# brconfig bridge0 add tap0 add tap1 up

(щёлкните чтобы показать/скрыть)

5. [ARCH1] Конфигурируем сеть в гостевой системе 1:

Код:
# ifconfig eth0 10.0.0.2 netmask 255.255.0.0 up

(щёлкните чтобы показать/скрыть)

6. [ARCH2] Конфигурируем сеть в гостевой системе 2:

Код:
# ifconfig eth0 10.0.1.2 netmask 255.255.0.0 up

(щёлкните чтобы показать/скрыть)

7. Проверяем работу сети как и раньше ping'ом. Гостевые системы должны пинговать друг друга и хост систему, а также хост система должна пинговать обе гостевые.

« Последнее редактирование: 20 Мая, 2010, 13:40:00 от Александр Молодцов » Записан

LH
Опытный пользователь

Сообщений: 100


« Ответ #1 : 12 Апреля, 2010, 16:11:23 »

При попытке старта qemu с ключем -net tap,ifname=/dev/tap0  у меня выдает:

Цитировать
/etc/qemu-ifup could not lanch network script

Пож. подскажите: есть ли у вас файл /etc/qemu-ifup и что в нем?

Записан
Олег Большаков
Администратор
Старожил

Сообщений: 2110


Читаю...


WWW
« Ответ #2 : 12 Апреля, 2010, 16:23:09 »

Спасибо за замечание. Действительно, это моё упущение. Просто уже давно сделал такой скрипт, в котором пусто:

Код:
#!/bin/ksh


Либо можете указать параметр script=no и даже downscript=no:

Код:
#qemu -net tap,ifname=/dev/tap0,script=no,downscript=no ...

Эти скрипты вызываются перед открытием TAP устройства и после его закрытия. В моих примерах их использование не требуется. Сейчас добавлю эту информацию в первое сообщение.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2011 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.16 | SMF © 2006-2009, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 01 Февраля, 2012, 10:03:02