Skip to content

Latest commit

 

History

History
501 lines (483 loc) · 26.8 KB

File metadata and controls

501 lines (483 loc) · 26.8 KB

DINC Tutorial : Run Distributed DT on a Fat-Tree Data Canter

Planter Logo

💡 A guide to set up and run distributed DTEB (generated by Planter, an automating in-network machine learning framework) on a sample Fat-Tree data canter topology and tested by BMv2. Please do not use this setup to regenerate results in the paper, the detailed setup can be found in ./src/eval/evaluation.md.

Requirements

  1. BMv2 supported
  2. Python 3.10 or above
  3. All needed python packets installed

Let's "Distributing" DTEB now

  • Run Planter with -m (manually config) mode with program after -d:

     (changgang-python3.10) changgang@changgangsmbp2 DINC % python3 DINC.py -m -d ./src/sample/Planter_DT/DT_performance_Iris.p4
    
  • The distributing strategy is generated by DINC in this process:

         ,---,        ,---,        ,--.'|   ,----..   
       .'  .' `\   ,`--.' |    ,--,:  : |  /   /   \  
     ,---.'     \  |   :  : ,`--.'`|  ' : |   :     : 
     |   |  .`\  | :   |  ' |   :  :  | | .   |  ;. / 
     :   : |  '  | |   :  | :   |   \ | : .   ; /--`  
     |   ' '  ;  : '   '  ; |   : '  '; | ;   | ;     
     '   | ;  .  | |   |  | '   ' ;.    ; |   : |     
     |   | :  |  ' '   :  ; |   | | \   | .   | '___  
     '   : | /  ;  |   |  ' '   : |  ; .' '   ; : .'| 
     |   | '` ,/   '   :  | |   | '`--'   '   | '/  : 
     ;   :  .'     ;   |.'  '   : |       |   :    /  
     |   ,.'       '---'    ;   |.'        \   \ .'   
     '---'                  '---'           `---`    DINC version 0 
     	
     + Where is your DINC folder? (default = /Users/changgang/Documents/GitHub/DINC) 
     + Which network topology do you want to use? (default = Fat-Tree | options = -h) -h
       What option is available: Folded-Clos, BT-All, Fat-Tree, BT-ASP, BT, Folded-Clos-All, Folded-Clos-ASP.
     + Which network topology do you want to use? (default = Fat-Tree | options = -h) Fat-Tree
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/topologies/Fat-Tree
     + Where is the depth of your network? (default = 3) 
     + Where is the branch number on each node of your network? (default = 2) 
     + If you want to display your network topology? (default = False) 
     + Which are input devices (please check the reference graph in the previous step)? (default = [2, 3, 5, 6]) 
     + Which are output devices (please check the reference graph in the previous step)? (default = [0]) 
     + Which resources should be considered? (default = [stage, memory]) 
     + Which resources should be considered? (default = [5, 5, 5, 5, 5, 5, 5]) 
     + Which resources should be considered? (default = [5, 5, 5, 5, 5, 5, 5]) 
     + What architectures would you like to use? (default = ['v1model', 'v1model', 'v1model', 'v1model', 'v1model', 'v1model', 'v1model']) 
     + What use cases would you like to use? (default = ['standard_block', 'standard_block', 'standard_block', 'standard_block', 'standard_block', 'standard_block', 'standard_block']) 
     + What targets would you like to use? (default = ['bmv2', 'bmv2', 'bmv2', 'bmv2', 'bmv2', 'bmv2', 'bmv2']) 
     + Where is your P4 file? (default = ./src/sample/Planter_DT/DT_performance_Iris.p4) 
     + What method would you like to use to slice your P4 file? (default = Manually | options = -h) 
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/slicing/Manually
     + Where is the stater marker in your P4 code? (default = @!) 
     + Where is the end marker in your P4 code? (default = !@) 
     + What is the element position information marked in your P4 code? (default = [slice, position]) 
     - Remove file: /Users/changgang/Documents/GitHub/DINC/src/temp/P4/E1_control.p4
     - Remove file: /Users/changgang/Documents/GitHub/DINC/src/temp/P4/E0_control-apply.p4
     - Remove file: /Users/changgang/Documents/GitHub/DINC/src/temp/P4/E0_control.p4
     - Remove file: /Users/changgang/Documents/GitHub/DINC/src/temp/P4/E1_control-apply.p4
     + What solver would you like to use? (default = ILP | options = -h) 
     + What variation of solver would you like to choose? (default = Type_1 | options = -h) 
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/solver/ILP/Type_1
                 fun: 38.0
             message: 'Optimization terminated successfully. (HiGHS Status 7: Optimal)'
      mip_dual_bound: 38.0
             mip_gap: 0.0
      mip_node_count: 0
              status: 0
             success: True
                   x: array([0., 0., 1., 0., 1., 0., 1., 0., 0., 1., 0., 0., 0., 1., 0., 1., 0.,
            0., 1., 0., 0.])
     Optimization finished, the result can be found in the directory: ./src/logs/DT_performance_Iris_Fat-Tree_3depth_2branch.pdf
     + If you want to test the ILP solver? (default = False) True
     + If you want detailed test info? (default = False) 
     The used number of nodes is 7 out of 7
     Execution time for round 10 test is: 0.001190s
     Everage execution time is 0.001782393455505371s with standard deviation 0.0008575664111038881s
     Path 4/4 latency is 3 out of 3 hops
     DINC deployment has 4 paths with average latency: 3.0 out of 3.0 hops
     The hop number CDF is: [0. 0. 1.]
     Orignial segmentation number is 3, total used segmentation is 7
    

