Test-Voltha:
    Fixing issues in IGMP tests.

Change-Id: Ie20efb43db03f6da0c799b39fecb075d29122b95
diff --git a/src/test/utils/Channels.py b/src/test/utils/Channels.py
index 594b4f9..83706b3 100644
--- a/src/test/utils/Channels.py
+++ b/src/test/utils/Channels.py
@@ -147,6 +147,7 @@
         self.iface_mcast = iface_mcast
         self.mcast_cb = mcast_cb
         self.src_list = src_list
+        self.streams_list = []
         for c in range(self.num):
             self.channel_states[c] = [self.Idle]
         IgmpChannel.__init__(self, ssm_list = self.channels, iface=iface, src_list = src_list)
@@ -173,8 +174,19 @@
         if self.state == self.Stopped:
             if self.streams:
                 self.streams.stop()
-            self.streams = McastTraffic(self.channels, iface=self.iface_mcast, cb = self.mcast_cb)
-            self.streams.start()
+            if self.streams_list:
+               for i in range(len(self.streams_list)):
+                  self.streams_list[i].stop()
+            if self.src_list:
+               for i in range(len(self.src_list)):
+                  self.streams_list.append(McastTraffic(self.channels, iface=self.iface_mcast, cb = self.mcast_cb, src_ip = self.src_list[i]))
+                  self.streams_list[i].start()
+#               self.streams = McastTraffic(self.channels, iface=self.iface_mcast, cb = self.mcast_cb)
+#               self.streams.start()
+
+            else:
+                self.streams = McastTraffic(self.channels, iface=self.iface_mcast, cb = self.mcast_cb)
+                self.streams.start()
             self.state = self.Started
 
     def join(self, chan = None, src_list = None, record_type = None):
@@ -208,8 +220,8 @@
             self.last_chan = None
         return True
 
-    def join_next(self, chan = None, leave_flag = True):
-        if chan is None:
+    def join_next(self, chan = None, src_list = None, leave_flag = True):
+        if chan is None and self.last_chan is not None:
             chan = self.last_chan
             if chan is None:
                 return None
@@ -218,15 +230,18 @@
         else:
             leave = chan - 1
             join = chan
+        else:
+            leave = 0
+            join = 0
 
         if join >= self.num:
             join = 0
 
         if leave >= 0 and leave != join:
             if leave_flag is True:
-                self.leave(leave)
+                self.leave(leave, src_list = src_list)
 
-        return self.join(join)
+        return self.join(join, src_list = src_list)
 
     def jump(self):
         chan = self.last_chan
@@ -281,6 +296,9 @@
     def stop(self):
         if self.streams:
             self.streams.stop()
+        if self.streams_list:
+           for i in range(len(self.streams_list)):
+               self.streams_list[i].stop()
         self.state = self.Stopped
 
     def get_state(self, chan):