* See the License for the specific language governing permissions and
* limitations under the License.
*/
+#ifndef included_map_h
+#define included_map_h
+
#include <stdbool.h>
#include <vppinfra/error.h>
#include <vnet/vnet.h>
#include <vnet/dpo/load_balance.h>
#include "lpm.h"
#include <vppinfra/lock.h>
+#include <map/map.api_enum.h>
#define MAP_SKIP_IP6_LOOKUP 1
uword ip4_sv_reass_custom_next_index;
} map_main_t;
-/*
- * MAP Error counters/messages
- */
-#define foreach_map_error \
- /* Must be first. */ \
- _(NONE, "valid MAP packets") \
- _(BAD_PROTOCOL, "bad protocol") \
- _(SEC_CHECK, "security check failed") \
- _(ENCAP_SEC_CHECK, "encap security check failed") \
- _(DECAP_SEC_CHECK, "decap security check failed") \
- _(ICMP, "unable to translate ICMP") \
- _(ICMP_RELAY, "unable to relay ICMP") \
- _(UNKNOWN, "unknown") \
- _(NO_BINDING, "no binding") \
- _(NO_DOMAIN, "no domain") \
- _(FRAGMENTED, "packet is a fragment") \
- _(FRAGMENT_MEMORY, "could not cache fragment") \
- _(FRAGMENT_MALFORMED, "fragment has unexpected format")\
- _(FRAGMENT_DROPPED, "dropped cached fragment") \
- _(MALFORMED, "malformed packet") \
- _(DF_SET, "can't fragment, DF set") \
- _(TIME_EXCEEDED, "time exceeded") \
-
-typedef enum
-{
-#define _(sym,str) MAP_ERROR_##sym,
- foreach_map_error
-#undef _
- MAP_N_ERROR,
-} map_error_t;
-
+typedef vl_counter_map_enum_t map_error_t;
u64 map_error_counter_get (u32 node_index, map_error_t map_error);
typedef struct
}
}
+static_always_inline bool
+ip4_map_ip6_lookup_bypass (vlib_buffer_t * p0, ip4_header_t * ip)
+{
+#ifdef MAP_SKIP_IP6_LOOKUP
+ if (FIB_NODE_INDEX_INVALID != pre_resolved[FIB_PROTOCOL_IP6].fei)
+ {
+ vnet_buffer (p0)->ip.adj_index[VLIB_TX] =
+ pre_resolved[FIB_PROTOCOL_IP6].dpo.dpoi_index;
+ return (true);
+ }
+#endif
+ return (false);
+}
+
+static_always_inline bool
+ip6_map_ip4_lookup_bypass (vlib_buffer_t * p0, ip4_header_t * ip)
+{
+#ifdef MAP_SKIP_IP6_LOOKUP
+ if (FIB_NODE_INDEX_INVALID != pre_resolved[FIB_PROTOCOL_IP4].fei)
+ {
+ vnet_buffer (p0)->ip.adj_index[VLIB_TX] =
+ pre_resolved[FIB_PROTOCOL_IP4].dpo.dpoi_index;
+ return (true);
+ }
+#endif
+ return (false);
+}
+
+#endif
/*
* fd.io coding-style-patch-verification: ON
*