Fixes netmap "cast discards '__attribute__((const))'" build error. Define pkt_addr as const as classifier operations should be read-only to packet data.
Signed-off-by: Matias Elo <[email protected]> --- .../include/odp_classification_inlines.h | 73 ++++++++++++---------- .../include/odp_classification_internal.h | 14 ++--- .../linux-generic/include/odp_packet_io_internal.h | 2 +- platform/linux-generic/odp_classification.c | 30 ++++----- platform/linux-generic/pktio/netmap.c | 2 +- platform/linux-generic/pktio/pktio_common.c | 4 +- 6 files changed, 66 insertions(+), 59 deletions(-) diff --git a/platform/linux-generic/include/odp_classification_inlines.h b/platform/linux-generic/include/odp_classification_inlines.h index 7f13530..e9739aa 100644 --- a/platform/linux-generic/include/odp_classification_inlines.h +++ b/platform/linux-generic/include/odp_classification_inlines.h @@ -39,15 +39,16 @@ static inline int verify_pmr_packet_len(odp_packet_hdr_t *pkt_hdr, return 0; } -static inline int verify_pmr_ip_proto(uint8_t *pkt_addr, + +static inline int verify_pmr_ip_proto(const uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr, pmr_term_value_t *term_value) { - odph_ipv4hdr_t *ip; + const odph_ipv4hdr_t *ip; uint8_t proto; if (!pkt_hdr->input_flags.ipv4) return 0; - ip = (odph_ipv4hdr_t *)(pkt_addr + pkt_hdr->l3_offset); + ip = (const odph_ipv4hdr_t *)(pkt_addr + pkt_hdr->l3_offset); proto = ip->proto; if (term_value->val == (proto & term_value->mask)) return 1; @@ -55,15 +56,15 @@ static inline int verify_pmr_ip_proto(uint8_t *pkt_addr, return 0; } -static inline int verify_pmr_ipv4_saddr(uint8_t *pkt_addr, +static inline int verify_pmr_ipv4_saddr(const uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr, pmr_term_value_t *term_value) { - odph_ipv4hdr_t *ip; + const odph_ipv4hdr_t *ip; uint32_t ipaddr; if (!pkt_hdr->input_flags.ipv4) return 0; - ip = (odph_ipv4hdr_t *)(pkt_addr + pkt_hdr->l3_offset); + ip = (const odph_ipv4hdr_t *)(pkt_addr + pkt_hdr->l3_offset); ipaddr = odp_be_to_cpu_32(ip->src_addr); if (term_value->val == (ipaddr & term_value->mask)) return 1; @@ -71,15 +72,15 @@ static inline int verify_pmr_ipv4_saddr(uint8_t *pkt_addr, return 0; } -static inline int verify_pmr_ipv4_daddr(uint8_t *pkt_addr, +static inline int verify_pmr_ipv4_daddr(const uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr, pmr_term_value_t *term_value) { - odph_ipv4hdr_t *ip; + const odph_ipv4hdr_t *ip; uint32_t ipaddr; if (!pkt_hdr->input_flags.ipv4) return 0; - ip = (odph_ipv4hdr_t *)(pkt_addr + pkt_hdr->l3_offset); + ip = (const odph_ipv4hdr_t *)(pkt_addr + pkt_hdr->l3_offset); ipaddr = odp_be_to_cpu_32(ip->dst_addr); if (term_value->val == (ipaddr & term_value->mask)) return 1; @@ -87,15 +88,15 @@ static inline int verify_pmr_ipv4_daddr(uint8_t *pkt_addr, return 0; } -static inline int verify_pmr_tcp_sport(uint8_t *pkt_addr, +static inline int verify_pmr_tcp_sport(const uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr, pmr_term_value_t *term_value) { uint16_t sport; - odph_tcphdr_t *tcp; + const odph_tcphdr_t *tcp; if (!pkt_hdr->input_flags.tcp) return 0; - tcp = (odph_tcphdr_t *)(pkt_addr + pkt_hdr->l4_offset); + tcp = (const odph_tcphdr_t *)(pkt_addr + pkt_hdr->l4_offset); sport = odp_be_to_cpu_16(tcp->src_port); if (term_value->val == (sport & term_value->mask)) return 1; @@ -103,15 +104,15 @@ static inline int verify_pmr_tcp_sport(uint8_t *pkt_addr, return 0; } -static inline int verify_pmr_tcp_dport(uint8_t *pkt_addr, +static inline int verify_pmr_tcp_dport(const uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr, pmr_term_value_t *term_value) { uint16_t dport; - odph_tcphdr_t *tcp; + const odph_tcphdr_t *tcp; if (!pkt_hdr->input_flags.tcp) return 0; - tcp = (odph_tcphdr_t *)(pkt_addr + pkt_hdr->l4_offset); + tcp = (const odph_tcphdr_t *)(pkt_addr + pkt_hdr->l4_offset); dport = odp_be_to_cpu_16(tcp->dst_port); if (term_value->val == (dport & term_value->mask)) return 1; @@ -119,30 +120,32 @@ static inline int verify_pmr_tcp_dport(uint8_t *pkt_addr, return 0; } -static inline int verify_pmr_udp_dport(uint8_t *pkt_addr, +static inline int verify_pmr_udp_dport(const uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr, pmr_term_value_t *term_value) { uint16_t dport; - odph_udphdr_t *udp; + const odph_udphdr_t *udp; if (!pkt_hdr->input_flags.udp) return 0; - udp = (odph_udphdr_t *)(pkt_addr + pkt_hdr->l4_offset); + udp = (const odph_udphdr_t *)(pkt_addr + pkt_hdr->l4_offset); dport = odp_be_to_cpu_16(udp->dst_port); if (term_value->val == (dport & term_value->mask)) return 1; return 0; } -static inline int verify_pmr_udp_sport(uint8_t *pkt_addr, + +static inline int verify_pmr_udp_sport(const uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr, pmr_term_value_t *term_value) { uint16_t sport; - odph_udphdr_t *udp; + const odph_udphdr_t *udp; + if (!pkt_hdr->input_flags.udp) return 0; - udp = (odph_udphdr_t *)(pkt_addr + pkt_hdr->l4_offset); + udp = (const odph_udphdr_t *)(pkt_addr + pkt_hdr->l4_offset); sport = odp_be_to_cpu_16(udp->src_port); if (term_value->val == (sport & term_value->mask)) return 1; @@ -150,7 +153,7 @@ static inline int verify_pmr_udp_sport(uint8_t *pkt_addr, return 0; } -static inline int verify_pmr_dmac(uint8_t *pkt_addr ODP_UNUSED, +static inline int verify_pmr_dmac(const uint8_t *pkt_addr ODP_UNUSED, odp_packet_hdr_t *pkt_hdr ODP_UNUSED, pmr_term_value_t *term_value ODP_UNUSED) { @@ -158,28 +161,31 @@ static inline int verify_pmr_dmac(uint8_t *pkt_addr ODP_UNUSED, return 0; } -static inline int verify_pmr_ipv6_saddr(uint8_t *pkt_addr ODP_UNUSED, +static inline int verify_pmr_ipv6_saddr(const uint8_t *pkt_addr ODP_UNUSED, odp_packet_hdr_t *pkt_hdr ODP_UNUSED, pmr_term_value_t *term_value ODP_UNUSED) { ODP_UNIMPLEMENTED(); return 0; } -static inline int verify_pmr_ipv6_daddr(uint8_t *pkt_addr ODP_UNUSED, + +static inline int verify_pmr_ipv6_daddr(const uint8_t *pkt_addr ODP_UNUSED, odp_packet_hdr_t *pkt_hdr ODP_UNUSED, pmr_term_value_t *term_value ODP_UNUSED) { ODP_UNIMPLEMENTED(); return 0; } -static inline int verify_pmr_vlan_id_0(uint8_t *pkt_addr ODP_UNUSED, + +static inline int verify_pmr_vlan_id_0(const uint8_t *pkt_addr ODP_UNUSED, odp_packet_hdr_t *pkt_hdr ODP_UNUSED, pmr_term_value_t *term_value ODP_UNUSED) { ODP_UNIMPLEMENTED(); return 0; } -static inline int verify_pmr_vlan_id_x(uint8_t *pkt_addr ODP_UNUSED, + +static inline int verify_pmr_vlan_id_x(const uint8_t *pkt_addr ODP_UNUSED, odp_packet_hdr_t *pkt_hdr ODP_UNUSED, pmr_term_value_t *term_value ODP_UNUSED) { @@ -187,7 +193,7 @@ static inline int verify_pmr_vlan_id_x(uint8_t *pkt_addr ODP_UNUSED, return 0; } -static inline int verify_pmr_ipsec_spi(uint8_t *pkt_addr, +static inline int verify_pmr_ipsec_spi(const uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr, pmr_term_value_t *term_value) { @@ -199,11 +205,11 @@ static inline int verify_pmr_ipsec_spi(uint8_t *pkt_addr, pkt_addr += pkt_hdr->l4_offset; if (pkt_hdr->l4_protocol == ODPH_IPPROTO_AH) { - odph_ahhdr_t *ahhdr = (odph_ahhdr_t *)pkt_addr; + const odph_ahhdr_t *ahhdr = (const odph_ahhdr_t *)pkt_addr; spi = odp_be_to_cpu_32(ahhdr->spi); } else if (pkt_hdr->l4_protocol == ODPH_IPPROTO_ESP) { - odph_esphdr_t *esphdr = (odph_esphdr_t *)pkt_addr; + const odph_esphdr_t *esphdr = (const odph_esphdr_t *)pkt_addr; spi = odp_be_to_cpu_32(esphdr->spi); } else { @@ -216,7 +222,7 @@ static inline int verify_pmr_ipsec_spi(uint8_t *pkt_addr, return 0; } -static inline int verify_pmr_ld_vni(uint8_t *pkt_addr ODP_UNUSED, +static inline int verify_pmr_ld_vni(const uint8_t *pkt_addr ODP_UNUSED, odp_packet_hdr_t *pkt_hdr ODP_UNUSED, pmr_term_value_t *term_value ODP_UNUSED) { @@ -224,7 +230,7 @@ static inline int verify_pmr_ld_vni(uint8_t *pkt_addr ODP_UNUSED, return 0; } -static inline int verify_pmr_custom_frame(uint8_t *pkt_addr, +static inline int verify_pmr_custom_frame(const uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr, pmr_term_value_t *term_value) { @@ -244,14 +250,15 @@ static inline int verify_pmr_custom_frame(uint8_t *pkt_addr, return 0; } -static inline int verify_pmr_eth_type_0(uint8_t *pkt_addr ODP_UNUSED, +static inline int verify_pmr_eth_type_0(const uint8_t *pkt_addr ODP_UNUSED, odp_packet_hdr_t *pkt_hdr ODP_UNUSED, pmr_term_value_t *term_value ODP_UNUSED) { ODP_UNIMPLEMENTED(); return 0; } -static inline int verify_pmr_eth_type_x(uint8_t *pkt_addr ODP_UNUSED, + +static inline int verify_pmr_eth_type_x(const uint8_t *pkt_addr ODP_UNUSED, odp_packet_hdr_t *pkt_hdr ODP_UNUSED, pmr_term_value_t *term_value ODP_UNUSED) { diff --git a/platform/linux-generic/include/odp_classification_internal.h b/platform/linux-generic/include/odp_classification_internal.h index 45af14d..1e8f291 100644 --- a/platform/linux-generic/include/odp_classification_internal.h +++ b/platform/linux-generic/include/odp_classification_internal.h @@ -40,8 +40,8 @@ with the PKTIO interface. Returns the default cos if the packet does not match any PMR Returns the error_cos if the packet has an error **/ -cos_t *pktio_select_cos(pktio_entry_t *pktio, uint8_t *pkt_addr, - odp_packet_hdr_t *pkt_hdr); +cos_t *pktio_select_cos(pktio_entry_t *pktio, const uint8_t *pkt_addr, + odp_packet_hdr_t *pkt_hdr); /** @internal @@ -51,7 +51,7 @@ Select a CoS for the given Packet based on QoS values This function returns the COS object matching the L2 and L3 QoS based on the l3_preference value of the pktio **/ -cos_t *match_qos_cos(pktio_entry_t *entry, uint8_t *pkt_addr, +cos_t *match_qos_cos(pktio_entry_t *entry, const uint8_t *pkt_addr, odp_packet_hdr_t *hdr); /** Packet Classifier @@ -87,7 +87,7 @@ This function gets called recursively to check the chained PMR Term value with the packet. **/ -cos_t *match_pmr_cos(cos_t *cos, uint8_t *pkt_addr, pmr_t *pmr, +cos_t *match_pmr_cos(cos_t *cos, const uint8_t *pkt_addr, pmr_t *pmr, odp_packet_hdr_t *hdr); /** @internal @@ -95,7 +95,7 @@ CoS associated with L3 QoS value This function returns the CoS associated with L3 QoS value **/ -cos_t *match_qos_l3_cos(pmr_l3_cos_t *l3_cos, uint8_t *pkt_addr, +cos_t *match_qos_l3_cos(pmr_l3_cos_t *l3_cos, const uint8_t *pkt_addr, odp_packet_hdr_t *hdr); /** @@ -104,7 +104,7 @@ CoS associated with L2 QoS value This function returns the CoS associated with L2 QoS value **/ -cos_t *match_qos_l2_cos(pmr_l2_cos_t *l2_cos, uint8_t *pkt_addr, +cos_t *match_qos_l2_cos(pmr_l2_cos_t *l2_cos, const uint8_t *pkt_addr, odp_packet_hdr_t *hdr); /** @internal @@ -174,7 +174,7 @@ This function goes through each PMR_TERM value in pmr_t structure and calls verification function for each term.Returns 1 if PMR matches or 0 Otherwise. **/ -int verify_pmr(pmr_t *pmr, uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr); +int verify_pmr(pmr_t *pmr, const uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr); #ifdef __cplusplus } diff --git a/platform/linux-generic/include/odp_packet_io_internal.h b/platform/linux-generic/include/odp_packet_io_internal.h index 61bedc9..e15c6af 100644 --- a/platform/linux-generic/include/odp_packet_io_internal.h +++ b/platform/linux-generic/include/odp_packet_io_internal.h @@ -154,7 +154,7 @@ typedef struct pktio_if_ops { odp_packet_t packets[], int num); } pktio_if_ops_t; -int _odp_packet_cls_enq(pktio_entry_t *pktio_entry, uint8_t *base, +int _odp_packet_cls_enq(pktio_entry_t *pktio_entry, const uint8_t *base, uint16_t buf_len, odp_packet_t *pkt_ret); extern void *pktio_entry_ptr[]; diff --git a/platform/linux-generic/odp_classification.c b/platform/linux-generic/odp_classification.c index b1f51af..d7e2efb 100644 --- a/platform/linux-generic/odp_classification.c +++ b/platform/linux-generic/odp_classification.c @@ -700,7 +700,7 @@ odp_pool_t odp_cls_cos_pool(odp_cos_t cos_id) return cos->s.pool->s.pool_hdl; } -int verify_pmr(pmr_t *pmr, uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr) +int verify_pmr(pmr_t *pmr, const uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr) { int pmr_failure = 0; int num_pmr; @@ -818,7 +818,7 @@ int verify_pmr(pmr_t *pmr, uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr) return true; } -cos_t *match_pmr_cos(cos_t *cos, uint8_t *pkt_addr, pmr_t *pmr, +cos_t *match_pmr_cos(cos_t *cos, const uint8_t *pkt_addr, pmr_t *pmr, odp_packet_hdr_t *hdr) { cos_t *retcos = NULL; @@ -916,8 +916,8 @@ int packet_classifier(odp_pktio_t pktio, odp_packet_t pkt) return _odp_packet_classifier(entry, pkt); } -cos_t *pktio_select_cos(pktio_entry_t *entry, uint8_t *pkt_addr, - odp_packet_hdr_t *pkt_hdr) +cos_t *pktio_select_cos(pktio_entry_t *entry, const uint8_t *pkt_addr, + odp_packet_hdr_t *pkt_hdr) { pmr_t *pmr; cos_t *cos; @@ -949,20 +949,20 @@ cos_t *pktio_select_cos(pktio_entry_t *entry, uint8_t *pkt_addr, return cls->default_cos; } -cos_t *match_qos_l3_cos(pmr_l3_cos_t *l3_cos, uint8_t *pkt_addr, +cos_t *match_qos_l3_cos(pmr_l3_cos_t *l3_cos, const uint8_t *pkt_addr, odp_packet_hdr_t *hdr) { uint8_t dscp; cos_t *cos = NULL; - odph_ipv4hdr_t *ipv4; - odph_ipv6hdr_t *ipv6; + const odph_ipv4hdr_t *ipv4; + const odph_ipv6hdr_t *ipv6; if (hdr->input_flags.l3 && hdr->input_flags.ipv4) { - ipv4 = (odph_ipv4hdr_t *)(pkt_addr + hdr->l3_offset); + ipv4 = (const odph_ipv4hdr_t *)(pkt_addr + hdr->l3_offset); dscp = ODPH_IPV4HDR_DSCP(ipv4->tos); cos = l3_cos->cos[dscp]; } else if (hdr->input_flags.l3 && hdr->input_flags.ipv6) { - ipv6 = (odph_ipv6hdr_t *)(pkt_addr + hdr->l3_offset); + ipv6 = (const odph_ipv6hdr_t *)(pkt_addr + hdr->l3_offset); dscp = ODPH_IPV6HDR_DSCP(ipv6->ver_tc_flow); cos = l3_cos->cos[dscp]; } @@ -970,18 +970,18 @@ cos_t *match_qos_l3_cos(pmr_l3_cos_t *l3_cos, uint8_t *pkt_addr, return cos; } -cos_t *match_qos_l2_cos(pmr_l2_cos_t *l2_cos, uint8_t *pkt_addr, +cos_t *match_qos_l2_cos(pmr_l2_cos_t *l2_cos, const uint8_t *pkt_addr, odp_packet_hdr_t *hdr) { cos_t *cos = NULL; - odph_ethhdr_t *eth; - odph_vlanhdr_t *vlan; + const odph_ethhdr_t *eth; + const odph_vlanhdr_t *vlan; uint16_t qos; if (hdr->input_flags.l2 && hdr->input_flags.vlan && hdr->input_flags.eth) { - eth = (odph_ethhdr_t *)(pkt_addr + hdr->l2_offset); - vlan = (odph_vlanhdr_t *)(ð->type); + eth = (const odph_ethhdr_t *)(pkt_addr + hdr->l2_offset); + vlan = (const odph_vlanhdr_t *)(ð->type); qos = odp_be_to_cpu_16(vlan->tci); qos = ((qos >> 13) & 0x07); cos = l2_cos->cos[qos]; @@ -989,7 +989,7 @@ cos_t *match_qos_l2_cos(pmr_l2_cos_t *l2_cos, uint8_t *pkt_addr, return cos; } -cos_t *match_qos_cos(pktio_entry_t *entry, uint8_t *pkt_addr, +cos_t *match_qos_cos(pktio_entry_t *entry, const uint8_t *pkt_addr, odp_packet_hdr_t *hdr) { classifier_t *cls = &entry->s.cls; diff --git a/platform/linux-generic/pktio/netmap.c b/platform/linux-generic/pktio/netmap.c index d2a4626..4bc51fd 100644 --- a/platform/linux-generic/pktio/netmap.c +++ b/platform/linux-generic/pktio/netmap.c @@ -567,7 +567,7 @@ static inline int netmap_pkt_to_odp(pktio_entry_t *pktio_entry, } if (pktio_cls_enabled(pktio_entry)) { - ret = _odp_packet_cls_enq(pktio_entry, (uint8_t *)buf, + ret = _odp_packet_cls_enq(pktio_entry, (const uint8_t *)buf, len, pkt_out); if (ret) return 0; diff --git a/platform/linux-generic/pktio/pktio_common.c b/platform/linux-generic/pktio/pktio_common.c index 1fb10a0..05200ba 100644 --- a/platform/linux-generic/pktio/pktio_common.c +++ b/platform/linux-generic/pktio/pktio_common.c @@ -13,7 +13,7 @@ #include <odp_classification_internal.h> int _odp_packet_cls_enq(pktio_entry_t *pktio_entry, - uint8_t *base, uint16_t buf_len, + const uint8_t *base, uint16_t buf_len, odp_packet_t *pkt_ret) { cos_t *cos; @@ -25,7 +25,7 @@ int _odp_packet_cls_enq(pktio_entry_t *pktio_entry, packet_parse_reset(&pkt_hdr); _odp_cls_parse(&pkt_hdr, base); - cos = pktio_select_cos(pktio_entry, (uint8_t *)base, &pkt_hdr); + cos = pktio_select_cos(pktio_entry, base, &pkt_hdr); pool = cos->s.pool->s.pool_hdl; /* if No CoS found then drop the packet */ -- 1.9.1 _______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
