Exemplo n.º 1
0
class Test_mpls(unittest.TestCase):

    label = 29
    exp = 6
    bsb = 1
    ttl = 64
    mp = mpls.mpls(label, exp, bsb, ttl)

    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test_to_string(self):
        mpls_values = {'label': self.label,
                       'exp': self.exp,
                       'bsb': self.bsb,
                       'ttl': self.ttl}
        _mpls_str = ','.join(['%s=%s' % (k, repr(mpls_values[k]))
                              for k, v in inspect.getmembers(self.mp)
                              if k in mpls_values])
        mpls_str = '%s(%s)' % (mpls.mpls.__name__, _mpls_str)

        eq_(str(self.mp), mpls_str)
        eq_(repr(self.mp), mpls_str)
Exemplo n.º 2
0
 def __add_mpls(self,  pkt_old, label, src_mac, dst_mac):
     pkt_new = packet.Packet()
     mpls_proto = mpls.mpls(label=label) # label:20bit(0~1048576-1), exp(QoS):3bit, bsb:1bit, ttl:8bit
     pkt_new.add_protocol(ethernet.ethernet(dst=dst_mac, src=src_mac,ethertype=ether_types.ETH_TYPE_MPLS))
     pkt_new.add_protocol(mpls_proto)
     for i in range(1,len(pkt_old)):#[ethernet, ipv4, tcp,..]
         pkt_new.add_protocol(pkt_old[i])
     return pkt_new
Exemplo n.º 3
0
    def receiveprobe(self, msg):
        dp = msg.datapath
        #print msg.data
        in_port = msg.match['in_port']
        dpid = dp.id
        ofproto = dp.ofproto
        parser = dp.ofproto_parser

        pkt = packet.Packet(data=msg.data)
        pkt_ethernet = pkt.get_protocol(ethernet.ethernet)
        pkt_mpls = pkt.get_protocol(mpls.mpls)
        pkt_ipv4 = pkt.get_protocol(ipv4.ipv4)
        pkt_tcp = pkt.get_protocol(tcp.tcp)
        #print pkt_mpls
        if pkt_mpls.label == self.colortag[dpid]:
            return
        dstip = pkt_ipv4.dst
        #print dstip
        dstdp = self.get_host_location(dstip)
        if dpid == dstdp[0]:
            self.logger.info("current hop is : %s", dp.id)
            print "tracing is over"
            return
        #print dpid,in_port
        self.logger.info("current hop is : %s", dp.id)
        probe = packet.Packet()
        probe.add_protocol(
            ethernet.ethernet(dst=pkt_ethernet.dst,
                              src=pkt_ethernet.src,
                              ethertype=0x8847))
        probe.add_protocol(mpls.mpls(label=self.colortag[dpid]))
        probe.add_protocol(
            ipv4.ipv4(proto=6, src=pkt_ipv4.src, dst=pkt_ipv4.dst))
        probe.add_protocol(
            tcp.tcp(src_port=pkt_tcp.src_port, dst_port=pkt_tcp.dst_port))
        #print "this dp's color is: ",self.colortag[dpid]
        #print probe
        probe.serialize()
        data = probe.data
        #self.pcap_pen.write_pkt(data)
        #print "re-send"
        #print 'current dpid: ',dp.id
        actions = [parser.OFPActionOutput(ofproto.OFPP_TABLE)]
        out = parser.OFPPacketOut(datapath=dp,
                                  buffer_id=ofproto.OFP_NO_BUFFER,
                                  in_port=in_port,
                                  actions=actions,
                                  data=data)
        dp.send_msg(out)
