+ /* copy the ipv6 details */
+ tmp_buff = (const uint8_t *)&ipv6_spec->hdr.vtc_flow;
+ if (ulp_buffer_is_empty(tmp_buff,
+ BNXT_ULP_ENCAP_IPV6_VTC_FLOW)) {
+ buff = &ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_IP];
+ ulp_encap_buffer_copy(buff,
+ def_ipv6_hdr,
+ sizeof(def_ipv6_hdr),
+ ULP_BUFFER_ALIGN_8_BYTE);
+ } else {
+ /* The payload length being ignored in the ip hdr. */
+ buff = &ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_IP];
+ tmp_buff = (const uint8_t *)&ipv6_spec->hdr.proto;
+ ulp_encap_buffer_copy(buff,
+ tmp_buff,
+ BNXT_ULP_ENCAP_IPV6_PROTO_TTL,
+ ULP_BUFFER_ALIGN_8_BYTE);
+ buff = &ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_IP +
+ BNXT_ULP_ENCAP_IPV6_PROTO_TTL +
+ BNXT_ULP_ENCAP_IPV6_DO];
+ tmp_buff = (const uint8_t *)&ipv6_spec->hdr.vtc_flow;
+ ulp_encap_buffer_copy(buff,
+ tmp_buff,
+ BNXT_ULP_ENCAP_IPV6_VTC_FLOW,
+ ULP_BUFFER_ALIGN_8_BYTE);
+ }
+ /* Update the dst ip address in ip encap buffer */
+ buff = &ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_IP +
+ sizeof(def_ipv6_hdr)];
+ ulp_encap_buffer_copy(buff,
+ (const uint8_t *)ipv6_spec->hdr.dst_addr,
+ sizeof(ipv6_spec->hdr.dst_addr),
+ ULP_BUFFER_ALIGN_8_BYTE);
+
+ /* Update the src ip address */
+ buff = &ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_IP_SRC];
+ ulp_encap_buffer_copy(buff,
+ (const uint8_t *)ipv6_spec->hdr.src_addr,
+ sizeof(ipv6_spec->hdr.src_addr),
+ ULP_BUFFER_ALIGN_16_BYTE);