From 461d1c97f3aaf0ab9f8996e1a8f24c6b8204d6b4 Mon Sep 17 00:00:00 2001 From: Joshua Spence Date: Mon, 30 Oct 2023 23:07:48 +1100 Subject: [PATCH] Allow a wider range of broadcast addresses (#69) --- multicast-relay.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/multicast-relay.py b/multicast-relay.py index 1ca5ce4..f6067e1 100755 --- a/multicast-relay.py +++ b/multicast-relay.py @@ -313,6 +313,7 @@ def addListener(self, addr, port, service): rx.bind(('0.0.0.0', port)) self.receivers.append(rx) + self.bindings.add((broadcast, port)) listenIP = '255.255.255.255' elif self.isMulticast(addr): @@ -668,7 +669,7 @@ def loop(self): broadcastPacket = False if receivingInterface == 'local': for tx in self.transmitters: - if origDstAddr == tx['relay']['addr'] and origDstPort == tx['relay']['port'] \ + if (origDstAddr == tx['relay']['addr'] or origDstAddr == tx.get('broadcast')) and origDstPort == tx['relay']['port'] \ and self.onNetwork(addr, tx['addr'], tx['netmask']): receivingInterface = tx['interface'] broadcastPacket = (origDstAddr == tx['broadcast']) @@ -696,7 +697,7 @@ def loop(self): origDstAddr = tx['broadcast'] data = data[:16] + socket.inet_aton(tx['broadcast']) + data[20:] - if origDstAddr == tx['relay']['addr'] and origDstPort == tx['relay']['port'] and (self.oneInterface or not self.onNetwork(addr, tx['addr'], tx['netmask'])): + if (origDstAddr == tx['relay']['addr'] or origDstAddr == tx.get('broadcast')) and origDstPort == tx['relay']['port'] and (self.oneInterface or not self.onNetwork(addr, tx['addr'], tx['netmask'])): destMac = destMac if destMac else self.etherAddrs[dstAddr] if tx['interface'] in self.masquerade: