Hi I have a funciton act_like_switch defined below.

def act_like_switch (self, packet, packet_in):
    """
    Implement switch-like behavior.
    """
    # Learn the port for the source MAC
    #print "RECIEVED FROM PORT ",packet_in.in_port , "SOURCE ",packet.src
    # create a Session
    #Session = sessionmaker(bind=engine)
    #session = Session()
    self.mac_to_port[packet.src]=packet_in.in_port
    #if self.mac_to_port.get(packet.dst)!=None:
    #print "count for
dst",session.query(SourcetoPort).filter_by(src_address=str(packet.dst)).count(),str(packet.dst)
    #if
session.query(SourcetoPort).filter_by(src_address=str(packet.dst)).count():
    if session.query(exists().where(SourcetoPort.src_address ==
str(packet.dst))).scalar() is not None:
           #send this packet
           print "got info from the database"
           q_res =
session.query(SourcetoPort).filter_by(src_address=str(packet.dst)).first()
           self.send_packet(packet_in.buffer_id,
packet_in.data,q_res.port_no, packet_in.in_port)
           #create a flow modification message
           msg = of.ofp_flow_mod()
           #set the fields to match from the incoming packet
           msg.match = of.ofp_match.from_packet(packet)
           #send the rule to the switch so that it does not query the
controller again.
           msg.actions.append(of.ofp_action_output(port=q_res.port_no))
           #push the rule
           self.connection.send(msg)
    else:
           #flood this packet out as we don't know about this node.
           print "flooding the first packet"
           self.send_packet(packet_in.buffer_id, packet_in.data,
                       of.OFPP_FLOOD, packet_in.in_port)
           #self.matrix[(packet.src,packet.dst)]+=1
           entry = SourcetoPort(src_address=str(packet.src) ,
port_no=packet_in.in_port)
           #add the record to the session object
           session.add(entry)
           #add the record to the session object
           session.commit()

I am first checking if the specified mac address exists in the database

  if session.query(exists().where(SourcetoPort.src_address ==
str(packet.dst))).scalar() is not None:

If it does I am doing a query to retrieve the information as below.

q_res =
session.query(SourcetoPort).filter_by(src_address=str(packet.dst)).first()
self.send_packet(packet_in.buffer_id, packet_in.data,q_res.port_no,
packet_in.in_port)

for some reason query is returning a none object.I don't know why after the
if condition above succeeds.Any help is appreciated.

Regards,
Karthik.

Reply via email to