Also, if flow for ARP or ICMP etc messages are set then does it mean for TCP/UDP another flow will be set or can the flow set by the ARP/ICMP work for TCP/UDP packet?
On Mon, Nov 29, 2010 at 2:16 AM, K Singh <kavites...@gmail.com> wrote: > I would like to have the default behavior of the pyswitch for those > packets. I just want to filter out TCP/UDP packets and change flows based on > it? Are you suggesting that I only run the custom function after detecting > the TCP/UDP packet and for other packets let the flow get installed? > > > On Mon, Nov 29, 2010 at 12:32 AM, kk yap <yap...@stanford.edu> wrote: > >> Simple question, what do you do for packet without UDP/TCP port? Like >> ICMP, ARP, etc? That logic seems missing. >> >> Regards >> KK >> >> On 28 November 2010 16:22, K Singh <kavites...@gmail.com> 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 >> > >> > >> > > > > -- > Regards, > K Singh. > > -- Regards, K Singh.
_______________________________________________ nox-dev mailing list nox-dev@noxrepo.org http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org