Adding more IGMP test cases
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
+
+