summaryrefslogtreecommitdiffstats
path: root/common/VIL/gateway/gateway.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/VIL/gateway/gateway.h')
-rw-r--r--common/VIL/gateway/gateway.h46
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);