예제 #1
0
if __name__ == "__main__":
    port = 2001

    num_nodes = ask(int, "number of nodes ?     [50000]:", 50000)
    num_links = ask(int, "number of links ?      [50]:", 50)
    real_link = ask(bool, "Link to local networks?        [y]/n:", True)

    print('Reaching Out')
    links = []
    if real_link:
        links += [
            UDPLink('en0', port),
            UDPLink('en1', port + 1),
            UDPLink('en2', port + 2)
        ]
    links += [VirtualLink("vl%s" % (x + 1)) for x in range(num_links)]

    print('Establishing connection')
    nodes = [
        Node(None,
             "n%s" % x,
             Filters=[UniqueFilter],
             Program=random.choice((Printer, Switch)))
        for x in range(num_nodes)
    ]

    print("You are now a part of something bigger")
    [link.start() for link in links]
    for node in nodes:
        node.start()
        print("%s:%s" % (node, node.interfaces))
예제 #2
0
        nodes[0].send(bytes(s, 'UTF-8'),interfaces=links[0])

class NodeProgram(BaseProgram):
    def recv(self, packet, interface):
        print("\n\n[USER] Received packet on interface: "+str(interface))
        s = packet.decode()
        print('\n[USER] Received message>> {}'.format(s))


##--------------------------------------------------------------------##
##                        MAIN
## Se genera una red mesh virtual previamente negociada
##--------------------------------------------------------------------##

if __name__ == "__main__":
    links = (VirtualLink('vl1'),VirtualLink('vl2'))
    nodes = (
         Node([links[0]], 'QRReceptor', mac_addr='5D-A2-A5-51-96-4E',Filters=(UniqueFilter,), Program=NodeProgram),
         Node([links[0]], 'UserNode3', mac_addr='2A-B5-87-59-96-4E', Filters=(UniqueFilter,), Program=NodeProgram)
    )
    [l.start() for l in links]
    [n.start() for n in nodes]

    try:
        #Open QR reader
        DL = DispositivoLector()
        while True:
            if(len(DL.lista) > 0):
                print("HAY DATOS")
            #message = input("Type a message: ")
            #nodes[0].send(bytes(message, 'UTF-8',))
                Program = Cache
            # out middle node
            else:
                addr = 'row:{};col{}'.format(row_idx, col_idx)
                Program = ButterflySwitch

            row.append(Node(name=addr, mac_addr=addr, Program=Program))

        NODES.append(row)

    print('Creating Butterfly Links...')

    # make the first links going directly across each row
    for row_idx in range(num_rows):
        for col_idx in range(num_cols - 1):
            bridge = VirtualLink(
                name='{}<{}>{}'.format(col_idx, row_idx, col_idx + 1))
            NODES[row_idx][col_idx].interfaces.append(bridge)

            # node directly to the right
            NODES[row_idx][col_idx + 1].interfaces.append(bridge)
            bridge.start()

    # TODO: finish diagonal linking algorithm
    # give each node a second diagonal link, starting from right to left
    for col_idx in reversed(range(1, num_cols)):
        for row_idx in range(num_rows):
            diagonal = VirtualLink(
                name='{}<{}>{}'.format(col_idx, row_idx, col_idx + 1))
            NODES[row_idx][col_idx].interfaces.append(diagonal)

            # node to the left and (up/down) to a different butterfly set
from mesh.node import Node


'''
Simple Star Topology Example:
         n1
         |
       (star)
        /  \
      n2    n3

Star Node is a switch that forwards all packets to all its links
Each Node is a printer that Prints its packets
'''

ls = (VirtualLink('vl1'), VirtualLink('vl2'), VirtualLink('vl3'))

nodes = (
    Node([ls[0], ls[1], ls[2]], 'star', Program=Switch),
    Node([ls[0]], 'n1', Program=Printer),
    Node([ls[1]], 'n2', Program=Printer),
    Node([ls[2]], 'n3', Program=Printer)
)

[l.start() for l in ls]
[n.start() for n in nodes]


if __name__ == "__main__":
    print('\n', nodes)
    print("Experiment by typing packets for [n1] to send out, and seeing if they make it to the [n2], [n3]")
예제 #5
0
파일: QRNET.py 프로젝트: lAleRojasl/qrnet
        print("\n\n[USER] Received packet on interface: "+str(interface))
        s = packet.decode()
        if(str(interface) == '<vl4>'):
            #create QR
            DispositivoLuzAdaptador(s)
        else:
            print('\n[USER] Received message>> {}'.format(s))


