gbp: add anonymous l3-out external interfaces
[vpp.git] / src / plugins / gbp / gbp_policy_dpo.h
index 6b4f8c5..1dc11ab 100644 (file)
@@ -17,6 +17,9 @@
 #define __GBP_POLICY_DPO_H__
 
 #include <vnet/dpo/dpo.h>
+#include <vnet/dpo/load_balance.h>
+#include <vnet/fib/ip4_fib.h>
+#include <vnet/fib/ip6_fib.h>
 
 /**
  * @brief
@@ -81,6 +84,32 @@ gbp_policy_dpo_get (index_t index)
   return (pool_elt_at_index (gbp_policy_dpo_pool, index));
 }
 
+static_always_inline const gbp_policy_dpo_t *
+gbp_classify_get_gpd (const ip4_address_t * ip4, const ip6_address_t * ip6,
+                     const u32 fib_index)
+{
+  const gbp_policy_dpo_t *gpd;
+  const dpo_id_t *dpo;
+  const load_balance_t *lb;
+  u32 lbi;
+
+  if (ip4)
+    lbi = ip4_fib_forwarding_lookup (fib_index, ip4);
+  else if (ip6)
+    lbi = ip6_fib_table_fwding_lookup (&ip6_main, fib_index, ip6);
+  else
+    return 0;
+
+  lb = load_balance_get (lbi);
+  dpo = load_balance_get_bucket_i (lb, 0);
+
+  if (dpo->dpoi_type != gbp_policy_dpo_type)
+    return 0;
+
+  gpd = gbp_policy_dpo_get (dpo->dpoi_index);
+  return gpd;
+}
+
 /*
  * fd.io coding-style-patch-verification: ON
  *