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