##--------------------------------------------------------------------##
##                        MAIN
## Se genera una red mesh virtual previamente negociada
##--------------------------------------------------------------------##

if __name__ == "__main__":
    links = (IRCLink('irc1'),VirtualLink('vl1'),VirtualLink('vl2'),VirtualLink('vl3'),VirtualLink('vl4'))
    nodes = (
         Node([links[0], links[1]], 'ClearnetNode',mac_addr='1C-C2-87-54-96-4E', Filters=(UniqueFilter,), Program=IRCProgram),
         Node([links[1],links[2],links[3]], 'RouterNode',mac_addr='2C-C3-87-54-96-4E', Filters=(UniqueFilter,), Program=RouterProgram),
         Node([links[2]], 'UserNode1', mac_addr='1A-B5-87-59-96-4E', Filters=(UniqueFilter,), Program=NodeProgram),
         Node([links[3]], 'UserNode2', mac_addr='3D-C2-45-51-96-4E',Filters=(UniqueFilter,), Program=NodeProgram),
         Node([links[4]], 'QRTransmisor', mac_addr='3D-A2-A5-51-96-4E',Filters=(UniqueFilter,), Program=NodeProgram)
    )
    [l.start() for l in links]
    [n.start() for n in nodes]

    try:
        while True:
            #message = input("Type a message: ")
            #nodes[0].send(bytes(message, 'UTF-8',))
            time.sleep(0.3)
예제 #6
0
# -*- coding: utf-8 -*-
# MIT Liscence : Nick Sweeting

from time import sleep

from mesh.links import VirtualLink, UDPLink
from mesh.programs import Switch, Printer
from mesh.filters import DuplicateFilter, StringFilter
from mesh.node import Node


# ls = (UDPLink('en0', 2014), VirtualLink('vl1'), VirtualLink('vl2'), IRCLink('irc3'), UDPLink('en4', 2016), IRCLink('irc5'))          # slow, but impressive to connect over IRC
ls = (UDPLink('en0', 2010), VirtualLink('vl1'), VirtualLink('vl2'), UDPLink('irc3', 2013), UDPLink('en4', 2014), UDPLink('irc5', 2013))    # faster setup for quick testing
nodes = (
    Node([ls[0]], 'start'),
    Node([ls[0], ls[2]], 'l1', Program=Switch),
    Node([ls[0], ls[1]], 'r1', Program=Switch),
    Node([ls[2], ls[3]], 'l2', Filters=(DuplicateFilter,), Program=Switch),              # l2 wont forward two of the same packet in a row
    Node([ls[1], ls[4]], 'r2', Filters=(StringFilter.match(b'red'),), Program=Switch),   # r2 wont forward any packet unless it contains the string 'red'
    Node([ls[4], ls[5]], 'end', Program=Printer),
)
[l.start() for l in ls]
[n.start() for n in nodes]


if __name__ == "__main__":
    print("Using a mix of real and vitual links to make a little network...\n")
    print("          /[r1]<--vlan1-->[r2]<----vlan4---\\")
    print("[start]-en0                                [end]")
    print("          \[l1]<--vlan2-->[l2]<--irc3:irc5-/\n")
예제 #7
0
from mesh.programs import Printer, Switch
from mesh.filters import UniqueFilter
from mesh.programs import BaseProgram, Switch


class IRCProgram(BaseProgram):
    def recv(self, packet, interface):
        s = packet.decode()
        print("Received IRC packet on interface: " + str(interface))
        print("My MAC Address: " + self.node.mac_addr)
        print("My Name: " + self.node.name)
        print('\nCreating QR for message>> {}'.format(s))


if __name__ == "__main__":
    links = (IRCLink('irc1'), VirtualLink('vl2'))
    nodes = (Node([links[0]],
                  'Alejandro',
                  Filters=(UniqueFilter, ),
                  Program=IRCProgram),
             Node([links[0], links[1]],
                  'Alejandro',
                  Filters=(UniqueFilter, ),
                  Program=IRCProgram),
             Node([links[1]],
                  'Alejandro',
                  Filters=(UniqueFilter, ),
                  Program=IRCProgram))
    [l.start() for l in links]
    [n.start() for n in nodes]