VPP-233: disallow array[0] in reply messages 01/2201/2
authorMarek Gradzki <mgradzki@cisco.com>
Wed, 3 Aug 2016 08:32:50 +0000 (10:32 +0200)
committerMarek Gradzki <mgradzki@cisco.com>
Wed, 3 Aug 2016 09:42:34 +0000 (11:42 +0200)
- updates jvpp generator to raise exception
  if array[0] is present in reply/detail/counter message

- fixes vpe.api reply/detail/counter messages
  that use incorrect variable array syntax.

Additional info:

Variable arrays in reply/detail/counter messages needs to have
lenght defined in other variable within the message.
The other variable can have any name, so it is impossible to
generate Java/Python code handling.

New syntax introduced by
https://gerrit.fd.io/r/#/c/1617/
fixes the problem:

u32 some_var;
XX array[some_var];

Change-Id: I0af50f1ef1d94d95b56d9326d4e944e72b4edcdd
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
vpp-api/java/jvpp/gen/jvpp_c_gen.py
vpp/vpp-api/vpe.api

index 4d0ea0b..1796ac1 100644 (file)
@@ -412,6 +412,11 @@ def generate_msg_handlers(func_list, inputfile):
             c_name = t[2]
             field_length = t[3][0]
 
+            if jni_type.endswith('Array') and field_length == '0':
+                raise Exception('Variable array \'%s\' defined in message \'%s\' '
+                                'should have defined length (e.g. \'%s[%s_length]\''
+                                % (c_name, handler_name, c_name, c_name))
+
             # check if we are processing variable length array
             if t[3][1]:
                 length_var_name = t[3][0]
index 3e4b933..50cfe2a 100644 (file)
@@ -630,7 +630,7 @@ define vnet_interface_counters {
     u8 is_combined;
     u32 first_sw_if_index;
     u32 count;
-    u8 data[0];
+    u8 data[count];
 };
 
 typeonly manual_print manual_endian define ip4_fib_counter {
@@ -3979,7 +3979,7 @@ define mpls_gre_tunnel_details {
     u32 tunnel_dst;
     u32 outer_fib_index;
     u32 nlabels;
-    u32 labels[0];
+    u32 labels[nlabels];
 };
 
 /** \brief Dump mpls eth tunnel table
@@ -4017,7 +4017,7 @@ define mpls_eth_tunnel_details {
     u8  tunnel_dst_mac[6];
     u32 tx_sw_if_index;
     u32 nlabels;
-    u32 labels[0];
+    u32 labels[nlabels];
 };
 
 /** \brief Dump mpls fib table
@@ -4045,7 +4045,7 @@ define mpls_fib_encap_details {
     u32 dest;
     u32 s_bit;
     u32 nlabels;
-    u32 labels[0];
+    u32 labels[nlabels];
 };
 
 /** \brief Dump mpls fib decap table