trex-bird使用过程解析
- trex-bird原理

TRex-Bird架构图
trex 结合bird服务是采用linux上的veth及网络命名空间的技术: bird运行在trex-a-bird-ns 网络namespace里,创建veth虚接口对bird-0-0-T和bird-0-0-L;
veth接口对bird-0-0-L接口在trex-a-bird-ns空间,另外一端接口bird-0-0-T在linux默认网络空间上,birde在trex-a-bird-ns网络命名空间里发送数据报文会到bird-0-0-T接口上,trex将接口bird-0-0-T上接收到的数据通过dpdk接口发送出去
- 网络拓扑图

TRex-Bird验证拓扑图
- trex 配置文件
### Config file generated by dpdk_setup_ports.py ###
- version: 2
  interfaces: ['02:02.0', '02:03.0']
  low_end: true
  stack: linux_based
  port_info:
      - ip: 192.168.33.18
        default_gw: 192.168.33.1
      - ip: 192.168.34.18
        default_gw: 192.168.34.1
  platform:
      master_thread_id: 0
      latency_thread_id: 1
      dual_if:
        - socket: 0
          threads: [2,3]
- 运行trex-bird
$sudo ./t-rex-64 -i --bird-server --software -c 2
- 运行trex-console
trex>service -a
trex(service)>portattr --prom on --mult on
trex(service)>plugins load bird
trex>portattr -a
Port Status
     port       |          0           |          1
----------------+----------------------+---------------------
driver          |     net_e1000_em     |     net_e1000_em
description     |       Unknown        |       Unknown
link status     |          UP          |          UP
link speed      |        1 Gb/s        |        1 Gb/s
port status     |         IDLE         |         IDLE
promiscuous     |         off          |         off
multicast       |          on          |          on
flow ctrl       |         none         |         none
vxlan fs        |          -           |          -
--              |                      |
layer mode      |         IPv4         |         IPv4
src IPv4        |    192.168.33.18     |    192.168.34.18
IPv6            |         off          |         off
src MAC         |  00:0c:29:1a:48:84   |  00:0c:29:1a:48:8e
---             |                      |
Destination     |     192.168.33.1     |     192.168.34.1
ARP Resolution  |  00:50:56:c0:00:01   |  00:50:56:c0:00:02
----            |                      |
VLAN            |          -           |          -
-----           |                      |
PCI Address     |     0000:02:02.0     |     0000:02:03.0
NUMA Node       |          0           |          0
RX Filter Mode  |    hardware match    |    hardware match
RX Queueing     |         off          |         off
Grat ARP        |         off          |         off
------          |                      |
trex(service)>plugins bird add_node -p 0 --mac 00:0c:29:1a:48:83 --ipv4 192.168.33.19 --ipv4-subnet 24
trex(service)>plugins bird show_nodes -p 0
Setting port 0 in with namespace configuration               [SUCCESS]
wait_for_async_results                                       [SUCCESS]
Setting port 0 in with namespace configuration               [SUCCESS]
wait_for_async_results                                       [SUCCESS]
Bird Nodes Information
    Node MAC      |   ipv4 address    |    ipv4 subnet    |   ipv6 enabled    |   ipv6 address    |    ipv6 subnet    |       vlans       |       tpids
------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+------------------
00:0c:29:1a:48:83 |   192.168.33.19   |        24         |       False       |         -         |         -         |         -         |         -
trex(service)>plugins bird add_node -p 1 --mac 00:0c:29:1a:48:8f --ipv4 192.168.34.19 --ipv4-subnet 24
Setting port 1 in with namespace configuration               [SUCCESS]
wait_for_async_results                                       [SUCCESS]
Applying attributes on port(s) [0, 1]:                       [SUCCESS]
Setting port 1 in with namespace configuration               [SUCCESS]
wait_for_async_results                                       [SUCCESS]
trex(service)>plugins bird show_nodes -p 1
Setting port 1 in with namespace configuration               [SUCCESS]
wait_for_async_results                                       [SUCCESS]
Setting port 1 in with namespace configuration               [SUCCESS]
wait_for_async_results                                       [SUCCESS]
Bird Nodes Information
    Node MAC      |   ipv4 address    |    ipv4 subnet    |   ipv6 enabled    |   ipv6 address    |    ipv6 subnet    |       vlans       |       tpids
