git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
app/testpmd: add --portlist option
[dpdk.git]
/
examples
/
ipsec-secgw
/
ipip.h
diff --git
a/examples/ipsec-secgw/ipip.h
b/examples/ipsec-secgw/ipip.h
index
fb6a6fa
..
13b8455
100644
(file)
--- a/
examples/ipsec-secgw/ipip.h
+++ b/
examples/ipsec-secgw/ipip.h
@@
-27,6
+27,10
@@
ipip_outbound(struct rte_mbuf *m, uint32_t offset, uint32_t is_ipv6,
if (inip4->ip_v == IPVERSION) {
/* XXX This should be done by the forwarding engine instead */
inip4->ip_ttl -= 1;
if (inip4->ip_v == IPVERSION) {
/* XXX This should be done by the forwarding engine instead */
inip4->ip_ttl -= 1;
+ if (inip4->ip_sum >= rte_cpu_to_be_16(0xffff - 0x100))
+ inip4->ip_sum += rte_cpu_to_be_16(0x100) + 1;
+ else
+ inip4->ip_sum += rte_cpu_to_be_16(0x100);
ds_ecn = inip4->ip_tos;
} else {
inip6 = (struct ip6_hdr *)inip4;
ds_ecn = inip4->ip_tos;
} else {
inip6 = (struct ip6_hdr *)inip4;
@@
-95,8
+99,17
@@
ip6ip_outbound(struct rte_mbuf *m, uint32_t offset,
static inline void
ip4_ecn_setup(struct ip *ip4)
{
static inline void
ip4_ecn_setup(struct ip *ip4)
{
- if (ip4->ip_tos & IPTOS_ECN_MASK)
+ if (ip4->ip_tos & IPTOS_ECN_MASK) {
+ unsigned long sum;
+ uint8_t old;
+
+ old = ip4->ip_tos;
ip4->ip_tos |= IPTOS_ECN_CE;
ip4->ip_tos |= IPTOS_ECN_CE;
+ sum = old + (~(*(uint8_t *)&ip4->ip_tos) & 0xff);
+ sum += rte_be_to_cpu_16(ip4->ip_sum);
+ sum = (sum & 0xffff) + (sum >> 16);
+ ip4->ip_sum = rte_cpu_to_be_16(sum + (sum >> 16));
+ }
}
static inline void
}
static inline void
@@
-140,6
+153,10
@@
ipip_inbound(struct rte_mbuf *m, uint32_t offset)
ip4_ecn_setup(inip4);
/* XXX This should be done by the forwarding engine instead */
inip4->ip_ttl -= 1;
ip4_ecn_setup(inip4);
/* XXX This should be done by the forwarding engine instead */
inip4->ip_ttl -= 1;
+ if (inip4->ip_sum >= rte_cpu_to_be_16(0xffff - 0x100))
+ inip4->ip_sum += rte_cpu_to_be_16(0x100) + 1;
+ else
+ inip4->ip_sum += rte_cpu_to_be_16(0x100);
m->packet_type &= ~RTE_PTYPE_L4_MASK;
if (inip4->ip_p == IPPROTO_UDP)
m->packet_type |= RTE_PTYPE_L4_UDP;
m->packet_type &= ~RTE_PTYPE_L4_MASK;
if (inip4->ip_p == IPPROTO_UDP)
m->packet_type |= RTE_PTYPE_L4_UDP;