ip: Replace Sematics for Interface IP addresses
[vpp.git] / src / plugins / gbp / gbp.h
index 334a743..50039b3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at:
  *
  */
 
-#ifndef included_vnet_gbp_h
-#define included_vnet_gbp_h
+#ifndef __GBP_H__
+#define __GBP_H__
 
-#include <vlib/vlib.h>
-#include <vnet/vnet.h>
-#include <vnet/ip/ip.h>
+#include <plugins/acl/exports.h>
 
-typedef u32 epg_id_t;
-#define EPG_INVALID (~0)
+#include <plugins/gbp/gbp_types.h>
+#include <plugins/gbp/gbp_endpoint.h>
+#include <plugins/gbp/gbp_endpoint_group.h>
+#include <plugins/gbp/gbp_subnet.h>
+#include <plugins/gbp/gbp_recirc.h>
 
-/**
- * The key for an Endpoint
- */
-typedef struct gbp_endpoint_key_t_
+typedef struct
 {
-  /**
-   * The interface on which the EP is connected
-   */
-  u32 gek_sw_if_index;
+  u32 gbp_acl_user_id;
+  acl_plugin_methods_t acl_plugin;
+} gbp_main_t;
 
-  /**
-   * The IP[46] address of the endpoint
-   */
-  ip46_address_t gek_ip;
-} gbp_endpoint_key_t;
+extern gbp_main_t gbp_main;
 
-/**
- * A Group Based Policy Endpoint.
- * This is typcially a VM on the local compute node for which policy must be
- * locally applied
- */
-typedef struct gbp_endpoint_t_
+typedef enum gbp_policy_type_t_
 {
-  /**
-   * The endpoint's interface and IP address
-   */
-  gbp_endpoint_key_t *ge_key;
-
-  /**
-   * The endpoint's designated EPG
-   */
-  epg_id_t ge_epg_id;
-} gbp_endpoint_t;
-
-extern void gbp_endpoint_update (u32 sw_if_index,
-                                const ip46_address_t * ip, epg_id_t epg_id);
-extern void gbp_endpoint_delete (u32 sw_if_index, const ip46_address_t * ip);
-
-typedef int (*gbp_endpoint_cb_t) (gbp_endpoint_t * gbpe, void *ctx);
-extern void gbp_endpoint_walk (gbp_endpoint_cb_t bgpe, void *ctx);
-
-
-/**
- * The key for an Contract
- */
-typedef struct gbp_contract_key_t_
-{
-  union
-  {
-    struct
-    {
-      /**
-       * source and destination EPGs for which the ACL applies
-       */
-      epg_id_t gck_src;
-      epg_id_t gck_dst;
-    };
-    u64 as_u64;
-  };
-} gbp_contract_key_t;
+  GBP_POLICY_PORT,
+  GBP_POLICY_MAC,
+  GBP_POLICY_LPM,
+  GBP_N_POLICY
+#define GBP_N_POLICY GBP_N_POLICY
+} gbp_policy_type_t;
 
 /**
- * A Group Based Policy Contract.
- *  Determines the ACL that applies to traffic pass between two endpoint groups
+ * Grouping of global data for the GBP source EPG classification feature
  */
-typedef struct gbp_contract_t_
+typedef struct gbp_policy_main_t_
 {
   /**
-   * source and destination EPGs
-   */
-  gbp_contract_key_t gc_key;
-
-  /**
-   * The ACL to apply for packets from the source to the destination EPG
+   * Next nodes for L2 output features
    */
-  u32 gc_acl_index;;
-} gbp_contract_t;
-
-
-extern void gbp_contract_update (epg_id_t src_epg,
-                                epg_id_t dst_epg, u32 acl_index);
-extern void gbp_contract_delete (epg_id_t src_epg, epg_id_t dst_epg);
+  u32 l2_output_feat_next[GBP_N_POLICY][32];
+} gbp_policy_main_t;
 
-typedef int (*gbp_contract_cb_t) (gbp_contract_t * gbpe, void *ctx);
-extern void gbp_contract_walk (gbp_contract_cb_t bgpe, void *ctx);
+extern gbp_policy_main_t gbp_policy_main;
 
 #endif