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))
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]")
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)
# -*- 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")
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]