- }
- }
-
- if (vrf_id_set == 0)
- {
- errmsg ("missing vrf id");
- return -99;
- }
-
- M (SET_IP_FLOW_HASH, mp);
- mp->src = src;
- mp->dst = dst;
- mp->sport = sport;
- mp->dport = dport;
- mp->proto = proto;
- mp->reverse = reverse;
- mp->vrf_id = ntohl (vrf_id);
- mp->is_ipv6 = is_ipv6;
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_sw_interface_ip6_enable_disable (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_sw_interface_ip6_enable_disable_t *mp;
- u32 sw_if_index;
- u8 sw_if_index_set = 0;
- u8 enable = 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, "enable"))
- enable = 1;
- else if (unformat (i, "disable"))
- enable = 0;
- 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 (SW_INTERFACE_IP6_ENABLE_DISABLE, mp);
-
- mp->sw_if_index = ntohl (sw_if_index);
- mp->enable = enable;
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_ip6nd_proxy_add_del (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_ip6nd_proxy_add_del_t *mp;
- u32 sw_if_index = ~0;
- u8 v6_address_set = 0;
- vl_api_ip6_address_t v6address;
- u8 is_del = 0;
- int ret;
-
- /* Parse args required to build the message */
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
- ;
- else if (unformat (i, "sw_if_index %d", &sw_if_index))
- ;
- else if (unformat (i, "%U", unformat_vl_api_ip6_address, &v6address))
- v6_address_set = 1;
- if (unformat (i, "del"))
- is_del = 1;
- else
- {
- clib_warning ("parse error '%U'", format_unformat_error, i);
- return -99;
- }
- }
-
- if (sw_if_index == ~0)
- {
- errmsg ("missing interface name or sw_if_index");
- return -99;
- }
- if (!v6_address_set)
- {
- errmsg ("no address set");
- return -99;
- }
-
- /* Construct the API message */
- M (IP6ND_PROXY_ADD_DEL, mp);
-
- mp->is_del = is_del;
- mp->sw_if_index = ntohl (sw_if_index);
- clib_memcpy (mp->ip, v6address, sizeof (v6address));
-
- /* send it... */
- S (mp);
-
- /* Wait for a reply, return good/bad news */
- W (ret);
- return ret;
-}
-
-static int
-api_ip6nd_proxy_dump (vat_main_t * vam)
-{
- vl_api_ip6nd_proxy_dump_t *mp;
- vl_api_control_ping_t *mp_ping;
- int ret;
-
- M (IP6ND_PROXY_DUMP, mp);
-
- S (mp);
-
- /* Use a control ping for synchronization */
- MPING (CONTROL_PING, mp_ping);
- S (mp_ping);
-
- W (ret);
- return ret;
-}
-
-static void vl_api_ip6nd_proxy_details_t_handler
- (vl_api_ip6nd_proxy_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
-
- print (vam->ofp, "host %U sw_if_index %d",
- format_vl_api_ip6_address, mp->ip, ntohl (mp->sw_if_index));
-}
-
-static void vl_api_ip6nd_proxy_details_t_handler_json
- (vl_api_ip6nd_proxy_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
- struct in6_addr ip6;
- vat_json_node_t *node = NULL;
-
- if (VAT_JSON_ARRAY != vam->json_tree.type)
- {
- ASSERT (VAT_JSON_NONE == vam->json_tree.type);
- vat_json_init_array (&vam->json_tree);
- }
- node = vat_json_array_add (&vam->json_tree);
-
- vat_json_init_object (node);
- vat_json_object_add_uint (node, "sw_if_index", ntohl (mp->sw_if_index));
-
- clib_memcpy (&ip6, mp->ip, sizeof (ip6));
- vat_json_object_add_ip6 (node, "host", ip6);
-}
-
-static int
-api_sw_interface_ip6nd_ra_prefix (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_sw_interface_ip6nd_ra_prefix_t *mp;
- u32 sw_if_index;
- u8 sw_if_index_set = 0;
- u8 v6_address_set = 0;
- vl_api_prefix_t pfx;
- u8 use_default = 0;
- u8 no_advertise = 0;
- u8 off_link = 0;
- u8 no_autoconfig = 0;
- u8 no_onlink = 0;
- u8 is_no = 0;
- u32 val_lifetime = 0;
- u32 pref_lifetime = 0;
- int ret;
-
- /* Parse args required to build the message */
- 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, "%U", unformat_vl_api_prefix, &pfx))
- v6_address_set = 1;
- else if (unformat (i, "val_life %d", &val_lifetime))
- ;
- else if (unformat (i, "pref_life %d", &pref_lifetime))
- ;
- else if (unformat (i, "def"))
- use_default = 1;
- else if (unformat (i, "noadv"))
- no_advertise = 1;
- else if (unformat (i, "offl"))
- off_link = 1;
- else if (unformat (i, "noauto"))
- no_autoconfig = 1;
- else if (unformat (i, "nolink"))
- no_onlink = 1;
- else if (unformat (i, "isno"))
- is_no = 1;
- 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;