I mentioned before that I had some trouble getting DHCP working with OVN
ACLs enabled.  I think I have finally gotten to the bottom of it.

My first workaround was a brute force patch to bypass conntrack if the
packet was a DHCP request or response.  That worked, but I wasn't able
to explain why it was needed.

It turns out I was looking in the wrong place.  I thought it had to do
with conntrack marking the odd looking DHCP requests as invalid.  I was
actually getting confused by a bunch of IPv6 traffic getting marked as
invalid.  It seems IPv6 neighbor discovery stuff is what's being marked
invalid (at least that's my guess of what those packets are).  Once I
filtered all IPv6 out earlier in the flows, I got a clearer picture of
what was happening.  I'll have to revisit IPv6 later.

Here's the broadcast flow in table 33 (the beginning of the logical
egress pipeline) on my test environment.

table=33, n_packets=1304, n_bytes=150792,
priority=100,reg7=0xffff,metadata=0x1
actions=set_field:0x2->reg5,set_field:0x2->reg7,resubmit(,34),set_field:0x1->reg5,set_field:0x1->reg7,resubmit(,34),set_field:0x3->reg5,set_field:0x3->reg7,resubmit(,34),set_field:0x4->reg5,set_field:0x4->reg7,resubmit(,34),set_field:0xffff->reg7

So, we should see the packet resubmitted to table 34 for each logical
port on the network the DHCP request was broadcast to.  The problem is
that it only hits table 34 once, for the first logical port, which is
*not* the DHCP server.  In fact, this would probably explain why I've
seen inconsistent behavior, since the DHCP server could be listed first
sometimes.  I only see this problem when the ct() action is being used,
so my guess is that this action causes the context to be lost:

table=48, n_packets=2, n_bytes=660, priority=100,ip,metadata=0x1
actions=ct(table=49,zone=NXM_NX_REG5[0..15])

Does this seem plausible?  If so, would you consider that a bug in the
ct() action?
-- 
Russell Bryant
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to