59 #define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__) 67 #define foreach_ip_api_msg \ 68 _(IP_FIB_DUMP, ip_fib_dump) \ 69 _(IP6_FIB_DUMP, ip6_fib_dump) \ 70 _(IP_MFIB_DUMP, ip_mfib_dump) \ 71 _(IP6_MFIB_DUMP, ip6_mfib_dump) \ 72 _(IP_NEIGHBOR_DUMP, ip_neighbor_dump) \ 73 _(IP_MROUTE_ADD_DEL, ip_mroute_add_del) \ 74 _(MFIB_SIGNAL_DUMP, mfib_signal_dump) \ 75 _(IP_ADDRESS_DUMP, ip_address_dump) \ 77 _(IP_NEIGHBOR_ADD_DEL, ip_neighbor_add_del) \ 78 _(SET_ARP_NEIGHBOR_LIMIT, set_arp_neighbor_limit) \ 79 _(WANT_IP4_ARP_EVENTS, want_ip4_arp_events) \ 80 _(WANT_IP6_ND_EVENTS, want_ip6_nd_events) \ 81 _(WANT_IP6_RA_EVENTS, want_ip6_ra_events) \ 82 _(PROXY_ARP_ADD_DEL, proxy_arp_add_del) \ 83 _(PROXY_ARP_INTFC_ENABLE_DISABLE, proxy_arp_intfc_enable_disable) \ 84 _(RESET_FIB, reset_fib) \ 85 _(IP_ADD_DEL_ROUTE, ip_add_del_route) \ 86 _(IP_TABLE_ADD_DEL, ip_table_add_del) \ 87 _(IP_PUNT_POLICE, ip_punt_police) \ 88 _(IP_PUNT_REDIRECT, ip_punt_redirect) \ 89 _(SET_IP_FLOW_HASH,set_ip_flow_hash) \ 90 _(SW_INTERFACE_IP6ND_RA_CONFIG, sw_interface_ip6nd_ra_config) \ 91 _(SW_INTERFACE_IP6ND_RA_PREFIX, sw_interface_ip6nd_ra_prefix) \ 92 _(IP6ND_PROXY_ADD_DEL, ip6nd_proxy_add_del) \ 93 _(IP6ND_PROXY_DUMP, ip6nd_proxy_dump) \ 94 _(IP6ND_SEND_ROUTER_SOLICITATION, ip6nd_send_router_solicitation) \ 95 _(SW_INTERFACE_IP6_ENABLE_DISABLE, sw_interface_ip6_enable_disable ) \ 96 _(SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS, \ 97 sw_interface_ip6_set_link_local_address) \ 98 _(IP_CONTAINER_PROXY_ADD_DEL, ip_container_proxy_add_del) \ 99 _(IOAM_ENABLE, ioam_enable) \ 100 _(IOAM_DISABLE, ioam_disable) \ 101 _(IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL, \ 102 ip_source_and_port_range_check_add_del) \ 103 _(IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL, \ 104 ip_source_and_port_range_check_interface_add_del) \ 105 _(IP_REASSEMBLY_SET, ip_reassembly_set) \ 106 _(IP_REASSEMBLY_GET, ip_reassembly_get) \ 107 _(IP_REASSEMBLY_ENABLE_DISABLE, ip_reassembly_enable_disable) 123 memset (mp, 0,
sizeof (*mp));
124 mp->_vl_msg_id = ntohs (VL_API_IP_NEIGHBOR_DETAILS);
130 memcpy (mp->
ip_address, ip_address, (is_ipv6) ? 16 : 4);
195 path_count =
vec_len (api_rpaths);
199 memset (mp, 0,
sizeof (*mp));
200 mp->_vl_msg_id = ntohs (VL_API_IP_FIB_DETAILS);
209 mp->
count = htonl (path_count);
257 fib_table_walk(fib_table->ft_index,
259 vl_api_ip_fib_dump_walk,
292 path_count =
vec_len (api_rpaths);
296 memset (mp, 0,
sizeof (*mp));
297 mp->_vl_msg_id = ntohs (VL_API_IP6_FIB_DETAILS);
306 mp->
count = htonl (path_count);
382 if (fib_table->ft_flags & FIB_TABLE_FLAG_IP6_LL)
385 api_ip6_fib_table_get_all(reg, mp, fib_table);
405 path_count =
vec_len (api_rpaths);
409 memset (mp, 0,
sizeof (*mp));
410 mp->_vl_msg_id = ntohs (VL_API_IP_MFIB_DETAILS);
422 mp->
count = htonl (path_count);
467 ip4_mfib_table_walk(&mfib_table->v4,
468 vl_api_ip_mfib_table_dump_walk,
471 vec_sort_with_function (ctx.entries, mfib_entry_cmp_for_sort);
473 vec_foreach (mfeip, ctx.entries)
475 send_ip_mfib_details (reg, mp->context,
476 mfib_table->mft_table_id,
499 path_count =
vec_len (api_rpaths);
503 memset (mp, 0,
sizeof (*mp));
504 mp->_vl_msg_id = ntohs (VL_API_IP6_MFIB_DETAILS);
514 mp->
count = htonl (path_count);
562 ip6_mfib_table_walk(&mfib_table->v6,
563 vl_api_ip6_mfib_table_dump_walk,
566 vec_sort_with_function (ctx.entries, mfib_entry_cmp_for_sort);
568 vec_foreach(mfeip, ctx.entries)
570 mfib_entry_get_prefix (*mfeip, &pfx);
571 mfib_entry_encode (*mfeip, &api_rpaths);
572 send_ip6_mfib_details (am, reg,
573 mfib_table->mft_table_id,
591 vl_api_ip_punt_police_reply_t *rmp;
606 vl_api_ip_punt_redirect_reply_t *rmp;
613 memset (&nh, 0,
sizeof (nh));
617 memcpy (&nh.ip6, mp->
nh, sizeof (nh.ip6));
624 memcpy (&nh.ip4, mp->
nh, sizeof (nh.ip4));
649 vl_api_ip_neighbor_add_del_reply_t *rmp;
678 ethernet_arp_ip4_over_ethernet_address_t
a;
701 u32 fib_index, mfib_index;
725 if (~0 != mfib_index)
736 vl_api_ip_table_add_del_reply_t *rmp;
762 u32 classify_table_index,
764 u8 is_resolve_attached,
773 const ip46_address_t * next_hop,
775 u32 next_hop_sw_if_index,
776 u8 next_hop_fib_index,
778 u16 next_hop_preference,
787 .frp_sw_if_index = next_hop_sw_if_index,
788 .frp_fib_index = next_hop_fib_index,
789 .frp_weight = next_hop_weight,
790 .frp_preference = next_hop_preference,
791 .frp_label_stack = next_hop_out_label_stack,
812 if (is_resolve_attached)
818 if (is_source_lookup)
857 if (is_drop || is_local || is_classify || is_unreach || is_prohibit)
876 else if (is_prohibit)
880 else if (is_classify)
883 ntohl (classify_table_index)))
886 return VNET_API_ERROR_NO_SUCH_TABLE;
891 ntohl (classify_table_index)));
896 return VNET_API_ERROR_NO_SUCH_TABLE;
932 u32 next_hop_sw_if_index,
934 u32 next_hop_table_id,
935 u8 is_rpf_id,
u32 * fib_index,
u32 * next_hop_fib_index)
940 if (~0 == *fib_index)
943 return VNET_API_ERROR_NO_SUCH_FIB;
946 if (!is_rpf_id && ~0 != ntohl (next_hop_sw_if_index))
949 ntohl (next_hop_sw_if_index)))
951 return VNET_API_ERROR_NO_MATCHING_INTERFACE;
965 ntohl (next_hop_table_id));
968 ntohl (next_hop_table_id));
970 if (~0 == *next_hop_fib_index)
973 return VNET_API_ERROR_NO_SUCH_FIB;
983 u32 fib_index, next_hop_fib_index;
985 int rv, ii, n_labels;;
992 0, &fib_index, &next_hop_fib_index);
1004 memset (&nh, 0,
sizeof (nh));
1013 for (ii = 0; ii < n_labels; ii++)
1053 u32 fib_index, next_hop_fib_index;
1054 int rv, ii, n_labels;;
1061 0, &fib_index, &next_hop_fib_index);
1073 memset (&nh, 0,
sizeof (nh));
1082 for (ii = 0; ii < n_labels; ii++)
1120 vl_api_ip_add_del_route_reply_t *rmp;
1138 u32 table_id,
u8 is_api,
const u8 * name)
1140 u32 fib_index, mfib_index;
1159 if (~0 == fib_index)
1166 if (~0 == mfib_index)
1179 u32 next_hop_sw_if_index,
u8 is_local,
u32 * fib_index)
1184 if (~0 == *fib_index)
1187 return VNET_API_ERROR_NO_SUCH_FIB;
1190 if (~0 != ntohl (next_hop_sw_if_index))
1193 ntohl (next_hop_sw_if_index)))
1195 return VNET_API_ERROR_NO_MATCHING_INTERFACE;
1210 u32 next_hop_sw_if_index,
u32 itf_flags,
u32 bier_imp)
1216 .frp_proto = nh_proto,
1227 else if (!is_local && ~0 == next_hop_sw_if_index)
1302 vl_api_ip_mroute_add_del_reply_t *rmp;
1323 memset (mp, 0,
sizeof (*mp));
1324 mp->_vl_msg_id = ntohs (VL_API_IP_DETAILS);
1336 u8 * ip,
u16 prefix_length,
1337 u32 sw_if_index,
u8 is_ipv6,
u32 context)
1342 memset (mp, 0,
sizeof (*mp));
1343 mp->_vl_msg_id = ntohs (VL_API_IP_ADDRESS_DETAILS);
1374 u32 sw_if_index = ~0;
1375 int rv __attribute__ ((unused)) = 0;
1423 u32 sw_if_index = ~0;
1431 _vec_len (sorted_sis) = 0;
1435 vec_add1 (sorted_sis, si[0]);
1456 vl_api_set_ip_flow_hash_reply_t *rmp;
1461 table_id = ntohl (mp->
vrf_id);
1463 #define _(a,b) if (mp->a) flow_hash_config |= b; 1475 vl_api_set_ip_flow_hash_reply_t *rmp;
1480 table_id = ntohl (mp->
vrf_id);
1482 #define _(a,b) if (mp->a) flow_hash_config |= b; 1505 vl_api_sw_interface_ip6nd_ra_config_reply_t *rmp;
1508 u8 is_no, suppress, managed, other, ll_option, send_unicast, cease,
1511 is_no = mp->
is_no == 1;
1514 other = mp->
other == 1;
1517 cease = mp->
cease == 1;
1523 suppress, managed, other,
1524 ll_option, send_unicast, cease,
1525 default_router, ntohl (mp->
lifetime),
1533 REPLY_MACRO (VL_API_SW_INTERFACE_IP6ND_RA_CONFIG_REPLY);
1541 vl_api_sw_interface_ip6nd_ra_prefix_reply_t *rmp;
1543 u8 is_no, use_default, no_advertise, off_link, no_autoconfig, no_onlink;
1547 is_no = mp->
is_no == 1;
1559 off_link, no_autoconfig, no_onlink, is_no);
1562 REPLY_MACRO (VL_API_SW_INTERFACE_IP6ND_RA_PREFIX_REPLY);
1568 const ip46_address_t *
addr,
u32 sw_if_index)
1573 memset (mp, 0,
sizeof (*mp));
1574 mp->_vl_msg_id = ntohs (VL_API_IP6ND_PROXY_DETAILS);
1577 memcpy (mp->
address, addr, 16);
1619 fib_table_walk(fib_table->ft_index,
1621 api_ip6nd_proxy_fib_table_walk,
1644 vl_api_ip6nd_proxy_add_del_reply_t *rmp;
1660 vl_api_ip6nd_send_router_solicitation_reply_t *rmp;
1668 REPLY_MACRO (VL_API_IP6ND_SEND_ROUTER_SOLICITATION_REPLY);
1673 params.
irt = ntohl (mp->
irt);
1674 params.
mrt = ntohl (mp->
mrt);
1675 params.
mrc = ntohl (mp->
mrc);
1676 params.
mrd = ntohl (mp->
mrd);
1687 vl_api_sw_interface_ip6_enable_disable_reply_t *rmp;
1704 rv = VNET_API_ERROR_UNSPECIFIED;
1713 REPLY_MACRO (VL_API_SW_INTERFACE_IP6_ENABLE_DISABLE_REPLY);
1721 vl_api_sw_interface_ip6_set_link_local_address_reply_t *rmp;
1736 rv = VNET_API_ERROR_UNSPECIFIED;
1745 REPLY_MACRO (VL_API_SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS_REPLY);
1759 memset (mp, 0,
sizeof (*mp));
1760 mp->_vl_msg_id = ntohs (VL_API_MFIB_SIGNAL_DETAILS);
1818 vl_api_ip_container_proxy_add_del_reply_t *rmp;
1823 memset (&args, 0,
sizeof (args));
1825 args.prefix.fp_len = mp->
plen ? mp->
plen : (mp->
is_ip4 ? 32 : 128);
1826 args.sw_if_index = clib_net_to_host_u32 (mp->
sw_if_index);
1827 args.is_add = mp->
is_add;
1834 REPLY_MACRO (VL_API_IP_CONTAINER_PROXY_ADD_DEL_REPLY);
1841 vl_api_ioam_enable_reply_t *rmp;
1861 vl_api_ioam_disable_reply_t *rmp;
1878 vl_api_ip_source_and_port_range_check_add_del_reply_t *rmp;
1887 u16 *high_ports = 0;
1889 u16 tmp_low, tmp_high;
1895 if (num_ranges > 32)
1897 rv = VNET_API_ERROR_EXCEEDED_NUMBER_OF_RANGES_CAPACITY;
1904 for (i = 0; i < num_ranges; i++)
1910 if (tmp_low > tmp_high || tmp_low == 0 || tmp_high > 65535)
1912 rv = VNET_API_ERROR_INVALID_VALUE;
1916 vec_add1 (high_ports, tmp_high + 1);
1920 if ((is_ipv6 && mask_length > 128) || (!is_ipv6 && mask_length > 32))
1922 rv = VNET_API_ERROR_ADDRESS_LENGTH_MISMATCH;
1926 vrf_id = ntohl (mp->
vrf_id);
1930 rv = VNET_API_ERROR_INVALID_VALUE;
1942 high_ports, is_add);
1951 high_ports, is_add);
1957 REPLY_MACRO (VL_API_IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL_REPLY);
1965 vl_api_ip_source_and_port_range_check_interface_add_del_reply_t *rmp;
1986 if (vrf_id[i] != 0 && vrf_id[i] != ~0)
1992 rv = VNET_API_ERROR_INVALID_VALUE;
1996 fib_index[
i] = p[0];
2012 REPLY_MACRO (VL_API_IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL_REPLY);
2015 #define IP4_ARP_EVENT 3 2016 #define IP6_ND_EVENT 4 2057 static f64 last_time;
2064 clib_warning (
"arp event for %U to pid %d: queue stuffed!",
2106 static f64 last_time;
2113 clib_warning (
"ip6 nd event for %U to pid %d: queue stuffed!",
2124 volatile f64 timeout = 100.0;
2125 volatile uword *event_data = 0;
2138 for (i = 0; i <
vec_len (event_data); i++)
2143 for (i = 0; i <
vec_len (event_data); i++)
2160 .name =
"ip-route-resolver-process",
2182 event->sw_if_index = htonl (sw_if_index);
2238 for (i = 0; i <
vec_len (arp_events); i++)
2241 if (arp_prev.
ip4 == arp_events[i].
ip4 &&
2244 (now - last_arp) < 10.0)
2248 arp_prev = arp_events[
i];
2254 vl_api_registration_t *vl_reg;
2255 vl_reg = vl_api_client_index_to_registration (reg->client_index);
2256 ASSERT (vl_reg != NULL);
2257 if (reg && vl_api_can_send_msg (vl_reg))
2259 vl_api_ip4_arp_event_t * event = vl_msg_api_alloc (sizeof *event);
2260 memset (event, 0, sizeof *event);
2261 event->_vl_msg_id = htons (VL_API_IP4_ARP_EVENT);
2262 event->client_index = reg->client_index;
2263 event->pid = reg->client_pid;
2265 event->address = arp_events[i].ip4;
2266 event->sw_if_index = htonl(arp_events[i].sw_if_index);
2267 memcpy(event->new_mac, arp_events[i].mac, sizeof event->new_mac);
2268 vl_api_send_msg (vl_reg, (u8 *) event);
2284 && (now - last_nd) < 10.0)
2288 nd_prev = nd_events[
i];
2294 vl_api_registration_t *vl_reg;
2295 vl_reg = vl_api_client_index_to_registration (reg->client_index);
2296 if (vl_reg && vl_api_can_send_msg (vl_reg))
2298 vl_api_ip6_nd_event_t * event = vl_msg_api_alloc (sizeof *event);
2299 memset (event, 0, sizeof *event);
2300 event->_vl_msg_id = htons (VL_API_IP6_ND_EVENT);
2301 event->client_index = reg->client_index;
2302 event->pid = reg->client_pid;
2304 memcpy(event->address, nd_events[i].ip6.as_u8, sizeof event->address);
2305 event->sw_if_index = htonl(nd_events[i].sw_if_index);
2306 memcpy(event->new_mac, nd_events[i].mac, sizeof event->new_mac);
2307 vl_api_send_msg (vl_reg, (u8 *) event);
2322 vl_api_registration_t *vl_reg;
2324 vl_api_client_index_to_registration (reg->client_index);
2325 if (vl_reg && vl_api_can_send_msg (vl_reg))
2328 sizeof (vl_api_ip6_ra_event_t) +
2329 vec_len (ra_events[i].prefixes) *
2330 sizeof (vl_api_ip6_ra_prefix_info_t);
2331 vl_api_ip6_ra_event_t *event =
2332 vl_msg_api_alloc (event_size);
2333 memset (event, 0, event_size);
2334 event->_vl_msg_id = htons (VL_API_IP6_RA_EVENT);
2335 event->client_index = reg->client_index;
2336 event->pid = reg->client_pid;
2338 event->sw_if_index = clib_host_to_net_u32 (ra_events[i].sw_if_index);
2340 memcpy (event->router_address, ra_events[i].router_address, 16);
2342 event->current_hop_limit = ra_events[i].current_hop_limit;
2343 event->flags = ra_events[i].flags;
2344 event->router_lifetime_in_sec =
2345 clib_host_to_net_u16 (ra_events
2346 [i].router_lifetime_in_sec);
2347 event->neighbor_reachable_time_in_msec =
2348 clib_host_to_net_u32 (ra_events
2349 [i].neighbor_reachable_time_in_msec);
2350 event->time_in_msec_between_retransmitted_neighbor_solicitations
2352 clib_host_to_net_u32 (ra_events
2353 [i].time_in_msec_between_retransmitted_neighbor_solicitations);
2356 clib_host_to_net_u32 (vec_len (ra_events[i].prefixes));
2357 vl_api_ip6_ra_prefix_info_t *prefix =
2358 (typeof (prefix)) event->prefixes;
2360 for (j = 0; j < vec_len (ra_events[i].prefixes); j++)
2362 ra_report_prefix_info_t *info =
2363 &ra_events[i].prefixes[j];
2364 memcpy (prefix->dst_address, info->dst_address.as_u8,
2366 prefix->dst_address_length = info->dst_address_length;
2367 prefix->flags = info->flags;
2368 prefix->valid_time =
2369 clib_host_to_net_u32 (info->valid_time);
2370 prefix->preferred_time =
2371 clib_host_to_net_u32 (info->preferred_time);
2375 vl_api_send_msg (vl_reg, (u8 *) event);
2391 .name =
"wildcard-ip4-arp-publisher-process",
2397 u32 sw_if_index,
u32 address)
2413 event->sw_if_index = htonl (sw_if_index);
2422 vl_api_want_ip4_arp_events_reply_t *rmp;
2435 rv = VNET_API_ERROR_INVALID_REGISTRATION;
2442 pool_put (am->wc_ip4_arp_events_registrations, rp);
2443 hash_unset (am->wc_ip4_arp_events_registration_hash,
2445 if (
pool_elts (am->wc_ip4_arp_events_registrations) == 0)
2453 rv = VNET_API_ERROR_INVALID_REGISTRATION;
2456 pool_get (am->wc_ip4_arp_events_registrations, rp);
2460 rp - am->wc_ip4_arp_events_registrations);
2480 memset (event, 0,
sizeof (*event));
2483 event->_vl_msg_id = htons (VL_API_IP4_ARP_EVENT);
2486 event->pid = mp->
pid;
2507 u32 *to_delete, *event_id;
2520 if (event->client_index == client_index)
2522 vec_add1(to_delete, event - am->arp_events);
2532 event->pid, &event->address,
2539 p =
hash_get (am->wc_ip4_arp_events_registration_hash, client_index);
2544 pool_put (am->wc_ip4_arp_events_registrations, rp);
2545 hash_unset (am->wc_ip4_arp_events_registration_hash, client_index);
2546 if (
pool_elts (am->wc_ip4_arp_events_registrations) == 0)
2559 vl_api_want_ip6_nd_events_reply_t *rmp;
2572 rv = VNET_API_ERROR_INVALID_REGISTRATION;
2579 pool_put (am->wc_ip6_nd_events_registrations, rp);
2580 hash_unset (am->wc_ip6_nd_events_registration_hash,
2582 if (
pool_elts (am->wc_ip6_nd_events_registrations) == 0)
2590 rv = VNET_API_ERROR_INVALID_REGISTRATION;
2593 pool_get (am->wc_ip6_nd_events_registrations, rp);
2597 rp - am->wc_ip6_nd_events_registrations);
2618 memset (event, 0,
sizeof (*event));
2620 event->_vl_msg_id = ntohs (VL_API_IP6_ND_EVENT);
2623 event->pid = mp->
pid;
2643 u32 *to_delete, *event_id;
2656 if (event->client_index == client_index)
2658 vec_add1(to_delete, event - am->nd_events);
2668 event->pid, &event->address,
2675 p =
hash_get (am->wc_ip6_nd_events_registration_hash, client_index);
2680 pool_put (am->wc_ip6_nd_events_registrations, rp);
2681 hash_unset (am->wc_ip6_nd_events_registration_hash, client_index);
2682 if (
pool_elts (am->wc_ip6_nd_events_registrations) == 0)
2694 vl_api_want_ip6_ra_events_reply_t *rmp;
2704 rv = VNET_API_ERROR_INVALID_REGISTRATION;
2710 pool_put (am->ip6_ra_events_registrations, rp);
2712 if (
pool_elts (am->ip6_ra_events_registrations) == 0)
2720 rv = VNET_API_ERROR_INVALID_REGISTRATION;
2723 pool_get (am->ip6_ra_events_registrations, rp);
2727 rp - am->ip6_ra_events_registrations);
2741 p =
hash_get (am->ip6_ra_events_registration_hash, client_index);
2746 pool_put (am->ip6_ra_events_registrations, rp);
2747 hash_unset (am->ip6_ra_events_registration_hash, client_index);
2757 vl_api_proxy_arp_add_del_reply_t *rmp;
2763 u32 fib_index,
int is_del);
2772 rv = VNET_API_ERROR_NO_SUCH_FIB;
2780 fib_index, mp->
is_add == 0);
2793 vl_api_proxy_arp_intfc_enable_disable_reply_t *rmp;
2809 REPLY_MACRO (VL_API_PROXY_ARP_INTFC_ENABLE_DISABLE_REPLY);
2818 static u32 *sw_if_indices_to_shut;
2823 int rv = VNET_API_ERROR_NO_SUCH_FIB;
2831 vnet_sw_interface_t * si;
2833 fib = pool_elt_at_index (im4->v4_fibs, fib_table->ft_index);
2835 if (fib->table_id != target_fib_id)
2839 mpls_fib_reset_labels (fib->table_id);
2842 vnet_proxy_arp_fib_reset (fib->table_id);
2845 vnet_set_ip4_flow_hash (fib->table_id, IP_FLOW_HASH_DEFAULT);
2847 vec_reset_length (sw_if_indices_to_shut);
2850 pool_foreach (si, im->sw_interfaces,
2852 u32 sw_if_index = si->sw_if_index;
2854 if (sw_if_index < vec_len (im4->fib_index_by_sw_if_index)
2855 && (im4->fib_index_by_sw_if_index[si->sw_if_index] ==
2857 vec_add1 (sw_if_indices_to_shut, si->sw_if_index);
2860 for (i = 0; i <
vec_len (sw_if_indices_to_shut); i++) {
2861 sw_if_index = sw_if_indices_to_shut[
i];
2885 static u32 *sw_if_indices_to_shut;
2890 int rv = VNET_API_ERROR_NO_SUCH_FIB;
2898 vnet_sw_interface_t * si;
2900 fib = pool_elt_at_index (im6->v6_fibs, fib_table->ft_index);
2902 if (fib->table_id != target_fib_id)
2905 vec_reset_length (sw_if_indices_to_shut);
2908 vnet_set_ip6_flow_hash (fib->table_id, IP_FLOW_HASH_DEFAULT);
2911 pool_foreach (si, im->sw_interfaces,
2913 if (im6->fib_index_by_sw_if_index[si->sw_if_index] ==
2915 vec_add1 (sw_if_indices_to_shut, si->sw_if_index);
2918 for (i = 0; i <
vec_len (sw_if_indices_to_shut); i++) {
2919 sw_if_index = sw_if_indices_to_shut[
i];
2941 vl_api_reset_fib_reply_t *rmp;
2955 vl_api_set_arp_neighbor_limit_reply_t *rmp;
2969 rv = VNET_API_ERROR_UNSPECIFIED;
2976 REPLY_MACRO (VL_API_SET_ARP_NEIGHBOR_LIMIT_REPLY);
2982 vl_api_ip_reassembly_set_reply_t *rmp;
3011 memset (rmp, 0,
sizeof (*rmp));
3012 rmp->_vl_msg_id = ntohs (VL_API_IP_REASSEMBLY_GET_REPLY);
3038 vl_api_ip_reassembly_enable_disable_reply_t *rmp;
3051 #define vl_msg_name_crc_list 3052 #include <vnet/ip/ip.api.h> 3053 #undef vl_msg_name_crc_list 3058 #define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id); 3059 foreach_vl_msg_name_crc_ip;
3069 vl_msg_api_set_handlers(VL_API_##N, #n, \ 3070 vl_api_##n##_t_handler, \ 3072 vl_api_##n##_t_endian, \ 3073 vl_api_##n##_t_print, \ 3074 sizeof(vl_api_##n##_t), 1);
#define vec_validate(V, I)
Make sure vector is long enough for given index (no header, unspecified alignment) ...
#define foreach_ip_interface_address(lm, a, sw_if_index, loop, body)
IPv6 set link local address on interface request.
fib_protocol_t fp_proto
protocol type
#define VNET_SW_INTERFACE_FLAG_UNNUMBERED
u32 fib_entry_get_fib_index(fib_node_index_t fib_entry_index)
static void vl_api_proxy_arp_intfc_enable_disable_t_handler(vl_api_proxy_arp_intfc_enable_disable_t *mp)
Proxy ARP add / del request.
void ip_null_dpo_add_and_lock(dpo_proto_t proto, ip_null_dpo_action_t action, dpo_id_t *dpo)
ip46_address_t frp_addr
The next-hop address.
void ip4_punt_redirect_add(u32 rx_sw_if_index, u32 tx_sw_if_index, ip46_address_t *nh)
Continue on to the next entry.
VL_MSG_API_REAPER_FUNCTION(want_ip4_arp_events_reaper)
ip46_address_t fp_src_addr
A path that resolves via a DVR DPO.
#define hash_set(h, key, value)
Register for ip6 nd resolution events.
static void vl_api_ip6nd_proxy_add_del_t_handler(vl_api_ip6nd_proxy_add_del_t *mp)
void receive_dpo_add_or_lock(dpo_proto_t proto, u32 sw_if_index, const ip46_address_t *nh_addr, dpo_id_t *dpo)
static void send_ip6_mfib_details(vpe_api_main_t *am, vl_api_registration_t *reg, u32 table_id, mfib_prefix_t *pfx, fib_route_path_encode_t *api_rpaths, u32 context)
A representation of a fib path for fib_path_encode to convey the information to the caller...
static void vl_api_ip_container_proxy_add_del_t_handler(vl_api_ip_container_proxy_add_del_t *mp)
mpls_eos_bit_t frp_eos
EOS bit for the resolving label.
int vnet_set_ip4_flow_hash(u32 table_id, flow_hash_config_t flow_hash_config)
Register for ip6 router advertisement events.
static uword resolver_process(vlib_main_t *vm, vlib_node_runtime_t *rt, vlib_frame_t *f)
static f64 vlib_process_wait_for_event_or_clock(vlib_main_t *vm, f64 dt)
Suspend a cooperative multi-tasking thread Waits for an event, or for the indicated number of seconds...
#define hash_unset(h, key)
vl_api_fib_path_t path[count]
vl_api_fib_path_t path[count]
int ip6_neighbor_ra_prefix(vlib_main_t *vm, u32 sw_if_index, ip6_address_t *prefix_addr, u8 prefix_len, u8 use_default, u32 val_lifetime, u32 pref_lifetime, u8 no_advertise, u8 off_link, u8 no_autoconfig, u8 no_onlink, u8 is_no)
static uword * vlib_process_wait_for_event(vlib_main_t *vm)
A representation of a path as described by a route producer.
static void vl_api_ip_neighbor_add_del_t_handler(vl_api_ip_neighbor_add_del_t *mp, vlib_main_t *vm)
vnet_main_t * vnet_get_main(void)
vnet_interface_main_t interface_main
void icmp6_send_router_solicitation(vlib_main_t *vm, u32 sw_if_index, u8 stop, icmp6_send_router_solicitation_params_t *params)
The table that stores ALL routes learned by the DP.
void ip4_punt_redirect_del(u32 rx_sw_if_index)
A pair of indicies, for the entry and interface resp.
void fib_entry_get_prefix(fib_node_index_t fib_entry_index, fib_prefix_t *pfx)
Dump IP multicast fib table.
u32 fib_table_find_or_create_and_lock_w_name(fib_protocol_t proto, u32 table_id, fib_source_t src, const u8 *name)
Get the index of the FIB for a Table-ID.
void ip_set(ip46_address_t *dst, void *src, u8 is_ip4)
fib_node_index_t fib_table_entry_update(u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_entry_flag_t flags, fib_route_path_t *paths)
Update an entry to have a new set of paths.
Set max allowed ARP or ip6 neighbor entries request.
static f64 vlib_time_now(vlib_main_t *vm)
static int arp_change_data_callback(u32 pool_index, u8 *new_mac, u32 sw_if_index, u32 address)
fib_node_index_t fib_table_entry_path_add2(u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_entry_flag_t flags, fib_route_path_t *rpath)
Add n paths to an entry (aka route) in the FIB.
A path that resolves via a BIER impostion object.
int vnet_add_del_ip6_nd_change_event(vnet_main_t *vnm, void *data_callback, u32 pid, void *address_arg, uword node_index, uword type_opaque, uword data, int is_add)
static void vl_api_send_msg(vl_api_registration_t *rp, u8 *elem)
clib_error_t * ip4_set_arp_limit(u32 arp_limit)
index_t frp_bier_imp
A path via a BIER imposition object.
ip6_neighbor_t * ip6_neighbors_entries(u32 sw_if_index)
u32 mpls_label_t
A label value only, i.e.
static int arp_change_delete_callback(u32 pool_index, u8 *notused)
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
int ip6_neighbor_proxy_add_del(u32 sw_if_index, ip6_address_t *addr, u8 is_del)
void ip_table_delete(fib_protocol_t fproto, u32 table_id, u8 is_api)
ip_lookup_main_t lookup_main
void vl_api_ip_reassembly_set_t_handler(vl_api_ip_reassembly_set_t *mp)
static void send_ip_mfib_details(vl_api_registration_t *reg, u32 context, u32 table_id, fib_node_index_t mfei)
static vnet_sw_interface_t * vnet_get_sw_interface(vnet_main_t *vnm, u32 sw_if_index)
fib_node_index_t mfib_table_entry_update(u32 fib_index, const mfib_prefix_t *prefix, mfib_source_t source, fib_rpf_id_t rpf_id, mfib_entry_flags_t entry_flags)
Add a new (with no replication) or lock an existing entry.
dpo_proto_t frp_proto
The protocol of the address below.
IPv6 router advertisement config request.
struct api_ip6nd_proxy_fib_table_walk_ctx_t_ api_ip6nd_proxy_fib_table_walk_ctx_t
static clib_error_t * want_ip6_nd_events_reaper(u32 client_index)
A path that result in received traffic being recieved/recirculated so that it appears to have arrived...
void vl_api_ip_reassembly_enable_disable_t_handler(vl_api_ip_reassembly_enable_disable_t *mp)
#define pool_get(P, E)
Allocate an object E from a pool P (unspecified alignment).
static void vl_api_ip6nd_proxy_dump_t_handler(vl_api_ip6nd_proxy_dump_t *mp)
vl_api_fib_mpls_label_t next_hop_out_label_stack[next_hop_n_out_labels]
void * vl_msg_api_alloc(int nbytes)
static void api_ip6_fib_table_put_entries(clib_bihash_kv_24_8_t *kvp, void *arg)
static fib_table_walk_rc_t api_ip6nd_proxy_fib_table_walk(fib_node_index_t fei, void *arg)
void vl_api_ip_reassembly_get_t_handler(vl_api_ip_reassembly_get_t *mp)
enum fib_protocol_t_ fib_protocol_t
Protocol Type.
#define vec_reset_length(v)
Reset vector length to zero NULL-pointer tolerant.
static void vl_api_ip_mfib_dump_t_handler(vl_api_ip_mfib_dump_t *mp)
static int nd_change_data_callback(u32 pool_index, u8 *new_mac, u32 sw_if_index, ip6_address_t *address)
A local path with a RPF-ID => multicast traffic.
ip6_neighbor_flags_t flags
static int vl_api_can_send_msg(vl_api_registration_t *rp)
static void handle_ip4_arp_event(u32 pool_index)
Proxy ARP add / del request.
#define VNET_SW_INTERFACE_FLAG_PROXY_ARP
#define pool_foreach(VAR, POOL, BODY)
Iterate through pool.
u32 frp_sw_if_index
The interface.
Add / del table request A table can be added multiple times, but need be deleted only once...
Start / stop sending router solicitation.
static uword vlib_process_get_events(vlib_main_t *vm, uword **data_vector)
Return the first event type which has occurred and a vector of per-event data of that type...
static int add_del_mroute_check(fib_protocol_t table_proto, u32 table_id, u32 next_hop_sw_if_index, u8 is_local, u32 *fib_index)
Dump IP6 multicast fib table.
void fib_table_entry_special_remove(u32 fib_index, const fib_prefix_t *prefix, fib_source_t source)
Remove a 'special' entry from the FIB.
clib_error_t * vnet_ip_container_proxy_add_del(vnet_ip_container_proxy_args_t *args)
vl_api_fib_path_t path[count]
struct _vnet_ip_container_proxy_args vnet_ip_container_proxy_args_t
#define vec_new(T, N)
Create new vector of given type and length (unspecified alignment, no header).
svm_queue_t unix_shared_memory_queue_t
static uword ip6_address_is_equal(ip6_address_t *a, ip6_address_t *b)
Recursion constraint of via a host prefix.
static void vl_api_ip6_mfib_dump_t_handler(vl_api_ip6_mfib_dump_t *mp)
Set interface source and L4 port-range request.
struct _vl_api_ip4_arp_event * arp_events
u32 mfib_table_find_or_create_and_lock_w_name(fib_protocol_t proto, u32 table_id, mfib_source_t src, const u8 *name)
Get the index of the FIB for a Table-ID.
int vnet_set_ip6_ethernet_neighbor(vlib_main_t *vm, u32 sw_if_index, ip6_address_t *a, u8 *link_layer_address, uword n_bytes_link_layer_address, int is_static, int is_no_fib_entry)
void fib_table_flush(u32 fib_index, fib_protocol_t proto, fib_source_t source)
Flush all entries from a table for the source.
Aggregrate type for a prefix.
int ip6_interface_enabled(vlib_main_t *vm, u32 sw_if_index)
static void vl_api_ip_dump_t_handler(vl_api_ip_dump_t *mp)
vnet_api_error_t ip6_reass_set(u32 timeout_ms, u32 max_reassemblies, u32 expire_walk_interval_ms)
set ip6 reassembly configuration
struct vl_api_ip_mfib_dump_ctc_t_ vl_api_ip_mfib_dump_ctc_t
static int ip6_add_del_route_t_handler(vl_api_ip_add_del_route_t *mp)
static void api_ip6_fib_table_get_all(vl_api_registration_t *reg, vl_api_ip6_fib_dump_t *mp, fib_table_t *fib_table)
fib_node_index_t mfib_table_entry_path_update(u32 fib_index, const mfib_prefix_t *prefix, mfib_source_t source, const fib_route_path_t *rpath, mfib_itf_flags_t itf_flags)
Add n paths to an entry (aka route) in the FIB.
IPv6 interface enable / disable request.
A path via a UDP encap object.
enum fib_route_path_flags_t_ fib_route_path_flags_t
Path flags from the control plane.
struct mfib_table_t_ * mfibs
Vector of MFIBs.
enum dpo_proto_t_ dpo_proto_t
Data path protocol.
u32 fib_table_find(fib_protocol_t proto, u32 table_id)
Get the index of the FIB for a Table-ID.
fib_protocol_t dpo_proto_to_fib(dpo_proto_t dpo_proto)
u16 fp_len
The mask length.
static void vl_api_set_arp_neighbor_limit_t_handler(vl_api_set_arp_neighbor_limit_t *mp)
static void vl_api_mfib_signal_dump_t_handler(vl_api_mfib_signal_dump_t *mp)
int fib_entry_cmp_for_sort(void *i1, void *i2)
int vnet_arp_unset_ip4_over_ethernet(vnet_main_t *vnm, u32 sw_if_index, void *a_arg)
Control Plane hook to remove an ARP entry.
u32 mfib_entry_get_fib_index(fib_node_index_t mfib_entry_index)
Configure IP source and L4 port-range check.
vnet_api_error_t api_errno
The identity of a DPO is a combination of its type and its instance number/index of objects of that t...
static int vl_api_ip6_mfib_table_dump_walk(fib_node_index_t fei, void *arg)
static void vl_api_want_ip6_nd_events_t_handler(vl_api_want_ip6_nd_events_t *mp)
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
static fib_table_walk_rc_t vl_api_ip_fib_dump_walk(fib_node_index_t fei, void *arg)
vnet_api_error_t ip4_reass_set(u32 timeout_ms, u32 max_reassemblies, u32 expire_walk_interval_ms)
set ip4 reassembly configuration
uword * fib_index_by_table_id
Hash table mapping table id to fib index.
static mfib_itf_t * mfib_itf_get(index_t mi)
void mfib_table_unlock(u32 fib_index, fib_protocol_t proto, mfib_source_t source)
Take a reference counting lock on the table.
ip46_address_t fp_addr
The address type is not deriveable from the fp_addr member.
index_t classify_dpo_create(dpo_proto_t proto, u32 classify_table_index)
ip4_address_t ip4_address
int vnet_unset_ip6_ethernet_neighbor(vlib_main_t *vm, u32 sw_if_index, ip6_address_t *a, u8 *link_layer_address, uword n_bytes_link_layer_address)
void vl_api_ip_table_add_del_t_handler(vl_api_ip_table_add_del_t *mp)
static void vl_api_proxy_arp_add_del_t_handler(vl_api_proxy_arp_add_del_t *mp)
static void vl_api_sw_interface_ip6nd_ra_prefix_t_handler(vl_api_sw_interface_ip6nd_ra_prefix_t *mp)
vnet_api_error_t ip4_reass_get(u32 *timeout_ms, u32 *max_reassemblies, u32 *expire_walk_interval_ms)
get ip4 reassembly configuration
#define pool_put(P, E)
Free an object E in pool P.
static int nd_change_delete_callback(u32 pool_index, u8 *notused)
IP6 Multicast FIB table response.
void fib_table_entry_path_remove2(u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_route_path_t *rpath)
Remove n paths to an entry (aka route) in the FIB.
vl_api_fib_path_t path[count]
Configuration for each label value in the output-stack.
static void send_ip_neighbor_details(u32 sw_if_index, u8 is_ipv6, u8 is_static, u8 *mac_address, u8 *ip_address, vl_api_registration_t *reg, u32 context)
Recursion constraint of via an attahced prefix.
fib_node_index_t * entries
Tell client about an ip4 arp resolution event.
static void send_ip6nd_proxy_details(vl_api_registration_t *reg, u32 context, const ip46_address_t *addr, u32 sw_if_index)
VLIB_API_INIT_FUNCTION(ip_api_hookup)
u32 expire_walk_interval_ms
void fib_table_unlock(u32 fib_index, fib_protocol_t proto, fib_source_t source)
Take a reference counting lock on the table.
static void vl_api_sw_interface_ip6_enable_disable_t_handler(vl_api_sw_interface_ip6_enable_disable_t *mp)
static void vl_api_set_ip_flow_hash_t_handler(vl_api_set_ip_flow_hash_t *mp)
fib_mpls_lsp_mode_t fml_mode
The LSP mode.
void ra_set_publisher_node(uword node_index, uword event_type)
IOAM enable : Enable in-band OAM.
static mfib_entry_t * mfib_entry_get(fib_node_index_t index)
struct _vl_api_ip6_nd_event * nd_events
void stats_dsunlock(void)
API main structure, used by both vpp and binary API clients.
u32 fib_entry_get_resolving_interface(fib_node_index_t entry_index)
static clib_error_t * want_ip6_ra_events_reaper(u32 client_index)
An API client registration, only in vpp/vlib.
void clib_bihash_foreach_key_value_pair(clib_bihash *h, void *callback, void *arg)
Visit active (key,value) pairs in a bi-hash table.
void wc_nd_set_publisher_node(uword node_index, uword event_type)
#define BAD_SW_IF_INDEX_LABEL
struct vl_api_ip6_mfib_dump_ctc_t_ vl_api_ip6_mfib_dump_ctc_t
fib_node_index_t ft_index
Index into FIB vector.
int fib_entry_is_sourced(fib_node_index_t fib_entry_index, fib_source_t source)
void vl_msg_api_send_shmem(svm_queue_t *q, u8 *elem)
#define VLIB_REGISTER_NODE(x,...)
Set the ip flow hash config for a fib request.
fib_node_index_t fib_table_entry_special_dpo_update(u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_entry_flag_t flags, const dpo_id_t *dpo)
Update a 'special' entry to the FIB that links to the DPO passed A special entry is an entry that the...
static void send_ip_fib_details(vpe_api_main_t *am, vl_api_registration_t *reg, const fib_table_t *table, const fib_prefix_t *pfx, fib_route_path_encode_t *api_rpaths, u32 context)
u32 ft_table_id
Table ID (hash key) for this FIB.
static void vl_api_ip_punt_redirect_t_handler(vl_api_ip_punt_redirect_t *mp, vlib_main_t *vm)
svm_queue_t * vl_api_client_index_to_input_queue(u32 index)
enum fib_table_walk_rc_t_ fib_table_walk_rc_t
return code controlling how a table walk proceeds
#define MPLS_LABEL_INVALID
#define vec_free(V)
Free vector's memory (no header).
void fib_table_entry_delete(u32 fib_index, const fib_prefix_t *prefix, fib_source_t source)
Delete a FIB entry.
struct vl_api_ip_fib_dump_walk_ctx_t_ vl_api_ip_fib_dump_walk_ctx_t
u8 * ft_desc
Table description.
static void send_ip_details(vpe_api_main_t *am, vl_api_registration_t *reg, u32 sw_if_index, u8 is_ipv6, u32 context)
#define clib_warning(format, args...)
fib_node_index_t * entries
static vlib_node_registration_t wc_arp_process_node
(constructor) VLIB_REGISTER_NODE (wc_arp_process_node)
static void vl_api_ip_source_and_port_range_check_add_del_t_handler(vl_api_ip_source_and_port_range_check_add_del_t *mp)
#define clib_memcpy(a, b, c)
clib_error_t * ip6_ioam_enable(int has_trace_option, int has_pot_option, int has_seqno_option, int has_analyse_option)
void wc_arp_set_publisher_node(uword node_index, uword event_type)
u32 fib_node_index_t
A typedef of a node index.
mfib_entry_flags_t mfe_flags
Route flags.
static void set_ip6_flow_hash(vl_api_set_ip_flow_hash_t *mp)
#define pool_is_free_index(P, I)
Use free bitmap to query whether given index is free.
void ip4_punt_policer_add_del(u8 is_add, u32 policer_index)
mpls_label_t fml_value
The label value.
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
void dpo_set(dpo_id_t *dpo, dpo_type_t type, dpo_proto_t proto, index_t index)
Set/create a DPO ID The DPO will be locked.
clib_error_t * enable_ip6_interface(vlib_main_t *vm, u32 sw_if_index)
int vnet_proxy_arp_add_del(ip4_address_t *lo_addr, ip4_address_t *hi_addr, u32 fib_index, int is_del)
Aggregrate type for a prefix.
enum fib_entry_flag_t_ fib_entry_flag_t
void ip6_punt_redirect_add(u32 rx_sw_if_index, u32 tx_sw_if_index, ip46_address_t *nh)
void ip6_punt_redirect_del(u32 rx_sw_if_index)
static void send_ip_address_details(vpe_api_main_t *am, vl_api_registration_t *reg, u8 *ip, u16 prefix_length, u32 sw_if_index, u8 is_ipv6, u32 context)
vnet_api_error_t ip4_reass_enable_disable(u32 sw_if_index, u8 enable_disable)
static void vl_api_ioam_disable_t_handler(vl_api_ioam_disable_t *mp)
u32 fib_rpf_id_t
An RPF-ID is numerical value that is used RPF validate.
struct _vnet_classify_main vnet_classify_main_t
#define foreach_flow_hash_bit
static void vl_api_reset_fib_t_handler(vl_api_reset_fib_t *mp)
void ip6_punt_policer_add_del(u8 is_add, u32 policer_index)
static int ip4_reset_fib_t_handler(vl_api_reset_fib_t *mp)
void vl_api_ip_mroute_add_del_t_handler(vl_api_ip_mroute_add_del_t *mp)
#define VNET_SW_INTERFACE_FLAG_ADMIN_UP
IP neighbor add / del request.
void mfib_entry_get_prefix(fib_node_index_t mfib_entry_index, mfib_prefix_t *pfx)
#define pool_put_index(p, i)
Free pool element with given index.
static uword ip6_address_is_zero(ip6_address_t *a)
static int api_mroute_add_del_t_handler(vl_api_ip_mroute_add_del_t *mp)
IP Multicast FIB table response.
ip6_address_t ip6_address
int mfib_signal_send_one(struct vl_api_registration_ *reg, u32 context)
ip_lookup_main_t lookup_main
fib_node_index_t * entries
static int vl_api_ip_mfib_table_dump_walk(fib_node_index_t fei, void *arg)
static int ip4_add_del_route_t_handler(vl_api_ip_add_del_route_t *mp)
IPv6 router advertisement prefix config request.
IPv6 ND proxy details returned after request.
static void set_ip4_flow_hash(vl_api_set_ip_flow_hash_t *mp)
An interface associated with a particular MFIB entry.
IPv6 ND proxy dump request.
static uword wc_arp_process(vlib_main_t *vm, vlib_node_runtime_t *rt, vlib_frame_t *f)
A deag path using the packet's source not destination address.
static void vl_api_ioam_enable_t_handler(vl_api_ioam_enable_t *mp)
fib_route_path_flags_t frp_flags
flags on the path
struct mfib_table_t_ * mfibs
Vector of MFIBs.
#define clib_error_report(e)
int add_del_route_check(fib_protocol_t table_proto, u32 table_id, u32 next_hop_sw_if_index, dpo_proto_t next_hop_table_proto, u32 next_hop_table_id, u8 is_rpf_id, u32 *fib_index, u32 *next_hop_fib_index)
vnet_classify_main_t vnet_classify_main
dpo_proto_t fib_proto_to_dpo(fib_protocol_t fib_proto)
u32 mft_table_id
Table ID (hash key) for this FIB.
From the control plane API.
void stats_dslock_with_hint(int hint, int tag)
fib_rpf_id_t mfe_rpf_id
RPF-ID used when the packets ingress not from an interface.
ethernet_arp_entry_flags_t flags
A path that resolves via another table.
static clib_error_t * ip_api_hookup(vlib_main_t *vm)
u32 flow_hash_config_t
A flow hash configuration is a mask of the flow hash options.
static void vl_api_ip_fib_dump_t_handler(vl_api_ip_fib_dump_t *mp)
static vlib_node_registration_t ip_resolver_process_node
(constructor) VLIB_REGISTER_NODE (ip_resolver_process_node)
int vnet_set_ip6_flow_hash(u32 table_id, flow_hash_config_t flow_hash_config)
void fib_api_path_encode(const fib_route_path_encode_t *api_rpath, vl_api_fib_path_t *out)
ip6_fib_table_instance_t ip6_table[IP6_FIB_NUM_TABLES]
The two FIB tables; fwding and non-fwding.
IP neighboors dump response.
static vlib_main_t * vlib_get_main(void)
void fib_entry_encode(fib_node_index_t fib_entry_index, fib_route_path_encode_t **api_rpaths)
void mfib_entry_encode(fib_node_index_t mfib_entry_index, fib_route_path_encode_t **api_rpaths)
mpls_label_t frp_local_label
The MPLS local Label to reursively resolve through.
struct _vlib_node_registration vlib_node_registration_t
fib_protocol_t fp_proto
protocol type
static void setup_message_id_table(api_main_t *am)
static void * vlib_process_get_event_data(vlib_main_t *vm, uword *return_event_type_opaque)
mfib_table_t * mfib_table_get(fib_node_index_t index, fib_protocol_t proto)
Get a pointer to a FIB table.
static void vl_api_ip_punt_police_t_handler(vl_api_ip_punt_police_t *mp, vlib_main_t *vm)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
static void vl_api_want_ip4_arp_events_t_handler(vl_api_want_ip4_arp_events_t *mp)
u32 mfib_table_find(fib_protocol_t proto, u32 table_id)
Get the index of the FIB for a Table-ID.
#define vec_sort_with_function(vec, f)
Sort a vector using the supplied element comparison function.
int ip6_neighbor_ra_config(vlib_main_t *vm, u32 sw_if_index, u8 suppress, u8 managed, u8 other, u8 ll_option, u8 send_unicast, u8 cease, u8 use_lifetime, u32 lifetime, u32 initial_count, u32 initial_interval, u32 max_interval, u32 min_interval, u8 is_no)
vnet_sw_interface_t * sw_interfaces
#define DPO_INVALID
An initialiser for DPOs declared on the stack.
#define clib_error_get_code(err)
u8 mfs_buffer[MFIB_SIGNAL_BUFFER_SIZE]
A buffer copied from the DP plane that triggered the signal.
int ip4_source_and_port_range_check_add_del(ip4_address_t *address, u32 length, u32 vrf_id, u16 *low_ports, u16 *high_ports, int is_add)
fib_table_t * fib_table_get(fib_node_index_t index, fib_protocol_t proto)
Get a pointer to a FIB table.
clib_error_t * set_ip6_link_local_address(vlib_main_t *vm, u32 sw_if_index, ip6_address_t *address)
static clib_error_t * want_ip4_arp_events_reaper(u32 client_index)
static void vl_api_sw_interface_ip6nd_ra_config_t_handler(vl_api_sw_interface_ip6nd_ra_config_t *mp)
Tell client about an ip6 nd resolution or mac/ip event.
vnet_api_error_t ip6_reass_get(u32 *timeout_ms, u32 *max_reassemblies, u32 *expire_walk_interval_ms)
get ip6 reassembly configuration
u32 mfi_sw_if_index
The SW IF index that this MFIB interface represents.
A protocol Independent IP multicast FIB table.
ip4_main_t ip4_main
Global ip4 main structure.
static void vlib_process_put_event_data(vlib_main_t *vm, void *event_data)
static u32 eth_mac_equal(u8 *mac1, u8 *mac2)
IP6 FIB table entry response.
Register for ip4 arp resolution events.
struct fib_table_t_ * fibs
Vector of FIBs.
Enable/disable reassembly feature.
void dpo_reset(dpo_id_t *dpo)
reset a DPO ID The DPO will be unlocked.
#define vec_foreach(var, vec)
Vector iterator.
vnet_api_error_t ip6_reass_enable_disable(u32 sw_if_index, u8 enable_disable)
clib_error_t * clear_ioam_rewrite_fn(void)
static int mroute_add_del_handler(u8 is_add, u8 is_local, u32 fib_index, const mfib_prefix_t *prefix, dpo_proto_t nh_proto, u32 entry_flags, fib_rpf_id_t rpf_id, u32 next_hop_sw_if_index, u32 itf_flags, u32 bier_imp)
void ip_table_create(fib_protocol_t fproto, u32 table_id, u8 is_api, const u8 *name)
static void vl_api_sw_interface_ip6_set_link_local_address_t_handler(vl_api_sw_interface_ip6_set_link_local_address_t *mp)
u8 fml_exp
EXP bits; valid only at imposition.
clib_error_t * vnet_sw_interface_set_flags(vnet_main_t *vnm, u32 sw_if_index, u32 flags)
static void vl_api_ip_address_dump_t_handler(vl_api_ip_address_dump_t *mp)
ethernet_arp_ip4_entry_t * ip4_neighbor_entries(u32 sw_if_index)
int vnet_arp_set_ip4_over_ethernet(vnet_main_t *vnm, u32 sw_if_index, void *a_arg, int is_static, int is_no_fib_entry)
u32 expire_walk_interval_ms
static void * ip_interface_address_get_address(ip_lookup_main_t *lm, ip_interface_address_t *a)
struct apt_ip6_fib_show_ctx_t_ api_ip6_fib_show_ctx_t
u16 fp_len
The mask length.
void mfib_table_entry_path_remove(u32 fib_index, const mfib_prefix_t *prefix, mfib_source_t source, const fib_route_path_t *rpath)
Remove n paths to an entry (aka route) in the FIB.
clib_error_t * disable_ip6_interface(vlib_main_t *vm, u32 sw_if_index)
fib_node_index_t mfs_entry
int ip6_source_and_port_range_check_add_del(ip6_address_t *address, u32 length, u32 vrf_id, u16 *low_ports, u16 *high_ports, int is_add)
vpe_api_main_t vpe_api_main
static uword vnet_sw_interface_get_flags(vnet_main_t *vnm, u32 sw_if_index)
u32 frp_udp_encap_id
UDP encap ID.
void vl_api_ip_add_del_route_t_handler(vl_api_ip_add_del_route_t *mp)
#define ip46_address_is_zero(ip46)
void vl_mfib_signal_send_one(vl_api_registration_t *reg, u32 context, const mfib_signal_t *mfs)
static void handle_ip6_nd_event(u32 pool_index)
struct fib_table_t_ * fibs
u32 frp_fib_index
The FIB index to lookup the nexthop Only valid for recursive paths.
int vnet_add_del_ip4_arp_change_event(vnet_main_t *vnm, void *data_callback, u32 pid, void *address_arg, uword node_index, uword type_opaque, uword data, int is_add)
static void vl_api_ip6nd_send_router_solicitation_t_handler(vl_api_ip6nd_send_router_solicitation_t *mp)
static void vl_api_ip_source_and_port_range_check_interface_add_del_t_handler(vl_api_ip_source_and_port_range_check_interface_add_del_t *mp)
#define foreach_ip_api_msg
int add_del_route_t_handler(u8 is_multipath, u8 is_add, u8 is_drop, u8 is_unreach, u8 is_prohibit, u8 is_local, u8 is_multicast, u8 is_classify, u32 classify_table_index, u8 is_resolve_host, u8 is_resolve_attached, u8 is_interface_rx, u8 is_rpf_id, u8 is_dvr, u8 is_source_lookup, u8 is_udp_encap, u32 fib_index, const fib_prefix_t *prefix, dpo_proto_t next_hop_proto, const ip46_address_t *next_hop, u32 next_hop_id, u32 next_hop_sw_if_index, u8 next_hop_fib_index, u16 next_hop_weight, u16 next_hop_preference, mpls_label_t next_hop_via_label, fib_mpls_label_t *next_hop_out_label_stack)
static void send_ip6_fib_details(vpe_api_main_t *am, vl_api_registration_t *reg, const fib_table_t *table, const fib_prefix_t *pfx, fib_route_path_encode_t *api_rpaths, u32 context)
const ip46_address_t zero_addr
ip46_address_t fp_grp_addr
The address type is not deriveable from the fp_addr member.
static void vl_api_ip6_fib_dump_t_handler(vl_api_ip6_fib_dump_t *mp)
#define VALIDATE_SW_IF_INDEX(mp)
A protocol Independent FIB table.
static int ip6_reset_fib_t_handler(vl_api_reset_fib_t *mp)
clib_error_t * ip6_set_neighbor_limit(u32 neighbor_limit)
static void vl_api_ip_neighbor_dump_t_handler(vl_api_ip_neighbor_dump_t *mp)
static void vl_api_want_ip6_ra_events_t_handler(vl_api_want_ip6_ra_events_t *mp)
int set_ip_source_and_port_range_check(vlib_main_t *vm, u32 *fib_index, u32 sw_if_index, u32 is_add)
static uword pool_elts(void *v)
Number of active elements in a pool.