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

Reply via email to