cnat: Add maglev support
[vpp.git] / src / plugins / cnat / cnat_api.c
index 1c6ef7b..99d9c72 100644 (file)
@@ -67,6 +67,7 @@ cnat_endpoint_tuple_decode (const vl_api_cnat_endpoint_tuple_t * in,
   if (rv)
     return rv;
   rv = cnat_endpoint_decode (&in->dst_ep, &out->dst_ep);
+  out->ep_flags = in->flags;
   return rv;
 }
 
@@ -95,6 +96,7 @@ vl_api_cnat_translation_update_t_handler (vl_api_cnat_translation_update_t
   u8 flags;
   int rv = 0;
   u32 pi, n_paths;
+  cnat_lb_type_t lb_type;
 
   rv = ip_proto_decode (mp->translation.ip_proto, &ip_proto);
 
@@ -119,7 +121,9 @@ vl_api_cnat_translation_update_t_handler (vl_api_cnat_translation_update_t
   flags = mp->translation.flags;
   if (!mp->translation.is_real_ip)
     flags |= CNAT_FLAG_EXCLUSIVE;
-  id = cnat_translation_update (&vip, ip_proto, paths, flags);
+
+  lb_type = (cnat_lb_type_t) mp->translation.lb_type;
+  id = cnat_translation_update (&vip, ip_proto, paths, flags, lb_type);
 
   vec_free (paths);
 
@@ -172,12 +176,14 @@ cnat_translation_send_details (u32 cti, void *args)
   mp->translation.id = clib_host_to_net_u32 (cti);
   cnat_endpoint_encode (&ct->ct_vip, &mp->translation.vip);
   mp->translation.ip_proto = ip_proto_encode (ct->ct_proto);
+  mp->translation.lb_type = (vl_api_cnat_lb_type_t) ct->lb_type;
 
   path = mp->translation.paths;
   vec_foreach (trk, ct->ct_paths)
   {
     cnat_endpoint_encode (&trk->ct_ep[VLIB_TX], &path->dst_ep);
     cnat_endpoint_encode (&trk->ct_ep[VLIB_RX], &path->src_ep);
+    path->flags = trk->ct_flags;
     path++;
   }