------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+------------------
00:0c:29:1a:48:8f |   192.168.34.19   |        24         |       False       |         -         |         -         |         -         |         -
参考linux主机环境:
$ sudo ip netns ls
trex-a-0-0 (id: 1)
trex-a-1-0 (id: 0)
trex-a-bird-ns (id: 2)
$ifconfig
bird-0-0-T: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9280
        ether be:b3:0b:ec:c1:10  txqueuelen 1000  (Ethernet)
        RX packets 14  bytes 684 (684.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 137  bytes 23834 (23.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
bird-1-0-T: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9280
        ether c6:9c:ab:55:df:6d  txqueuelen 1000  (Ethernet)
        RX packets 4  bytes 232 (232.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 121  bytes 20593 (20.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.210.198  netmask 255.255.255.0  broadcast 192.168.210.255
        inet6 fe80::20c:29ff:fe1a:487a  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:1a:48:7a  txqueuelen 1000  (Ethernet)
        RX packets 237834  bytes 168717112 (168.7 MB)
        RX errors 0  dropped 24158  overruns 0  frame 0
        TX packets 147862  bytes 45169033 (45.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 129061  bytes 21420353 (21.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 129061  bytes 21420353 (21.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
trex-a-0-0-T: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9280
        ether e2:18:e9:38:9a:74  txqueuelen 1000  (Ethernet)
        RX packets 24  bytes 1896 (1.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 85  bytes 6334 (6.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
trex-a-1-0-T: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9280
        ether 12:54:67:6a:54:f2  txqueuelen 1000  (Ethernet)
        RX packets 4537  bytes 458248 (458.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1671  bytes 176128 (176.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
加载bird配置
trex(service)>plugins bird set_config -f bird/cfg/bgp.conf -r bird/cfg/ipv4_routes.conf
Bird configuration result: Configured successfully
trex(service)>plugins bird show_config
router id 100.100.100.100;
protocol device {
    scan time 1;
}
protocol bgp my_bgp1 {
    local 192.168.33.19 as 65000;  # put your local ip and as number here
    neighbor 192.168.34.19 as 65000;  # put your dut ip and as number here
    ipv4 {
        import all;
        export all;
    };
}
# Running a second BGP instance in another interface.
protocol bgp my_bgp2 {
    local 192.168.34.19 as 65000;
    neighbor 192.168.33.19 as 65000;
    ipv4 {
        import all;
        export all;
    };
}
protocol static {
    ipv4 {
        import all;
        export all;
    };
    route 42.42.42.0/32 via 192.168.33.3;
    route 42.42.42.1/32 via 192.168.33.3;
    route 42.42.42.2/32 via 192.168.33.3;
    route 42.42.42.3/32 via 192.168.33.3;
    route 42.42.42.4/32 via 192.168.33.3;
    route 42.42.42.5/32 via 192.168.33.3;
    route 42.42.42.6/32 via 192.168.33.3;
    route 42.42.42.7/32 via 192.168.33.3;
    route 42.42.42.8/32 via 192.168.33.3;
    route 42.42.42.9/32 via 192.168.33.3;
    route 42.42.42.10/32 via 192.168.33.3;
}
查看状态
trex(service)>plugins bird show_protocols
Name       Proto      Table      State  Since         Info
device1    Device     ---        up     03:01:16.681
my_bgp1    BGP        ---        start  03:32:42.051  Connect
my_bgp2    BGP        ---        start  03:32:42.051  Connect
static1    Static     master4    up     03:01:16.681
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号