From 89a308c208753598fc189f280110d689b5c667ca Mon Sep 17 00:00:00 2001 From: Stefan Tatschner Date: Thu, 5 Dec 2024 12:56:49 +0100 Subject: [PATCH 1/3] fix: Correct if condition for broadcast addresses --- src/gallia/commands/discover/doip.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gallia/commands/discover/doip.py b/src/gallia/commands/discover/doip.py index d73351139..6259174b8 100644 --- a/src/gallia/commands/discover/doip.py +++ b/src/gallia/commands/discover/doip.py @@ -494,7 +494,7 @@ async def create_DoIP_conn( def get_broadcast_addrs() -> list[AddrInfo]: out = [] for iface in net_if_addrs(): - if iface.is_up() or not iface.can_broadcast(): + if not (iface.is_up() and iface.can_broadcast()): continue for addr in iface.addr_info: From 8fc47c76b84140178c675002f867e94b7ebdb76f Mon Sep 17 00:00:00 2001 From: Stefan Tatschner Date: Thu, 5 Dec 2024 12:58:37 +0100 Subject: [PATCH 2/3] refactor: Move function to utils --- src/gallia/commands/discover/doip.py | 18 ++---------------- src/gallia/utils.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/gallia/commands/discover/doip.py b/src/gallia/commands/discover/doip.py index 6259174b8..8bb2bc927 100644 --- a/src/gallia/commands/discover/doip.py +++ b/src/gallia/commands/discover/doip.py @@ -29,7 +29,7 @@ TimingAndCommunicationParameters, VehicleAnnouncementMessage, ) -from gallia.utils import AddrInfo, net_if_addrs +from gallia.utils import net_if_broadcast_addrs logger = get_logger(__name__) @@ -490,22 +490,8 @@ async def create_DoIP_conn( continue return conn - @staticmethod - def get_broadcast_addrs() -> list[AddrInfo]: - out = [] - for iface in net_if_addrs(): - if not (iface.is_up() and iface.can_broadcast()): - continue - - for addr in iface.addr_info: - # We only work with broadcastable IPv4. - if not addr.is_v4() or addr.broadcast is None: - continue - out.append(addr) - return out - async def run_udp_discovery(self) -> list[tuple[str, int]]: - addrs = self.get_broadcast_addrs() + addrs = net_if_broadcast_addrs() found = [] for addr in addrs: diff --git a/src/gallia/utils.py b/src/gallia/utils.py index 59f3c9e47..6e0f6cbe5 100644 --- a/src/gallia/utils.py +++ b/src/gallia/utils.py @@ -361,3 +361,17 @@ def net_if_addrs() -> list[Interface]: logger.error("https://github.com/Fraunhofer-AISEC/gallia/issues") logger.error(e.json()) raise + + +def net_if_broadcast_addrs() -> list[AddrInfo]: + out = [] + for iface in net_if_addrs(): + if not (iface.is_up() and iface.can_broadcast()): + continue + + for addr in iface.addr_info: + # We only work with broadcastable IPv4. + if not addr.is_v4() or addr.broadcast is None: + continue + out.append(addr) + return out From d6d4e5d84a5250e0a7499153692e94036ec2ede7 Mon Sep 17 00:00:00 2001 From: Stefan Tatschner Date: Thu, 5 Dec 2024 13:01:09 +0100 Subject: [PATCH 3/3] fix: Use ip address as a string value --- src/gallia/commands/discover/doip.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gallia/commands/discover/doip.py b/src/gallia/commands/discover/doip.py index 8bb2bc927..6409b2c2f 100644 --- a/src/gallia/commands/discover/doip.py +++ b/src/gallia/commands/discover/doip.py @@ -499,11 +499,11 @@ async def run_udp_discovery(self) -> list[tuple[str, int]]: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.setblocking(False) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) - sock.bind((addr.local, 0)) + sock.bind((str(addr.local), 0)) loop = asyncio.get_running_loop() hdr = GenericHeader(0xFF, PayloadTypes.VehicleIdentificationRequestMessage, 0x00) - await loop.sock_sendto(sock, hdr.pack(), (addr.broadcast, 13400)) + await loop.sock_sendto(sock, hdr.pack(), (str(addr.broadcast), 13400)) try: while True: data, from_addr = await asyncio.wait_for(loop.sock_recvfrom(sock, 1024), 2)