[netstack] Add IPStats.PacketsSent

This change adds a PacketsSent field to the tcpip.IPStats structs which
counts the total number of IP packets sent via the WritePacket method.

Change-Id: I1700d54bb26b9c42466ad64279014e8069f298d6
diff --git a/tcpip/network/ipv4/ipv4.go b/tcpip/network/ipv4/ipv4.go
index 6617998..1cace79 100644
--- a/tcpip/network/ipv4/ipv4.go
+++ b/tcpip/network/ipv4/ipv4.go
@@ -114,6 +114,7 @@
 		DstAddr:     r.RemoteAddress,
 	})
 	ip.SetChecksum(^ip.CalculateChecksum())
+	atomic.AddUint64(&r.MutableStats().IP.PacketsSent, 1)
 
 	return e.linkEP.WritePacket(r, hdr, payload, ProtocolNumber)
 }
diff --git a/tcpip/network/ipv6/ipv6.go b/tcpip/network/ipv6/ipv6.go
index 8e462e4..217d4de 100644
--- a/tcpip/network/ipv6/ipv6.go
+++ b/tcpip/network/ipv6/ipv6.go
@@ -86,6 +86,7 @@
 		SrcAddr:       r.LocalAddress,
 		DstAddr:       r.RemoteAddress,
 	})
+	atomic.AddUint64(&r.MutableStats().IP.PacketsSent, 1)
 
 	return e.linkEP.WritePacket(r, hdr, payload, ProtocolNumber)
 }
diff --git a/tcpip/stack/stack.go b/tcpip/stack/stack.go
index 5ed467a..3805818 100644
--- a/tcpip/stack/stack.go
+++ b/tcpip/stack/stack.go
@@ -153,6 +153,7 @@
 		DroppedPackets:                    atomic.LoadUint64(&s.stats.DroppedPackets),
 		IP: tcpip.IPStats{
 			PacketsReceived: atomic.LoadUint64(&s.stats.IP.PacketsReceived),
+			PacketsSent:     atomic.LoadUint64(&s.stats.IP.PacketsSent),
 		},
 		TCP: tcpip.TCPStats{
 			ActiveConnectionOpenings:  atomic.LoadUint64(&s.stats.TCP.ActiveConnectionOpenings),
diff --git a/tcpip/tcpip.go b/tcpip/tcpip.go
index 646d5df..7d39fc9 100644
--- a/tcpip/tcpip.go
+++ b/tcpip/tcpip.go
@@ -415,6 +415,8 @@
 	// PacketsReceived is the total number of IP packets received via
 	// HandlePacket.
 	PacketsReceived uint64
+	// PacketsSent is the total number of IP packets sent via WritePacket.
+	PacketsSent uint64
 }
 
 // TCPStats collects TCP-specific stats.