Use a interface de rede para enviar dados para o GNURadio [closed]

2

Versão mais curta

Como posso fazer uma interface de rede no Linux enviar e receber pacotes de um processo em execução em vez de um driver de dispositivo de rede?

Versão mais longa

Estou planejando como minha tese de bacharel para construir uma rede ad-hoc sem fio personalizada (não 802.11, mas usando a pilha do protocolo IP) em cima de um par de USRP N210 (Software Defined Radios da Ettus) para comunicação entre dois computadores. A idéia é implementar a camada de enlace no GNURadio, usando os USRPs para transmitir e receber os sinais de rádio.

Idealmente,eugostariaquetodoosistemadecomunicaçãofossetransparenteparaoshosts,comosefosseapenasoutraredeconectadaaalgumainterface(comoeth0,etc).Entãoeutenhomeperguntadoseexistealgumamaneiradecriarumainterfacederede(virt0naimagem)noLinuxefazê-lasecomunicarcomoGNURadio(queusaPythoneC++)emvezdodriverdedispositivoderede.OpropósitodistoéqueoambienteGNURadiopodeteracessoaospacotesqueprecisamserenviadoseencaminhá-los(apósalgumprocessamento)atravésdoUSRPparaseremrecebidospelooutrohost.Umtubofariaisso,jáqueéumacomunicaçãoentreprocessos?

Essa foi a primeira ideia que tive para alcançar a transparência de que eu estava falando. Eu também pensei em escrever um driver de rede fictício para fazer interface com o GNURadio, mas eu gostaria de evitar isso, dada a minha falta de experiência com drivers de dispositivos. Se você tivesse alguma outra ideia, seria bem vindo.

    
por Jorge Carpio 20.01.2017 / 22:21

1 resposta

0

Você cria interfaces de rede que podem enviar e receber pacotes apoiados por algum programa (que, no seu caso, seria conectado ao GNU Radio de alguma forma) usando a interface tun / tap .

Para citar Documentation/networking/tuntap.txt na fonte do kernel:

TUN/TAP provides packet reception and transmission for user space programs. It can be seen as a simple Point-to-Point or Ethernet device, which, instead of receiving packets from physical media, receives them from user space program and instead of sending packets via physical media writes them to the user space program.

In order to use the driver a program has to open /dev/net/tun and issue a corresponding ioctl() to register a network device with the kernel. A network device will appear as tunXX or tapXX, depending on the options chosen. When the program closes the file descriptor, the network device and all corresponding routes will disappear.

Depending on the type of device chosen the userspace program has to read/write IP packets (with tun) or ethernet frames (with tap). Which one is being used depends on the flags given with the ioctl().

The package from http://vtun.sourceforge.net/tun contains two simple examples for how to use tun and tap devices. Both programs work like a bridge between two network interfaces.

br_select.c - bridge based on select system call.

br_sigio.c - bridge based on async io and SIGIO signal.

However, the best example is VTun http://vtun.sourceforge.net

Veja também esta pergunta do stackoverflow. Muitos tutoriais podem ser encontrados no google.

    
por 21.01.2017 / 19:05