aarch64 CPU arch / ThunderX platform initial support
[vpp.git] / vpp / api / api.c
index 7bbb5c0..9f3da21 100644 (file)
@@ -52,7 +52,9 @@
 #include <vnet/mpls-gre/mpls.h>
 #include <vnet/dhcp/proxy.h>
 #include <vnet/dhcp/client.h>
+#if IPV6SR > 0
 #include <vnet/sr/sr.h>
+#endif
 #include <vnet/dhcpv6/proxy.h>
 #include <vlib/vlib.h>
 #include <vlib/unix/unix.h>
@@ -73,7 +75,9 @@
 #include <vnet/l2/l2_fib.h>
 
 #if DPDK > 0
+#if IPSEC > 0
 #include <vnet/ipsec/ipsec.h>
+#endif /* IPSEC */
 #include <vnet/devices/virtio/vhost-user.h>
 #endif
 
@@ -271,6 +275,7 @@ _(L2TPV3_INTERFACE_ENABLE_DISABLE, l2tpv3_interface_enable_disable)     \
 _(L2TPV3_SET_LOOKUP_KEY, l2tpv3_set_lookup_key)                         \
 _(SW_IF_L2TPV3_TUNNEL_DUMP, sw_if_l2tpv3_tunnel_dump)                   \
 _(VXLAN_ADD_DEL_TUNNEL, vxlan_add_del_tunnel)                           \
+_(VXLAN_TUNNEL_DUMP, vxlan_tunnel_dump)                                 \
 _(L2_FIB_CLEAR_TABLE, l2_fib_clear_table)                               \
 _(L2_INTERFACE_EFP_FILTER, l2_interface_efp_filter)                     \
 _(L2_INTERFACE_VLAN_TAG_REWRITE, l2_interface_vlan_tag_rewrite)         \
@@ -3275,6 +3280,9 @@ static void vl_api_set_arp_neighbor_limit_t_handler (vl_api_set_arp_neighbor_lim
 static void vl_api_sr_tunnel_add_del_t_handler
 (vl_api_sr_tunnel_add_del_t *mp)
 {
+#if IPV6SR == 0
+    clib_warning ("unimplemented");
+#else
     ip6_sr_add_del_tunnel_args_t _a, *a=&_a;
     int rv = 0;
     vl_api_sr_tunnel_add_del_reply_t * rmp;
@@ -3318,6 +3326,7 @@ static void vl_api_sr_tunnel_add_del_t_handler
 out:
 
     REPLY_MACRO(VL_API_SR_TUNNEL_ADD_DEL_REPLY);
+#endif
 }
 
 #define foreach_classify_add_del_table_field    \
@@ -4118,6 +4127,55 @@ out:
     }));
 }
 
+static void send_vxlan_tunnel_details
+(vxlan_tunnel_t * t, unix_shared_memory_queue_t * q)
+{
+    vl_api_vxlan_tunnel_details_t * rmp;
+    ip4_main_t * im = &ip4_main;
+
+    rmp = vl_msg_api_alloc (sizeof (*rmp));
+    memset (rmp, 0, sizeof (*rmp));
+    rmp->_vl_msg_id = ntohs(VL_API_VXLAN_TUNNEL_DETAILS);
+    rmp->src_address = t->src.data_u32;
+    rmp->dst_address = t->dst.data_u32;
+    rmp->encap_vrf_id = htonl(im->fibs[t->encap_fib_index].table_id);
+    rmp->vni = htonl(t->vni);
+    rmp->decap_next_index = htonl(t->decap_next_index);
+    rmp->sw_if_index = htonl(t->sw_if_index);
+
+    vl_msg_api_send_shmem (q, (u8 *)&rmp);
+}
+
+static void vl_api_vxlan_tunnel_dump_t_handler
+(vl_api_vxlan_tunnel_dump_t * mp)
+{
+    unix_shared_memory_queue_t * q;
+    vxlan_main_t * vxm = &vxlan_main;
+    vxlan_tunnel_t * t;
+    u32 sw_if_index;
+
+    q = vl_api_client_index_to_input_queue (mp->client_index);
+    if (q == 0) {
+        return;
+    }
+
+    sw_if_index = ntohl(mp->sw_if_index);
+
+    if (~0 == sw_if_index) {
+        pool_foreach (t, vxm->tunnels,
+        ({
+            send_vxlan_tunnel_details(t, q);
+        }));
+    } else {
+        if ((sw_if_index >= vec_len(vxm->tunnel_index_by_sw_if_index)) ||
+                (~0 == vxm->tunnel_index_by_sw_if_index[sw_if_index])) {
+            return;
+        }
+        t = &vxm->tunnels[vxm->tunnel_index_by_sw_if_index[sw_if_index]];
+        send_vxlan_tunnel_details(t, q);
+    }
+}
+
 static void 
 vl_api_l2_patch_add_del_t_handler (vl_api_l2_patch_add_del_t *mp)
 {
@@ -4459,6 +4517,10 @@ static void vl_api_input_acl_set_interface_t_handler
 static void vl_api_ipsec_spd_add_del_t_handler
 (vl_api_ipsec_spd_add_del_t * mp)
 {
+#if IPSEC == 0
+    clib_warning ("unimplemented");
+#else
+
     vlib_main_t *vm __attribute__((unused)) = vlib_get_main();
     vl_api_ipsec_spd_add_del_reply_t * rmp;
     int rv;
@@ -4470,6 +4532,7 @@ static void vl_api_ipsec_spd_add_del_t_handler
 #endif
 
     REPLY_MACRO(VL_API_IPSEC_SPD_ADD_DEL_REPLY);
+#endif
 }
 
 static void vl_api_ipsec_interface_add_del_spd_t_handler
@@ -4486,7 +4549,7 @@ static void vl_api_ipsec_interface_add_del_spd_t_handler
 
     VALIDATE_SW_IF_INDEX(mp);
 
-#if DPDK > 0 
+#if IPSEC > 0 
     rv = ipsec_set_interface_spd(vm, sw_if_index, spd_id, mp->is_add);
 #else
     rv = VNET_API_ERROR_UNIMPLEMENTED;
@@ -4504,7 +4567,7 @@ static void vl_api_ipsec_spd_add_del_entry_t_handler
     vl_api_ipsec_spd_add_del_entry_reply_t * rmp;
     int rv;
 
-#if DPDK > 0
+#if IPSEC > 0 
     ipsec_policy_t p;
 
     p.id = ntohl(mp->spd_id);
@@ -4554,7 +4617,7 @@ static void vl_api_ipsec_sad_add_del_entry_t_handler
     vlib_main_t *vm __attribute__((unused)) = vlib_get_main();
     vl_api_ipsec_sad_add_del_entry_reply_t * rmp;
     int rv;
-#if DPDK > 0
+#if IPSEC > 0
     ipsec_sa_t sa;
 
     sa.id = ntohl(mp->sad_id);
@@ -4780,7 +4843,7 @@ static void vl_api_ipsec_sa_set_key_t_handler
     vlib_main_t *vm __attribute__((unused)) = vlib_get_main();
     vl_api_ipsec_sa_set_key_reply_t *rmp;
     int rv;
-#if DPDK > 0
+#if IPSEC > 0
     ipsec_sa_t sa;
     sa.id = ntohl(mp->sa_id);
     sa.crypto_key_len = mp->crypto_key_length;