-api_classify_add_del_session (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_classify_add_del_session_t *mp;
- int is_add = 1;
- u32 table_index = ~0;
- u32 hit_next_index = ~0;
- u32 opaque_index = ~0;
- u8 *match = 0;
- i32 advance = 0;
- u32 skip_n_vectors = 0;
- u32 match_n_vectors = 0;
- u32 action = 0;
- u32 metadata = 0;
- int ret;
-
- /*
- * Warning: you have to supply skip_n and match_n
- * because the API client cant simply look at the classify
- * table object.
- */
-
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "del"))
- is_add = 0;
- else if (unformat (i, "hit-next %U", api_unformat_ip_next_index,
- &hit_next_index))
- ;
- else if (unformat (i, "l2-hit-next %U", unformat_l2_next_index,
- &hit_next_index))
- ;
- else if (unformat (i, "acl-hit-next %U", api_unformat_acl_next_index,
- &hit_next_index))
- ;
- else if (unformat (i, "policer-hit-next %d", &hit_next_index))
- ;
- else if (unformat (i, "%U", unformat_policer_precolor, &opaque_index))
- ;
- else if (unformat (i, "opaque-index %d", &opaque_index))
- ;
- else if (unformat (i, "skip_n %d", &skip_n_vectors))
- ;
- else if (unformat (i, "match_n %d", &match_n_vectors))
- ;
- else if (unformat (i, "match %U", api_unformat_classify_match,
- &match, skip_n_vectors, match_n_vectors))
- ;
- else if (unformat (i, "advance %d", &advance))
- ;
- else if (unformat (i, "table-index %d", &table_index))
- ;
- else if (unformat (i, "action set-ip4-fib-id %d", &metadata))
- action = 1;
- else if (unformat (i, "action set-ip6-fib-id %d", &metadata))
- action = 2;
- else if (unformat (i, "action %d", &action))
- ;
- else if (unformat (i, "metadata %d", &metadata))
- ;
- else
- break;
- }
-
- if (table_index == ~0)
- {
- errmsg ("Table index required");
- return -99;
- }
-
- if (is_add && match == 0)
- {
- errmsg ("Match value required");
- return -99;
- }
-
- M2 (CLASSIFY_ADD_DEL_SESSION, mp, vec_len (match));
-
- mp->is_add = is_add;
- mp->table_index = ntohl (table_index);
- mp->hit_next_index = ntohl (hit_next_index);
- mp->opaque_index = ntohl (opaque_index);
- mp->advance = ntohl (advance);
- mp->action = action;
- mp->metadata = ntohl (metadata);
- mp->match_len = ntohl (vec_len (match));
- clib_memcpy (mp->match, match, vec_len (match));
- vec_free (match);
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_classify_set_interface_ip_table (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_classify_set_interface_ip_table_t *mp;
- u32 sw_if_index;
- int sw_if_index_set;
- u32 table_index = ~0;
- u8 is_ipv6 = 0;
- int ret;
-
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
- sw_if_index_set = 1;
- else if (unformat (i, "sw_if_index %d", &sw_if_index))
- sw_if_index_set = 1;
- else if (unformat (i, "table %d", &table_index))
- ;
- else
- {
- clib_warning ("parse error '%U'", format_unformat_error, i);
- return -99;
- }
- }
-
- if (sw_if_index_set == 0)
- {
- errmsg ("missing interface name or sw_if_index");
- return -99;
- }
-
-
- M (CLASSIFY_SET_INTERFACE_IP_TABLE, mp);
-
- mp->sw_if_index = ntohl (sw_if_index);
- mp->table_index = ntohl (table_index);
- mp->is_ipv6 = is_ipv6;
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_classify_set_interface_l2_tables (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_classify_set_interface_l2_tables_t *mp;
- u32 sw_if_index;
- int sw_if_index_set;
- u32 ip4_table_index = ~0;
- u32 ip6_table_index = ~0;
- u32 other_table_index = ~0;
- u32 is_input = 1;
- int ret;
-
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
- sw_if_index_set = 1;
- else if (unformat (i, "sw_if_index %d", &sw_if_index))
- sw_if_index_set = 1;
- else if (unformat (i, "ip4-table %d", &ip4_table_index))
- ;
- else if (unformat (i, "ip6-table %d", &ip6_table_index))
- ;
- else if (unformat (i, "other-table %d", &other_table_index))
- ;
- else if (unformat (i, "is-input %d", &is_input))
- ;
- else
- {
- clib_warning ("parse error '%U'", format_unformat_error, i);
- return -99;
- }
- }
-
- if (sw_if_index_set == 0)
- {
- errmsg ("missing interface name or sw_if_index");
- return -99;
- }
-
-
- M (CLASSIFY_SET_INTERFACE_L2_TABLES, mp);
-
- mp->sw_if_index = ntohl (sw_if_index);
- mp->ip4_table_index = ntohl (ip4_table_index);
- mp->ip6_table_index = ntohl (ip6_table_index);
- mp->other_table_index = ntohl (other_table_index);
- mp->is_input = (u8) is_input;
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_set_ipfix_exporter (vat_main_t * vam)