[ovs-dev] [PATCH] ovn: Add router load balancer undnat rule for IPv6

Mark Michelson mmichels at redhat.com
Tue Jul 10 14:41:32 UTC 2018


Hi Ben,

Thanks for applying this patch to master. Can you please apply the patch 
to the 2.9 branch as well?

Thank you,
Mark

On 06/26/2018 02:45 PM, Mark Michelson wrote:
> A note: if approved, this patch will also need to go into version 2.9
> 
> On 06/26/2018 02:42 PM, Mark Michelson wrote:
>> When configuring a router port to have a redirect-chassis and using an
>> IPv6 load balancer rule that specifies a TCP/UDP port, load balancing
>> would not work as expected. This is because a rule to un-dnat the return
>> traffic from the load balancer destination was not installed. This is
>> because this rule was only being installed for IPv4 load balancers.
>>
>> This change adds the same rule for IPv6 load balancers as well.
>>
>> Signed-off-by: Mark Michelson <mmichels at redhat.com>
>> ---
>>   ovn/northd/ovn-northd.c | 15 +++++++++++----
>>   1 file changed, 11 insertions(+), 4 deletions(-)
>>
>> diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c
>> index 72fe4e795..2ca439b39 100644
>> --- a/ovn/northd/ovn-northd.c
>> +++ b/ovn/northd/ovn-northd.c
>> @@ -4641,8 +4641,7 @@ add_router_lb_flow(struct hmap *lflows, struct 
>> ovn_datapath *od,
>>       free(new_match);
>>       free(est_match);
>> -    if (!od->l3dgw_port || !od->l3redirect_port || !backend_ips
>> -            || addr_family != AF_INET) {
>> +    if (!od->l3dgw_port || !od->l3redirect_port || !backend_ips) {
>>           return;
>>       }
>> @@ -4651,7 +4650,11 @@ add_router_lb_flow(struct hmap *lflows, struct 
>> ovn_datapath *od,
>>        * router has a gateway router port associated.
>>        */
>>       struct ds undnat_match = DS_EMPTY_INITIALIZER;
>> -    ds_put_cstr(&undnat_match, "ip4 && (");
>> +    if (addr_family == AF_INET) {
>> +        ds_put_cstr(&undnat_match, "ip4 && (");
>> +    } else {
>> +        ds_put_cstr(&undnat_match, "ip6 && (");
>> +    }
>>       char *start, *next, *ip_str;
>>       start = next = xstrdup(backend_ips);
>>       ip_str = strsep(&next, ",");
>> @@ -4666,7 +4669,11 @@ add_router_lb_flow(struct hmap *lflows, struct 
>> ovn_datapath *od,
>>               break;
>>           }
>> -        ds_put_format(&undnat_match, "(ip4.src == %s", ip_address);
>> +        if (addr_family_ == AF_INET) {
>> +            ds_put_format(&undnat_match, "(ip4.src == %s", ip_address);
>> +        } else {
>> +            ds_put_format(&undnat_match, "(ip6.src == %s", ip_address);
>> +        }
>>           free(ip_address);
>>           if (port) {
>>               ds_put_format(&undnat_match, " && %s.src == %d) || ",
>>
> 



More information about the dev mailing list