Skip to content

Commit

Permalink
Move all code to package hpimdm (#2)
Browse files Browse the repository at this point in the history
  • Loading branch information
pedrofran12 committed Jan 5, 2020
1 parent d738117 commit c5696c9
Show file tree
Hide file tree
Showing 67 changed files with 330 additions and 324 deletions.
191 changes: 3 additions & 188 deletions Run.py
Original file line number Diff line number Diff line change
@@ -1,191 +1,6 @@
#!/usr/bin/env python3

import os
import sys
import socket
import argparse
import traceback
import _pickle as pickle
from Daemon.Daemon import Daemon
import Main
from hpimdm import Run


def client_socket(data_to_send):
"""
Send command to daemon process through a socket
"""
# Create a UDS socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)

# Connect the socket to the port where the server is listening
server_address = '/tmp/hpim_uds_socket'
#print('connecting to %s' % server_address)
try:
sock.connect(server_address)
sock.sendall(pickle.dumps(data_to_send))
data_rcv = sock.recv(1024 * 256)
if data_rcv:
print(pickle.loads(data_rcv))
except socket.error:
pass
finally:
#print('closing socket')
sock.close()


class MyDaemon(Daemon):
def run(self):
"""
Daemon process will run this method until the daemon process explicitly is stopped
"""
Main.main()
server_address = '/tmp/hpim_uds_socket'

# Make sure the socket does not already exist
try:
os.unlink(server_address)
except OSError:
if os.path.exists(server_address):
raise

# Create a UDS socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)

# Bind the socket to the port
sock.bind(server_address)

# Listen for incoming connections
sock.listen(1)
while True:
try:
connection, client_address = sock.accept()
data = connection.recv(256 * 1024)
print(sys.stderr, 'sending data back to the client')
print(pickle.loads(data))
args = pickle.loads(data)
if 'list_interfaces' in args and args.list_interfaces:
connection.sendall(pickle.dumps(Main.list_enabled_interfaces()))
elif 'list_neighbors' in args and args.list_neighbors:
connection.sendall(pickle.dumps(Main.list_neighbors()))
elif 'list_state' in args and args.list_state:
connection.sendall(pickle.dumps(Main.list_state()))
elif 'list_neighbors_state' in args and args.list_neighbors_state:
connection.sendall(pickle.dumps(Main.list_neighbors_state()))
elif 'list_sequence_numbers' in args and args.list_sequence_numbers:
connection.sendall(pickle.dumps(Main.list_sequence_numbers()))
elif 'add_interface' in args and args.add_interface:
Main.add_protocol_interface(args.add_interface[0])
connection.shutdown(socket.SHUT_RDWR)
elif 'flood_initial_data' in args and args.flood_initial_data:
connection.sendall(pickle.dumps(Main.change_initial_flood_setting()))
elif 'add_interface_igmp' in args and args.add_interface_igmp:
Main.add_igmp_interface(args.add_interface_igmp[0])
connection.shutdown(socket.SHUT_RDWR)
elif 'remove_interface' in args and args.remove_interface:
Main.remove_interface(args.remove_interface[0], pim=True)
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)
connection.shutdown(socket.SHUT_RDWR)
elif 'list_hmac_algorithms' in args and args.list_hmac_algorithms:
connection.sendall(pickle.dumps(Main.list_hash_algorithms()))
elif 'add_interface_security' in args and args.add_interface_security:
Main.add_security_key(args.add_interface_security[0], int(args.add_interface_security[1]),
args.add_interface_security[2], args.add_interface_security[3])
connection.shutdown(socket.SHUT_RDWR)
elif 'remove_interface_security' in args and args.remove_interface_security:
Main.remove_security_key(args.remove_interface_security[0], int(args.remove_interface_security[1]))
connection.shutdown(socket.SHUT_RDWR)
elif 'stop' in args and args.stop:
Main.stop()
connection.shutdown(socket.SHUT_RDWR)
elif 'test' in args and args.test:
Main.test(args.test[0], args.test[1])
connection.shutdown(socket.SHUT_RDWR)
except Exception:
connection.shutdown(socket.SHUT_RDWR)
traceback.print_exc()
finally:
# Clean up the connection
connection.close()


