从Linux应用程序发送带有MPLS标签的数据包

时间:2018-09-28 12:29:40

标签: linux tap tun mpls

我已经编写了一些VPN软件,现在需要能够使用MPLS标签来标记去隧道的流量。

我研究了Mausezahn(可以发送MPLS数据包)的来源,它似乎使用各种辅助函数构造了整个 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,是否需要开始使用Tap接口?

或者还有另一种方法,例如tun0的fd上的ioctls吗?

还是我需要使用libnet_write

0 个答案:

没有答案