<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:rgb(0,0,0)"><div class="gmail_default" style="color:rgb(34,34,34)">I have mininet configured with a remote POX controller running.The configuration of mininet network is as shown below</div>
<div class="gmail_default" style="color:rgb(34,34,34)"><br></div><div class="gmail_default" style="color:rgb(34,34,34)"><br></div><div class="gmail_default" style="color:rgb(34,34,34)"><br></div><div class="gmail_default" style="color:rgb(34,34,34)">
h1 (eth0) ----------- s2(eth1) s2(eth2) ---------- h3(eth0)</div><div class="gmail_default" style="color:rgb(34,34,34)"><br></div><div class="gmail_default" style="color:rgb(34,34,34)">where <br></div><div class="gmail_default" style="color:rgb(34,34,34)">
h1: eth0 is ca:bc:2e:0c:5a:52</div><div class="gmail_default" style="color:rgb(34,34,34)"> h2: eth0 is 0a:79:40:89:44:cf</div><div class="gmail_default" style="color:rgb(34,34,34)"><br></div><div class="gmail_default" style="color:rgb(34,34,34)">
<br></div><div class="gmail_default" style="color:rgb(34,34,34)">The packet handling function in the POX network controller that gets called whenever a packet is forwarded to the controller is given below.The basic idea is that I use </div>
<div class="gmail_default" style="color:rgb(34,34,34)">a database backed controller.If the packet destination address is not present in the database,I flood the packet.else I forward the packet to the appropriate port.</div>
<div class="gmail_default" style="color:rgb(34,34,34)"><br></div><div class="gmail_default" style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px"><div class="gmail_default"><font color="#000000" face="courier new, monospace">def act_like_switch (self, packet, packet_in):</font></div>
<div class="gmail_default"><font color="#000000" face="courier new, monospace"> """</font></div><div class="gmail_default"><font color="#000000" face="courier new, monospace"> Implement switch-like behavior.</font></div>
<div class="gmail_default"><font color="#000000" face="courier new, monospace"> """</font></div><div class="gmail_default"><font color="#000000" face="courier new, monospace"> # Learn the port for the source MAC</font></div>
<div class="gmail_default"><font color="#000000" face="courier new, monospace"> print "RECIEVED FROM PORT ",packet_in.in_port , "SOURCE ",packet.src ,"DEST" , packet.dst</font></div><div class="gmail_default">
<font color="#000000" face="courier new, monospace"> self.mac_to_port[packet.src]=packet_in.in_port</font></div><div class="gmail_default"><font color="#000000" face="courier new, monospace"> q_res = session.query(SourcetoPort).filter_by(src_address=str(packet.dst)).first()</font></div>
<div class="gmail_default"><font color="#000000" face="courier new, monospace"> if q_res is not None:</font></div><div class="gmail_default"><font color="#000000" face="courier new, monospace"> </font><span style="font-family:'courier new',monospace">self.send_packet(packet_in.buffer_id, packet_in.data,q_res.port_no, packet_in.in_port)</span></div>
<div class="gmail_default"><font color="#000000" face="courier new, monospace"> #create a flow modification message</font></div><div class="gmail_default"><font color="#000000" face="courier new, monospace"> msg = of.ofp_flow_mod()</font></div>
<div class="gmail_default"><font color="#000000" face="courier new, monospace"> #set the fields to match from the incoming packet</font></div><div class="gmail_default"><font color="#000000" face="courier new, monospace"> msg.match = of.ofp_match.from_packet(packet)</font></div>
<div class="gmail_default"><font color="#000000" face="courier new, monospace"> #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="courier new, monospace"> msg.actions.append(of.ofp_action_output(port=q_res.port_no))</font></div>
<div class="gmail_default"><font color="#000000" face="courier new, monospace"> #push the rule</font></div><div class="gmail_default"><font color="#000000" face="courier new, monospace"> self.connection.send(msg)</font></div>
<div class="gmail_default"><font color="#000000" face="courier new, monospace"> else:</font></div><div class="gmail_default"><font color="#000000" face="courier new, monospace"> #flood this packet out as we don't know about this node.</font></div>
<div class="gmail_default"><font color="#000000" face="courier new, monospace"> self.send_packet(packet_in.buffer_id, packet_in.data,of.OFPP_FLOOD, packet_in.in_port)</font></div><div class="gmail_default"><font color="#000000" face="courier new, monospace"> </font><span style="font-family:'courier new',monospace">q_res = session.query(SourcetoPort).filter_by(src_address=str(packet.src)).first()</span></div>
<div class="gmail_default"><font color="#000000" face="courier new, monospace"> if q_res is None:</font></div><div class="gmail_default"><font color="#000000" face="courier new, monospace"> entry = SourcetoPort(src_address=str(packet.src) , port_no=packet_in.in_port)</font></div>
<div class="gmail_default"><font color="#000000" face="courier new, monospace"> </font><span style="font-family:'courier new',monospace">#add the record to the session object</span></div><div class="gmail_default">
<font color="#000000" face="courier new, monospace"> session.add(entry)</font></div><div class="gmail_default"><font color="#000000" face="courier new, monospace"> #add the record to the session object</font></div>
<div class="gmail_default"><font color="#000000" face="courier new, monospace"> session.commit()</font></div><div style="font-size:small;font-family:arial,helvetica,sans-serif"><br></div><div style="font-size:small;font-family:arial,helvetica,sans-serif">
<br></div><div style="font-size:small;font-family:arial,helvetica,sans-serif">As mentioned above this function is running on a remote POX controller connected to the described mininet network.Now I do </div><div style="font-size:small;font-family:arial,helvetica,sans-serif">
<br></div><div style="font-size:small;font-family:arial,helvetica,sans-serif">mininet> h1 ping h3 </div><div style="font-size:small;font-family:arial,helvetica,sans-serif"><br></div><div style="font-size:small;font-family:arial,helvetica,sans-serif">
The output that I get is as follows.I have put print statements in the beginning of act_like_switch() function.</div><div><div><font color="#000000" face="arial, helvetica, sans-serif"><br></font></div><div><font color="#000000" face="arial, helvetica, sans-serif">RECIEVED FROM PORT 1 SOURCE ca:bc:2e:0c:5a:52 DEST 0a:79:40:89:44:cf</font></div>
<div><font color="#000000" face="arial, helvetica, sans-serif">RECIEVED FROM PORT 2 SOURCE 0a:79:40:89:44:cf DEST ca:bc:2e:0c:5a:52</font></div><div><font color="#000000" face="arial, helvetica, sans-serif">RECIEVED FROM PORT 1 SOURCE ca:bc:2e:0c:5a:52 DEST 0a:79:40:89:44:cf</font></div>
<div><font color="#000000" face="arial, helvetica, sans-serif">RECIEVED FROM PORT 2 SOURCE 0a:79:40:89:44:cf DEST ca:bc:2e:0c:5a:52</font></div></div><div><font color="#000000" face="arial, helvetica, sans-serif"><br></font></div>
<div><font color="#000000" face="arial, helvetica, sans-serif">It seems that there are two ICMP messages from h1 to h2 and two ICMP messages from h2 to h1.</font></div><div><font color="#000000" face="arial, helvetica, sans-serif">I would expect only 1 ICMP message from host h1 to h2.Why are there so many messages.I did think of </font></div>
<div><font color="#000000" face="arial, helvetica, sans-serif">broadcast but why is the destination address not ff:ff:ff:ff:ff:ff ? The source and destination addresses seems to be swapped?</font></div><div><font color="#000000" face="arial, helvetica, sans-serif"><br>
</font></div><div><font color="#000000" face="arial, helvetica, sans-serif">Can anyone explain why this is happening? I am fairly new to POX and mininet</font></div><div><font color="#000000" face="arial, helvetica, sans-serif"><br>
</font></div><div><font color="#000000" face="arial, helvetica, sans-serif">Regards,</font></div><div><font color="#000000" face="arial, helvetica, sans-serif">Karthik</font></div></div></div></div>