The following picture is a topology that used in testing my ECMP Routing Switch App.
After host3 send packets to host1, the app starts making path process and the related log as below. You will see this app picks up 2 paths ( "0xe5->0xe3->0xe4" and "0xe5->0xe2->0xe4" ) and choose one of them to setup flow entries.
[pickup_next_candidate] Find a candidate = 0xe5
[update_distance] node = 0xe3, distance = 1
[update_distance] node = 0xe2, distance = 1
[pickup_next_candidate] Find a candidate = 0xe3
[update_distance] node = 0xe1, distance = 2
[update_distance] node = 0xe4, distance = 2
[update_distance] node = 0xe2, distance = 1
[pickup_next_candidate] Find a candidate = 0xe2
[update_distance] node = 0xe1, distance = 2
[update_distance] node = 0xe4, distance = 2
[pickup_next_candidate] Find a candidate = 0xe1
[pickup_next_candidate] Find a candidate = 0xe4
[build_hop_list] build a hop = 0xe4
[build_hop_list] build a hop = 0xe3
[build_hop_list] build a hop = 0xe5
[resolve_path] find a hop list 0
[pickup_next_candidate] Find a candidate = 0xe5
[update_distance] node = 0xe2, distance = 1
[pickup_next_candidate] Find a candidate = 0xe2
[update_distance] node = 0xe1, distance = 2
[update_distance] node = 0xe4, distance = 2
[pickup_next_candidate] Find a candidate = 0xe1
[pickup_next_candidate] Find a candidate = 0xe4
[build_hop_list] build a hop = 0xe4
[build_hop_list] build a hop = 0xe2
[build_hop_list] build a hop = 0xe5
[resolve_path] find a hop list 1
[resolve_path] has 2 paths, pick up the key = 0 from hash_value = 2169503748