<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>