Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
IP mcast: allow unicast address as a next-hop
[vpp.git]
/
src
/
vnet
/
mfib
/
mfib_itf.h
diff --git
a/src/vnet/mfib/mfib_itf.h
b/src/vnet/mfib/mfib_itf.h
index
5f26a47
..
fe39c89
100644
(file)
--- a/
src/vnet/mfib/mfib_itf.h
+++ b/
src/vnet/mfib/mfib_itf.h
@@
-25,7
+25,7
@@
typedef struct mfib_itf_t_
{
/**
typedef struct mfib_itf_t_
{
/**
- * @brief F
alags on the entry
+ * @brief F
orwarding Flags on the entry - checked in the data-path
*/
mfib_itf_flags_t mfi_flags;
*/
mfib_itf_flags_t mfi_flags;
@@
-38,22
+38,43
@@
typedef struct mfib_itf_t_
* The index of the signal in the pending list
*/
u32 mfi_si;
* The index of the signal in the pending list
*/
u32 mfi_si;
+
+ /**
+ * A hash table of path-inidices that are contributing flags to this interface.
+ * Since paths with next-hops can be on the same interface and each of those
+ * paths can contribute different flags, we need to maintain the flag
+ * contribution from each path, and use a combination for forwarding.
+ */
+ uword *mfi_hash;
} mfib_itf_t;
} mfib_itf_t;
+/**
+ * update an interface from a path.
+ * returns 1 if the entry is removed, i.e. has no flags left, as a result
+ * of the update.
+ */
+extern int mfib_itf_update(mfib_itf_t *itf,
+ fib_node_index_t path_index,
+ mfib_itf_flags_t mfi_flags);
-extern index_t mfib_itf_create(
u32 sw_if
_index,
+extern index_t mfib_itf_create(
fib_node_index_t path
_index,
mfib_itf_flags_t mfi_flags);
mfib_itf_flags_t mfi_flags);
-extern void mfib_itf_delete(mfib_itf_t *mfi);
+
+extern void mfib_itf_delete(mfib_itf_t *itf);
extern u8 *format_mfib_itf(u8 * s, va_list * args);
extern mfib_itf_t *mfib_itf_pool;
extern u8 *format_mfib_itf(u8 * s, va_list * args);
extern mfib_itf_t *mfib_itf_pool;
+/**
+ * Get the MFIB interface representation
+ */
static inline mfib_itf_t *
mfib_itf_get (index_t mi)
{
return (pool_elt_at_index(mfib_itf_pool, mi));
}
static inline mfib_itf_t *
mfib_itf_get (index_t mi)
{
return (pool_elt_at_index(mfib_itf_pool, mi));
}
+
static inline index_t
mfib_itf_get_index (const mfib_itf_t *mfi)
{
static inline index_t
mfib_itf_get_index (const mfib_itf_t *mfi)
{