On Mon, Nov 11, 2019 at 6:11 PM Han Zhou <zhou...@gmail.com> wrote:
>
> 1. Would there be problem for VLAN backed logical router use case, since a 
> chassis MAC is used as src MAC to send packets from router ports?
> 2. How about checking if tpa == spa to make sure GARP is always flooded? (not 
> directly supported by OF)

This would've been nice to have in OF :)

>
>
> On Mon, Nov 11, 2019 at 5:32 AM Dumitru Ceara <dce...@redhat.com> wrote:
> >
> > On Sat, Nov 9, 2019 at 8:35 AM Han Zhou <zhou...@gmail.com> wrote:
> > >
> > >
> > >
> > > On Fri, Nov 8, 2019 at 6:38 AM Dumitru Ceara <dce...@redhat.com> wrote:
> > > >
> > > > ARP request and ND NS packets for router owned IPs were being
> > > > flooded in the complete L2 domain (using the MC_FLOOD multicast group).
> > > > However this creates a scaling issue in scenarios where aggregation
> > > > logical switches are connected to more logical routers (~350). The
> > > > logical pipelines of all routers would have to be executed before the
> > > > packet is finally replied to by a single router, the owner of the IP
> > > > address.
> > > >
> > > > This commit limits the broadcast domain by bypassing the L2 Lookup stage
> > > > for ARP requests that will be replied by a single router. The packets
> > > > are forwarded only to the router port that owns the target IP address.
> > > >
> > > > IPs that are owned by the routers and for which this fix applies are:
> > > > - IP addresses configured on the router ports.
> > > > - VIPs.
> > > > - NAT IPs.
> > > >
> > > > This commit also fixes function get_router_load_balancer_ips() which
> > > > was incorrectly returning a single address_family even though the
> > > > IP set could contain a mix of IPv4 and IPv6 addresses.
> > > >
> > > > Reported-at: https://bugzilla.redhat.com/1756945
> > > > Reported-by: Anil Venkata <vkomm...@redhat.com>
> > > > Signed-off-by: Dumitru Ceara <dce...@redhat.com>
> > > >
> > > > ---
> > > > v6:
> > > > - Address Han's comments:
> > > >   - remove flooding of ARPs targeting OVN owned IP addresses.
> > > >   - update ovn-architecture documentation.
> > > >   - rename ARP handling functions.
> > > >   - Adapt "ovn -- 3 HVs, 3 LS, 3 lports/LS, 1 LR" autotest to take into
> > > >     account the new way of forwarding ARPs.
> > > > - Also, properly deal with ARP packets on VLAN-backed networks.
> > >
> > > I am confused by this additional VLAN related change. VLAN is just 
> > > handled as bridged logical switch where a localnet port is used as 
> > > *inport*. It seems to me no difference from regular localnet port no 
> > > matter with or without VLAN tag. When an ARP request is going through the 
> > > ingress pipeline of the bridged logical switch, the logic of bypassing 
> > > the flooding added by this patch should just apply, right? It is also 
> > > very common scenario that the *aggregation switch* for the routers is an 
> > > external physical network backed by VLAN. I think the purpose of this 
> > > patch is to make sure scenario scale. Did I misunderstand anything here?
> >
> > Hi Han,
> >
> > The reason behind it was that with VLAN backed networks when packets
> > move between hypervisors without going through geneve we rerun the
> > ingress pipeline. That would mean that the flows I added for self
> > originated (G)ARP packets won't be hit for ARP requests originated by
> > ovn-controller on a remote hypervisor:
> >
> > priority=80 match: "inport=<patch-port-to-lr>, arp.op == 1" action:
> > "outport=MC_FLOOD"
> >
> > But instead we would hit:
> > priority=75 match: "arp.op == 1 && arp.tpa == <OVN-owned-IP" action:
> > "outport=<patch-port-to-lr>" and never send flood the packet out on
> > the second HV.
> >
>
> Thanks for the explain. Now I understand the problem.
>
> > You're right, the way I added the check for all VLAN packets is not OK
> > as we fall back to the old behavior too often. However, I'm not sure
> > what the best option is. Do you think it's fine if I change the
> > priority 80 flow to the following?
> >
> > priority=80 match: "eth.src={lrp.ea, lr.nat.external_macs} && arp.op
> > == 1" action: "outport=MC_FLOOD"
> >
> > The idea would be to identify self originated ARP requests by matching
> > the source mac instead of logical ingress port (as this might not be
> > present). I tried it locally and it works fine but we do need to add
> > more flows than before.
> >
>
> Would this work when "ovn-chassis-mac-mappings" is configured for VLAN backed 
> logical routers? We might end up adding chassis unique MACs, too?

I think it will work fine because when ovn-chassis-mac-mappings is
configured we add an entry in table OFTABLE_PHY_TO_LOG to match on
CHASSIS_MAC_TO_ROUTER_MAC_CONJID (comparing eth.src to all
ovn-chassis-macs) to rewrite the eth.src address with that of the
router port.

>
> Alternatively, I think we may change the priority 80 flow to match for each 
> OVN router owned IP: arp.tpa == IP && arp.spa == IP ... Would this ensure OVN 
> router generated ARPs are flooded?
>

I considered this too but because a router port can have an
"unlimited" number of networks configured I decided to go for MAC to
minimize the number of flows.

Also, if we match on eth.src we can create a single priority 80 logical flow:
priority=80 match: "eth.src={lrp.ea, lr.nat.external_macs} && arp.op
== 1" action: "outport=MC_FLOOD"

Whereas if we match on each of the IPs we need individual flows:
priority=80 match: "arp.tpa == IP && arp.spa == IP && arp.op == 1"
action: "outport=MC_FLOOD"

In the end they translate to the same number of OF entries but we
store less logical flows in the database.

Do you think there's anything else missing?

Thanks,
Dumitru

> >
> > >
> > > In addition, the below macro definition may be renamed to FLAGBIT_..., 
> > > because it is for the bits of MFF_LOG_FLAGS, which is one of the 
> > > pre-defined logical fields, instead of for the MFF_LOG_REG0-9 registers.
> > > >
> > > > +#define REGBIT_NOT_VXLAN "flags[1] == 0"
> > > > +#define REGBIT_NOT_VLAN "flags[7] == 0"
> > > > +
> > >
> > > The other part looks good to me. Thanks for simply the patch.
> > >
> > > Han
> >

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to