Esempio n. 1
0
def arp_reply_handler(pkt):
    pkt_in_msg = pkt.payload
    pkt_parsed = pkt_in_msg.payload

    if pkt_parsed.payload.psrc not in ARP_TABLE:
        arp_add(pkt_parsed.payload.psrc,
                pkt_parsed.payload.hwsrc)  #add arp record
    if pkt_parsed.payload.pdst in ARP_TABLE:
        ETHER = copy.deepcopy(pkt_parsed)
        ETHER.dst = pkt_parsed.payload.hwsrc
        ETHER.src = pkt_parsed.payload.hwdst
        ETHER.payload.op = 2  #reply
        ETHER.payload.hwdst = pkt_parsed.payload.hwsrc
        ETHER.payload.hwsrc = ARP_TABLE[pkt_parsed.payload.pdst]
        ETHER.payload.psrc = pkt_parsed.payload.pdst
        ETHER.payload.pdst = pkt_parsed.payload.psrc

        pkt_out = of.ofp_header() / of.ofp_pktout_header(
        ) / of.ofp_action_output() / ETHER
        pkt_out.payload.payload.port = pkt_in_msg.in_port
        pkt_out.payload.buffer_id = pkt_in_msg.buffer_id
        pkt_out.payload.in_port = pkt_in_msg.in_port
        pkt_out.payload.actions_len = 8
        pkt_out.length = len(pkt_out)
        return pkt_out
    else:
        pkt_out = of.ofp_header() / of.ofp_pktout_header(
        ) / of.ofp_action_output()
        pkt_out.payload.payload.port = 0xfffb
        pkt_out.payload.buffer_id = pkt_in_msg.buffer_id
        pkt_out.payload.in_port = pkt_in_msg.in_port
        pkt_out.payload.actions_len = 8
        pkt_out.length = len(pkt_out)
        return pkt_out
Esempio n. 2
0
def arp_reply_handler(pkt):
	pkt_in_msg =pkt.payload
	pkt_parsed =pkt_in_msg.payload
	
	if pkt_parsed.payload.psrc not in ARP_TABLE:
		arp_add(pkt_parsed.payload.psrc,pkt_parsed.payload.hwsrc) 		#add arp record
	if pkt_parsed.payload.pdst in ARP_TABLE:
		ETHER = copy.deepcopy(pkt_parsed)
		ETHER.dst = pkt_parsed.payload.hwsrc
		ETHER.src = pkt_parsed.payload.hwdst
		ETHER.payload.op = 2#reply
		ETHER.payload.hwdst = pkt_parsed.payload.hwsrc
		ETHER.payload.hwsrc = ARP_TABLE[pkt_parsed.payload.pdst]
		ETHER.payload.psrc = pkt_parsed.payload.pdst
		ETHER.payload.pdst = pkt_parsed.payload.psrc

		pkt_out = of.ofp_header()/of.ofp_pktout_header()/of.ofp_action_output()/ETHER
		pkt_out.payload.payload.port = pkt_in_msg.in_port
		pkt_out.payload.buffer_id = pkt_in_msg.buffer_id
		pkt_out.payload.in_port = pkt_in_msg.in_port
		pkt_out.payload.actions_len = 8
		pkt_out.length = len(pkt_out)
		return pkt_out
	else:
		pkt_out = of.ofp_header()/of.ofp_pktout_header()/of.ofp_action_output()
		pkt_out.payload.payload.port = 0xfffb
		pkt_out.payload.buffer_id = pkt_in_msg.buffer_id
		pkt_out.payload.in_port = pkt_in_msg.in_port
		pkt_out.payload.actions_len = 8
		pkt_out.length = len(pkt_out)
		return pkt_out
Esempio n. 3
0
def switch(pkt, dpid, *args):
    rmsg = pkt
    pkt_in_msg = pkt.payload
    pkt_parsed = pkt.payload.payload

    mactoport_add(src_mac=pkt_parsed.src, in_port=pkt_in_msg.in_port)
    if pkt_parsed.dst == "ff:ff:ff:ff:ff:ff":
        if pkt_parsed.payload.type == 0x0806:  #all ARP will be ARP REQUEST first.
            return arp_server.arp_reply_handler(pkt)
        else:
            pkt_out = of.ofp_header() / of.ofp_pktout_header(
            ) / of.ofp_action_output()
            pkt_out.payload.payload.port = 0xfffb
            pkt_out.payload.buffer_id = pkt_in_msg.buffer_id
            pkt_out.payload.in_port = pkt_in_msg.in_port
            pkt_out.payload.actions_len = 8
            pkt_out.length = len(pkt_out)
            return pkt_out
    else:
        if pkt_parsed.dst in mactoport:
            out_port = mactoport[pkt_parsed.dst]
        else:
            out_port = 0xfffb
        flow_mod = of.create_flow(pkt, out_port)
        flow_database.flow_add(flow_mod, dpid)
        return flow_mod
Esempio n. 4
0
def switch(pkt,dpid,*args):
	rmsg = pkt
	pkt_in_msg = pkt.payload
	pkt_parsed = pkt.payload.payload
		
	mactoport_add(src_mac = pkt_parsed.src, in_port = pkt_in_msg.in_port)
	if pkt_parsed.dst == "ff:ff:ff:ff:ff:ff":
		if pkt_parsed.payload.type == 0x0806:   #all ARP will be ARP REQUEST first.
			return arp_server.arp_reply_handler(pkt)
		else:
			pkt_out = of.ofp_header()/of.ofp_pktout_header()/of.ofp_action_output()
			pkt_out.payload.payload.port = 0xfffb
			pkt_out.payload.buffer_id = pkt_in_msg.buffer_id
			pkt_out.payload.in_port = pkt_in_msg.in_port
			pkt_out.payload.actions_len = 8
			pkt_out.length = len(pkt_out)
			return pkt_out
	else:
		if pkt_parsed.dst in mactoport:
			out_port = mactoport[pkt_parsed.dst]
		else:
			out_port = 0xfffb
		flow_mod = of.create_flow(pkt, out_port)
		flow_database.flow_add(flow_mod,dpid) 
		return flow_mod