/* An all zeros address */
extern const ip46_address_t zero_addr;
+typedef enum ip_interface_address_flags_t_
+{
+ IP_INTERFACE_ADDRESS_FLAG_STALE = (1 << 0),
+} __clib_packed ip_interface_address_flags_t;
+
typedef struct
{
fib_prefix_t prefix;
/* Address (prefix) length for this interface. */
u16 address_length;
- /* Will be used for something eventually. Primary vs. secondary? */
- u16 flags;
+ /* flags relating to this prefix */
+ ip_interface_address_flags_t flags;
/* Next and previous pointers for doubly linked list of
addresses per software interface. */
u8 builtin_protocol_by_ip_protocol[256];
} ip_lookup_main_t;
-clib_error_t *ip_interface_address_add_del (ip_lookup_main_t * lm,
- u32 sw_if_index,
- void *address,
- u32 address_length,
- u32 is_del, u32 * result_index);
-
u8 *format_ip_flow_hash_config (u8 * s, va_list * args);
-always_inline ip_interface_address_t *
-ip_get_interface_address (ip_lookup_main_t * lm, void *addr_fib)
-{
- uword *p = mhash_get (&lm->address_to_if_address_index, addr_fib);
- return p ? pool_elt_at_index (lm->if_address_pool, p[0]) : 0;
-}
-
-always_inline void *
-ip_interface_address_get_address (ip_lookup_main_t * lm,
- ip_interface_address_t * a)
-{
- return mhash_key_to_mem (&lm->address_to_if_address_index, a->address_key);
-}
-
-always_inline ip_interface_prefix_t *
-ip_get_interface_prefix (ip_lookup_main_t * lm, ip_interface_prefix_key_t * k)
-{
- uword *p = mhash_get (&lm->prefix_to_if_prefix_index, k);
- return p ? pool_elt_at_index (lm->if_prefix_pool, p[0]) : 0;
-}
-
-/* *INDENT-OFF* */
-#define foreach_ip_interface_address(lm,a,sw_if_index,loop,body) \
-do { \
- vnet_main_t *_vnm = vnet_get_main(); \
- u32 _sw_if_index = sw_if_index; \
- vnet_sw_interface_t *_swif; \
- _swif = vnet_get_sw_interface (_vnm, _sw_if_index); \
- \
- /* \
- * Loop => honor unnumbered interface addressing. \
- */ \
- if (_swif->flags & VNET_SW_INTERFACE_FLAG_UNNUMBERED) \
- { \
- if (loop) \
- _sw_if_index = _swif->unnumbered_sw_if_index; \
- else \
- /* the interface is unnumbered, by the caller does not want \
- * unnumbered interfaces considered/honoured */ \
- break; \
- } \
- u32 _ia = ((vec_len((lm)->if_address_pool_index_by_sw_if_index) \
- > (_sw_if_index)) ? \
- vec_elt ((lm)->if_address_pool_index_by_sw_if_index, \
- (_sw_if_index)) : \
- (u32)~0); \
- ip_interface_address_t * _a; \
- while (_ia != ~0) \
- { \
- _a = pool_elt_at_index ((lm)->if_address_pool, _ia); \
- _ia = _a->next_this_sw_interface; \
- (a) = _a; \
- body; \
- } \
-} while (0)
-/* *INDENT-ON* */
always_inline void
ip_lookup_set_buffer_fib_index (u32 * fib_index_by_sw_if_index,