FIB path preference
[vpp.git] / src / vnet / ip / ip_api.c
index 9c9cb4a..d00ae76 100644 (file)
@@ -716,7 +716,8 @@ add_del_route_t_handler (u8 is_multipath,
                         const ip46_address_t * next_hop,
                         u32 next_hop_sw_if_index,
                         u8 next_hop_fib_index,
-                        u32 next_hop_weight,
+                        u16 next_hop_weight,
+                        u16 next_hop_preference,
                         mpls_label_t next_hop_via_label,
                         mpls_label_t * next_hop_out_label_stack)
 {
@@ -729,6 +730,7 @@ add_del_route_t_handler (u8 is_multipath,
     .frp_sw_if_index = next_hop_sw_if_index,
     .frp_fib_index = next_hop_fib_index,
     .frp_weight = next_hop_weight,
+    .frp_preference = next_hop_preference,
     .frp_label_stack = next_hop_out_label_stack,
   };
   fib_route_path_t *paths = NULL;
@@ -971,6 +973,7 @@ ip4_add_del_route_t_handler (vl_api_ip_add_del_route_t * mp)
                                   ntohl (mp->next_hop_sw_if_index),
                                   next_hop_fib_index,
                                   mp->next_hop_weight,
+                                  mp->next_hop_preference,
                                   ntohl (mp->next_hop_via_label),
                                   label_stack));
 }
@@ -1029,6 +1032,7 @@ ip6_add_del_route_t_handler (vl_api_ip_add_del_route_t * mp)
                                   &nh, ntohl (mp->next_hop_sw_if_index),
                                   next_hop_fib_index,
                                   mp->next_hop_weight,
+                                  mp->next_hop_preference,
                                   ntohl (mp->next_hop_via_label),
                                   label_stack));
 }
@@ -1336,9 +1340,17 @@ static void
 set_ip6_flow_hash (vl_api_set_ip_flow_hash_t * mp)
 {
   vl_api_set_ip_flow_hash_reply_t *rmp;
-  int rv = VNET_API_ERROR_UNIMPLEMENTED;
+  int rv;
+  u32 table_id;
+  flow_hash_config_t flow_hash_config = 0;
+
+  table_id = ntohl (mp->vrf_id);
+
+#define _(a,b) if (mp->a) flow_hash_config |= b;
+  foreach_flow_hash_bit;
+#undef _
 
-  clib_warning ("unimplemented...");
+  rv = vnet_set_ip6_flow_hash (table_id, flow_hash_config);
 
   REPLY_MACRO (VL_API_SET_IP_FLOW_HASH_REPLY);
 }