diff options
Diffstat (limited to 'common/VIL/gateway/gateway.h')
-rw-r--r-- | common/VIL/gateway/gateway.h | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/common/VIL/gateway/gateway.h b/common/VIL/gateway/gateway.h index 47a3b8a7..2da8ff64 100644 --- a/common/VIL/gateway/gateway.h +++ b/common/VIL/gateway/gateway.h @@ -68,17 +68,17 @@ struct route_table_entry { struct route_data { struct route_table_entry route_table[MAX_ROUTE_ENTRY_SIZE]; uint8_t route_ent_cnt; -}; +}__rte_cache_aligned; /** * A structure for Route table entires of IPv6 * */ struct nd_route_table_entry { + uint32_t port; /**< Port */ uint8_t nhipv6[16]; /**< next hop Ipv6 */ uint8_t depth; /**< Depth */ - uint32_t port; /**< Port */ -}; +}__rte_cache_aligned; /** * Routing table for IPv6 @@ -87,7 +87,7 @@ struct nd_route_table_entry { struct nd_route_data { struct nd_route_table_entry nd_route_table[MAX_ND_ROUTE_ENTRY_SIZE]; uint8_t nd_route_ent_cnt; -}; +}__rte_cache_aligned; extern void gw_init(uint32_t num_ports); @@ -95,6 +95,44 @@ extern uint32_t gw_get_num_ports(void); extern uint32_t is_gateway(void); +/** + * Get the route next hop ip address and port number for IPv4 + * @param dst_ip_addr + * Destination IPv4 address + * @param dst_port + * A pointer to destination port + * @param nhip + * A pointer to next hop ip address + */ + +static inline int gw_get_route_nh_port_ipv4(uint32_t dst_ip_addr, + uint32_t *dst_port, uint32_t *nhip, uint32_t nport) +{ + int i = 0; + uint32_t j = nport; + + while(likely(i < p_route_data[j]->route_ent_cnt)) { + if (likely((p_route_data[j]->route_table[i].nh_mask) == + (dst_ip_addr & + p_route_data[j]->route_table[i].mask))) { + + *dst_port = p_route_data[j]->route_table[i].port; + *nhip = p_route_data[j]->route_table[i].nh; + +#ifdef ARPICMP_DEBUG + lib_arp_nh_found++; +#endif + return 1; + } + i++; + } + + *nhip = 0; + *dst_port = 0xff; + return 0; +} + + extern void gw_get_nh_port_ipv4(uint32_t dst_ip_addr, uint32_t *dst_port, uint32_t *nhip); |