fix igbe bug
authorAli Saidi <saidi@eecs.umich.edu>
Mon, 30 Apr 2007 17:18:44 +0000 (13:18 -0400)
committerAli Saidi <saidi@eecs.umich.edu>
Mon, 30 Apr 2007 17:18:44 +0000 (13:18 -0400)
--HG--
extra : convert_revision : 01ffc08f5c1ec827a42f60562ae7e10176ffdb7f

src/dev/i8254xGBe.cc

index 3d08bca1e41c6199e4583f73f9d6f3d48e912980..6acd061322dccb66067db485554c7530532935cd 100644 (file)
@@ -710,7 +710,7 @@ IGbE::RxDescCache::pktComplete()
             DPRINTF(EthernetDesc, "Checking UDP checksum\n");
             status |= RXDS_UDPCS;
             desc->csum = htole(cksum(udp));
-            if (cksum(tcp) != 0) {
+            if (cksum(udp) != 0) {
                 DPRINTF(EthernetDesc, "Checksum is bad!!\n");
                 err |= RXDE_TCPE;
             }
@@ -927,11 +927,13 @@ IGbE::TxDescCache::pktComplete()
        if (TxdOp::txsm(desc)) {
            if (isTcp) {
                 TcpPtr tcp(ip);
+                assert(tcp);
                 tcp->sum(0);
                 tcp->sum(cksum(tcp));
                 DPRINTF(EthernetDesc, "Calculated TCP checksum\n");
            } else {
                 UdpPtr udp(ip);
+                assert(udp);
                 udp->sum(0);
                 udp->sum(cksum(udp));
                 DPRINTF(EthernetDesc, "Calculated UDP checksum\n");
@@ -1028,7 +1030,7 @@ IGbE::TxDescCache::hasOutstandingEvents()
 void
 IGbE::restartClock()
 {
-    if (!tickEvent.scheduled() && (rxTick || txTick) && getState() ==
+    if (!tickEvent.scheduled() && (rxTick || txTick || txFifoTick) && getState() ==
             SimObject::Running)
         tickEvent.schedule((curTick/cycles(1)) * cycles(1) + cycles(1));
 }