From 474b6779d81c191d00cdb99b7fb5814c604fbc55 Mon Sep 17 00:00:00 2001 From: Pavel Patsey Date: Thu, 23 Jan 2025 10:15:30 +0300 Subject: [PATCH] add calc_dip function --- tests/cidr4_merge/test_cidr4_merger.py | 7 +++++++ vpn_manager/cidr4_merge/cidr4_merger.py | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/tests/cidr4_merge/test_cidr4_merger.py b/tests/cidr4_merge/test_cidr4_merger.py index 2e917c9..28acd42 100644 --- a/tests/cidr4_merge/test_cidr4_merger.py +++ b/tests/cidr4_merge/test_cidr4_merger.py @@ -2,6 +2,7 @@ import pytest from vpn_manager.cidr4_merge.cidr4_merger import ( Cidr4MergerError, + calc_dip, cidr4_to_node, find_parent, make_cidr4, @@ -84,3 +85,9 @@ def test_find_parent__with_exception(): == "Error! Trying to find common parent of network and subnet! parent_node=(0, 0), a=(0, 0), b=(3221225472, 2)." ) assert exc_info.type is Cidr4MergerError + + +def test_calc_dip(): + assert calc_dip(26, 27) == 67108864 + assert calc_dip(26, 28) == 201326592 + assert calc_dip(26, 29) == 469762048 diff --git a/vpn_manager/cidr4_merge/cidr4_merger.py b/vpn_manager/cidr4_merge/cidr4_merger.py index 57a5b4d..f92b9e2 100644 --- a/vpn_manager/cidr4_merge/cidr4_merger.py +++ b/vpn_manager/cidr4_merge/cidr4_merger.py @@ -42,6 +42,14 @@ def find_parent(a: Node, b: Node) -> Node: return parent_node +def calc_dip(mask_len_a: int, mask_len_b: int) -> int: + dip = 0 + while mask_len_a < mask_len_b: + dip += 1 << mask_len_a + mask_len_a += 1 + return dip + + def make_cidr4(ip, mask_len) -> str: lst = [str(ip >> (i << 3) & 0xFF) for i in reversed(range(4))] ip_address = ".".join(lst)