summaryrefslogtreecommitdiff
path: root/lib/packets.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/packets.c')
-rw-r--r--lib/packets.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/packets.c b/lib/packets.c
index 07cf2eb24..419c6af49 100644
--- a/lib/packets.c
+++ b/lib/packets.c
@@ -1043,3 +1043,17 @@ compose_arp(struct dp_packet *b, const uint8_t eth_src[ETH_ADDR_LEN],
dp_packet_set_frame(b, eth);
dp_packet_set_l3(b, arp);
}
+
+uint32_t
+packet_csum_pseudoheader(const struct ip_header *ip)
+{
+ uint32_t partial = 0;
+
+ partial = csum_add32(partial, get_16aligned_be32(&ip->ip_src));
+ partial = csum_add32(partial, get_16aligned_be32(&ip->ip_dst));
+ partial = csum_add16(partial, htons(ip->ip_proto));
+ partial = csum_add16(partial, htons(ntohs(ip->ip_tot_len) -
+ IP_IHL(ip->ip_ihl_ver) * 4));
+
+ return partial;
+}