def main():
"""
Entry point for HPIM-DM
"""
parser = argparse.ArgumentParser(description='HPIM-DM protocol')
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument("-start", "--start", action="store_true", default=False,
help="Start Protocol")
group.add_argument("-stop", "--stop", action="store_true", default=False,
help="Stop Protocol")
group.add_argument("-restart", "--restart", action="store_true", default=False,
help="Restart Protocol")
group.add_argument("-li", "--list_interfaces", action="store_true", default=False,
help="List All Interfaces")
group.add_argument("-ln", "--list_neighbors", action="store_true", default=False,
help="List All Neighbors")
group.add_argument("-ls", "--list_state", action="store_true", default=False,
help="List state of IGMP and HPIM-DM")
group.add_argument("-lns", "--list_neighbors_state", action="store_true", default=False,
help="List Upstream and Interest state of all neighbors")
group.add_argument("-lsn", "--list_sequence_numbers", action="store_true", default=False,
help="List Sequence Numbers")
group.add_argument("-mr", "--multicast_routes", action="store_true", default=False,
help="List Multicast Routing table")
group.add_argument("-fid", "--flood_initial_data", action="store_true", default=False,
help="Flood initial data packets")
group.add_argument("-ai", "--add_interface", nargs=1, metavar='INTERFACE_NAME',
help="Add HPIM-DM interface")
group.add_argument("-aiigmp", "--add_interface_igmp", nargs=1, metavar='INTERFACE_NAME',
help="Add IGMP interface")
group.add_argument("-ri", "--remove_interface", nargs=1, metavar='INTERFACE_NAME',
help="Remove HPIM-DM interface")
group.add_argument("-riigmp", "--remove_interface_igmp", nargs=1, metavar='INTERFACE_NAME',
help="Remove IGMP interface")
group.add_argument("-lsec", "--list_hmac_algorithms", action="store_true", default=False,
help="List available HMAC Hash algorithms")
group.add_argument("-aisec", "--add_interface_security", nargs=4, metavar=('INTERFACE_NAME', "SECURITY_IDENTIFIER",
"HASH_FUNCTION", "KEY"),
help="Add security information to interface INTERFACE_NAME. Control messages will be secured " +
" with SECURITY_IDENTIFIER, HMAC algorithm based on HASH_FUNCTION and key KEY." +
" To determine available hash functions run -lsec command")
group.add_argument("-risec", "--remove_interface_security", nargs=2, metavar=('INTERFACE_NAME', "SECURITY_IDENTIFIER"),
help="Remove security information identified by SECURITY_IDENTIFIER from interface INTERFACE_NAME.")
group.add_argument("-v", "--verbose", action="store_true", default=False,
help="Verbose (print all debug messages)")
group.add_argument("-t", "--test", nargs=2, metavar=('ROUTER_NAME', 'SERVER_LOG_IP'),
help="Tester... send log information to SERVER_LOG_IP. Set the router name to ROUTER_NAME")
args = parser.parse_args()

#print(parser.parse_args())

daemon = MyDaemon('/tmp/Daemon-hpim.pid')
if args.start:
print("start")
daemon.start()
sys.exit(0)
elif args.stop:
client_socket(args)
daemon.stop()
sys.exit(0)
elif args.restart:
daemon.restart()
sys.exit(0)
elif args.verbose:
os.system("tail -f stdout")
sys.exit(0)
elif args.multicast_routes:
os.system("ip mroute show")
sys.exit(0)
elif not daemon.is_running():
print("HPIM-DM is not running")
parser.print_usage()
sys.exit(0)

client_socket(args)


if __name__ == "__main__":
main()
if __name__ == '__main__':
Run.main()
File renamed without changes.
File renamed without changes.
File renamed without changes.
8 changes: 4 additions & 4 deletions InterfaceIGMP.py → hpimdm/InterfaceIGMP.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
from ipaddress import IPv4Address
from ctypes import create_string_buffer, addressof

from Packet.ReceivedPacket import ReceivedPacket
from Interface import Interface
from igmp.igmp_globals import Version_1_Membership_Report, Version_2_Membership_Report, Leave_Group, Membership_Query
from hpimdm.Packet.ReceivedPacket import ReceivedPacket
from hpimdm.Interface import Interface
from hpimdm.igmp.igmp_globals import Version_1_Membership_Report, Version_2_Membership_Report, Leave_Group, Membership_Query
if not hasattr(socket, 'SO_BINDTODEVICE'):
socket.SO_BINDTODEVICE = 25

Expand Down Expand Up @@ -47,7 +47,7 @@ def __init__(self, interface_name: str, vif_index: int):
rcv_s.bind((interface_name, 0x0800))
super().__init__(interface_name=interface_name, recv_socket=rcv_s, send_socket=snd_s, vif_index=vif_index)
self.interface_enabled = True
from igmp.RouterState import RouterState
from hpimdm.igmp.RouterState import RouterState
self.interface_state = RouterState(self)
#super()._enable()

Expand Down
52 changes: 26 additions & 26 deletions InterfaceProtocol.py → hpimdm/InterfaceProtocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,36 +8,36 @@
import logging
import netifaces

