summaryrefslogtreecommitdiffstats
path: root/src/vnet/adj
diff options
context:
space:
mode:
authorNeale Ranns <nranns@cisco.com>2017-03-15 04:22:25 -0700
committerFlorin Coras <florin.coras@gmail.com>2017-03-27 17:45:06 +0000
commit2e7fbcc08152da5c6a17ed80ba08cd37edec6c8c (patch)
tree09e4f98dcc45d4105c04f2ba4a5fbae2cc63ff7d /src/vnet/adj
parent70efbfcd49aaee207ff3d33ac60083fedd9f1eec (diff)
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 <nranns@cisco.com>
Diffstat (limited to 'src/vnet/adj')
-rw-r--r--src/vnet/adj/adj.c2
-rw-r--r--src/vnet/adj/adj_mcast.c11
-rw-r--r--src/vnet/adj/adj_mcast.h11
3 files changed, 21 insertions, 3 deletions
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.