@@ -40,11 +40,15 @@ def create_linux_bridge( brname: str ) -> bool:
40
40
log .print_verbose ( f"Enable Linux bridge '{ brname } ': { status } " )
41
41
42
42
status = linuxbridge .configure_bridge_forwarding (brname )
43
- if status :
44
- status = external_commands .run_command (
45
- ['sudo' ,'nft' ,f'insert rule ip6 filter DOCKER-USER oifname "{ brname } " counter accept' ],
46
- check_result = True ,return_stdout = True )
47
- log .print_verbose (f"Insert ipv6 nftables rule for Linux bridge '{ brname } ': { status } " )
43
+ if status is False :
44
+ return False
45
+ return insert_ipv6_forwarding_rule ( brname )
46
+
47
+ def insert_ipv6_forwarding_rule ( brname : str ) -> bool :
48
+ status = external_commands .run_command (
49
+ ['sudo' ,'nft' ,f'insert rule ip6 filter DOCKER-USER oifname "{ brname } " counter accept' ],
50
+ check_result = True ,return_stdout = True )
51
+ log .print_verbose (f"Insert ipv6 nftables rule for Linux bridge '{ brname } ': { status } " )
48
52
return status
49
53
50
54
def destroy_linux_bridge ( brname : str ) -> bool :
@@ -53,7 +57,30 @@ def destroy_linux_bridge( brname: str ) -> bool:
53
57
if status is False :
54
58
return False
55
59
log .print_verbose ( f"Delete Linux bridge '{ brname } ': { status } " )
56
- return True
60
+ return remove_ipv6_forwarding_rule ( brname )
61
+
62
+ def remove_ipv6_forwarding_rule ( brname : str ) -> bool :
63
+ status = external_commands .run_command (
64
+ ['sudo' ,'nft' ,'--handle' ,'--json' ,'list chain ip6 filter DOCKER-USER' ],
65
+ check_result = True ,return_stdout = True )
66
+ if status is False :
67
+ log .print_verbose ( f"remove_ipv6_forwarding_rule failed to list rules for Linux bridge '{ brname } '" )
68
+ return False
69
+ try :
70
+ result = json .loads (status )
71
+ for rule in result ['nftables' ]:
72
+ if 'rule' in rule and rule ["rule" ]["expr" ][0 ]["match" ]["right" ]== brname :
73
+ handle = rule ["rule" ]["handle" ]
74
+ status = external_commands .run_command (
75
+ ['sudo' ,'nft' ,f'destroy rule ip6 filter DOCKER-USER handle { handle } ' ],
76
+ check_result = True ,return_stdout = True )
77
+ log .print_verbose (f"Remove ipv6 nftables rule for Linux bridge '{ brname } ': { status } " )
78
+ return status
79
+ log .print_verbose ( f"remove_ipv6_forwarding_rule did not find any rules for '{ brname } '" )
80
+ return True
81
+ except Exception as ex :
82
+ log .print_verbose (ex )
83
+ return False
57
84
58
85
def create_ovs_bridge ( brname : str ) -> bool :
59
86
status = external_commands .run_command (
0 commit comments