<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>You do...</div><div><div>session.query(exists().where(SourcetoPort.src_address == str(packet.dst))).scalar()</div></div><div><br></div><div>Do exists() queries always return true or false? In that case, your if statement would ALWAYS be true.</div><div><br></div><div>On the other hand, if dropping the exists...</div><div><div><div>session.query(where(SourcetoPort.src_address == str(packet.dst))).scalar()</div></div></div><div>.. would return None if there were no matches, then it seems like this would work.</div><div><br></div><div>More generally, it seems like your two queries are almost equivalent. Why do both? Why not just something like...</div><div><br></div><div>q_res = <span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; ">session.query(SourcetoPort).filter_by(src_address=str(packet.dst)).first()</span></div><div><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; ">if q_res is not None:</span></div><div><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; "> </span><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; ">self.send_packet(packet_in.buffer_id, packet_in.data,q_res.port_no, packet_in.in_port)</span></div><div><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; "> ...</span></div><div><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; "><br></span></div><div><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; ">?</span></div><div><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; "><br></span></div><div><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; "><br></span></div><div><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; ">For that matter, why not try printing out the results of both queries before the if statement and see if they're the same or not?</span></div><div><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; "><br></span></div><div><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; ">Good luck.</span></div><div><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; "><br></span></div><div><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; ">-- Murphy</span></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><br></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><br></font></div><div><div><div><div>On May 2, 2013, at 3:27 PM, Karthik Sharma wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr"><div class="gmail_default"><div class="gmail_default" style=""><font color="#000000" face="arial, helvetica, sans-serif">Hi I have a funciton act_like_switch defined below.</font></div><div class="gmail_default">
<font color="#000000" face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">def act_like_switch (self, packet, packet_in):</font></div><div class="gmail_default">
<font color="#000000" face="arial, helvetica, sans-serif"> """</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> Implement switch-like behavior.</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> """</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> # Learn the port for the source MAC</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #print "RECIEVED FROM PORT ",packet_in.in_port , "SOURCE ",packet.src</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> # create a Session</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #Session = sessionmaker(bind=engine)</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #session = Session()</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> self.mac_to_port[packet.src]=packet_in.in_port</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #if self.mac_to_port.get(packet.dst)!=None:</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #print "count for dst",session.query(SourcetoPort).filter_by(src_address=str(packet.dst)).count(),str(packet.dst)</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #if session.query(SourcetoPort).filter_by(src_address=str(packet.dst)).count():</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> if session.query(exists().where(SourcetoPort.src_address == str(packet.dst))).scalar() is not None:</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #send this packet</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> print "got info from the database"</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> q_res = session.query(SourcetoPort).filter_by(src_address=str(packet.dst)).first()</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> self.send_packet(packet_in.buffer_id, packet_in.data,q_res.port_no, packet_in.in_port)</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #create a flow modification message</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> msg = of.ofp_flow_mod()</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #set the fields to match from the incoming packet</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> msg.match = of.ofp_match.from_packet(packet)</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #send the rule to the switch so that it does not query the controller again.</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> msg.actions.append(of.ofp_action_output(port=q_res.port_no))</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #push the rule</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> self.connection.send(msg)</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> else:</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #flood this packet out as we don't know about this node.</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> print "flooding the first packet"</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> self.send_packet(packet_in.buffer_id, packet_in.data,</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> of.OFPP_FLOOD, packet_in.in_port)</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #self.matrix[(packet.src,packet.dst)]+=1 </font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> entry = SourcetoPort(src_address=str(packet.src) , port_no=packet_in.in_port)</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #add the record to the session object</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> session.add(entry)</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> #add the record to the session object</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> session.commit()</font></div><div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small"><br></div>
<div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small">
I am first checking if the specified mac address exists in the database</div><div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small">
if session.query(exists().where(SourcetoPort.src_address == str(packet.dst))).scalar() is not None:<br></div><div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small">
If it does I am doing a query to retrieve the information as below.</div><div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div style="font-size:small"><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial">
<font color="#000000" face="arial, helvetica, sans-serif">q_res = session.query(SourcetoPort).filter_by(src_address=str(packet.dst)).first()</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial">
<font color="#000000" face="arial, helvetica, sans-serif">self.send_packet(packet_in.buffer_id, packet_in.data,q_res.port_no, packet_in.in_port)</font></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial">
<font color="#000000" face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default" style=""><font color="#000000" face="arial, helvetica, sans-serif">for some reason query is returning a none object.I don't know why after the if condition above succeeds.Any help is appreciated.</font></div>
<div class="gmail_default" style=""><font color="#000000" face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default" style=""><font color="#000000" face="arial, helvetica, sans-serif">Regards,</font></div>
<div class="gmail_default" style="">
<font color="#000000" face="arial, helvetica, sans-serif">Karthik.</font></div></div></div></div>
</blockquote></div><br></div></div></body></html>