Hello --<br><br>I want to <b>install and modify</b> flow entries<b> from the controller</b>. First, I proactively install new rules into the flow table in this way:<br><br><b>#flow generate-- simulated flows</b><br>for i in "a set of ip addresses":<br>
    u = udp()<br>    u.srcport = 1<br>    u.dstport = 2<br>    p = ipv4()<br>    p.set_payload(u)<br>    p.srcip =IPAddr(i)#i is increased ip address such as 192.168.0.1, 192.168.0.2, 192.168.0.3, ... 192.168.1.255 ...<br>
    p.dstip = IPAddr("192.168.56.100")<br>   e =ethernet (...)<br>   e.set_payload(p)<br><b>#get a match from packet and tries to install a new rule...</b><br><div class="line" id="LC171"><span class="n">   msg</span> <span class="o">=</span> <span class="n">of</span><span class="o">.</span><span class="n">ofp_flow_mod</span><span class="p">()</span></div>
<div class="line" id="LC172">   <span class="n">msg</span><span class="o">.</span><span class="n">match</span> <span class="o">=</span> <span class="n">of</span><span class="o">.</span><span class="n">ofp_match</span><span class="o">.</span><span class="n">from_packet</span><span class="p">(</span><span class="n">packet</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">port</span><span class="p">)</span></div>
<div class="line" id="LC173"> <span class="n">  msg</span><span class="o">.</span><span class="n">idle_timeout</span> <span class="o">=</span> <span class="mi">10</span></div><div class="line" id="LC174">   <span class="n">msg</span><span class="o">.</span><span class="n">hard_timeout</span> <span class="o">=</span> <span class="mi">30</span></div>
<div class="line" id="LC175"> <span class="n">  msg</span><span class="o">.</span><span class="n">actions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">of</span><span class="o">.</span><span class="n">ofp_action_output</span><span class="p">(</span><span class="n">port</span> <span class="o">=</span> <span class="n">port</span><span class="p">))</span></div>
<div class="line" id="LC177"> <span class="bp">  self</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">)<br>
Till now, the results is what I expected-- a set of new rules are installed in the flow table;<br><br>Next, I want to <b>modify</b> the installed (newly installed rules).  At the same time, I want to <b>send out a packet which matches a particular rules</b> so that I know that modified rule takes effect.<br>
<br>The code is like this--<br><b>#repeat the "</b></span><b>flow generate-- simulated flows" procedure<br>...<br>#</b><br><b>#get a match from packet and tries to modify that rule...<br></b><br><span class="n">   msg</span> <span class="o">=</span> <span class="n">of</span><span class="o">.</span><span class="n">ofp_flow_mod</span><span class="p">()<br>
   msg.command = of.OFPFC_MODIFY (make sure that this command is for modification)<br></span><div class="line" id="LC172">   <span class="n">msg</span><span class="o">.</span><span class="n">match</span> <span class="o">=</span> <span class="n">of</span><span class="o">.</span><span class="n">ofp_match</span><span class="o">.</span><span class="n">from_packet</span><span class="p">(</span><span class="n">packet</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">port</span><span class="p">)</span></div>
<div class="line" id="LC173"> <span class="n">  msg</span><span class="o">.</span><span class="n">idle_timeout</span> <span class="o">=</span> <span class="mi">10</span></div><div class="line" id="LC174">   <span class="n">msg</span><span class="o">.</span><span class="n">hard_timeout</span> <span class="o">=</span> <span class="mi">30<br>
   msg.data = e.pack()<br></span></div><div class="line" id="LC175"> <span class="n">  msg</span><span class="o">.</span><span class="n">actions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">of</span><span class="o">.</span><span class="n">ofp_action_output</span><span class="p">(</span><span class="n">port</span> <span class="o">=</span> <span class="n">port</span><span class="p">))</span></div>
<div class="line" id="LC177"> <span class="bp">  self</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span></div>
</div>Now, I get the error: <br>********error message*****************<br>File "/home/sdn/pox/pox/openflow/of_01.py", line 687, in send<br>    data = data.pack()<br>  File "/home/sdn/pox/pox/openflow/libopenflow_01.py", line 2191, in pack<br>
    self.buffer_id = self.data.buffer_id<br>*********error message end**********<br><br>I tested that If I change <span class="n">msg</span> <span class="o">=</span> <span class="n">of</span><span class="o">.</span><span class="n">ofp_flow_mod</span><span class="p">() to msg = of.ofp_packet_out(), it is fine. But I do not just want to send packet out. What I want to do is, first modify a rule and then send out a packet matching that rule.<br>
<br><br>Can anyone help on the error? Thanks:)<br></span>AttributeError: 'str' object has no attribute 'buffer_id'<br><br>