Exemplo n.º 4
0
 def _tracing(self):
     hub.sleep(15)
     srcip = '10.0.0.1'
     dstip = '10.0.0.10'
     srcport = 30000
     dstport = 5001
     #data = 'helloworld'
     srcdp = self.get_host_location(srcip)
     dstdp = self.get_host_location(dstip)
     dstmac = self.access_table[dstdp]
     srcmac = self.access_table[srcdp]
     #print dstmac,srcmac
     ofproto = self.datapaths[srcdp[0]].ofproto
     parser = self.datapaths[srcdp[0]].ofproto_parser
     count = 5
     """
     while count:
         pkt = packet.Packet()
         pkt.add_protocol(ethernet.ethernet(ethertype=ether.ETH_TYPE_IP,dst=dstmac[1],src=srcmac[1]))
     
         pkt.add_protocol(ipv4.ipv4(dst=dstip,src=srcip,proto=6))
         pkt.add_protocol(tcp.tcp(src_port=srcport,dst_port=dstport))
         pkt.serialize()
         data = pkt.data
         actions = [parser.OFPActionOutput(ofproto.OFPP_TABLE)]
         out = parser.OFPPacketOut(datapath=self.datapaths[srcdp[0]],buffer_id=ofproto.OFP_NO_BUFFER,in_port=srcdp[1],actions=actions,data=data)
         self.datapaths[srcdp[1]].send_msg(out)
         count = count - 1
     """
     pkt = packet.Packet()
     pkt.add_protocol(
         ethernet.ethernet(dst=dstmac[1], src=srcmac[1], ethertype=0x8847))
     pkt.add_protocol(mpls.mpls(label=self.colortag[self.datapaths[1].id]))
     pkt.add_protocol(ipv4.ipv4(proto=6, src=srcip, dst=dstip))
     pkt.add_protocol(tcp.tcp(src_port=srcport, dst_port=dstport))
     #print srcdp[1]
     pkt.serialize()
     data = pkt.data
     actions = [parser.OFPActionOutput(ofproto.OFPP_TABLE)]
     out = parser.OFPPacketOut(datapath=self.datapaths[srcdp[0]],
                               buffer_id=ofproto.OFP_NO_BUFFER,
                               in_port=srcdp[1],
                               actions=actions,
                               data=data)
     self.datapaths[1].send_msg(out)
     #print "done"
     self.logger.info("current hop is : %s", self.datapaths[1].id)
Exemplo n.º 5
0
class Test_mpls(unittest.TestCase):

    label = 29
    exp = 6
    bsb = 1
    ttl = 64
    mp = mpls.mpls(label, exp, bsb, ttl)

    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test_to_string(self):
        mpls_values = {
            'label': self.label,
            'exp': self.exp,
            'bsb': self.bsb,
            'ttl': self.ttl
        }
        _mpls_str = ','.join([
            '%s=%s' % (k, repr(mpls_values[k]))
            for k, v in inspect.getmembers(self.mp) if k in mpls_values
        ])
        mpls_str = '%s(%s)' % (mpls.mpls.__name__, _mpls_str)

        eq_(str(self.mp), mpls_str)
        eq_(repr(self.mp), mpls_str)

    def test_json(self):
        jsondict = self.mp.to_jsondict()
        mp = mpls.mpls.from_jsondict(jsondict['mpls'])
        eq_(str(self.mp), str(mp))

    def test_label_from_bin_true(self):
        mpls_label = 0xfffff
        is_bos = True
        buf = b'\xff\xff\xf1'
        mpls_label_out, is_bos_out = mpls.label_from_bin(buf)

        eq_(mpls_label, mpls_label_out)
        eq_(is_bos, is_bos_out)

    def test_label_from_bin_false(self):
        mpls_label = 0xfffff
        is_bos = False
        buf = b'\xff\xff\xf0'
        mpls_label_out, is_bos_out = mpls.label_from_bin(buf)

        eq_(mpls_label, mpls_label_out)
        eq_(is_bos, is_bos_out)

    def test_label_to_bin_true(self):
        mpls_label = 0xfffff
        is_bos = True
        label = b'\xff\xff\xf1'
        label_out = mpls.label_to_bin(mpls_label, is_bos)

        eq_(label, label_out)

    def test_label_to_bin_false(self):
        mpls_label = 0xfffff
        is_bos = False
        label = b'\xff\xff\xf0'
        label_out = mpls.label_to_bin(mpls_label, is_bos)

        eq_(label, label_out)