Внедрить пакет от имени процесса qemu из гипервизора, который вместо этого будет доставлен мосту?

#linux #networking #virtual-machine

#линукс #сетевой #виртуальная машина

Вопрос:

Я могу ввести фрейм ethernet, предназначенный для виртуальной машины, которой принадлежит устройство tap, с помощью socat и scapy . Этот кадр ethernet доставляется из гипервизора на виртуальную машину, но не на открытый мост vSwitch, к которому также подключено устройство tap виртуальной машины.

Оба socat и scapy за кулисами делают что-то вроде:

 socket(AF_PACKET, SOCK_RAW, 0) = 5 bind(5, {sa_family=AF_PACKET, sll_protocol=htons(ETH_P_ALL), sll_ifindex=if_nametoindex("vmc357-01"), sll_hatype=ARPHRD_NETROM, sll_pkttype=PACKET_HOST, sll_halen=0}, 20) = 0 sendto(5, "asdasdasdn", 10, 0, {sa_family=AF_PACKET, sll_protocol=htons(ETH_P_ALL), sll_ifindex=if_nametoindex("vmc357-01"), sll_hatype=ARPHRD_NETROM, sll_pkttype=PACKET_HOST, sll_halen=0}, 112) = -1 EINVAL (Invalid argument)  

Есть ли способ подделать пакет, который, по-видимому, исходил бы от виртуальной машины и вместо этого доставлялся на мост? Я считаю, что проблема здесь в том, что сокет AF_PACKET не является подходящим API для использования.