Fixing IPv4/IPv6 flow distribution over LAG

- CRs-Fixed: 670013
- Adding a check in bridge post routing hook to correctly set
  'is_routed' flag when ingress physical interface is LAG slave.
- Using source and destination MAC addresses directly
  in case of bridged flows when constructing interface hierarchy.
- Adding ECM API to lookup ethernet interfaces based on MAC address and
  interface index set by operating system. This takes care of situations where
  multiple interfaces have same MAC address such as LAG slaves.

Change-Id: I5f414d1ace50b2d023e3b2fa38cd9d3f1fabdc04
Signed-off-by: Tushar Mathur <tushar@codeaurora.org>
diff --git a/ecm_interface.h b/ecm_interface.h
index c1afd13..31f9172 100644
--- a/ecm_interface.h
+++ b/ecm_interface.h
@@ -48,6 +48,6 @@
 bool ecm_interface_find_route_by_addr(ip_addr_t addr, struct ecm_interface_route *ecm_rt);
 void ecm_interface_route_release(struct ecm_interface_route *rt);
 struct ecm_db_iface_instance *ecm_interface_establish_and_ref(struct net_device *dev);
-int32_t ecm_interface_heirarchy_construct(struct ecm_db_iface_instance *interfaces[], ip_addr_t packet_src_addr, ip_addr_t packet_dest_addr, int packet_protocol, struct net_device *given_dest_dev, bool is_routed, struct net_device *given_src_dev);
+int32_t ecm_interface_heirarchy_construct(struct ecm_db_iface_instance *interfaces[], ip_addr_t packet_src_addr, ip_addr_t packet_dest_addr, int packet_protocol, struct net_device *given_dest_dev, bool is_routed, struct net_device *given_src_dev, uint8_t *dest_node_addr, uint8_t *src_node_addr);
 void ecm_interface_stats_update(struct ecm_db_connection_instance *ci, uint32_t from_tx_packets, uint32_t from_tx_bytes, uint32_t from_rx_packets, uint32_t from_rx_bytes, uint32_t to_tx_packets, uint32_t to_tx_bytes, uint32_t to_rx_packets, uint32_t to_rx_bytes);
 struct net_device *ecm_interface_dev_find_by_addr(ip_addr_t addr, bool *from_local_addr);