VPP-174 IPsec API fix 40/1840/1
authorMatus Fabian <matfabia@cisco.com>
Mon, 4 Jul 2016 08:30:03 +0000 (01:30 -0700)
committerMatus Fabian <matfabia@cisco.com>
Mon, 4 Jul 2016 08:31:56 +0000 (01:31 -0700)
ipsec_sad_add_del_entry and ipsec_spd_add_del_entry parameters with IPv4 address
are always 0.0.0.0

Change-Id: I75cb211ce9069596df4ef1d910e263d22940b9d8
Signed-off-by: Matus Fabian <matfabia@cisco.com>
vpp/vpp-api/api.c

index 9df8791..483a804 100644 (file)
@@ -5629,11 +5629,17 @@ static void vl_api_ipsec_spd_add_del_entry_t_handler
     p.is_outbound = mp->is_outbound;
     p.is_ipv6 = mp->is_ipv6;
 
-    clib_memcpy(&p.raddr.start, mp->remote_address_start, 16);
-    clib_memcpy(&p.raddr.stop, mp->remote_address_stop, 16);
-    clib_memcpy(&p.laddr.start, mp->local_address_start, 16);
-    clib_memcpy(&p.laddr.stop, mp->local_address_stop, 16);
-
+    if (mp->is_ipv6) {
+        clib_memcpy(&p.raddr.start, mp->remote_address_start, 16);
+        clib_memcpy(&p.raddr.stop, mp->remote_address_stop, 16);
+        clib_memcpy(&p.laddr.start, mp->local_address_start, 16);
+        clib_memcpy(&p.laddr.stop, mp->local_address_stop, 16);
+    } else {
+        clib_memcpy(&p.raddr.start.ip4.data, mp->remote_address_start, 4);
+        clib_memcpy(&p.raddr.stop.ip4.data, mp->remote_address_stop, 4);
+        clib_memcpy(&p.laddr.start.ip4.data, mp->local_address_start, 4);
+        clib_memcpy(&p.laddr.stop.ip4.data, mp->local_address_stop, 4);
+    }
     p.protocol = mp->protocol;
     p.rport.start = ntohs(mp->remote_port_start);
     p.rport.stop  = ntohs(mp->remote_port_stop);
@@ -5710,8 +5716,13 @@ static void vl_api_ipsec_sad_add_del_entry_t_handler
     sa.use_esn = mp->use_extended_sequence_number;
     sa.is_tunnel = mp->is_tunnel;
     sa.is_tunnel_ip6 = mp->is_tunnel_ipv6;
-    clib_memcpy(&sa.tunnel_src_addr, mp->tunnel_src_address, 16);
-    clib_memcpy(&sa.tunnel_dst_addr, mp->tunnel_dst_address, 16);
+    if (sa.is_tunnel_ip6) {
+        clib_memcpy(&sa.tunnel_src_addr, mp->tunnel_src_address, 16);
+        clib_memcpy(&sa.tunnel_dst_addr, mp->tunnel_dst_address, 16);
+    } else {
+        clib_memcpy(&sa.tunnel_src_addr.ip4.data, mp->tunnel_src_address, 4);
+        clib_memcpy(&sa.tunnel_dst_addr.ip4.data, mp->tunnel_dst_address, 4);
+    }
 
     rv = ipsec_add_del_sa(vm, &sa, mp->is_add);
 #else