/*
- * Copyright (c) 2016 Cisco and/or its affiliates.
+ * Copyright (c) 2016-2019 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:
#include <vnet/fib/fib_node.h>
/**
- * UDP encapsualtion.
+ * UDP encapsulation.
* A representation of the encapsulation of packets in UDP-over-IP.
* This is encapsulation only, there is no tunnel interface, hence
* it is uni-directional. For decap register a handler with the UDP port
*/
/**
- * Fixup behaviour. Actions performed on the encap in the data-plance
+ * Fixup behaviour. Actions performed on the encap in the data-plane
*/
typedef enum udp_encap_fixup_flags_t_
{
UDP_ENCAP_FIXUP_NONE = 0,
- /**
- * UDP source port contains an entropy/hash value for load-balancing by downstream peers.
- */
+ /**
+ * UDP source port contains an entropy/hash value for load-balancing by downstream peers.
+ */
UDP_ENCAP_FIXUP_UDP_SRC_PORT_ENTROPY = (1 << 0),
} udp_encap_fixup_flags_t;
/**
- * The UDP encap represenation
+ * The UDP encap representation
*/
typedef struct udp_encap_t_
{
- /**
- * The first cacheline contains the data used in the data-plane
- */
+ /**
+ * The first cacheline contains the data used in the data-plane
+ */
CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
- /**
- * The headers to paint, in packet painting order
- */
+ /**
+ * The headers to paint, in packet painting order
+ */
union
{
struct
} __attribute__ ((packed)) ip6;
} __attribute__ ((packed)) ue_hdrs;
- /**
- * Flags controlling fixup behaviour
- */
+ /**
+ * Flags controlling fixup behaviour
+ */
udp_encap_fixup_flags_t ue_flags;
- /**
- * The DPO used to forward to the next node in the VLIB graph
- */
+ /**
+ * The DPO used to forward to the next node in the VLIB graph
+ */
dpo_id_t ue_dpo;
- /**
- * the protocol of the IP header imposed
- */
+ /**
+ * the protocol of the IP header imposed
+ */
fib_protocol_t ue_ip_proto;
+ /**
+ * The second cacheline contains control-plane data
+ */
CLIB_CACHE_LINE_ALIGN_MARK (cacheline1);
- /**
- * linkage into the FIB graph
- */
+ /**
+ * linkage into the FIB graph
+ */
fib_node_t ue_fib_node;
- /**
- * The ID given by the user/client.
- * This ID is used by the client for modifications.
- */
- u32 ue_id;
-
- /**
- * Tracking information for the IP destination
- */
+ /**
+ * Tracking information for the IP destination
+ */
fib_node_index_t ue_fib_entry_index;
u32 ue_fib_sibling;
- /**
- * The FIB index in which the encap destination resides
- */
+ /**
+ * The FIB index in which the encap destination resides
+ */
index_t ue_fib_index;
} udp_encap_t;
-extern index_t udp_encap_add_and_lock (u32 id,
- fib_protocol_t proto,
+extern index_t udp_encap_add_and_lock (fib_protocol_t proto,
index_t fib_index,
const ip46_address_t * src_ip,
const ip46_address_t * dst_ip,
u16 dst_port,
udp_encap_fixup_flags_t flags);
-extern index_t udp_encap_find (u32 id);
-extern void udp_encap_lock (u32 id);
-extern void udp_encap_unlock (u32 id);
+extern void udp_encap_lock (index_t uei);
+extern void udp_encap_unlock (index_t uei);
extern u8 *format_udp_encap (u8 * s, va_list * args);
-extern void udp_encap_unlock_w_index (index_t uei);
-extern void udp_encap_contribute_forwarding (u32 id,
+extern void udp_encap_contribute_forwarding (index_t uei,
dpo_proto_t proto,
dpo_id_t * dpo);
+extern void udp_encap_get_stats (index_t uei, u64 * packets, u64 * bytes);
+
+/**
+ * Callback function invoked when walking all encap objects.
+ * Return non-zero to continue the walk.
+ */
+typedef walk_rc_t (*udp_encap_walk_cb_t) (index_t uei, void *ctx);
+
+/**
+ * Walk each of the encap objects
+ */
+extern void udp_encap_walk (udp_encap_walk_cb_t cb, void *ctx);
+
/**
* Pool of encaps
*/