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 __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
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)
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)
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)