Как создать виртуальный сетевой интерфейс, управляющийся программой?
Всем привет.
Появилась идея, которая лежит в концепции Internet-over-Radio.
В двух словах, идея самого концепта такова: машина имеет некий радиоинтерфейс (приемопередатчик, и нет, это не Wi-Fi :) ) и программу к нему, которая может управлять им. Допустим, таких машин две. Тогда они могут по радиоканалу обмениваться информацией, задавая любой формат пакетов, заданный программой управления. Ну значит, мы можем передовать по радио и сетевые пакеты.
В ОСах, в Линуксе, в частнотси, есть понятие сетевых интерфейсов, которые взаимодействуют с приложением и с ethernet-адаптером, обрабатывая пакеты в соотв. с разными уровнями модели OSI. Таким образом, ethernet-адаптер передает готовые ethrnet-кадры либо в сеть, либо выше по модели, а приложение, также просто либо принимает, либо передает данные в интерфейс.
Так вот, вопрос в том, что можно ли как-бы заменить ethernet-адаптер программой? Т.е. чтобы то, что нужно передать наружу в сеть, система передала некой программе, и, соответственно, то, что передать приложению, программа могла передать системе. По сути, я просто хочу заменить физический уровень моедли OSI, но только не эзернетом или Wi-Fi, а просто программой.
Среди того, что я гуглил, находил информацию про виртуальные TUN/TAP интерфейсы, но, кажется, это не совсем то, что мне поможет.
Как быть?
Для тех, кто столкнется с подобной задачей, ссылка на имплементацию ровно того, что я хочу сделать. Оказывается, этот скрипт убрали из репозитория GNURadio, посколько, видимо, добавили внутренную поддержку TUN/TAP интерфейса, но вот толковый пример как этим пользоваться, не положили.
Тут есть нюанс. Сам по себе свисток работать не будет, т.к. он просто выполняет функцию приема сигнала и его цифровизации, а вот что делать с этим сигналом уже программируется (Software Defined Radio). Т.е. просто адаптировать свисток к стеку не получится, нужна именно прослойка между свистоком и стеком, но еще раньше чем модуль ядра. Т.е. поток получается такой
Сигнал -> свисток -> программа-обработчик -> сетевой интерфейс -> приложение (и в обратную)
Правильно ли я понял, что, получается, между обработчиком и сетевым интерфейсом должен быть еще драйевр? (Мне уже кажется, что я не совсем верно применяю терминологию, поэтому прошу не бить)
Боюсь, что нет. Я как раз много дальше, чем то, что рассказывается в статье: идея как раз в том, чтобы суметь при помощи одного из SDR и GNURadio организовать "сетевой тунель".