Example #1
0
 def sendPktExternal(self, dpid, pkt_eth):
     self.log.debug("Entering sendPktExternal")
     self.log.debug("    => Eth   Pkt %s" % (pkt_eth))
     vswitches = self.net[0xaabbcc].vswitch
     vstag = vswitches[dpid].vstag
     port = vswitches[dpid].uplink
     dst_vswitch = None
     dst_addr = removeNetIDEthAddr(pkt_eth.dst)
     for i in vswitches.keys():
         vswitch = vswitches[i]
         for k in vswitch._vm.keys():
             vm = vswitch._vm[k]
             if dst_addr == vm.hw_addr:
                 dst_vswitch = vswitch
     if dst_vswitch is None:
         self.log.debug("External packet to a unknown destination: %s" %
                        pkt_eth.dst)
         return
     pkt_vlan = pkt.vlan(id=dst_vswitch.vstag,
                         eth_type=pkt.ethernet.HOTOM_TYPE)
     pkt_hotom = pkt.hotom()
     pkt_hotom.net_id = 0xaabbcc
     pkt_hotom.dst = pkt_eth.dst
     pkt_hotom.src = pkt_eth.src
     pkt_eth.src = vswitches[dpid].hw_addr
     pkt_eth.dst = dst_vswitch.hw_addr
     pkt_hotom.payload = pkt_eth.payload
     pkt_vlan.payload = pkt_hotom
     pkt_eth.type = pkt.ethernet.VLAN_TYPE
     pkt_eth.payload = pkt_vlan
     self.log.debug("Sending port %d %s" % (port, pkt_eth))
     self.log.debug("    => HotOM Pkt %s" % (pkt_hotom))
     self.sendPktInternal(dpid, pkt_eth, port)
Example #2
0
 def outbound2Network(self,event):
     remote_vstag = None
     remote_vs_hw = None
     vs_hw = self.avs[event.dpid].hw_addr
     uplink = self.avs[event.dpid].uplink
     packet = event.parsed
     eth = packet.find('ethernet')
     net_id = fromBytesToInt(getNetIDEthAddr(eth.src))
     hw_dst = removeNetIDEthAddr(eth.dst)
     (remote_vstag,remote_vs_hw) = self.net[net_id].getRemotevSwitchData(hw_dst)
     if remote_vstag is None:
         self.log.info("External packet to a unknown destination: %s" % eth.dst)
         return
     vlan = pkt.vlan(id=remote_vstag, eth_type=pkt.ethernet.HOTOM_TYPE)
     hotom = pkt.hotom()
     hotom.net_id = net_id
     hotom.dst = eth.dst
     hotom.src = eth.src
     eth.src = vs_hw
     eth.dst = remote_vs_hw
     hotom.payload = eth.payload
     vlan.payload = hotom
     eth.payload = vlan
     eth.type = pkt.ethernet.VLAN_TYPE
     self.send(event.dpid,eth,uplink)
Example #3
0
 def sendPktExternal(self,dpid,pkt_eth):
     self.log.debug("Entering sendPktExternal")
     self.log.debug("    => Eth   Pkt %s" % (pkt_eth))
     vswitches = self.net[0xaabbcc].vswitch
     vstag = vswitches[dpid].vstag
     port = vswitches[dpid].uplink
     dst_vswitch = None
     dst_addr = removeNetIDEthAddr(pkt_eth.dst)
     for i in vswitches.keys():
         vswitch = vswitches[i]
         for k in vswitch._vm.keys():
             vm = vswitch._vm[k]
             if dst_addr == vm.hw_addr:
                 dst_vswitch = vswitch
     if dst_vswitch is None:
         self.log.debug("External packet to a unknown destination: %s" % pkt_eth.dst)
         return
     pkt_vlan = pkt.vlan(id=dst_vswitch.vstag,eth_type=pkt.ethernet.HOTOM_TYPE)
     pkt_hotom = pkt.hotom()
     pkt_hotom.net_id = 0xaabbcc
     pkt_hotom.dst = pkt_eth.dst
     pkt_hotom.src = pkt_eth.src
     pkt_eth.src = vswitches[dpid].hw_addr
     pkt_eth.dst = dst_vswitch.hw_addr
     pkt_hotom.payload = pkt_eth.payload
     pkt_vlan.payload = pkt_hotom
     pkt_eth.type = pkt.ethernet.VLAN_TYPE
     pkt_eth.payload = pkt_vlan
     self.log.debug("Sending port %d %s" % (port,pkt_eth))
     self.log.debug("    => HotOM Pkt %s" % (pkt_hotom))
     self.sendPktInternal(dpid,pkt_eth,port) 
