Я написал несколько программ для VPN, которые теперь должны иметь возможность пометить демуннелированный трафик с помощью тегов MPLS.
Я посмотрел на источник Mausezahn (который может отправлять пакеты MPLS)и кажется, что он строит весь кадр ethernet , используя различные вспомогательные функции, а затем передает этот кадр Ethernet ядру с помощью libnet_write
.
staging / send_eth.c:
...
tmpls = libnet_build_mpls(tx.mpls_label,
tx.mpls_exp,
tx.mpls_bos,
tx.mpls_ttl,
NULL,
0,
l,
0);
...
t = libnet_build_ethernet (tx.eth_dst,
tx.eth_src,
tx.eth_type,
tx.eth_payload,
tx.eth_payload_s,
L,
t);
if (t == -1)
{
fprintf(stderr, " mz/create_eth_frame: Can't build Ethernet header: %s\n",
libnet_geterror(l));
exit(EXIT_FAILURE);
}
if (verbose) (void) print_frame_details();
libnet_write(L);
...
Мой код в настоящее время использует туннельный интерфейс уровня IP (например, tun0) для доставки пакетов в ядро.
Если я захочу использовать MPLS, мне нужно будет вместо этого начать использовать интерфейс касания?
Или есть другой способ, такой как ioctls на fd в tun0?
Или мне нужно использовать libnet_write
?