ip_source_and_port_range_check_add_del) \
_(IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL, \
ip_source_and_port_range_check_interface_add_del) \
+_(IP_SOURCE_CHECK_INTERFACE_ADD_DEL, \
+ ip_source_check_interface_add_del) \
_(IP_REASSEMBLY_SET, ip_reassembly_set) \
_(IP_REASSEMBLY_GET, ip_reassembly_get) \
_(IP_REASSEMBLY_ENABLE_DISABLE, ip_reassembly_enable_disable) \
{
fib_route_path_encode_t *api_rpath, *api_rpaths = NULL;
vl_api_ip_mfib_details_t *mp;
+ const mfib_prefix_t *pfx;
mfib_entry_t *mfib_entry;
- vl_api_fib_path_t *fp;
- mfib_prefix_t pfx;
+ vl_api_mfib_path_t *fp;
int path_count;
mfib_entry = mfib_entry_get (mfei);
- mfib_entry_get_prefix (mfei, &pfx);
+ pfx = mfib_entry_get_prefix (mfei);
mfib_entry_encode (mfei, &api_rpaths);
path_count = vec_len (api_rpaths);
mp->rpf_id = mfib_entry->mfe_rpf_id;
mp->entry_flags = mfib_entry->mfe_flags;
mp->table_id = htonl (table_id);
- mp->address_length = pfx.fp_len;
- memcpy (mp->grp_address, &pfx.fp_grp_addr.ip4,
- sizeof (pfx.fp_grp_addr.ip4));
- memcpy (mp->src_address, &pfx.fp_src_addr.ip4,
- sizeof (pfx.fp_src_addr.ip4));
+ mp->address_length = pfx->fp_len;
+ memcpy (mp->grp_address, &pfx->fp_grp_addr.ip4,
+ sizeof (pfx->fp_grp_addr.ip4));
+ memcpy (mp->src_address, &pfx->fp_src_addr.ip4,
+ sizeof (pfx->fp_src_addr.ip4));
mp->count = htonl (path_count);
fp = mp->path;
vec_foreach (api_rpath, api_rpaths)
{
- fib_api_path_encode (api_rpath, fp);
+ fib_api_path_encode (api_rpath, &fp->path);
+ fp->itf_flags = ntohl (api_rpath->rpath.frp_mitf_flags);
fp++;
}
vec_free (api_rpaths);
send_ip6_mfib_details (vpe_api_main_t * am,
vl_api_registration_t * reg,
u32 table_id,
- mfib_prefix_t * pfx,
+ const mfib_prefix_t * pfx,
fib_route_path_encode_t * api_rpaths, u32 context)
{
vl_api_ip6_mfib_details_t *mp;
fib_route_path_encode_t *api_rpath;
- vl_api_fib_path_t *fp;
+ vl_api_mfib_path_t *fp;
int path_count;
path_count = vec_len (api_rpaths);
fp = mp->path;
vec_foreach (api_rpath, api_rpaths)
{
- fib_api_path_encode (api_rpath, fp);
+ fib_api_path_encode (api_rpath, &fp->path);
+ fp->itf_flags = ntohl (api_rpath->rpath.frp_mitf_flags);
fp++;
}
vl_api_registration_t *reg;
ip6_main_t *im = &ip6_main;
mfib_table_t *mfib_table;
+ const mfib_prefix_t *pfx;
fib_node_index_t *mfeip;
- mfib_prefix_t pfx;
fib_route_path_encode_t *api_rpaths = NULL;
vl_api_ip6_mfib_dump_ctc_t ctx = {
.entries = NULL,
vec_foreach(mfeip, ctx.entries)
{
- mfib_entry_get_prefix (*mfeip, &pfx);
+ pfx = mfib_entry_get_prefix (*mfeip);
mfib_entry_encode (*mfeip, &api_rpaths);
send_ip6_mfib_details (am, reg,
mfib_table->mft_table_id,
- &pfx, api_rpaths,
+ pfx, api_rpaths,
mp->context);
}
vec_reset_length (api_rpaths);
path.frp_local_label = next_hop_via_label;
path.frp_eos = MPLS_NON_EOS;
}
+ if (is_local)
+ path_flags |= FIB_ROUTE_PATH_LOCAL;
if (is_dvr)
path_flags |= FIB_ROUTE_PATH_DVR;
if (is_resolve_host)
u32 context, const mfib_signal_t * mfs)
{
vl_api_mfib_signal_details_t *mp;
- mfib_prefix_t prefix;
+ const mfib_prefix_t *prefix;
mfib_table_t *mfib;
mfib_itf_t *mfi;
mp->context = context;
mfi = mfib_itf_get (mfs->mfs_itf);
- mfib_entry_get_prefix (mfs->mfs_entry, &prefix);
+ prefix = mfib_entry_get_prefix (mfs->mfs_entry);
mfib = mfib_table_get (mfib_entry_get_fib_index (mfs->mfs_entry),
- prefix.fp_proto);
+ prefix->fp_proto);
mp->table_id = ntohl (mfib->mft_table_id);
mp->sw_if_index = ntohl (mfi->mfi_sw_if_index);
- if (FIB_PROTOCOL_IP4 == prefix.fp_proto)
+ if (FIB_PROTOCOL_IP4 == prefix->fp_proto)
{
- mp->grp_address_len = ntohs (prefix.fp_len);
+ mp->grp_address_len = ntohs (prefix->fp_len);
- memcpy (mp->grp_address, &prefix.fp_grp_addr.ip4, 4);
- if (prefix.fp_len > 32)
+ memcpy (mp->grp_address, &prefix->fp_grp_addr.ip4, 4);
+ if (prefix->fp_len > 32)
{
- memcpy (mp->src_address, &prefix.fp_src_addr.ip4, 4);
+ memcpy (mp->src_address, &prefix->fp_src_addr.ip4, 4);
}
}
else
{
- mp->grp_address_len = ntohs (prefix.fp_len);
+ mp->grp_address_len = ntohs (prefix->fp_len);
ASSERT (0);
}
REPLY_MACRO (VL_API_IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL_REPLY);
}
+typedef union
+{
+ u32 fib_index;
+} ip4_source_check_config_t;
+
+static void
+ vl_api_ip_source_check_interface_add_del_t_handler
+ (vl_api_ip_source_check_interface_add_del_t * mp)
+{
+ vl_api_ip_source_check_interface_add_del_reply_t *rmp;
+ int rv;
+ u32 sw_if_index = ntohl (mp->sw_if_index);
+ u8 is_add = mp->is_add;
+ char *feature_name =
+ mp->loose ? "ip4-source-check-via-any" : "ip4-source-check-via-rx";
+
+ ip4_source_check_config_t config;
+
+ VALIDATE_SW_IF_INDEX (mp);
+
+ config.fib_index =
+ fib_table_get_index_for_sw_if_index (FIB_PROTOCOL_IP4, sw_if_index);
+ rv =
+ vnet_feature_enable_disable ("ip4-unicast", feature_name, sw_if_index,
+ is_add, &config, sizeof (config));
+ BAD_SW_IF_INDEX_LABEL;
+
+ REPLY_MACRO (VL_API_IP_SOURCE_CHECK_INTERFACE_ADD_DEL_REPLY);
+}
+
#define IP4_ARP_EVENT 3
#define IP6_ND_EVENT 4
mp->enable_ip6);
}
- REPLY_MACRO (VL_API_IP_REASSEMBLY_SET_REPLY);
+ REPLY_MACRO (VL_API_IP_REASSEMBLY_ENABLE_DISABLE_REPLY);
}
void