On Thu, Dec 22, 2016 at 05:06:08PM +0530, Babu Shanmugam wrote:
> This patch attempts to avoid the usage of MAC_Binding table.
> 
> Dynamic ARP response originates from the logical ports with "unknown"
> address. When the ARP resolution is requested via a logical
> router datapath, ARP response will be delivered to the logical router
> port of the switch. Since the logical router is distributed, the
> response will never reach the other chassis from where the ARP resolution
> is requested.
> 
> This is done using a OVN logical action bcast2lr() which adds an action
> to send the packet to a specific multicast group for the logical router
> datapath. For the chassis that have an "unknown" port connected to any
> logical router, the bcast2lr() action will do the broadcast. The other
> chassis will listen for such broadcast packets and executes put_arp()
> action on them.
> 
> When the ovn-controller processes put_arp() action, it caches the MAC
> bindings and this cache will be used to update the openflow table used
> for the dynamic MAC resolution
> 
> Signed-off-by: Babu Shanmugam <bscha...@redhat.com>

Thanks for the patch.  We need a solution for this problem, and this is
the first real attempt I've seen.

Clang says:

    ../ovn/lib/actions.c:1672:9: error: variable 'dp_id' is used uninitialized 
whenever 'if' condition is false [-Werror,-Wsometimes-uninitialized]
    ../ovn/lib/actions.c:1699:23: note: uninitialized use occurs here
    ../ovn/lib/actions.c:1672:5: note: remove the 'if' if its condition is 
always true
    ../ovn/lib/actions.c:1667:15: note: initialize the variable 'dp_id' to 
silence this warning
    ../ovn/lib/actions.c:1672:9: error: variable 'chassis' is used 
uninitialized whenever 'if' condition is false 
[-Werror,-Wsometimes-uninitialized]
    ../ovn/lib/actions.c:1700:22: note: uninitialized use occurs here
    ../ovn/lib/actions.c:1672:5: note: remove the 'if' if its condition is 
always true
    ../ovn/lib/actions.c:1669:18: note: initialize the variable 'chassis' to 
silence this warning
    ../ovn/lib/actions.c:1672:9: error: variable 'port_key' is used 
uninitialized whenever 'if' condition is false 
[-Werror,-Wsometimes-uninitialized]
    ../ovn/lib/actions.c:1701:26: note: uninitialized use occurs here
    ../ovn/lib/actions.c:1672:5: note: remove the 'if' if its condition is 
always true
    ../ovn/lib/actions.c:1668:18: note: initialize the variable 'port_key' to 
silence this warning
    ../ovn/lib/actions.c:1672:9: error: variable 'is_this_chassis' is used 
uninitialized whenever 'if' condition is false 
[-Werror,-Wsometimes-uninitialized]
    ../ovn/lib/actions.c:1702:30: note: uninitialized use occurs here
    ../ovn/lib/actions.c:1672:5: note: remove the 'if' if its condition is 
always true
    ../ovn/lib/actions.c:1670:25: note: initialize the variable 
'is_this_chassis' to silence this warning
    ../ovn/lib/actions.c:1709:19: error: format specifies type 'long' but the 
argument has type 'uint64_t' (aka 'unsigned long long') [-Werror,-Wformat]
    ../ovn/northd/ovn-northd.c:3144:25: error: format specifies type 'long' but 
the argument has type 'int64_t' (aka 'long long') [-Werror,-Wformat]
    ../ovn/northd/ovn-northd.c:3145:25: error: format specifies type 'long' but 
the argument has type 'int64_t' (aka 'long long') [-Werror,-Wformat]

GCC says:

    ../ovn/lib/actions.c: In function 'format_BCAST2LR':
    ../ovn/lib/actions.c:1708:41: error: format '%ld' expects argument of type 
'long int', but argument 3 has type 'uint64_t {aka const long long unsigned 
int}' [-Werror=format=]
         ds_put_format(s, "bcast2lr(dst_dp=%ld, dst_pkey=%d, chassis=\"%s\");",
                                             ^
    ../ovn/lib/actions.c: In function 'parse_action':
    ../ovn/lib/actions.c:1702:28: error: 'is_this_chassis' may be used 
uninitialized in this function [-Werror=maybe-uninitialized]
         bc2lr->is_this_chassis = is_this_chassis;
         ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
    ../ovn/lib/actions.c:1670:10: note: 'is_this_chassis' was declared here
         bool is_this_chassis;
              ^~~~~~~~~~~~~~~
    ../ovn/lib/actions.c:1700:20: error: 'chassis' may be used uninitialized in 
this function [-Werror=maybe-uninitialized]
         bc2lr->chassis = chassis;
         ~~~~~~~~~~~~~~~^~~~~~~~~
    ../ovn/lib/actions.c:1669:11: note: 'chassis' was declared here
         char *chassis;
               ^~~~~~~
    ../ovn/northd/ovn-northd.c: In function ‘build_lswitch_flows’:
    ../ovn/northd/ovn-northd.c:3142:44: error: format ‘%ld’ expects argument of 
type ‘long int’, but argument 3 has type ‘int64_t {aka const long long int}’ 
[-Werror=format=]
                             "bcast2lr(dst_dp=%ld, dst_pkey=%ld, 
chassis=\"%s\");"
                                                ^
    ../ovn/northd/ovn-northd.c:3142:58: error: format ‘%ld’ expects argument of 
type ‘long int’, but argument 4 has type ‘int64_t {aka const long long int}’ 
[-Werror=format=]
                             "bcast2lr(dst_dp=%ld, dst_pkey=%ld, 
chassis=\"%s\");"

I don't think that OVN logical actions should specify datapath or port
numbers; there are no precedents.  Please use their names instead and
let ovn-controller translate.

Unfortunately, my biggest problem with this patch is that I simply don't
understand the description of how this whole thing is supposed to work.
Can you explain, step-by-step, how ARP now gets resolved?

Thanks,

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

Reply via email to