Skip to content

Commit

Permalink
Fix removal of IGMP/MLD interfaces
Browse files Browse the repository at this point in the history
  • Loading branch information
pedrofran12 authored Jun 6, 2020
1 parent c488888 commit f0af8ae
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 14 deletions.
8 changes: 4 additions & 4 deletions hpimdm/Kernel.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,17 +117,17 @@ def create_membership_interface(self, interface_name: str):
def _create_membership_interface_object(self, interface_name, index):
raise NotImplementedError

def remove_interface(self, interface_name, igmp: bool = False, hpim: bool = False):
def remove_interface(self, interface_name, membership: bool = False, hpim: bool = False):
thread = None
with self.rwlock.genWlock():
hpim_interface = self.hpim_interface.get(interface_name)
membership_interface = self.membership_interface.get(interface_name)
if (not igmp and not hpim) or (interface_name not in self.vif_name_to_index_dic):
if (not membership and not hpim) or (interface_name not in self.vif_name_to_index_dic):
return
if hpim and hpim_interface is not None:
hpim_interface = self.hpim_interface.pop(interface_name)
hpim_interface.remove()
if igmp and membership_interface is not None:
if membership and membership_interface is not None:
membership_interface = self.membership_interface.pop(interface_name)
membership_interface.remove()

Expand All @@ -152,7 +152,7 @@ def notify_interface_changes(self, interface_name):
igmp_was_enabled = interface_name in self.membership_interface
hpim_was_enabled = interface_name in self.hpim_interface

self.remove_interface(interface_name, igmp=True, hpim=True)
self.remove_interface(interface_name, membership=True, hpim=True)
if igmp_was_enabled:
self.create_membership_interface(interface_name)
if hpim_was_enabled:
Expand Down
10 changes: 5 additions & 5 deletions hpimdm/Main.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,19 +50,19 @@ def add_membership_interface(interface_name, ipv4=True, ipv6=False):
kernel_v6.create_membership_interface(interface_name=interface_name)


def remove_interface(interface_name, hpim=False, igmp=False, ipv4=True, ipv6=False):
def remove_interface(interface_name, hpim=False, membership=False, ipv4=True, ipv6=False):
"""
Remove HPIM-DM/IGMP interface
"""
if interface_name == "*":
for interface_name in netifaces.interfaces():
remove_interface(interface_name, hpim, igmp, ipv4, ipv6)
remove_interface(interface_name, hpim, membership, ipv4, ipv6)
return

if ipv4 and kernel is not None:
kernel.remove_interface(interface_name, hpim=hpim, igmp=igmp)
kernel.remove_interface(interface_name, hpim=hpim, membership=membership)
if ipv6 and kernel_v6 is not None:
kernel_v6.remove_interface(interface_name, hpim=hpim, mld=igmp)
kernel_v6.remove_interface(interface_name, hpim=hpim, membership=membership)


def list_neighbors(ipv4=False, ipv6=False):
Expand Down Expand Up @@ -339,7 +339,7 @@ def stop():
"""
Stop process
"""
remove_interface("*", hpim=True, igmp=True)
remove_interface("*", hpim=True, membership=True, ipv4=True, ipv6=True)
if kernel is not None:
kernel.exit()
if kernel_v6 is not None:
Expand Down
6 changes: 3 additions & 3 deletions hpimdm/Run.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from hpimdm.daemon.Daemon import Daemon
from hpimdm import Main

VERSION = "1.3"
VERSION = "1.3.1"


def client_socket(data_to_send):
Expand Down Expand Up @@ -96,10 +96,10 @@ def run(self):
Main.remove_interface(args.remove_interface[0], hpim=True, ipv4=args.ipv4, ipv6=args.ipv6)
connection.shutdown(socket.SHUT_RDWR)
elif 'remove_interface_igmp' in args and args.remove_interface_igmp:
Main.remove_interface(args.remove_interface_igmp[0], igmp=True, ipv4=True, ipv6=False)
Main.remove_interface(args.remove_interface_igmp[0], membership=True, ipv4=True, ipv6=False)
connection.shutdown(socket.SHUT_RDWR)
elif 'remove_interface_mld' in args and args.remove_interface_mld:
Main.remove_interface(args.remove_interface_mld[0], igmp=True, ipv4=False, ipv6=True)
Main.remove_interface(args.remove_interface_mld[0], membership=True, ipv4=False, ipv6=True)
connection.shutdown(socket.SHUT_RDWR)
elif 'list_hmac_algorithms' in args and args.list_hmac_algorithms:
connection.sendall(pickle.dumps(Main.list_hash_algorithms()))
Expand Down
4 changes: 2 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
description="HPIM-DM protocol",
long_description=open("README.md", "r").read(),
long_description_content_type="text/markdown",
keywords="HPIM-DM Multicast Routing Protocol Dense-Mode Router",
version="1.3",
keywords="HPIM-DM Multicast Routing Protocol Dense-Mode Router IPv4 IPv6",
version="1.3.1",
url="http://github.com/pedrofran12/hpim_dm",
author="Pedro Oliveira",
author_email="[email protected]",
Expand Down

0 comments on commit f0af8ae

Please sign in to comment.