On Wed, Mar 09, 2016 at 07:09:55PM +0530, Numan Siddique wrote: > On 12/22/2015 01:31 PM, Ben Pfaff wrote: > > Hi Babu and Numan. > > > > So far, we've been able to build OVN so that the logic of the system is > > implemented in terms of OVN logical flows. That is, the logical flow > > table determines what happens in every significant way in OVN. It would > > be nice to preserve this property for DHCP. A design of this form would > > have to include a way for the flow table to extract DHCP header and > > option information from packets, and for the flow table to create new > > DHCP packets and set their header and option values. It would be more > > work, but then the DHCP behavior could be controlled entirely from > > ovn-northd by modifying the flow table. > > > > I'd like to discuss whether this is practical and worth the effort. > > > > Do you have any initial thoughts? > > Hi Ben and everyone, > > We propose to support native dhcp in OVN in the following way > > - For every logical switch port a new logical flow will be added if the > Logical_Port.options has atleast "dhcp-opt-router=<ROUTER_IP>" defined. > > For eg. If there is a logical port "por1" with Logical_Port.options > defined as > ["dhcp-opt-router=10.0.0.1", "dhcp-opt-netmask=255.255.254.0"] and it has > ip address > "10.0.0.3", then the flow would look like > > table=1( ls_in_dhcp), priority= 50, match=(inport == "port1" && eth.src == > <ETH_ADDR> && ip4.src == 0.0.0.0 && ip4.dst == 255.255.255.255 && udp.src == > 68 && udp.dst == 67), action=(dhcp_offer { offerip = 10.0.0.3; router = > 10.0.0.1; netmask = 255.255.254.0; }; eth.dst = eth.src; ip4.dst = 10.0.0.3; > udp.src = 67; udp.dst = 68; outport = inport; inport = ""; / Allow sending > out inport. / output;) > > - ovn-controller would parse the action 'dhcp_offer' and store the dhcp > options in the > 'userdata' of the packet-in and set 'pause' to true. > > The corresponding OF Flow would look like > > table=17, n_packets=7, n_bytes=2394, idle_age=1197, hard_age=2535, > priority=50,udp,reg6=0x2,metadata=0x1,dl_src=fa:16:3e:0b:73:79,nw_src=0.0.0.0,nw_dst=255.255.255.255,tp_src=68,tp_dst=67 > > actions=controller(userdata=00.00.00.02.00.00.00.00.0a.00.00.03.03.04.0a.00.00.01.01.04.ff.ff.fe.00,pause),move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[],mod_nw_dst:10.0.0.3,mod_tp_src:67,mod_tp_dst:68,move:NXM_NX_REG6[]->NXM_NX_REG7[],load:0->NXM_NX_REG6[],load:0->NXM_OF_IN_PORT[],resubmit(,32) > > > - When the ovn-controller receives the packet-in for the dhcp request, it > would > frame a new dhcp packet with almost the same contents of the original > packet > and copy the dhcp options from the 'userdata' to the packet dhcp options > and resume the flow. OpenvSwitch would resume and apply the other actions. > > We have a dirty poc code based on this approach here [1]. > > We would like to know if this solution is reasonable, so that we can proceed > further with the implementation.
I like it. Thank you for working on this! _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev