Commit a11b869c authored by Pedro Oliveira's avatar Pedro Oliveira

add one router and one client

parent aa6ee266
...@@ -7,3 +7,4 @@ ip route add 0.0.0.0/0 via 10.1.0.2 ...@@ -7,3 +7,4 @@ ip route add 0.0.0.0/0 via 10.1.0.2
# install python # install python
apt-get update && apt-get --assume-yes install python3 python3-pip apt-get update && apt-get --assume-yes install python3 python3-pip
pip-3.2 install netifaces
...@@ -7,3 +7,4 @@ ip route add 0.0.0.0/0 via 10.0.2.3 ...@@ -7,3 +7,4 @@ ip route add 0.0.0.0/0 via 10.0.2.3
# install python # install python
apt-get update && apt-get --assume-yes install python3 python3-pip apt-get update && apt-get --assume-yes install python3 python3-pip
pip-3.2 install netifaces
ip addr add dev eth0 10.0.3.10/24
ip link set dev eth0 up
#default route para obter conectividade internet
ip route add 0.0.0.0/0 via 10.0.3.4
# install python
apt-get update && apt-get --assume-yes install python3 python3-pip
pip-3.2 install netifaces
nameserver 8.8.8.8
nameserver 8.8.4.4
import socket
import struct
import sys
import netifaces
def chooseInterface():
interfaces = netifaces.interfaces()
def printInterfaces():
print('Indique a interface de captura:')
for i in range(len(interfaces)):
print (i+1, '-', interfaces[i])
if len(interfaces) == 1: #user has just 1 interface and any
return interfaces[0]
else:
printInterfaces()
inputValue = input('Numero da interface: ')
if int(inputValue)-1 not in range(len(interfaces)):
raise Exception('numero de interface invalida')
inputValue = interfaces[int(inputValue)-1]
return inputValue
if not hasattr(socket, 'SO_BINDTODEVICE'):
socket.SO_BINDTODEVICE = 25
multicast_group = '224.12.12.12'
server_address = ('', 10000)
# Create the socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Bind to the server address
sock.bind(server_address)
#interface_name = input("interface name: ")
interface_name = chooseInterface()
ip_interface = netifaces.ifaddresses(interface_name)[netifaces.AF_INET][0]['addr']
# Tell the operating system to add the socket to the multicast group
# on all interfaces.
group = socket.inet_aton(multicast_group)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP,
socket.inet_aton(multicast_group) + socket.inet_aton(ip_interface))
#sock.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, str(interface_name + "\0").encode('utf-8'))
# Receive/respond loop
while True:
#print >>sys.stderr, '\nwaiting to receive message'
data, address = sock.recvfrom(10240)
print(data.decode("utf-8"))
#print >>sys.stderr, 'received %s bytes from %s' % (len(data), address)
#print >>sys.stderr, data
#print >>sys.stderr, 'sending acknowledgement to', address
#sock.sendto('ack', address)
import socket
import struct
import sys
import netifaces
import traceback
def chooseInterface():
interfaces = netifaces.interfaces()
def printInterfaces():
print('Indique a interface de captura:')
for i in range(len(interfaces)):
print (i+1, '-', interfaces[i])
if len(interfaces) == 1: #user has just 1 interface and any
return interfaces[0]
else:
printInterfaces()
inputValue = input('Numero da interface: ')
if int(inputValue)-1 not in range(len(interfaces)):
raise Exception('numero de interface invalida')
inputValue = interfaces[int(inputValue)-1]
return inputValue
#message = 'very important data'
multicast_group = ('224.12.12.12', 10000)
# Create the datagram socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Set the time-to-live for messages to 1 so they do not go past the
# local network segment.
ttl = struct.pack('b', 12)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl)
interface_name = chooseInterface()
ip_interface = netifaces.ifaddresses(interface_name)[netifaces.AF_INET][0]['addr']
sock.bind((ip_interface, 10000))
try:
# Look for responses from all recipients
while True:
input_msg = input('msg --> ')
try:
sock.sendto(input_msg.encode("utf-8"), multicast_group)
except:
traceback.print_exc()
continue
#print >>sys.stderr, 'received "%s" from %s' % (data, server)
finally:
#print >>sys.stderr, 'closing socket'
sock.close()
...@@ -15,6 +15,9 @@ router3[0]=B ...@@ -15,6 +15,9 @@ router3[0]=B
router3[1]=D router3[1]=D
router3[mem]=256 router3[mem]=256
router4[0]=G
router4[1]=H
router4[mem]=256
######################################### #########################################
# Switch setup # Switch setup
...@@ -22,6 +25,7 @@ router3[mem]=256 ...@@ -22,6 +25,7 @@ router3[mem]=256
switch1[0]=C switch1[0]=C
switch1[1]=D switch1[1]=D
switch1[2]=E switch1[2]=E
switch1[3]=G
######################################### #########################################
...@@ -32,3 +36,7 @@ client1[mem]=256 ...@@ -32,3 +36,7 @@ client1[mem]=256
client2[0]=E client2[0]=E
client2[mem]=256 client2[mem]=256
client3[0]=H
client3[mem]=256
router2: router1 switch1 router2: router1 switch1
router3: router1 router3: router1
router4: switch1 router2 router3
client1: router2 client1: router2
client2: switch1 router2 router3 client2: switch1 router2 router3
client3: router4
ip addr add dev eth0 10.0.2.4/24
ip link set dev eth0 up
ip addr add dev eth1 10.0.3.4/24
ip link set dev eth1 up
#default route para obter conectividade internet
#ip route add 0.0.0.0/0 via 10.0.1.1
#ip route del 0.0.0.0/0
# Zebra and OSPF
/etc/init.d/quagga restart
# wait for default route information from OSPF
while ! $(ip route | grep -q "default")
do
sleep 2
done
# install python
apt-get update && apt-get --assume-yes install python3 python3-pip
# This file tells the quagga package which daemons to start.
#
# Entries are in the format: <daemon>=(yes|no|priority)
# 0, "no" = disabled
# 1, "yes" = highest priority
# 2 .. 10 = lower priorities
# Read /usr/share/doc/quagga/README.Debian for details.
#
# Sample configurations for these daemons can be found in
# /usr/share/doc/quagga/examples/.
#
# ATTENTION:
#
# When activation a daemon at the first time, a config file, even if it is
# empty, has to be present *and* be owned by the user and group "quagga", else
# the daemon will not be started by /etc/init.d/quagga. The permissions should
# be u=rw,g=r,o=.
# When using "vtysh" such a config file is also needed. It should be owned by
# group "quaggavty" and set to ug=rw,o= though. Check /etc/pam.d/quagga, too.
#
# The watchquagga daemon is always started. Per default in monitoring-only but
# that can be changed via /etc/quagga/debian.conf.
#
zebra=yes
bgpd=no
ospfd=yes
ospf6d=no
ripd=no
ripngd=no
isisd=no
babeld=no
#
# If this option is set the /etc/init.d/quagga script automatically loads
# the config via "vtysh -b" when the servers are started.
# Check /etc/pam.d/quagga if you intend to use "vtysh"!
#
vtysh_enable=yes
zebra_options=" --daemon -A 127.0.0.1"
bgpd_options=" --daemon -A 127.0.0.1"
ospfd_options=" --daemon -A 127.0.0.1"
ospf6d_options=" --daemon -A ::1"
ripd_options=" --daemon -A 127.0.0.1"
ripngd_options=" --daemon -A ::1"
isisd_options=" --daemon -A 127.0.0.1"
babeld_options=" --daemon -A 127.0.0.1"
#
# Please note that watchquagga_options is an array and not a string so that
# quotes can be used.
#
# The list of daemons to watch is automatically generated by the init script
# from daemons.conf and appended to the watchquagga_options.
# Example:
# watchquagga_options=("-Adz" "-r" '/sbin/service %s restart' -s '/sbin/service %s start' -k '/sbin/service %s stop')
watchquagga_enable=yes
watchquagga_options=(--daemon)
! -*- ospf -*-
!
! OSPFd sample configuration file
!
!
hostname ospfd
password zebra
!enable password please-set-at-here
!
router ospf
network 10.0.2.0/24 area 0
network 10.0.3.0/24 area 0
!
log stdout
!
! Sample configuration file for vtysh.
!
!service integrated-vtysh-config
hostname quagga-router
username root nopassword
!
! -*- zebra -*-
!
! zebra sample configuration file
!
! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
!
hostname Router
password zebra
enable password zebra
!
! Interface's description.
!
!interface lo
! description test of desc.
!
!interface sit0
! multicast
!
! Static default route sample.
!
!ip route 0.0.0.0/0 203.181.89.241
!
!log file /var/log/quagga/zebra.log
nameserver 8.8.8.8
nameserver 8.8.4.4
rm -rf MulticastRouting/
cp -rf /hosthome/Desktop/pim/ MulticastRouting/
cd MulticastRouting
pip-3.2 install -r requirements.txt
python3 Run.py -stop
python3 Run.py -start
python3 Run.py -aiigmp eth0
python3 Run.py -aiigmp eth1
python3 Run.py -ai eth0
python3 Run.py -ai eth1
python3 Run.py -v
ip link set dev eth0 up ip link set dev eth0 up
ip link set dev eth1 up ip link set dev eth1 up
ip link set dev eth2 up ip link set dev eth2 up
ip link set dev eth3 up
brctl addbr br0 brctl addbr br0
brctl addif br0 eth0 brctl addif br0 eth0
brctl addif br0 eth1 brctl addif br0 eth1
brctl addif br0 eth2 brctl addif br0 eth2
brctl addif br0 eth3
ip link set dev br0 up ip link set dev br0 up
# identify ports with routers (they need to receive all multicast traffic!) # identify ports with routers (they need to receive all multicast traffic!)
echo "2" > /sys/devices/virtual/net/br0/brif/eth0/multicast_router echo "2" > /sys/devices/virtual/net/br0/brif/eth0/multicast_router
echo "2" > /sys/devices/virtual/net/br0/brif/eth1/multicast_router echo "2" > /sys/devices/virtual/net/br0/brif/eth1/multicast_router
echo "2" > /sys/devices/virtual/net/br0/brif/eth3/multicast_router
topology.png

31.7 KB | W: | H:

topology.png

42.5 KB | W: | H:

topology.png
topology.png
topology.png
topology.png
  • 2-up
  • Swipe
  • Onion skin
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment