62 #define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__) 70 #define foreach_ip_api_msg \ 71 _(IP_TABLE_DUMP, ip_table_dump) \ 72 _(IP_ROUTE_DUMP, ip_route_dump) \ 73 _(IP_MTABLE_DUMP, ip_mtable_dump) \ 74 _(IP_MROUTE_DUMP, ip_mroute_dump) \ 75 _(IP_NEIGHBOR_DUMP, ip_neighbor_dump) \ 76 _(IP_MROUTE_ADD_DEL, ip_mroute_add_del) \ 77 _(MFIB_SIGNAL_DUMP, mfib_signal_dump) \ 78 _(IP_ADDRESS_DUMP, ip_address_dump) \ 79 _(IP_UNNUMBERED_DUMP, ip_unnumbered_dump) \ 81 _(IP_NEIGHBOR_ADD_DEL, ip_neighbor_add_del) \ 82 _(SET_ARP_NEIGHBOR_LIMIT, set_arp_neighbor_limit) \ 83 _(IP_PROBE_NEIGHBOR, ip_probe_neighbor) \ 84 _(IP_SCAN_NEIGHBOR_ENABLE_DISABLE, ip_scan_neighbor_enable_disable) \ 85 _(WANT_IP4_ARP_EVENTS, want_ip4_arp_events) \ 86 _(WANT_IP6_ND_EVENTS, want_ip6_nd_events) \ 87 _(WANT_IP6_RA_EVENTS, want_ip6_ra_events) \ 88 _(PROXY_ARP_ADD_DEL, proxy_arp_add_del) \ 89 _(PROXY_ARP_DUMP, proxy_arp_dump) \ 90 _(PROXY_ARP_INTFC_ENABLE_DISABLE, proxy_arp_intfc_enable_disable) \ 91 _(PROXY_ARP_INTFC_DUMP, proxy_arp_intfc_dump) \ 92 _(RESET_FIB, reset_fib) \ 93 _(IP_ROUTE_ADD_DEL, ip_route_add_del) \ 94 _(IP_TABLE_ADD_DEL, ip_table_add_del) \ 95 _(IP_PUNT_POLICE, ip_punt_police) \ 96 _(IP_PUNT_REDIRECT, ip_punt_redirect) \ 97 _(SET_IP_FLOW_HASH,set_ip_flow_hash) \ 98 _(SW_INTERFACE_IP6ND_RA_CONFIG, sw_interface_ip6nd_ra_config) \ 99 _(SW_INTERFACE_IP6ND_RA_PREFIX, sw_interface_ip6nd_ra_prefix) \ 100 _(IP6ND_PROXY_ADD_DEL, ip6nd_proxy_add_del) \ 101 _(IP6ND_PROXY_DUMP, ip6nd_proxy_dump) \ 102 _(IP6ND_SEND_ROUTER_SOLICITATION, ip6nd_send_router_solicitation) \ 103 _(SW_INTERFACE_IP6_ENABLE_DISABLE, sw_interface_ip6_enable_disable ) \ 104 _(IP_CONTAINER_PROXY_ADD_DEL, ip_container_proxy_add_del) \ 105 _(IP_CONTAINER_PROXY_DUMP, ip_container_proxy_dump) \ 106 _(IOAM_ENABLE, ioam_enable) \ 107 _(IOAM_DISABLE, ioam_disable) \ 108 _(IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL, \ 109 ip_source_and_port_range_check_add_del) \ 110 _(IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL, \ 111 ip_source_and_port_range_check_interface_add_del) \ 112 _(IP_SOURCE_CHECK_INTERFACE_ADD_DEL, \ 113 ip_source_check_interface_add_del) \ 114 _(IP_REASSEMBLY_SET, ip_reassembly_set) \ 115 _(IP_REASSEMBLY_GET, ip_reassembly_get) \ 116 _(IP_REASSEMBLY_ENABLE_DISABLE, ip_reassembly_enable_disable) \ 117 _(IP_PUNT_REDIRECT_DUMP, ip_punt_redirect_dump) 120 static vl_api_ip_neighbor_flags_t
130 return (clib_host_to_net_u32 (v));
144 mp->_vl_msg_id = ntohs (VL_API_IP_NEIGHBOR_DETAILS);
146 mp->
neighbor.sw_if_index = htonl (sw_if_index);
174 ip46_address_t
nh = {
195 ip46_address_t
nh = {
221 mp->_vl_msg_id = ntohs (VL_API_IP_TABLE_DETAILS);
246 send_ip_table_details(am, reg, mp->context, fib_table);
251 if (fib_table->ft_flags & FIB_TABLE_FLAG_IP6_LL)
253 send_ip_table_details(am, reg, mp->context, fib_table);
281 vl_api_fib_path_t *fp;
293 mp->_vl_msg_id = ntohs (VL_API_IP_ROUTE_DETAILS);
362 memset (mp, 0,
sizeof (*mp));
363 mp->_vl_msg_id = ntohs (VL_API_IP_MTABLE_DETAILS);
385 send_ip_mtable_details (reg, mp->context, mfib_table);
389 send_ip_mtable_details (reg, mp->context, mfib_table);
429 mp->_vl_msg_id = ntohs (VL_API_IP_MROUTE_DETAILS);
436 mp->
route.n_paths = htonl (path_count);
437 fp = mp->
route.paths;
487 vl_api_ip_punt_police_reply_t *rmp;
502 vl_api_ip_punt_redirect_reply_t *rmp;
508 goto bad_sw_if_index;
546 v = clib_net_to_host_u32 (v);
562 u32 stats_index = ~0;
582 flags, &stats_index);
599 u32 fib_index, mfib_index;
623 if (~0 != mfib_index)
634 vl_api_ip_table_add_del_reply_t *rmp;
657 vl_api_fib_path_t *apath;
681 (~0 == rpath->frp_sw_if_index))
690 fib_index, &pfx, entry_flags, rpaths);
692 if (mp->
is_add && 0 == rv)
705 u32 stats_index = ~0;
722 u32 fib_index, mfib_index;
748 if (~0 == mfib_index)
766 u32 mfib_entry_index = ~0;
772 rpf_id, entry_flags);
789 return (mfib_entry_index);
806 ntohl (mp->
route.table_id), &fib_index);
812 for (ii = 0; ii < mp->
route.n_paths; ii++)
825 ntohl (mp->
route.entry_flags),
826 ntohl (mp->
route.rpf_id),
829 if (~0 != mfib_entry_index)
840 u32 stats_index = ~0;
862 mp->_vl_msg_id = ntohs (VL_API_IP_DETAILS);
881 mp->_vl_msg_id = ntohs (VL_API_IP_ADDRESS_DETAILS);
901 int rv __attribute__ ((unused)) = 0;
957 mp->_vl_msg_id = ntohs (VL_API_IP_UNNUMBERED_DETAILS);
971 int rv __attribute__ ((unused)) = 0;
983 if (~0 != sw_if_index)
1002 if ((si->flags & VNET_SW_INTERFACE_FLAG_UNNUMBERED))
1004 send_ip_unnumbered_details(am, reg,
1006 si->unnumbered_sw_if_index,
1033 _vec_len (sorted_sis) = 0;
1037 vec_add1 (sorted_sis, si[0]);
1060 vl_api_set_ip_flow_hash_reply_t *rmp;
1065 table_id = ntohl (mp->
vrf_id);
1067 #define _(a,b) if (mp->a) flow_hash_config |= b; 1079 vl_api_set_ip_flow_hash_reply_t *rmp;
1084 table_id = ntohl (mp->
vrf_id);
1086 #define _(a,b) if (mp->a) flow_hash_config |= b; 1109 vl_api_sw_interface_ip6nd_ra_config_reply_t *rmp;
1112 u8 is_no, suppress, managed, other, ll_option, send_unicast, cease,
1115 is_no = mp->
is_no == 1;
1118 other = mp->
other == 1;
1121 cease = mp->
cease == 1;
1127 suppress, managed, other,
1128 ll_option, send_unicast, cease,
1129 default_router, ntohl (mp->
lifetime),
1137 REPLY_MACRO (VL_API_SW_INTERFACE_IP6ND_RA_CONFIG_REPLY);
1145 vl_api_sw_interface_ip6nd_ra_prefix_reply_t *rmp;
1148 u8 is_no, use_default, no_advertise, off_link, no_autoconfig, no_onlink;
1153 is_no = mp->
is_no == 1;
1165 off_link, no_autoconfig, no_onlink, is_no);
1168 REPLY_MACRO (VL_API_SW_INTERFACE_IP6ND_RA_PREFIX_REPLY);
1180 mp->_vl_msg_id = ntohs (VL_API_IP6ND_PROXY_DETAILS);
1226 fib_table_walk(fib_table->ft_index,
1228 api_ip6nd_proxy_fib_table_walk,
1251 vl_api_ip6nd_proxy_add_del_reply_t *rmp;
1268 vl_api_ip6nd_send_router_solicitation_reply_t *rmp;
1276 REPLY_MACRO (VL_API_IP6ND_SEND_ROUTER_SOLICITATION_REPLY);
1281 params.
irt = ntohl (mp->
irt);
1282 params.
mrt = ntohl (mp->
mrt);
1283 params.
mrc = ntohl (mp->
mrc);
1284 params.
mrd = ntohl (mp->
mrd);
1295 vl_api_sw_interface_ip6_enable_disable_reply_t *rmp;
1312 rv = VNET_API_ERROR_UNSPECIFIED;
1321 REPLY_MACRO (VL_API_SW_INTERFACE_IP6_ENABLE_DISABLE_REPLY);
1336 mp->_vl_msg_id = ntohs (VL_API_MFIB_SIGNAL_DETAILS);
1379 vl_api_ip_container_proxy_add_del_reply_t *rmp;
1388 args.sw_if_index = clib_net_to_host_u32 (mp->
sw_if_index);
1389 args.is_add = mp->
is_add;
1396 REPLY_MACRO (VL_API_IP_CONTAINER_PROXY_ADD_DEL_REPLY);
1417 mp->_vl_msg_id = ntohs (VL_API_IP_CONTAINER_PROXY_DETAILS);
1450 vl_api_ioam_enable_reply_t *rmp;
1470 vl_api_ioam_disable_reply_t *rmp;
1487 vl_api_ip_source_and_port_range_check_add_del_reply_t *rmp;
1493 u16 *high_ports = 0;
1495 u16 tmp_low, tmp_high;
1503 if (num_ranges > 32)
1505 rv = VNET_API_ERROR_EXCEEDED_NUMBER_OF_RANGES_CAPACITY;
1512 for (i = 0; i < num_ranges; i++)
1518 if (tmp_low > tmp_high || tmp_low == 0 || tmp_high > 65535)
1520 rv = VNET_API_ERROR_INVALID_VALUE;
1524 vec_add1 (high_ports, tmp_high + 1);
1527 vrf_id = ntohl (mp->
vrf_id);
1531 rv = VNET_API_ERROR_INVALID_VALUE;
1542 high_ports, is_add);
1550 high_ports, is_add);
1556 REPLY_MACRO (VL_API_IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL_REPLY);
1564 vl_api_ip_source_and_port_range_check_interface_add_del_reply_t *rmp;
1585 if (vrf_id[i] != 0 && vrf_id[i] != ~0)
1591 rv = VNET_API_ERROR_INVALID_VALUE;
1595 fib_index[
i] = p[0];
1611 REPLY_MACRO (VL_API_IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL_REPLY);
1623 vl_api_ip_source_check_interface_add_del_reply_t *rmp;
1627 char *feature_name =
1628 mp->
loose ?
"ip4-source-check-via-any" :
"ip4-source-check-via-rx";
1638 is_add, &config,
sizeof (config));
1641 REPLY_MACRO (VL_API_IP_SOURCE_CHECK_INTERFACE_ADD_DEL_REPLY);
1644 #define IP4_ARP_EVENT 3 1645 #define IP6_ND_EVENT 4 1684 event->
pid, event->
ip,
1698 static f64 last_time;
1705 clib_warning (
"arp event for %U to pid %d: queue stuffed!",
1747 event->
pid, event->
ip,
1761 static f64 last_time;
1768 clib_warning (
"ip6 nd event for %U to pid %d: queue stuffed!",
1779 volatile f64 timeout = 100.0;
1780 volatile uword *event_data = 0;
1793 for (i = 0; i <
vec_len (event_data); i++)
1798 for (i = 0; i <
vec_len (event_data); i++)
1815 .name =
"ip-route-resolver-process",
1837 event->sw_if_index = htonl (sw_if_index);
1869 for (i = 0; i <
vec_len (arp_events); i++)
1874 &arp_events[i].
mac) &&
1876 (now - last_arp) < 10.0)
1880 arp_prev = arp_events[
i];
1886 vl_api_registration_t *vl_reg;
1887 vl_reg = vl_api_client_index_to_registration (reg->client_index);
1888 ASSERT (vl_reg != NULL);
1889 if (reg && vl_api_can_send_msg (vl_reg))
1891 vl_api_ip4_arp_event_t * event = vl_msg_api_alloc (sizeof *event);
1892 clib_memset (event, 0, sizeof *event);
1893 event->_vl_msg_id = htons (VL_API_IP4_ARP_EVENT);
1894 event->client_index = reg->client_index;
1895 event->pid = reg->client_pid;
1897 ip4_address_encode(&arp_events[i].ip, event->ip);
1898 event->sw_if_index = htonl(arp_events[i].sw_if_index);
1899 mac_address_encode(&arp_events[i].mac, event->mac);
1900 vl_api_send_msg (vl_reg, (u8 *) event);
1917 && (now - last_nd) < 10.0)
1921 nd_prev = nd_events[
i];
1927 vl_api_registration_t *vl_reg;
1928 vl_reg = vl_api_client_index_to_registration (reg->client_index);
1929 if (vl_reg && vl_api_can_send_msg (vl_reg))
1931 vl_api_ip6_nd_event_t * event = vl_msg_api_alloc (sizeof *event);
1932 clib_memset (event, 0, sizeof *event);
1933 event->_vl_msg_id = htons (VL_API_IP6_ND_EVENT);
1934 event->client_index = reg->client_index;
1935 event->pid = reg->client_pid;
1937 ip6_address_encode(&nd_events[i].ip6, event->ip);
1938 event->sw_if_index = htonl(nd_events[i].sw_if_index);
1939 mac_address_encode(&nd_events[i].mac, event->mac);
1940 vl_api_send_msg (vl_reg, (u8 *) event);
1959 vl_api_registration_t *vl_reg;
1961 vl_api_client_index_to_registration (reg->client_index);
1962 if (vl_reg && vl_api_can_send_msg (vl_reg))
1965 sizeof (vl_api_ip6_ra_event_t) +
1966 vec_len (ra_events[i].prefixes) *
1967 sizeof (vl_api_ip6_ra_prefix_info_t);
1968 vl_api_ip6_ra_event_t *event =
1969 vl_msg_api_alloc (event_size);
1970 clib_memset (event, 0, event_size);
1971 event->_vl_msg_id = htons (VL_API_IP6_RA_EVENT);
1972 event->client_index = reg->client_index;
1973 event->pid = reg->client_pid;
1975 event->sw_if_index = clib_host_to_net_u32 (ra_events[i].sw_if_index);
1977 ip6_address_encode (&ra_events[i].router_address,
1978 event->router_addr);
1980 event->current_hop_limit = ra_events[i].current_hop_limit;
1981 event->flags = ra_events[i].flags;
1982 event->router_lifetime_in_sec =
1983 clib_host_to_net_u16 (ra_events
1984 [i].router_lifetime_in_sec);
1985 event->neighbor_reachable_time_in_msec =
1986 clib_host_to_net_u32 (ra_events
1987 [i].neighbor_reachable_time_in_msec);
1988 event->time_in_msec_between_retransmitted_neighbor_solicitations
1990 clib_host_to_net_u32 (ra_events
1991 [i].time_in_msec_between_retransmitted_neighbor_solicitations);
1994 clib_host_to_net_u32 (vec_len (ra_events[i].prefixes));
1995 vl_api_ip6_ra_prefix_info_t *prefix =
1996 (typeof (prefix)) event->prefixes;
1998 for (j = 0; j < vec_len (ra_events[i].prefixes); j++)
2000 ra_report_prefix_info_t *info =
2001 &ra_events[i].prefixes[j];
2002 ip_prefix_encode(&info->prefix, &prefix->prefix);
2003 prefix->flags = info->flags;
2004 prefix->valid_time =
2005 clib_host_to_net_u32 (info->valid_time);
2006 prefix->preferred_time =
2007 clib_host_to_net_u32 (info->preferred_time);
2011 vl_api_send_msg (vl_reg, (u8 *) event);
2028 .name =
"wildcard-ip4-arp-publisher-process",
2051 event->sw_if_index = htonl (sw_if_index);
2060 vl_api_want_ip4_arp_events_reply_t *rmp;
2076 rv = VNET_API_ERROR_INVALID_REGISTRATION;
2083 pool_put (am->wc_ip4_arp_events_registrations, rp);
2084 hash_unset (am->wc_ip4_arp_events_registration_hash,
2086 if (
pool_elts (am->wc_ip4_arp_events_registrations) == 0)
2094 rv = VNET_API_ERROR_INVALID_REGISTRATION;
2097 pool_get (am->wc_ip4_arp_events_registrations, rp);
2101 rp - am->wc_ip4_arp_events_registrations);
2124 event->_vl_msg_id = htons (VL_API_IP4_ARP_EVENT);
2126 memcpy (event->
ip, mp->
ip, 4);
2127 event->pid = mp->
pid;
2148 u32 *to_delete, *event_id;
2161 if (event->client_index == client_index)
2163 vec_add1(to_delete, event - am->arp_events);
2173 event->pid, event->ip,
2180 p =
hash_get (am->wc_ip4_arp_events_registration_hash, client_index);
2185 pool_put (am->wc_ip4_arp_events_registrations, rp);
2186 hash_unset (am->wc_ip4_arp_events_registration_hash, client_index);
2187 if (
pool_elts (am->wc_ip4_arp_events_registrations) == 0)
2200 vl_api_want_ip6_nd_events_reply_t *rmp;
2216 rv = VNET_API_ERROR_INVALID_REGISTRATION;
2223 pool_put (am->wc_ip6_nd_events_registrations, rp);
2224 hash_unset (am->wc_ip6_nd_events_registration_hash,
2226 if (
pool_elts (am->wc_ip6_nd_events_registrations) == 0)
2234 rv = VNET_API_ERROR_INVALID_REGISTRATION;
2237 pool_get (am->wc_ip6_nd_events_registrations, rp);
2241 rp - am->wc_ip6_nd_events_registrations);
2264 event->_vl_msg_id = ntohs (VL_API_IP6_ND_EVENT);
2267 event->pid = mp->
pid;
2287 u32 *to_delete, *event_id;
2300 if (event->client_index == client_index)
2302 vec_add1(to_delete, event - am->nd_events);
2312 event->pid, event->ip,
2319 p =
hash_get (am->wc_ip6_nd_events_registration_hash, client_index);
2324 pool_put (am->wc_ip6_nd_events_registrations, rp);
2325 hash_unset (am->wc_ip6_nd_events_registration_hash, client_index);
2326 if (
pool_elts (am->wc_ip6_nd_events_registrations) == 0)
2338 vl_api_want_ip6_ra_events_reply_t *rmp;
2348 rv = VNET_API_ERROR_INVALID_REGISTRATION;
2354 pool_put (am->ip6_ra_events_registrations, rp);
2362 rv = VNET_API_ERROR_INVALID_REGISTRATION;
2365 pool_get (am->ip6_ra_events_registrations, rp);
2369 rp - am->ip6_ra_events_registrations);
2382 p =
hash_get (am->ip6_ra_events_registration_hash, client_index);
2387 pool_put (am->ip6_ra_events_registrations, rp);
2388 hash_unset (am->ip6_ra_events_registration_hash, client_index);
2398 vl_api_proxy_arp_add_del_reply_t *rmp;
2405 if (~0 == fib_index)
2407 rv = VNET_API_ERROR_NO_SUCH_FIB;
2438 mp->_vl_msg_id = ntohs (VL_API_PROXY_ARP_DETAILS);
2477 mp->_vl_msg_id = ntohs (VL_API_PROXY_ARP_INTFC_DETAILS);
2509 vl_api_proxy_arp_intfc_enable_disable_reply_t *rmp;
2519 REPLY_MACRO (VL_API_PROXY_ARP_INTFC_ENABLE_DISABLE_REPLY);
2527 vl_api_ip_probe_neighbor_reply_t *rmp;
2558 vl_api_ip_scan_neighbor_enable_disable_reply_t *rmp;
2569 REPLY_MACRO (VL_API_IP_SCAN_NEIGHBOR_ENABLE_DISABLE_REPLY);
2578 static u32 *sw_if_indices_to_shut;
2583 int rv = VNET_API_ERROR_NO_SUCH_FIB;
2589 vnet_sw_interface_t * si;
2591 fib = pool_elt_at_index (im4->v4_fibs, fib_table->ft_index);
2593 if (fib->table_id != target_fib_id)
2597 mpls_fib_reset_labels (fib->table_id);
2600 vnet_proxy_arp_fib_reset (fib->table_id);
2603 vnet_set_ip4_flow_hash (fib->table_id, IP_FLOW_HASH_DEFAULT);
2605 vec_reset_length (sw_if_indices_to_shut);
2608 pool_foreach (si, im->sw_interfaces,
2610 u32 sw_if_index = si->sw_if_index;
2612 if (sw_if_index < vec_len (im4->fib_index_by_sw_if_index)
2613 && (im4->fib_index_by_sw_if_index[si->sw_if_index] ==
2615 vec_add1 (sw_if_indices_to_shut, si->sw_if_index);
2618 for (i = 0; i <
vec_len (sw_if_indices_to_shut); i++) {
2619 sw_if_index = sw_if_indices_to_shut[
i];
2642 static u32 *sw_if_indices_to_shut;
2647 int rv = VNET_API_ERROR_NO_SUCH_FIB;
2653 vnet_sw_interface_t * si;
2655 fib = pool_elt_at_index (im6->v6_fibs, fib_table->ft_index);
2657 if (fib->table_id != target_fib_id)
2660 vec_reset_length (sw_if_indices_to_shut);
2663 vnet_set_ip6_flow_hash (fib->table_id, IP_FLOW_HASH_DEFAULT);
2666 pool_foreach (si, im->sw_interfaces,
2668 if (im6->fib_index_by_sw_if_index[si->sw_if_index] ==
2670 vec_add1 (sw_if_indices_to_shut, si->sw_if_index);
2673 for (i = 0; i <
vec_len (sw_if_indices_to_shut); i++) {
2674 sw_if_index = sw_if_indices_to_shut[
i];
2695 vl_api_reset_fib_reply_t *rmp;
2709 vl_api_set_arp_neighbor_limit_reply_t *rmp;
2723 rv = VNET_API_ERROR_UNSPECIFIED;
2730 REPLY_MACRO (VL_API_SET_ARP_NEIGHBOR_LIMIT_REPLY);
2736 vl_api_ip_reassembly_set_reply_t *rmp;
2742 clib_net_to_host_u32
2744 clib_net_to_host_u32
2751 clib_net_to_host_u32
2753 clib_net_to_host_u32
2771 rmp->_vl_msg_id = ntohs (VL_API_IP_REASSEMBLY_GET_REPLY);
2799 vl_api_ip_reassembly_enable_disable_reply_t *rmp;
2810 REPLY_MACRO (VL_API_IP_REASSEMBLY_ENABLE_DISABLE_REPLY);
2834 mp->_vl_msg_id = ntohs (VL_API_IP_PUNT_REDIRECT_DETAILS);
2887 #define vl_msg_name_crc_list 2888 #include <vnet/ip/ip.api.h> 2889 #undef vl_msg_name_crc_list 2894 #define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id); 2895 foreach_vl_msg_name_crc_ip;
2905 vl_msg_api_set_handlers(VL_API_##N, #n, \ 2906 vl_api_##n##_t_handler, \ 2908 vl_api_##n##_t_endian, \ 2909 vl_api_##n##_t_print, \ 2910 sizeof(vl_api_##n##_t), 1); 2918 am->
is_mp_safe[VL_API_IP_ROUTE_ADD_DEL_REPLY] = 1;
#define vec_validate(V, I)
Make sure vector is long enough for given index (no header, unspecified alignment) ...
ip_neighbor_flags_t flags
#define foreach_ip_interface_address(lm, a, sw_if_index, loop, body)
vnet_api_error_t ip6_full_reass_get(u32 *timeout_ms, u32 *max_reassemblies, u32 *max_reassembly_length, u32 *expire_walk_interval_ms)
get ip6 reassembly configuration
fib_protocol_t fp_proto
protocol type
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.
ip46_address_t frp_addr
The next-hop address.
static void send_ip_address_details(vpe_api_main_t *am, vl_api_registration_t *reg, const fib_prefix_t *pfx, u32 sw_if_index, u32 context)
Dump IP unnumbered configurations.
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)
static int nd_change_delete_callback(u32 pool_index, const mac_address_t *mac, u32 sw_if_index, const ip6_address_t *addr)
#define hash_set(h, key, value)
Register for IP6 ND resolution event on recieving NA reply MAC/IP info from ICMP6 Neighbor Solicitati...
static void vl_api_ip6nd_proxy_add_del_t_handler(vl_api_ip6nd_proxy_add_del_t *mp)
static void vl_api_ip_route_dump_t_handler(vl_api_ip_route_dump_t *mp)
fib_protocol_t ft_proto
Which protocol this table serves.
vnet_api_error_t ip4_full_reass_enable_disable(u32 sw_if_index, u8 enable_disable)
static void vl_api_ip_container_proxy_add_del_t_handler(vl_api_ip_container_proxy_add_del_t *mp)
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)
static walk_rc_t send_ip_punt_redirect_details(u32 rx_sw_if_index, const ip_punt_redirect_rx_t *ipr, void *arg)
void ip_prefix_decode(const vl_api_prefix_t *in, fib_prefix_t *out)
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)
int fib_api_route_add_del(u8 is_add, u8 is_multipath, u32 fib_index, const fib_prefix_t *prefix, fib_entry_flag_t entry_flags, fib_route_path_t *rpaths)
Adding routes from the API.
vnet_main_t * vnet_get_main(void)
void mac_address_encode(const mac_address_t *in, u8 *out)
static walk_rc_t send_proxy_arp_intfc_details(u32 sw_if_index, void *data)
static walk_rc_t send_proxy_arp_details(const ip4_address_t *lo_addr, const ip4_address_t *hi_addr, u32 fib_index, void *data)
vl_api_ip_neighbor_t neighbor
vnet_interface_main_t interface_main
ip46_type_t fib_proto_to_ip46(fib_protocol_t fproto)
Convert from fib_protocol to ip46_type.
void icmp6_send_router_solicitation(vlib_main_t *vm, u32 sw_if_index, u8 stop, icmp6_send_router_solicitation_params_t *params)
void ip4_punt_redirect_del(u32 rx_sw_if_index)
A pair of indicies, for the entry and interface resp.
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.
static void vl_api_ip_mtable_dump_t_handler(vl_api_ip_mtable_dump_t *mp)
int ip_neighbor_add(const ip46_address_t *ip, ip46_type_t type, const mac_address_t *mac, u32 sw_if_index, ip_neighbor_flags_t flags, u32 *stats_index)
void fib_api_path_encode(const fib_route_path_t *rpath, vl_api_fib_path_t *out)
Proxy ARP interface dump request.
clib_error_t * call_ip6_neighbor_callbacks(void *data, _vnet_ip6_neighbor_function_list_elt_t *elt)
#define REPLY_MACRO2(t, body)
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
Set max allowed ARP or ip6 neighbor entries request.
static f64 vlib_time_now(vlib_main_t *vm)
Dump IP multicast fib table.
u32 fib_table_get_index_for_sw_if_index(fib_protocol_t proto, u32 sw_if_index)
Get the index of the FIB bound to the interface.
static void vl_api_send_msg(vl_api_registration_t *rp, u8 *elem)
clib_error_t * ip4_set_arp_limit(u32 arp_limit)
ip6_neighbor_t * ip6_neighbors_entries(u32 sw_if_index)
void ip6_address_decode(const vl_api_ip6_address_t in, ip6_address_t *out)
u32 index_t
A Data-Path Object is an object that represents actions that are applied to packets are they are swit...
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
static int nd_change_data_callback(u32 pool_index, const mac_address_t *new_mac, u32 sw_if_index, const ip6_address_t *address)
vl_api_punt_redirect_t punt
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 vnet_sw_interface_t * vnet_get_sw_interface(vnet_main_t *vnm, u32 sw_if_index)
const fib_prefix_t * fib_entry_get_prefix(fib_node_index_t fib_entry_index)
static vl_api_ip_neighbor_flags_t ip_neighbor_flags_encode(ip_neighbor_flags_t f)
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.
void mfib_api_path_encode(const fib_route_path_t *in, vl_api_mfib_path_t *out)
IPv6 router advertisement config request.
vl_api_registration_t * reg
static void vl_api_proxy_arp_intfc_dump_t_handler(vl_api_proxy_arp_intfc_dump_t *mp)
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)
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)
void * vl_msg_api_alloc(int nbytes)
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.
index_t ip_punt_redirect_find(fib_protocol_t fproto, u32 rx_sw_if_index)
struct vl_api_ip_mfib_dump_ctx_t_ vl_api_ip_mfib_dump_ctx_t
#define vec_reset_length(v)
Reset vector length to zero NULL-pointer tolerant.
int ip_neighbor_del(const ip46_address_t *ip, ip46_type_t type, u32 sw_if_index)
#define clib_memcpy(d, s, n)
enum walk_rc_t_ walk_rc_t
Walk return code.
static int vl_api_can_send_msg(vl_api_registration_t *rp)
static void handle_ip4_arp_event(u32 pool_index)
fib_node_index_t mfib_table_entry_paths_update(u32 fib_index, const mfib_prefix_t *prefix, mfib_source_t source, const fib_route_path_t *rpaths)
Proxy ARP add / del interface request.
#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...
vl_api_interface_index_t sw_if_index
Start / stop sending router solicitation.
void ip_neighbor_scan_enable_disable(ip_neighbor_scan_arg_t *arg)
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...
clib_error_t * vnet_ip_container_proxy_add_del(vnet_ip_container_proxy_args_t *args)
enum ip_neighbor_flags_t_ ip_neighbor_flags_t
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).
void proxy_arp_walk(proxy_arp_walk_t cb, void *data)
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.
void fib_table_flush(u32 fib_index, fib_protocol_t proto, fib_source_t source)
Flush all entries from a table for the source.
void vl_api_ip_route_add_del_t_handler(vl_api_ip_route_add_del_t *mp)
Aggregate 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)
IPv6 interface enable / disable request.
u32 mfib_entry_get_stats_index(fib_node_index_t fib_entry_index)
struct proxy_arp_walk_ctx_t_ proxy_arp_walk_ctx_t
struct mfib_table_t_ * mfibs
Vector of MFIBs.
u32 fib_table_find(fib_protocol_t proto, u32 table_id)
Get the index of the FIB for a Table-ID.
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)
clib_error_t * ip6_probe_neighbor(vlib_main_t *vm, ip6_address_t *dst, u32 sw_if_index, u8 refresh)
int fib_entry_cmp_for_sort(void *i1, void *i2)
ip46_type_t ip_address_decode(const vl_api_address_t *in, ip46_address_t *out)
vl_api_address_with_prefix_t prefix
vl_api_fib_path_t paths[n_paths]
static void vl_api_ip_scan_neighbor_enable_disable_t_handler(vl_api_ip_scan_neighbor_enable_disable_t *mp)
u32 mfib_entry_get_fib_index(fib_node_index_t mfib_entry_index)
Configure IP source and L4 port-range check.
int mfib_api_path_decode(vl_api_mfib_path_t *in, fib_route_path_t *out)
static int api_mroute_add_del_t_handler(vl_api_ip_mroute_add_del_t *mp, u32 *stats_index)
vl_api_fib_path_type_t type
Set interface source check request.
vnet_api_error_t api_errno
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.
IP probe neighbor address on an interface by sending an ARP request (for IP4) or ICMP6 Neighbor Solic...
static fib_table_walk_rc_t vl_api_ip_fib_dump_walk(fib_node_index_t fei, void *arg)
uword * fib_index_by_table_id
Hash table mapping table id to fib index.
static mfib_itf_t * mfib_itf_get(index_t mi)
Get the MFIB interface representation.
int vnet_proxy_arp_enable_disable(vnet_main_t *vnm, u32 sw_if_index, u8 enable)
static int mfib_route_dump_walk(fib_node_index_t fei, void *arg)
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.
ip4_address_t ip4_address
static void vl_api_ip_mroute_dump_t_handler(vl_api_ip_mroute_dump_t *mp)
void vl_api_ip_table_add_del_t_handler(vl_api_ip_table_add_del_t *mp)
static u32 mroute_add_del_handler(u8 is_add, u8 is_multipath, u32 fib_index, const mfib_prefix_t *prefix, u32 entry_flags, u32 rpf_id, fib_route_path_t *rpaths)
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)
IP Multicast Route Details.
fib_node_index_t * entries
#define pool_put(P, E)
Free an object E in pool P.
u32 max_reassembly_length
int mfib_entry_cmp_for_sort(void *i1, void *i2)
vnet_sw_interface_flags_t flags
Proxy ARP dump details reply.
IP FIB table entry response.
fib_node_index_t * entries
Tell client about an IP4 ARP resolution event or MAC/IP info from ARP requests in L2 BDs...
static_always_inline int mac_address_equal(const mac_address_t *a, const mac_address_t *b)
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)
void ra_set_publisher_node(uword node_index, uword event_type)
IOAM enable : Enable in-band OAM.
struct _vl_api_ip6_nd_event * nd_events
clib_error_t * ip4_probe_neighbor(vlib_main_t *vm, ip4_address_t *dst, u32 sw_if_index, u8 refresh)
static void vl_api_ip_unnumbered_dump_t_handler(vl_api_ip_unnumbered_dump_t *mp)
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 wc_nd_set_publisher_node(uword node_index, uword event_type)
vl_api_registration_t * reg
#define BAD_SW_IF_INDEX_LABEL
Proxy ARP interface dump details reply.
static int arp_change_data_callback(u32 pool_index, const mac_address_t *mac, u32 sw_if_index, const ip4_address_t *address)
static uword vnet_sw_if_index_is_api_valid(u32 sw_if_index)
void mfib_table_walk(u32 fib_index, fib_protocol_t proto, mfib_table_walk_fn_t fn, void *ctx)
Walk all entries in a FIB table N.B: This is NOT safe to deletes.
int fib_entry_is_sourced(fib_node_index_t fib_entry_index, fib_source_t source)
#define VLIB_REGISTER_NODE(x,...)
Set the ip flow hash config for a fib request.
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)
static_always_inline ip_punt_redirect_rx_t * ip_punt_redirect_get(index_t rrxi)
static void vl_api_ip_container_proxy_dump_t_handler(vl_api_ip_container_proxy_dump_t *mp)
static uword ip6_address_is_zero(const ip6_address_t *a)
enum fib_table_walk_rc_t_ fib_table_walk_rc_t
return code controlling how a table walk proceeds
#define vec_free(V)
Free vector's memory (no header).
struct vl_api_ip_fib_dump_walk_ctx_t_ vl_api_ip_fib_dump_walk_ctx_t
IP4 punt redirect per-rx interface configuration redirect punted traffic to another location...
static int ethernet_mac_address_equal(const u8 *a, const u8 *b)
u8 * ft_desc
Table description.
void ip_mprefix_encode(const mfib_prefix_t *in, vl_api_mprefix_t *out)
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...)
vnet_api_error_t ip4_full_reass_get(u32 *timeout_ms, u32 *max_reassemblies, u32 *max_reassembly_length, u32 *expire_walk_interval_ms)
get ip4 reassembly configuration
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)
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.
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)
void ip_container_proxy_walk(ip_container_proxy_cb_t cb, void *ctx)
int vnet_add_del_ip4_arp_change_event(vnet_main_t *vnm, arp_change_event_cb_t data_callback, u32 pid, void *address_arg, uword node_index, uword type_opaque, uword data, int is_add)
static void vl_api_proxy_arp_dump_t_handler(vl_api_proxy_arp_dump_t *mp)
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
clib_error_t * enable_ip6_interface(vlib_main_t *vm, u32 sw_if_index)
IP unnumbered configurations.
int vnet_proxy_arp_add_del(ip4_address_t *lo_addr, ip4_address_t *hi_addr, u32 fib_index, int is_del)
Aggregate 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)
u32 max_reassembly_length
void ip6_punt_redirect_del(u32 rx_sw_if_index)
u32 unnumbered_sw_if_index
static void vl_api_ioam_disable_t_handler(vl_api_ioam_disable_t *mp)
#define foreach_flow_hash_bit
int vnet_add_del_ip6_nd_change_event(vnet_main_t *vnm, ip6_nd_change_event_cb_t data_callback, u32 pid, void *address_arg, uword node_index, uword type_opaque, uword data, int is_add)
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)
IP neighbor add / del request.
#define pool_put_index(p, i)
Free pool element with given index.
Dump IP multicast fib table.
static void vl_api_ip_table_dump_t_handler(vl_api_ip_table_dump_t *mp)
ip6_address_t ip6_address
int mfib_signal_send_one(struct vl_api_registration_ *reg, u32 context)
ip_lookup_main_t lookup_main
static int arp_change_delete_callback(u32 pool_index, const mac_address_t *mac, u32 sw_if_index, const ip4_address_t *address)
static int ip_container_proxy_send_details(const fib_prefix_t *pfx, u32 sw_if_index, void *args)
void fib_table_walk(u32 fib_index, fib_protocol_t proto, fib_table_walk_fn_t fn, void *ctx)
Walk all entries in a FIB table N.B: This is NOT safe to deletes.
static ip_neighbor_flags_t ip_neighbor_flags_decode(vl_api_ip_neighbor_flags_t v)
u32 fib_table_get_table_id(u32 fib_index, fib_protocol_t proto)
Get the Table-ID of the FIB from protocol and index.
IPv6 router advertisement prefix config request.
IPv6 ND proxy details returned after request.
vnet_api_error_t ip4_full_reass_set(u32 timeout_ms, u32 max_reassemblies, u32 max_reassembly_length, u32 expire_walk_interval_ms)
set ip4 reassembly configuration
void proxy_arp_intfc_walk(proxy_arp_intf_walk_t cb, void *data)
static void set_ip4_flow_hash(vl_api_set_ip_flow_hash_t *mp)
int fib_api_path_decode(vl_api_fib_path_t *in, fib_route_path_t *out)
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)
Path encode context to use when walking a path-list to encode paths.
static void vl_api_ip_source_check_interface_add_del_t_handler(vl_api_ip_source_check_interface_add_del_t *mp)
static void vl_api_ioam_enable_t_handler(vl_api_ioam_enable_t *mp)
struct mfib_table_t_ * mfibs
Vector of MFIBs.
static void vl_api_ip_probe_neighbor_t_handler(vl_api_ip_probe_neighbor_t *mp)
fib_protocol_t mft_proto
Which protocol this table serves.
#define clib_error_report(e)
void ip6_address_encode(const ip6_address_t *in, vl_api_ip6_address_t out)
u32 mft_table_id
Table ID (hash key) for this FIB.
From the control plane API.
u32 mfib_table_get_table_id(u32 fib_index, fib_protocol_t proto)
Get the Table-ID of the FIB from protocol and index.
static uword ip6_address_is_equal(const ip6_address_t *a, const ip6_address_t *b)
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.
u32 fib_table_entry_get_stats_index(u32 fib_index, const fib_prefix_t *prefix)
Return the stats index for a FIB entry.
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)
IP neighboors dump response.
static vlib_main_t * vlib_get_main(void)
vl_api_punt_redirect_t punt
static void send_ip_mtable_details(vl_api_registration_t *reg, u32 context, const mfib_table_t *mfib_table)
fib_route_path_t * rpaths
void ip_prefix_encode(const fib_prefix_t *in, vl_api_prefix_t *out)
struct _vlib_node_registration vlib_node_registration_t
int mfib_api_table_id_decode(fib_protocol_t fproto, u32 table_id, u32 *fib_index)
fib_protocol_t fp_proto
protocol type
static void setup_message_id_table(api_main_t *am)
vl_api_ip_neighbor_t neighbor
static void * vlib_process_get_event_data(vlib_main_t *vm, uword *return_event_type_opaque)
int fib_api_table_id_decode(fib_protocol_t fproto, u32 table_id, u32 *fib_index)
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)
Enable/disable periodic IP neighbor scan.
fib_route_path_t * fib_entry_encode(fib_node_index_t fib_entry_index)
#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)
const mfib_prefix_t * mfib_entry_get_prefix(fib_node_index_t mfib_entry_index)
#define INDEX_INVALID
Invalid index - used when no index is known blazoned capitals INVALID speak volumes where ~0 does not...
static fib_protocol_t fib_ip_proto(bool is_ip6)
Convert from boolean is_ip6 to FIB protocol.
u32 mfib_table_find(fib_protocol_t proto, u32 table_id)
Get the index of the FIB for a Table-ID.
ip6_neighbor_public_main_t ip6_neighbor_public_main
#define vec_sort_with_function(vec, f)
Sort a vector using the supplied element comparison function.
void ip4_address_decode(const vl_api_ip4_address_t in, ip4_address_t *out)
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 clib_error_get_code(err)
vnet_api_error_t ip6_full_reass_set(u32 timeout_ms, u32 max_reassemblies, u32 max_reassembly_length, u32 expire_walk_interval_ms)
set ip6 reassembly configuration
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)
static clib_error_t * want_ip4_arp_events_reaper(u32 client_index)
void ip_address_encode(const ip46_address_t *in, ip46_type_t type, vl_api_address_t *out)
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 info from ICMP6 Neighbor Solicitation in L2 BDs...
Dump IP routes from a table.
static vnet_sw_interface_flags_t vnet_sw_interface_get_flags(vnet_main_t *vnm, u32 sw_if_index)
u32 mfi_sw_if_index
The SW IF index that this MFIB interface represents.
u8 * is_mp_safe
Message is mp safe vector.
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)
clib_error_t * vnet_sw_interface_set_flags(vnet_main_t *vnm, u32 sw_if_index, vnet_sw_interface_flags_t flags)
ip_neighbor_flags_t flags
Register for IP4 ARP resolution event on receing ARP reply or MAC/IP info from ARP requests in L2 BDs...
struct fib_table_t_ * fibs
Vector of FIBs.
Enable/disable reassembly feature.
void ip4_address_encode(const ip4_address_t *in, vl_api_ip4_address_t out)
#define vec_foreach(var, vec)
Vector iterator.
clib_error_t * clear_ioam_rewrite_fn(void)
static void vl_api_ip_punt_redirect_dump_t_handler(vl_api_ip_punt_redirect_dump_t *mp)
void ip_table_create(fib_protocol_t fproto, u32 table_id, u8 is_api, const u8 *name)
vnet_api_error_t ip6_full_reass_enable_disable(u32 sw_if_index, u8 enable_disable)
void fib_path_list_walk_w_ext(fib_node_index_t path_list_index, const fib_path_ext_list_t *ext_list, fib_path_list_walk_w_ext_fn_t func, void *ctx)
struct ip_punt_redirect_walk_ctx_t_ ip_punt_redirect_walk_ctx_t
static void send_ip_neighbor_details(u32 sw_if_index, const ip46_address_t *ip_address, const mac_address_t *mac, ip_neighbor_flags_t flags, vl_api_registration_t *reg, u32 context)
fib_route_path_t * mfib_entry_encode(fib_node_index_t mfib_entry_index)
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)
static void send_ip_table_details(vpe_api_main_t *am, vl_api_registration_t *reg, u32 context, const fib_table_t *table)
u32 expire_walk_interval_ms
static void * ip_interface_address_get_address(ip_lookup_main_t *lm, ip_interface_address_t *a)
_vnet_ip6_neighbor_function_list_elt_t * ra_report_functions
static int ip_route_add_del_t_handler(vl_api_ip_route_add_del_t *mp, u32 *stats_index)
struct apt_ip6_fib_show_ctx_t_ api_ip6_fib_show_ctx_t
clib_error_t * disable_ip6_interface(vlib_main_t *vm, u32 sw_if_index)
fib_node_index_t mfs_entry
void ip_mprefix_decode(const vl_api_mprefix_t *in, mfib_prefix_t *out)
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)
vl_api_registration_t * reg
vpe_api_main_t vpe_api_main
void ip_punt_redirect_walk(fib_protocol_t fproto, ip_punt_redirect_walk_cb_t cb, void *ctx)
void mfib_table_entry_paths_remove(u32 fib_index, const mfib_prefix_t *prefix, mfib_source_t source, const fib_route_path_t *rpaths)
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
void mac_address_decode(const u8 *in, mac_address_t *out)
Conversion functions to/from (decode/encode) API types to VPP internal types.
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
static void send_ip_mroute_details(vpe_api_main_t *am, vl_api_registration_t *reg, u32 context, fib_node_index_t mfib_entry_index)
static void send_ip_route_details(vpe_api_main_t *am, vl_api_registration_t *reg, u32 context, fib_node_index_t fib_entry_index)
int vnet_feature_enable_disable(const char *arc_name, const char *node_name, u32 sw_if_index, int enable_disable, void *feature_config, u32 n_feature_config_bytes)
#define VALIDATE_SW_IF_INDEX(mp)
fib_path_list_walk_rc_t fib_path_encode(fib_node_index_t path_list_index, fib_node_index_t path_index, const fib_path_ext_t *path_ext, void *args)
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)
static void send_ip_unnumbered_details(vpe_api_main_t *am, vl_api_registration_t *reg, u32 sw_if_index, u32 ip_sw_if_index, u32 context)
struct ip_container_proxy_walk_ctx_t_ ip_container_proxy_walk_ctx_t
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.