Skip to content

Commit 0788957

Browse files
committed
connections: Validate mathcing vlans using packet's src mac
1 parent 33a9b51 commit 0788957

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

src/connections.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,20 @@ def __init__(self):
2929

3030
async def _read_message_queue(self):
3131
while True:
32-
packet, device_entry = await self._message_queue.get()
33-
await self._process_packet(packet, device_entry)
32+
packet = await self._message_queue.get()
33+
await self._process_packet(packet)
3434

35-
async def _process_packet(self, packet, src_device_entry):
35+
async def _process_packet(self, packet):
3636
dst_mac = Ether(packet).dst
37+
src_mac = Ether(packet).src
38+
39+
src_vlan = self._get_vlan_by_mac(src_mac)
40+
if src_vlan is None:
41+
return None
3742

3843
# Looking for the destination device
3944
for dst_device in self._devices:
40-
if dst_device.dev.get_mac == dst_mac and dst_device.vlan == src_device_entry.vlan:
45+
if dst_device.dev.get_mac == dst_mac and dst_device.vlan == src_vlan:
4146

4247
if dst_device.port_type == PortType.TRUNK:
4348
packet = add_vlan_tag(packet, dst_device.vlan)
@@ -48,7 +53,7 @@ async def _process_packet(self, packet, src_device_entry):
4853
def _read_raw_packet(self, device_entry):
4954
try:
5055
packet = device_entry.sock.recv(IP_MAX_SIZE)
51-
self._message_queue.put_nowait((packet, device_entry))
56+
self._message_queue.put_nowait(packet)
5257
except OSError:
5358
# TODO: Currently the interface is closed successfully, but the cb
5459
# raises an exception.
@@ -83,6 +88,13 @@ def _update_arp_tables(self, new_dev):
8388
curr_dev.dev.run_from_namespace('arp -s {ip} {mac}'.format(
8489
ip=new_dev.dev.get_ip, mac=new_dev.dev.get_mac))
8590

91+
def _get_vlan_by_mac(self, mac):
92+
for dev_entry in self._devices:
93+
if mac == dev_entry.dev.get_mac:
94+
return dev_entry.vlan
95+
96+
return None
97+
8698
def append_device(self, dev, vlan, port_type):
8799
def _append_device_entry(self, new_dev_entry):
88100
self._devices.append(new_dev_entry)

0 commit comments

Comments
 (0)