from Interface import Interface
from Neighbor import Neighbor
import Main
from tree.protocol_globals import MSG_FORMAT, HELLO_HOLD_TIME_TIMEOUT
from ReliableMsgTransmission import ReliableMessageTransmission

from Packet.Packet import Packet
from Packet.ReceivedPacket import ReceivedPacket
from hpimdm.Interface import Interface
from hpimdm.Neighbor import Neighbor
from hpimdm import Main
from hpimdm.tree.protocol_globals import MSG_FORMAT, HELLO_HOLD_TIME_TIMEOUT
from hpimdm.ReliableMsgTransmission import ReliableMessageTransmission

from hpimdm.Packet.Packet import Packet
from hpimdm.Packet.ReceivedPacket import ReceivedPacket
if MSG_FORMAT == "BINARY":
from Packet.PacketProtocolHelloOptions import PacketNewProtocolHelloHoldtime as PacketProtocolHelloHoldtime, \
from hpimdm.Packet.PacketProtocolHelloOptions import PacketNewProtocolHelloHoldtime as PacketProtocolHelloHoldtime, \
PacketNewProtocolHelloCheckpointSN as PacketProtocolHelloCheckpointSN
from Packet.PacketProtocolHello import PacketNewProtocolHello as PacketProtocolHello
from Packet.PacketProtocolHeader import PacketNewProtocolHeader as PacketProtocolHeader
from Packet.PacketProtocolSync import PacketNewProtocolSyncEntry as PacketProtocolHelloSyncEntry,\
from hpimdm.Packet.PacketProtocolHello import PacketNewProtocolHello as PacketProtocolHello
from hpimdm.Packet.PacketProtocolHeader import PacketNewProtocolHeader as PacketProtocolHeader
from hpimdm.Packet.PacketProtocolSync import PacketNewProtocolSyncEntry as PacketProtocolHelloSyncEntry,\
PacketNewProtocolSync as PacketProtocolHelloSync
from Packet.PacketProtocolInterest import PacketNewProtocolNoInterest as PacketProtocolNoInterest,\
from hpimdm.Packet.PacketProtocolInterest import PacketNewProtocolNoInterest as PacketProtocolNoInterest,\
PacketNewProtocolInterest as PacketProtocolInterest
from Packet.PacketProtocolSetTree import PacketNewProtocolUpstream as PacketProtocolUpstream
from Packet.PacketProtocolRemoveTree import PacketNewProtocolNoLongerUpstream as PacketProtocolNoLongerUpstream
from Packet.PacketProtocolAck import PacketNewProtocolAck as PacketProtocolAck
from hpimdm.Packet.PacketProtocolSetTree import PacketNewProtocolUpstream as PacketProtocolUpstream
from hpimdm.Packet.PacketProtocolRemoveTree import PacketNewProtocolNoLongerUpstream as PacketProtocolNoLongerUpstream
from hpimdm.Packet.PacketProtocolAck import PacketNewProtocolAck as PacketProtocolAck
else:
from Packet.PacketProtocolHelloOptions import PacketProtocolHelloHoldtime, PacketProtocolHelloCheckpointSN
from Packet.PacketProtocolHello import PacketProtocolHello
from Packet.PacketProtocolHeader import PacketProtocolHeader
from Packet.PacketProtocolSync import PacketProtocolHelloSync
from Packet.PacketProtocolSetTree import PacketProtocolUpstream
from Packet.PacketProtocolInterest import PacketProtocolNoInterest, PacketProtocolInterest
from Packet.PacketProtocolSync import PacketProtocolHelloSyncEntry
from Packet.PacketProtocolRemoveTree import PacketProtocolNoLongerUpstream
from Packet.PacketProtocolAck import PacketProtocolAck
from hpimdm.Packet.PacketProtocolHelloOptions import PacketProtocolHelloHoldtime, PacketProtocolHelloCheckpointSN
from hpimdm.Packet.PacketProtocolHello import PacketProtocolHello
from hpimdm.Packet.PacketProtocolHeader import PacketProtocolHeader
from hpimdm.Packet.PacketProtocolSync import PacketProtocolHelloSync
from hpimdm.Packet.PacketProtocolSetTree import PacketProtocolUpstream
from hpimdm.Packet.PacketProtocolInterest import PacketProtocolNoInterest, PacketProtocolInterest
from hpimdm.Packet.PacketProtocolSync import PacketProtocolHelloSyncEntry
from hpimdm.Packet.PacketProtocolRemoveTree import PacketProtocolNoLongerUpstream
from hpimdm.Packet.PacketProtocolAck import PacketProtocolAck


