#define __ADJ_MCAST_H__
#include <vnet/adj/adj_types.h>
+#include <vnet/adj/adj_midchain.h>
/**
* @brief
* @param
* The offset in the rewrite a which to write in packet's
* IP Address
- *
- * @param
- * The mask to apply to the packet berfore the rewrite.
*/
extern void adj_mcast_update_rewrite(adj_index_t adj_index,
u8 *rewrite,
- u8 offset,
- u32 mask);
+ u8 offset);
+
+/**
+ * @brief
+ * Update the rewrite string for an existing adjacecny and
+ * Convert the adjacency into a midchain
+ *
+ * @param
+ * The index of the adj to update
+ *
+ * @param fixup
+ * The function that will be invoked at paket switch time to 'fixup'
+ * the rewrite applied with necessary per-packet info (i.e. length, checksums).
+ * @param fixup_data
+ * Context data set by the caller that is provided as an argument in the
+ * fixup function.
+ *
+ * @param flags
+ * Flags controlling the adjacency behaviour
+ *
+ * @param
+ * The new rewrite
+ */
+extern void adj_mcast_midchain_update_rewrite(adj_index_t adj_index,
+ adj_midchain_fixup_t fixup,
+ const void *fixup_data,
+ adj_flags_t flags,
+ u8 *rewrite,
+ u8 offset,
+ u32 mask);
+/**
+ * @brief Walk the multicast Adjacencies on a given interface
+ */
+extern void adj_mcast_walk (u32 sw_if_index,
+ fib_protocol_t adj_nh_proto,
+ adj_walk_cb_t cb,
+ void *ctx);
/**
* @brief Format/display a mcast adjacency.
*/
extern u8* format_adj_mcast(u8* s, va_list *ap);
+extern u8* format_adj_mcast_midchain(u8* s, va_list *ap);
/**
* @brief Get the sze of the mcast adj DB. Test purposes only.