Adding more IGMP test cases
diff --git a/src/test/utils/IGMP.py b/src/test/utils/IGMP.py
index 95ce1ec..64aa27f 100644
--- a/src/test/utils/IGMP.py
+++ b/src/test/utils/IGMP.py
@@ -112,7 +112,7 @@
     def build_leave_msg(self, group = None):
         return self.build_igmp(msg_type = IGMPV3_REPORT, 
                                group = group, 
-                               record_type = IGMP_INCLUDE, 
+                               record_type = IGMP_EXCLUDE, 
                                src_list = [])
 
     def build_ip_igmp(self, 
diff --git a/src/test/utils/McastTraffic.py b/src/test/utils/McastTraffic.py
new file mode 100644
index 0000000..2bd28e2
--- /dev/null
+++ b/src/test/utils/McastTraffic.py
@@ -0,0 +1,49 @@
+import threading
+import sys
+import os
+import time
+import monotonic
+from scapy.all import *
+
+class McastTraffic(threading.Thread):
+
+    dst_mac = '01:00:5e:00:01:01'
+    src_mac = '02:88:b4:e4:90:77'
+    src_ip = '1.2.3.4'
+    SEND_STATE = 1
+    RECV_STATE = 2
+    def __init__(self, addrs, iface = 'eth0', cb = None, arg = None):
+        threading.Thread.__init__(self)
+        self.addrs = addrs
+        self.iface = iface
+        self.cb = cb
+        self.arg = arg
+        self.state = self.SEND_STATE | self.RECV_STATE
+
+    def run(self):
+        eth = Ether(dst = self.dst_mac, src = self.src_mac)
+        while self.state & self.SEND_STATE:
+            for addr in self.addrs:
+                #data = repr(time.time())
+                data = repr(monotonic.monotonic())
+                ip = IP(dst = addr, src = self.src_ip)
+                sendp(eth/ip/data, iface = self.iface)
+            if self.cb:
+                self.cb(self.arg)
+
+    def stop(self):
+        self.state = 0
+
+    def stopReceives(self):
+        self.state &= ~self.RECV_STATE
+
+    def stopSends(self):
+        self.state &= ~self.SEND_STATE
+
+    def isRecvStopped(self):
+        return False if self.state & self.RECV_STATE else True
+
+    def isSendStopped(self):
+        return False if self.state & self.SEND_STATE else True
+
+    
diff --git a/src/test/utils/Stats.py b/src/test/utils/Stats.py
new file mode 100644
index 0000000..3d8e40c
--- /dev/null
+++ b/src/test/utils/Stats.py
@@ -0,0 +1,34 @@
+from math import sqrt
+
+class Stats:
+      def __init__(self):
+            self.count = 0
+            self.start = 0
+            self.delta = 0
+            self.min = 0
+            self.max = 0
+            self.delta_squares = 0
+
+      def update(self, packets = 0, t = 0):
+            self.count += packets
+            t *= 1000000 ##convert to usecs
+            if self.start == 0:
+                  self.start = t
+            self.delta += t
+            self.delta_squares += t*t
+            if self.min == 0 or t < self.min:
+                  self.min = t
+            if self.max == 0 or t > self.max:
+                  self.max = t
+
+      def __repr__(self):
+            if self.count == 0:
+                  self.count = 1
+            mean = self.delta/self.count
+            mean_square = mean*mean
+            delta_square_mean = self.delta_squares/self.count
+            std_mean = sqrt(delta_square_mean - mean_square)
+            r = 'Avg %.3f usecs, Std deviation %.3f usecs, Min %.3f, Max %.3f for %d packets\n' %(
+                  mean, std_mean, self.min, self.max, self.count)
+            return r
+