aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatias Elo <matias.elo@nokia.com>2015-12-18 15:28:37 +0200
committerMaxim Uvarov <maxim.uvarov@linaro.org>2015-12-29 14:07:51 +0300
commit25eb270e863005eb71e4d5a5d17f972fcbceeef8 (patch)
tree4c96a93cb2b07bed4e249442aa3be78d42ec38e5
parentdf16aaf9ca57a486f04a47ba50009612ce31a1c1 (diff)
linux-generic: classification: define pkt_addr as const
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 <matias.elo@nokia.com> Reviewed-by: Balasubramanian Manoharan <bala.manoharan@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
-rw-r--r--platform/linux-generic/include/odp_classification_inlines.h73
-rw-r--r--platform/linux-generic/include/odp_classification_internal.h14
-rw-r--r--platform/linux-generic/include/odp_packet_io_internal.h2
-rw-r--r--platform/linux-generic/odp_classification.c30
-rw-r--r--platform/linux-generic/pktio/netmap.c2
-rw-r--r--platform/linux-generic/pktio/pktio_common.c4
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 7f13530c0..e9739aafb 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 45af14dc3..1e8f291a6 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 2ad072e95..4d739528d 100644
--- a/platform/linux-generic/include/odp_packet_io_internal.h
+++ b/platform/linux-generic/include/odp_packet_io_internal.h
@@ -120,7 +120,7 @@ typedef struct pktio_if_ops {
int (*mac_get)(pktio_entry_t *pktio_entry, void *mac_addr);
} 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 b1f51af98..d7e2efbeb 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 *)(&eth->type);
+ eth = (const odph_ethhdr_t *)(pkt_addr + hdr->l2_offset);
+ vlan = (const odph_vlanhdr_t *)(&eth->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 781a2c234..11ebd5581 100644
--- a/platform/linux-generic/pktio/netmap.c
+++ b/platform/linux-generic/pktio/netmap.c
@@ -214,7 +214,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 1fb10a052..05200ba0f 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 */