class InterfaceProtocol(Interface):
Expand Down Expand Up @@ -548,7 +548,7 @@ def receive_i_am_upstream(self, packet):
"""
Received an IamUpstream packet
"""
from tree.metric import AssertMetric
from hpimdm.tree.metric import AssertMetric
neighbor_source_ip = packet.ip_header.ip_src
boot_time = packet.payload.boot_time
pkt_jt = packet.payload.payload # type: PacketProtocolUpstream
Expand Down
16 changes: 8 additions & 8 deletions Kernel.py → hpimdm/Kernel.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import socket
import struct
from threading import RLock, Thread
from threading import Thread
import traceback
import ipaddress
import UnicastRouting
from hpimdm import UnicastRouting

from RWLock.RWLock import RWLockWrite
import Main
from hpimdm.RWLock.RWLock import RWLockWrite
from hpimdm import Main

from InterfaceProtocol import InterfaceProtocol
from InterfaceIGMP import InterfaceIGMP
from tree.KernelEntry import KernelEntry, KernelEntryOriginator, KernelEntryNonOriginator
from tree import protocol_globals
from hpimdm.InterfaceProtocol import InterfaceProtocol
from hpimdm.InterfaceIGMP import InterfaceIGMP
from hpimdm.tree.KernelEntry import KernelEntry, KernelEntryOriginator, KernelEntryNonOriginator
from hpimdm.tree import protocol_globals

class Kernel:
# MRT
Expand Down
8 changes: 4 additions & 4 deletions Main.py → hpimdm/Main.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@
import logging.handlers
from prettytable import PrettyTable
import netifaces
from TestLogger import RootFilter
from hpimdm.TestLogger import RootFilter

from tree import protocol_globals
from Kernel import Kernel
import UnicastRouting
from hpimdm.tree import protocol_globals
from hpimdm import UnicastRouting

interfaces = {} # interfaces with multicast routing protocol enabled
igmp_interfaces = {} # igmp interfaces
Expand Down Expand Up @@ -264,6 +263,7 @@ def main():
logger.addHandler(logging.StreamHandler(sys.stdout))

global kernel
from hpimdm.Kernel import Kernel
kernel = Kernel()

global unicast_routing
Expand Down
28 changes: 14 additions & 14 deletions Neighbor.py → hpimdm/Neighbor.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,24 @@
import ipaddress
from threading import Timer

import Main
from utils import TYPE_CHECKING
from tree.metric import AssertMetric
from tree import protocol_globals
from Packet.Packet import Packet
from hpimdm import Main
from hpimdm.utils import TYPE_CHECKING
from hpimdm.tree.metric import AssertMetric
from hpimdm.tree import protocol_globals
from hpimdm.Packet.Packet import Packet
if protocol_globals.MSG_FORMAT == "BINARY":
from Packet.PacketProtocolAck import PacketNewProtocolAck as PacketProtocolAck
from Packet.PacketProtocolSync import PacketNewProtocolSync as PacketProtocolHelloSync
from Packet.PacketProtocolHelloOptions import PacketNewProtocolHelloHoldtime as PacketProtocolHelloHoldtime
from Packet.PacketProtocolHeader import PacketNewProtocolHeader as PacketProtocolHeader
from hpimdm.Packet.PacketProtocolAck import PacketNewProtocolAck as PacketProtocolAck
from hpimdm.Packet.PacketProtocolSync import PacketNewProtocolSync as PacketProtocolHelloSync
from hpimdm.Packet.PacketProtocolHelloOptions import PacketNewProtocolHelloHoldtime as PacketProtocolHelloHoldtime
from hpimdm.Packet.PacketProtocolHeader import PacketNewProtocolHeader as PacketProtocolHeader
else:
from Packet.PacketProtocolAck import PacketProtocolAck
from Packet.PacketProtocolSync import PacketProtocolHelloSync
from Packet.PacketProtocolHelloOptions import PacketProtocolHelloHoldtime
from Packet.PacketProtocolHeader import PacketProtocolHeader
from hpimdm.Packet.PacketProtocolAck import PacketProtocolAck
from hpimdm.Packet.PacketProtocolSync import PacketProtocolHelloSync
from hpimdm.Packet.PacketProtocolHelloOptions import PacketProtocolHelloHoldtime
from hpimdm.Packet.PacketProtocolHeader import PacketProtocolHeader

if TYPE_CHECKING:
from InterfaceProtocol import InterfaceProtocol
from hpimdm.InterfaceProtocol import InterfaceProtocol

DEFAULT_HELLO_HOLD_TIME_DURING_SYNC = 25
DEFAULT_HELLO_HOLD_TIME_AFTER_SYNC = 120
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import struct
from utils import checksum
from hpimdm.utils import checksum
import socket
from .PacketPayload import PacketPayload
'''
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit c5696c9

Please sign in to comment.