<html><head></head><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px"><div id="yui_3_16_0_ym19_1_1465248403522_3800"><span>Hi Sean,</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800"><span><br></span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_3979">networking-sfc does not support bump-in-the-wire functions currently as I mentioned.</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_3980">The service functions are essentially L3 (ie. the MAC destination address is changed to the </span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_4009">SF and the service function then sources the packet with its MAC address).</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span><br></span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_4008">What I am looking for is bump-in-the-wire service functions that pass the original packet</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span>untouched.</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span><br></span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_4030">This is what networking-sfc does currently and does it really well.</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span><br></span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_4065">A     SF      B</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_4437">|      |    |       |</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_4436">1    2   3      4</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_4435">-----------------</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_4441">OVS</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span><br></span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_4202">A sends packet to B with dst MAC = B and src MAC = A</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_4203">flow-classifier matches the packet and realizes it needs to be sent to SF (service function).</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span>networking-sfc changes the MAC DA to SF and send the packet to OF port 2.</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span>SF does its work on the packet and sends it out to port 3 with src MAC = SF.</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr">This is perfectly fine and normal operation and networking-sfc does it great.<br></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><br></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><br></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span><br></span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span><br></span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_4385">Now, imagine if "SF" were a bump-in-the-wire function (ie. receives a packet, does its work on</span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span id="yui_3_16_0_ym19_1_1465248403522_4433">the packet and then sends the packet unmodified to B).</span></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4495"><span id="yui_3_16_0_ym19_1_1465248403522_4496">A     SF      B</span></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4497"><span id="yui_3_16_0_ym19_1_1465248403522_4498">|      |    |       |</span></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4499"><span id="yui_3_16_0_ym19_1_1465248403522_4500">1    2   3      4</span></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4501"><span id="yui_3_16_0_ym19_1_1465248403522_4502">-----------------</span></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503"><span id="yui_3_16_0_ym19_1_1465248403522_4504">OVS</span></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503"><span><br></span></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503"><span><br></span></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503"><span>So, with bump-in-the-wire, following happens</span></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503"><span id="yui_3_16_0_ym19_1_1465248403522_5749">A sends packet to B with dst MAC = B and src MAC = A.</span></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">flow-classifier matches the packet and realizes it needs to be sent to SF (service function).</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">Packet is sent unmodified to SF (dst MAC=B and src MAC=A).on OP port 2.</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">SF does its work on the packet and sends it to OF port 3 unmodified (dst MAC=B, and src MAC=A).</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503"><br></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">Now, following issues comes into play.</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">1. bridge learning gone bad.</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">On br-int (OVS), when the packet hits any flow with NORMAL action, it will learn the SRC MAC </div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">address of the packet and the port it arrived on.  First, it learnt that src MAC A is on port 1,</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">when SF sends the packet back to port 3, br-int will now think that src MAC A is on port 3.</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503"><br></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">2. Infinite loop issues.</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">BUM (broadcast/unicast/multicast) packets flooded to SF will essentially go in an infinite loop</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">unless proper flows are inserted to avoid them being sent to SF.</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503"><br></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">This is not really a service chain issue but a basic issue of how to support bump-in-the-wire functions</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">with Openstack using OVS as the ML2 plugin.</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503"><br></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">thanks,</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503">Farhad.</div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503"><br></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503"><br></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503"><br></div><div dir="ltr" id="yui_3_16_0_ym19_1_1465248403522_4503"><br></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span><br></span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span><br></span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span><br></span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span><br></span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span><br></span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span><br></span></div><div id="yui_3_16_0_ym19_1_1465248403522_3800" dir="ltr"><span><br></span></div> <div class="qtdSeparateBR"><br><br></div><div class="yahoo_quoted" style="display: block;"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;"> <div dir="ltr"><font size="2" face="Arial"> On Monday, June 6, 2016 1:43 PM, Sean M. Collins <sean@coreitpro.com> wrote:<br></font></div>  <br><br> <div class="y_msg_container">Take a look at the networking-sfc project.<br clear="none">-- <br clear="none">Sean M. Collins<div class="yqt0758286747" id="yqtfd88201"><br clear="none"></div><br><br></div>  </div> </div>  </div></div></body></html>