Fixes ICMP block reuse (checksumming)
[akaros.git] / kern / src / net / icmp.c
index 67f7781..ffbc524 100644 (file)
@@ -141,7 +141,7 @@ extern char *icmpconnect(struct conv *c, char **argv, int argc)
 
 extern int icmpstate(struct conv *c, char *state, int n)
 {
-       return snprintf(state, n, "%s qin %d qout %d",
+       return snprintf(state, n, "%s qin %d qout %d\n",
                                        "Datagram",
                                        c->rq ? qlen(c->rq) : 0, c->wq ? qlen(c->wq) : 0);
 }
@@ -297,6 +297,9 @@ static struct block *mkechoreply(struct block *bp)
        Icmp *q;
        uint8_t ip[4];
 
+       /* we're repurposing bp to send it back out.  we need to remove any inbound
+        * checksum flags (which were saying the HW did the checksum) */
+       bp->flag &= ~BCKSUM_FLAGS;
        q = (Icmp *) bp->rp;
        q->vihl = IP_VER4;
        memmove(ip, q->src, sizeof(q->dst));