Skip to content

Commit ea1bdeb

Browse files
committed
Add map_ipv4_to_ipv6 function with tests
1 parent 9d16ce1 commit ea1bdeb

2 files changed

Lines changed: 28 additions & 0 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
def map_ipv4_to_ipv6(ip: str) -> str:
2+
if "/" not in ip:
3+
# No CIDR suffix, assume /32
4+
return f"::ffff:{ip}/128"
5+
6+
parts = ip.split("/")
7+
suffix = int(parts[1])
8+
# Add 96 to the suffix, since ::ffff: is 96 bits
9+
return f"::ffff:{parts[0]}/{suffix + 96}"
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import pytest
2+
from .map_ipv4_to_ipv6 import map_ipv4_to_ipv6
3+
4+
5+
@pytest.mark.parametrize(
6+
"ip, expected",
7+
[
8+
("127.0.0.0", "::ffff:127.0.0.0/128"),
9+
("127.0.0.0/8", "::ffff:127.0.0.0/104"),
10+
("10.0.0.0", "::ffff:10.0.0.0/128"),
11+
("10.0.0.0/8", "::ffff:10.0.0.0/104"),
12+
("10.0.0.1", "::ffff:10.0.0.1/128"),
13+
("10.0.0.1/8", "::ffff:10.0.0.1/104"),
14+
("192.168.0.0/16", "::ffff:192.168.0.0/112"),
15+
("172.16.0.0/12", "::ffff:172.16.0.0/108"),
16+
],
17+
)
18+
def test_map_ipv4_to_ipv6(ip, expected):
19+
assert map_ipv4_to_ipv6(ip) == expected

0 commit comments

Comments
 (0)