Hi guys,

There is a union in fib_prefix_t but without a name, and the use of the union 
in 'add_port_range_adjacency' is shown below:
     union { 
          ip46_address_t fp_addr; 
          struct { 
                     mpls_label_t fp_label; 
                     mpls_eos_bit_t fp_eos; 
                     dpo_proto_t fp_payload_proto; 
           };
 
     fib_prefix_t pfx =
     { 
        .fp_proto = FIB_PROTOCOL_IP4, 
        .fp_len = length, 
        .fp_addr = 
        { 
            .ip4 = *address, 
        }, 
    }; 
When we use the gcc(version 4.3.3). There is some error info:
/home/vpp/build-data/../src/vnet/ip/ip4_source_and_port_range_check.c: In 
function 'add_port_range_adjacency': 
/home/vpp/build-data/../src/vnet/ip/ip4_source_and_port_range_check.c:935: 
error: unknown field 'fp_addr' specified in initializer 
/home/vpp/build-data/../src/vnet/ip/ip4_source_and_port_range_check.c:935: 
warning: braces around scalar initializer 
/home/vpp/build-data/../src/vnet/ip/ip4_source_and_port_range_check.c:935: 
warning: (near initialization for 'pfx.fp_proto') 
/home/vpp/build-data/../src/vnet/ip/ip4_source_and_port_range_check.c:936: 
error: field name not in record or union initializer 
/home/vpp/build-data/../src/vnet/ip/ip4_source_and_port_range_check.c:936: 
error: (near initialization for 'pfx.fp_proto') 
/home/vpp/build-data/../src/vnet/ip/ip4_source_and_port_range_check.c:936: 
error: incompatible types in initialization 

We fix this problem by the method below,but it seems not a good method , 
because there are too many similar definitions in VPP.
Do you have any suggestion to solve it without updating the gcc version?

 fib_prefix_t pfx; 
    memset(&pfx,0,sizeof(fib_prefix_t)); 
    pfx.fp_proto = FIB_PROTOCOL_IP4; 
    pfx.fp_len = length; 
    pfx.fp_addr.ip4 = *address; 


Thanks,
Xyxue


Reply via email to