From 2e7fbcc08152da5c6a17ed80ba08cd37edec6c8c Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Wed, 15 Mar 2017 04:22:25 -0700 Subject: Mcast rewrite no memcpy use a 32bit mask in the adjacency to AND with the IP address and OR into the rewrite. Change-Id: I80b0f246c18fd74f3e43c5d49e25833412f34665 Signed-off-by: Neale Ranns --- src/vnet/adj/adj.c | 2 +- src/vnet/adj/adj_mcast.c | 11 ++++++++++- src/vnet/adj/adj_mcast.h | 11 ++++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) (limited to 'src/vnet/adj') diff --git a/src/vnet/adj/adj.c b/src/vnet/adj/adj.c index f3d483ac13f..9a01e89d660 100644 --- a/src/vnet/adj/adj.c +++ b/src/vnet/adj/adj.c @@ -360,7 +360,7 @@ adj_get_sw_if_index (adj_index_t ai) } /** - * @brief Return the link type of the adjacency + * @brief Return the rewrite string of the adjacency */ const u8* adj_get_rewrite (adj_index_t ai) diff --git a/src/vnet/adj/adj_mcast.c b/src/vnet/adj/adj_mcast.c index a3ba4d6ab18..4f678e43e80 100644 --- a/src/vnet/adj/adj_mcast.c +++ b/src/vnet/adj/adj_mcast.c @@ -100,7 +100,9 @@ adj_mcast_add_or_lock (fib_protocol_t proto, */ void adj_mcast_update_rewrite (adj_index_t adj_index, - u8 *rewrite) + u8 *rewrite, + u8 offset, + u32 mask) { ip_adjacency_t *adj; @@ -118,6 +120,13 @@ adj_mcast_update_rewrite (adj_index_t adj_index, vnet_get_main(), adj->rewrite_header.sw_if_index), rewrite); + /* + * set the fields corresponding to the mcast IP address rewrite + * The mask must be stored in network byte order, since the packet's + * IP address will also be in network order. + */ + adj->rewrite_header.dst_mcast_offset = offset; + adj->rewrite_header.dst_mcast_mask = clib_host_to_net_u32(mask); } void diff --git a/src/vnet/adj/adj_mcast.h b/src/vnet/adj/adj_mcast.h index 21c5a1417dd..40d44313357 100644 --- a/src/vnet/adj/adj_mcast.h +++ b/src/vnet/adj/adj_mcast.h @@ -55,9 +55,18 @@ extern adj_index_t adj_mcast_add_or_lock(fib_protocol_t proto, * * @param * The new rewrite + * + * @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 *rewrite, + u8 offset, + u32 mask); /** * @brief Format/display a mcast adjacency. -- cgit 1.2.3-korg