Example #4
0
 def outbound2Network(self, event):
     remote_vstag = None
     remote_vs_hw = None
     vs_hw = self.avs[event.dpid].hw_addr
     uplink = self.avs[event.dpid].uplink
     packet = event.parsed
     eth = packet.find('ethernet')
     net_id = fromBytesToInt(getNetIDEthAddr(eth.src))
     hw_dst = removeNetIDEthAddr(eth.dst)
     (remote_vstag,
      remote_vs_hw) = self.net[net_id].getRemotevSwitchData(hw_dst)
     if remote_vstag is None:
         self.log.info("External packet to a unknown destination: %s" %
                       eth.dst)
         return
     vlan = pkt.vlan(id=remote_vstag, eth_type=pkt.ethernet.HOTOM_TYPE)
     hotom = pkt.hotom()
     hotom.net_id = net_id
     hotom.dst = eth.dst
     hotom.src = eth.src
     eth.src = vs_hw
     eth.dst = remote_vs_hw
     hotom.payload = eth.payload
     vlan.payload = hotom
     eth.payload = vlan
     eth.type = pkt.ethernet.VLAN_TYPE
     self.send(event.dpid, eth, uplink)
Example #5
0
 def push_header(self,packet,port):
     pkt_eth = packet.find('ethernet')
     pkt_hotom = pkt.hotom()
     pkt_hotom.net_id = 0x0
     pkt_hotom.dst = pkt_eth.dst
     pkt_hotom.dst = pkt_eth.src
     pkt_vlan = pkt.vlan(id=2,eth_type=pkt.ethernet.HOTOM_TYPE)
     pkt_ip = packet.find('ipv4')
     if pkt_ip is None:
         self.log.debug("Packet not IPV4: %s" % packet)
         return
     pkt_hotom.payload = pkt_ip
     pkt_vlan.payload = pkt_hotom
     pkt_eth.payload = pkt_vlan
     pkt_eth.type = pkt.ethernet.VLAN_TYPE
     msg = of.ofp_packet_out(data=pkt_eth)
     msg.actions.append(of.ofp_action_output(port = port))
     return msg
Example #6
0
 def push_header(self, packet, port):
     pkt_eth = packet.find('ethernet')
     pkt_hotom = pkt.hotom()
     pkt_hotom.net_id = 0x0
     pkt_hotom.dst = pkt_eth.dst
     pkt_hotom.dst = pkt_eth.src
     pkt_vlan = pkt.vlan(id=2, eth_type=pkt.ethernet.HOTOM_TYPE)
     pkt_ip = packet.find('ipv4')
     if pkt_ip is None:
         self.log.debug("Packet not IPV4: %s" % packet)
         return
     pkt_hotom.payload = pkt_ip
     pkt_vlan.payload = pkt_hotom
     pkt_eth.payload = pkt_vlan
     pkt_eth.type = pkt.ethernet.VLAN_TYPE
     msg = of.ofp_packet_out(data=pkt_eth)
     msg.actions.append(of.ofp_action_output(port=port))
     return msg
Example #7
0
 def outboundToRemoteVM(self,eth,net_id,dst_vstag):
     dst_eth = getEthAddrFromVstag(dst_vstag)
     # Create HotOM header from original frame
     hotom = pkt.hotom()
     hotom.net_id = net_id
     hotom.dst = eth.dst
     hotom.src = eth.src
     hotom.type = pkt.hotom.IP_TYPE
     hotom.payload = eth.payload
     # Create VLAN header
     vlan = pkt.vlan(id=dst_vstag, eth_type=pkt.ethernet.HOTOM_TYPE)
     # Replace ethernet addresses and encapsulate
     eth.src = self.hw_addr
     eth.dst = dst_eth
     eth.type = pkt.ethernet.VLAN_TYPE
     vlan.payload = hotom
     eth.payload = vlan
     self.send(eth,self.uplink)