Till now, the result used in the paper has already been generated and we can choose to exit the framework with CTRL+C at this stage.

  • The P4 code for each node will be generated by DINC under the following process:

     + What generator would you like to use? (default = exact | options = -h) 
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/code_generator/exact
     - Remove file: /Users/changgang/Documents/GitHub/DINC/P4/Node_2.p4
     - Remove file: /Users/changgang/Documents/GitHub/DINC/P4/Node_0.p4
     - Remove file: /Users/changgang/Documents/GitHub/DINC/P4/Node_1.p4
     before remove input m [['bit<32>', 'feature2', 32], ['bit<32>', 'feature3', 32]] output m [['bit<3>', 'code_f2', 3], ['bit<3>', 'code_f3', 3]]
     input m [['bit<32>', 'feature2', 32], ['bit<32>', 'feature3', 32]] output m [['bit<3>', 'code_f2', 3], ['bit<3>', 'code_f3', 3]]
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 0 -> Node_0.p4...Done
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 1 -> Node_1.p4...Done
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 2 -> Node_2.p4...Done
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 3 -> Node_3.p4...Done
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 4 -> Node_4.p4...Done
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 5 -> Node_5.p4...Done
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 6 -> Node_6.p4...Done
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/architecture/v1model
     P4 Generation Finished!
     - Remove the following path: /Users/changgang/Documents/GitHub/DINC/src/code_generator/exact
    
  • The testing process in DINC can be triggered with the following process:

     + Would you like to test current strategy? (default = Y) 
     + What testing mode would you like to use? (default = BMv2 | options = -h) 
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/test/BMv2
     All P4 files will be regenerated with v1model architecture to meet the testing environment requirements!
     Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/code_generator/v1model
     before remove input m [['bit<32>', 'feature2', 32], ['bit<32>', 'feature3', 32]] output m [['bit<3>', 'code_f2', 3], ['bit<3>', 'code_f3', 3]]
     input m [['bit<32>', 'feature2', 32], ['bit<32>', 'feature3', 32]] output m [['bit<3>', 'code_f2', 3], ['bit<3>', 'code_f3', 3]]
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 0 -> s0.p4...Done
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 1 -> s1.p4...Done
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 2 -> s2.p4...Done
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 3 -> s3.p4...Done
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 4 -> s4.p4...Done
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 5 -> s5.p4...Done
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     + Add the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     > Generating p4 files with v1model and standard_block for node 6 -> s6.p4...Done
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/use_cases/standard_block
     - Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/architecture/v1model
     P4 Generation Finished!
     Remove the following path: /home/jesu3779/Documents/GitHub/DINC/src/code_generator/v1model
     P4 Generation Finished
     + Where is your BMv2 folder? (default = /home/jesu3779/mysde/behavioral-model-1.15.0) 
     - Please input your password for 'sudo' command: 
     Dump the targets info to /home/jesu3779/Documents/GitHub/DINC/src/test/BMv2/test_environment/temp/BMv2_network_config.json
     + Test scripts are generated!
     Join all subprocess together ...
     sudo mn -c
     *** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
     killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2> /dev/null
     killall -9 controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2> /dev/null
     pkill -9 -f "sudo mnexec"
     *** Removing junk from /tmp
     rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log
     *** Removing old X11 tunnels
     *** Removing excess kernel datapaths
     ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'
     ***  Removing OVS datapaths
     ovs-vsctl --timeout=1 list-br
     ovs-vsctl --timeout=1 list-br
     *** Removing all links of the pattern foo-ethX
     ip link show | egrep -o '([-_.[:alnum:]]+-eth[[:digit:]]+)'
     ip link show
     *** Killing stale mininet node processes
     pkill -9 -f mininet:
     *** Shutting down stale tunnels
     pkill -9 -f Tunnel=Ethernet
     pkill -9 -f .ssh/mn
     rm -f ~/.ssh/mn/*
     *** Cleanup complete.
     rm -f *.pcap
     rm -rf build pcaps logs
     ['s0', 's1', 's2', 's3', 's4', 's5', 's6']
     0 1 s0 s1 1 1
     0 4 s0 s4 2 1
     1 2 s1 s2 2 1
     1 3 s1 s3 3 1
     4 5 s4 s5 2 1
     4 6 s4 s6 3 1
     *** Creating network
     *** Adding hosts:
     h0 h2 h3 h5 h6 
     *** Adding switches:
     s0 s1 s2 s3 s4 s5 s6 
     *** Adding links:
     (h0, s0) (h2, s2) (h3, s3) (h5, s5) (h6, s6) (s0, s1) (s0, s4) (s1, s2) (s1, s3) (s4, s5) (s4, s6) 
     *** Configuring hosts
     h0 h2 h3 h5 h6 
     *** Starting controller
     	
     *** Starting 7 switches
     s0 Starting P4 switch s0.
     /home/jesu3779/mysde/behavioral-model-1.15.0/targets/simple_switch/simple_switch -i 88@s0-eth88 -i 1@s0-eth1 -i 2@s0-eth2 --thrift-port 9090 --nanolog ipc:///tmp/bm-0-log.ipc --device-id 0 ./build/s0.json
     P4 switch s0 has been started.
     s1 Starting P4 switch s1.
     /home/jesu3779/mysde/behavioral-model-1.15.0/targets/simple_switch/simple_switch -i 1@s1-eth1 -i 2@s1-eth2 -i 3@s1-eth3 --thrift-port 9091 --nanolog ipc:///tmp/bm-1-log.ipc --device-id 1 ./build/s1.json
     P4 switch s1 has been started.
     s2 Starting P4 switch s2.
     /home/jesu3779/mysde/behavioral-model-1.15.0/targets/simple_switch/simple_switch -i 88@s2-eth88 -i 1@s2-eth1 --thrift-port 9092 --nanolog ipc:///tmp/bm-2-log.ipc --device-id 2 ./build/s2.json
     P4 switch s2 has been started.
     s3 Starting P4 switch s3.
     /home/jesu3779/mysde/behavioral-model-1.15.0/targets/simple_switch/simple_switch -i 88@s3-eth88 -i 1@s3-eth1 --thrift-port 9093 --nanolog ipc:///tmp/bm-3-log.ipc --device-id 3 ./build/s3.json
     P4 switch s3 has been started.
     s4 Starting P4 switch s4.
     /home/jesu3779/mysde/behavioral-model-1.15.0/targets/simple_switch/simple_switch -i 1@s4-eth1 -i 2@s4-eth2 -i 3@s4-eth3 --thrift-port 9094 --nanolog ipc:///tmp/bm-4-log.ipc --device-id 4 ./build/s4.json
     P4 switch s4 has been started.
     s5 Starting P4 switch s5.
     /home/jesu3779/mysde/behavioral-model-1.15.0/targets/simple_switch/simple_switch -i 88@s5-eth88 -i 1@s5-eth1 --thrift-port 9095 --nanolog ipc:///tmp/bm-5-log.ipc --device-id 5 ./build/s5.json
     P4 switch s5 has been started.
     s6 Starting P4 switch s6.
     /home/jesu3779/mysde/behavioral-model-1.15.0/targets/simple_switch/simple_switch -i 88@s6-eth88 -i 1@s6-eth1 --thrift-port 9096 --nanolog ipc:///tmp/bm-6-log.ipc --device-id 6 ./build/s6.json
     P4 switch s6 has been started.
     	
     /sbin/ethtool --offload eth0 rx off
     /sbin/ethtool --offload eth0 tx off
     /sbin/ethtool --offload eth0 sg off
     disable ipv6
     /sbin/ethtool --offload eth0 rx off
     /sbin/ethtool --offload eth0 tx off
     /sbin/ethtool --offload eth0 sg off
     disable ipv6
     /sbin/ethtool --offload eth0 rx off
     /sbin/ethtool --offload eth0 tx off
     /sbin/ethtool --offload eth0 sg off
     disable ipv6
     /sbin/ethtool --offload eth0 rx off
     /sbin/ethtool --offload eth0 tx off
     /sbin/ethtool --offload eth0 sg off
     disable ipv6
     /sbin/ethtool --offload eth0 rx off
     /sbin/ethtool --offload eth0 tx off
     /sbin/ethtool --offload eth0 sg off
     disable ipv6
     Ready !
     Obtaining JSON from switch...
     Done
     Control utility for runtime P4 table manipulation
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:fe/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        10:00:00:00:00:00  00:58
     Entry has been added with handle 0
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:02/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:01:01  00:01
     Entry has been added with handle 1
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:03/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:01:01  00:01
     Entry has been added with handle 2
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:05/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:01:04  00:02
     Entry has been added with handle 3
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:06/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:01:04  00:02
     Entry has been added with handle 4
     RuntimeCmd: 
     Obtaining JSON from switch...
     Done
     Control utility for runtime P4 table manipulation
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:fe/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:01:00  00:01
     Entry has been added with handle 0
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:02/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:01:02  00:02
     Entry has been added with handle 1
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:03/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:01:03  00:03
     Entry has been added with handle 2
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:05/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:01:00  00:01
     Entry has been added with handle 3
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:06/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:01:00  00:01
     Entry has been added with handle 4
     RuntimeCmd: 
     Obtaining JSON from switch...
     Done
     Control utility for runtime P4 table manipulation
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:fe/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:02:01  00:01
     Entry has been added with handle 0
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:02/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        10:00:00:00:00:02  00:58
     Entry has been added with handle 1
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:03/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:02:01  00:01
     Entry has been added with handle 2
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:05/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:02:01  00:01
     Entry has been added with handle 3
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:06/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:02:01  00:01
     Entry has been added with handle 4
     RuntimeCmd: 
     Obtaining JSON from switch...
     Done
     Control utility for runtime P4 table manipulation
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:fe/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:03:01  00:01
     Entry has been added with handle 0
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:02/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:03:01  00:01
     Entry has been added with handle 1
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:03/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        10:00:00:00:00:03  00:58
     Entry has been added with handle 2
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:05/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:03:01  00:01
     Entry has been added with handle 3
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:06/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:03:01  00:01
     Entry has been added with handle 4
     RuntimeCmd: 
     Obtaining JSON from switch...
     Done
     Control utility for runtime P4 table manipulation
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:fe/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:02:00  00:01
     Entry has been added with handle 0
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:02/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:02:00  00:01
     Entry has been added with handle 1
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:03/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:02:00  00:01
     Entry has been added with handle 2
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:05/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:01:05  00:02
     Entry has been added with handle 3
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:06/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:01:06  00:03
     Entry has been added with handle 4
     RuntimeCmd: 
     Obtaining JSON from switch...
     Done
     Control utility for runtime P4 table manipulation
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:fe/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:02:04  00:01
     Entry has been added with handle 0
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:02/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:02:04  00:01
     Entry has been added with handle 1
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:03/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:02:04  00:01
     Entry has been added with handle 2
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:05/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        10:00:00:00:00:05  00:58
     Entry has been added with handle 3
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:06/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:02:04  00:01
     Entry has been added with handle 4
     RuntimeCmd: 
     Obtaining JSON from switch...
     Done
     Control utility for runtime P4 table manipulation
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:fe/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:03:04  00:01
     Entry has been added with handle 0
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:02/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:03:04  00:01
     Entry has been added with handle 1
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:03/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:03:04  00:01
     Entry has been added with handle 2
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:05/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        c8:00:00:00:03:04  00:01
     Entry has been added with handle 3
     RuntimeCmd: Adding entry to lpm match table SwitchIngress.ipv4_lpm
     match key:           LPM-0a:00:00:06/32
     action:              SwitchIngress.ipv4_forward
     runtime data:        10:00:00:00:00:06  00:58
     Entry has been added with handle 4
     RuntimeCmd: 
     *** Starting CLI:
     mininet> ping all
     *** Unknown command: ping all
     mininet> pingall
     *** Ping: testing ping reachability
     h0 -> h2 h3 h5 h6 
     h2 -> h0 h3 h5 h6 
     h3 -> h0 h2 h5 h6 
     h5 -> h0 h2 h3 h6 
     h6 -> h0 h2 h3 h5 
     *** Results: 0% dropped (20/20 received)
     mininet> 
     ==============================================================================================
     =                                       Exiting DINC                                         =
     ==============================================================================================
    

Test Finished! 🎉