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
+