#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>
#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
_(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) \
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;
out:
REPLY_MACRO(VL_API_SR_TUNNEL_ADD_DEL_REPLY);
+#endif
}
#define foreach_classify_add_del_table_field \
}));
}
+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)
{
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;
#endif
REPLY_MACRO(VL_API_IPSEC_SPD_ADD_DEL_REPLY);
+#endif
}
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;
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);
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);
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;