summaryrefslogtreecommitdiff
path: root/src/user/app/ethdump/icmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/user/app/ethdump/icmp.c')
-rw-r--r--src/user/app/ethdump/icmp.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/user/app/ethdump/icmp.c b/src/user/app/ethdump/icmp.c
index b3eff93..94f718e 100644
--- a/src/user/app/ethdump/icmp.c
+++ b/src/user/app/ethdump/icmp.c
@@ -1,6 +1,5 @@
#include "proto.h"
#include "util.h"
-#include <string.h>
enum {
Type = 0,
@@ -20,7 +19,7 @@ void icmp_parse(const uint8_t *buf, size_t len, struct ipv4 ip) {
.ip.e.dst = ip.e.src,
});
memcpy(pkt, buf + Payload, len - Payload);
- icmp_finish(pkt);
+ icmp_finish(pkt, len - Payload);
}
}
@@ -29,9 +28,10 @@ uint8_t *icmp_start(size_t len, struct icmp i) {
uint8_t *pkt = ipv4_start(Payload + len, i.ip);
pkt[Type] = i.type;
pkt[Code] = i.code;
- nput16(pkt + Checksum, ip_checksum(pkt, Payload + len));
return pkt + Payload;
}
-void icmp_finish(uint8_t *pkt) {
- ipv4_finish(pkt - Payload);
+void icmp_finish(uint8_t *pkt, size_t len) {
+ pkt -= Payload;
+ nput16(pkt + Checksum, ip_checksum(pkt, Payload + len));
+ ipv4_finish(pkt);
}