I'm not sure what you're trying to do, so it's hard for me to give too much advice.
Why is leaving the ARP flows installed a problem? Maybe it would make sense to not install flows for the ARP packets, and instead to simply output them using send_openflow() (that is, forward them from inside NOX instead of on the switch)? You pay for this in terms of ARP latency, controller<->switch traffic, and computation on the controller, of course, though maybe not enough to make much difference to you. -- Murphy On Nov 28, 2010, at 4:22 PM, K Singh wrote: > Hi, > > I modified the code below for function def forward_l2_packet(...) in > pyswitch.py. > > def forward_l2_packet(dpid, inport, packet, buf, bufid): > > dstaddr = packet.dst.tostring() > if not ord(dstaddr[0]) & 1 and inst.st[dpid].has_key(dstaddr): > prt = inst.st[dpid][dstaddr] > if prt[0] == inport: > log.err('**warning** learned port = inport', system="pyswitch") > inst.send_openflow(dpid, bufid, buf, openflow.OFPP_FLOOD, inport) > else: > # We know the outport, set up a flow > log.msg('installing flow for ' + str(packet), system="pyswitch") > flow = extract_flow(packet) > flow[core.IN_PORT] = inport > actions = [[openflow.OFPAT_OUTPUT, [0, prt[0]]]] > # openflow.OFP_FLOW_PERMANENT > renewflag = flowpacketdecision(dpid, flow, packet, inport, buf) > print "renewflag",renewflag > #print packet > if renewflag == 1: > inst.install_datapath_flow(dpid, flow, CACHE_TIMEOUT,5, > actions,bufid, openflow.OFP_DEFAULT_PRIORITY,inport, buf) > > else: > # haven't learned destination MAC. Flood > inst.send_openflow(dpid, bufid, buf, openflow.OFPP_FLOOD, inport) > > > The red highlighted part is where i made changes. I am making decision on > setting flow based on port numbers whose logic is in flowpacketdecision(...). > If the function returns 1 i renew or set the flow else i reject the packet > and wait for another packet to come. > > But this logic, fails for ARP packet. Because in my flowpacketdecision(..) i > am checking for TCP/UDP packet and renewing/setting the flow. If i receive > ARP packet then in the current code it is not renewing/setting the flow. This > means i cant proceed with TCP/UDP code anyways connection timeout when tested > in iperf. > > If i check for ARP packets and set the reneweflag = 1 then anyways the flow > is getting set irrespective of my logic. I even tried commenting the > timer_callback function which removes the MAC entries so that ARP message are > not sent again after initially learning about MAC addresses. It didnt work. > Is there anyway I can block the ARP messages once transmitted and then only > have TCP/UDP messages flowing in the network. > > -- > Regards, > Kavitesh Singh. > > _______________________________________________ > nox-dev mailing list > nox-dev@noxrepo.org > http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org
_______________________________________________ nox-dev mailing list nox-dev@noxrepo.org http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org