[OVSDB-309] Arp flows are not getting installed properly in compute nodes Created: 26/Feb/16 Updated: 30/Oct/17 Resolved: 21/Mar/16 |
|
| Status: | Resolved |
| Project: | ovsdb |
| Component/s: | openstack.net-virt |
| Affects Version/s: | unspecified |
| Fix Version/s: | None |
| Type: | Bug | ||
| Reporter: | Hari Prasidh | Assignee: | Oded Shvartz |
| Resolution: | Done | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Environment: |
Operating System: All |
||
| Attachments: |
|
| External issue ID: | 5435 |
| Description |
|
I am analyzing ARP responder feature in ODL using openstack. While Adding router interface with tenant1 , arp flows are installed both control and compute nodes as expected for DHCP port and default gateway. And then, if I added router interface with tenant2, in control node arp flows are installed as expected, but, in compute nodes teanant1 default gateway IP is overwritten with teanant2 default gateway IP. Please find below dump flows: Added Router interface with tenant1 (10.0.0.0/24) Control node : cookie=0x0, duration=496.642s, table=0, n_packets=3, n_bytes=258, priority=0 actions=goto_table:20 Compute1: cookie=0x0, duration=314.362s, table=0, n_packets=10, n_bytes=788, priority=0 actions=goto_table:20 Compute2: cookie=0x0, duration=313.912s, table=0, n_packets=10, n_bytes=788, priority=0 actions=goto_table:20 Added Router interface with tenant2 (20.0.0.0/24) Control: cookie=0x0, duration=591.999s, table=0, n_packets=3, n_bytes=258, priority=0 actions=goto_table:20 Compute1: cookie=0x0, duration=427.876s, table=0, n_packets=10, n_bytes=788, priority=0 actions=goto_table:20 Compute2: cookie=0x0, duration=450.695s, table=0, n_packets=10, n_bytes=788, priority=0 actions=goto_table:20 |
| Comments |
| Comment by Hari Prasidh [ 26/Feb/16 ] |
|
Attachment karaf_logs.zip has been added with description: karaf_logs |
| Comment by Anil Vishnoi [ 28/Feb/16 ] |
|
just a wild guess is that net-virt is using the overlapping flow names, so when it tries to install the flow for tenant 2, it generates the same flow name and end up modifying the existing flow rather then installing new flow. |
| Comment by Oded Shvartz [ 29/Feb/16 ] |
|
This issue related to the fact that before we creates ARP responder rules we validate that the rules are needed on the specific node and if not we delete it : DistributedArpService: // Arp rule is only needed when segmentation exists in the given node ( Once we will have the network on the node (first VM will be created) the ARP responder rules will be created (for the DHCP port and for the router interface). Now the question is if we want to fix it by not having the new rule as well ? |
| Comment by Oded Shvartz [ 01/Mar/16 ] |
|
(In reply to Oded Shvartz from comment #2) So after more debugging I found why the new rule (after adding the second interface to the router) was not deleted like the first interface. After calling the distributedArpService.handlePortEvent (where we delete all the rules that are not needed to a specific node) we then calling the neutronL3Adapter.handleNeutronPortEvent and there we are not checking if the rule is needed, because we assume that ARP responder rules for router interface are needed always : // Enable ARP responder by default, because router interface needs to be responded always. From functionality perspective I don't think we need it (I hope I'm not missing something here), because once we will have the first VM for this network we will create it, but I think we should be more consistent and to decide if we want to create those rules or not in both places. |
| Comment by Hari Prasidh [ 01/Mar/16 ] |
|
Hi Oded, Assume we have 2 networks(tenat1 and tenant2) and 2 Vm instances in control node, one instance in compute1 and one instance in compute2, Compute1 node Vm Compute2 node Vm now, if we are trying to ping VM4(20.0.0.4) to VM1(10.0.0.3). If compute2 not having Arp flows for default gateway ip, then the Arp request will be broad casted to all nodes . So I think by default arp responder should be enable for router interface. |
| Comment by Oded Shvartz [ 02/Mar/16 ] |
|
(In reply to hari prasad from comment #4) Hi Hari, I think that when VM4(20.0.0.4) will try to ping VM1(10.0.0.3) it will send ARP request to find the default gateway on network 20.0.0.0 and we will have the arp responder rule for it, because it will be added once you created the VM (VM4). VM4 will send the packet to the default gateway (OVS) and OVS will do the routing without sending ARP request. You can look on table 70 which will add the relevant mac for the requested IP (10.0.0.4 in your case). Please let me know what do you think. |
| Comment by Sam Hague [ 21/Mar/16 ] |
|
be: https://git.opendaylight.org/gerrit/#/c/36268/1 |