- range = (port_range_t *) rwh;
- /* Have we deleted all ranges yet? */
- for (i = 0; i < srm->ranges_per_adjacency; i++)
+ doublebreak2: ;
+ }
+
+ memset (&a, 0, sizeof(a));
+ a.flags = IP4_ROUTE_FLAG_FIB_INDEX;
+ a.table_index_or_table_id = fib_index;
+ a.dst_address = address[0];
+ a.dst_address_length = length;
+ a.add_adj = &template_adj;
+ a.n_add_adj = 1;
+
+ ip4_add_del_route (im, &a);
+ return 0;
+}
+
+int remove_port_range_adjacency(ip4_address_t * address,
+ u32 length,
+ u32 adj_index,
+ u16 * low_ports,
+ u16 * high_ports,
+ u32 fib_index)
+{
+ ip_adjacency_t * adj;
+ int i, j, k;
+ source_range_check_main_t * srm = &source_range_check_main;
+ ip4_main_t * im = &ip4_main;
+ ip_lookup_main_t * lm = &im->lookup_main;
+ protocol_port_range_t * range;
+ u8 *rwh;
+
+ adj = ip_get_adjacency (lm, adj_index);
+ if (adj->lookup_next_index != IP_LOOKUP_NEXT_ICMP_ERROR) /* _ICMP_ERROR is a dummy placeholder */
+ return VNET_API_ERROR_INCORRECT_ADJACENCY_TYPE;
+
+ rwh = (u8 *)(&adj->rewrite_header);
+
+ for (i = 0; i < vec_len (low_ports); i++)
+ {
+ range = (protocol_port_range_t *) rwh;
+ for (j = 0; j < srm->ranges_per_adjacency; j++)