blob: cc18e2dfd146600cdf621987297a1ea27c5d6622 [file] [log] [blame]
# Copyright 2017-present Open Networking Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Copyright 2016-present Ciena Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import threading
import sys
import os
import time
import monotonic
from scapy.all import *
class McastTraffic(threading.Thread):
DST_MAC_DEFAULT = '01:00:5e:00:01:01'
SRC_MAC_DEFAULT = '02:88:b4:e4:90:77'
SRC_IP_DEFAULT = '1.2.3.4'
SEND_STATE = 1
RECV_STATE = 2
def __init__(self, addrs, iface = 'eth0', dst_mac = DST_MAC_DEFAULT, src_mac = SRC_MAC_DEFAULT,
src_ip = SRC_IP_DEFAULT, cb = None, arg = None):
threading.Thread.__init__(self)
self.addrs = addrs
self.iface = iface
self.dst_mac = dst_mac
self.src_mac = src_mac
self.src_ip = src_ip
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