Hi Ivan, Thanks for your response.
Let me explain you the issue that we are facing on our virtual router in VMware environment. 1. We are using ixgbe driver , SRIOV enabled . root at localhost:~# lspci .... "Intel Corporation 82599 Ethernet Controller Virtual Function" 2. "mx86-bgl-1-r1" is our router under testing and R2 is a standard router. mx86-bgl-1-r1 is connected to R2 mx86-bgl-1-r1 (10.1.1.103)------------------>R2(10.1.1.101) 2. This time ping test passes root at mx86-bgl-1-r1# show interfaces ge-0/0/0 { unit 0 { family inet { address 10.1.1.103/24; } } } [edit] root at mx86-bgl-1-r1# root at mx86-bgl-1-r1# run ping 10.1.1.101 PING 10.1.1.101 (10.1.1.101): 56 data bytes 64 bytes from 10.1.1.101: icmp_seq=0 ttl=64 time=0.980 ms 64 bytes from 10.1.1.101: icmp_seq=1 ttl=64 time=1.433 ms 3. Default MAC address of interface ge-0/0/0 is as shown below: root at mx86-bgl-1-r1# run show interfaces ge-0/0/0 extensive | grep current Current address: 02:06:0a:0e:ff:f0, Hardware address: 02:06:0a:0e:ff:f0 [edit] root at mx86-bgl-1-r1# 4. Now I am changing MAC. Ping works this time also root at mx86-bgl-1-r1# set interfaces ge-0/0/0 mac 02:06:0a:0a:ff:f0 [edit] root at mx86-bgl-1-r1# commit commit complete [edit] root at mx86-bgl-1-r1# run show interfaces ge-0/0/0 extensive | grep current Current address: 02:06:0a:0a:ff:f0, Hardware address: 02:06:0a:0e:ff:f0 [edit] root at mx86-bgl-1-r1# show interfaces ge-0/0/0 { mac 02:06:0a:0a:ff:f0; unit 0 { family inet { address 10.1.1.103/24; } } } [edit] root at mx86-bgl-1-r1# root at mx86-bgl-1-r1# run ping 10.1.1.101 PING 10.1.1.101 (10.1.1.101): 56 data bytes 64 bytes from 10.1.1.101: icmp_seq=0 ttl=64 time=1.338 ms 64 bytes from 10.1.1.101: icmp_seq=1 ttl=64 time=8.832 ms 64 bytes from 10.1.1.101: icmp_seq=2 ttl=64 time=1.292 ms 5. I am deleting the above configured MAC. In this case newly configured MAC as shown above will be deleted and Default MAC (02:06:0a:0e:ff:f0) will be applied. Ping fails at this step. "return statement added by you is not allowing to configure default MAC. [edit] root at mx86-bgl-1-r1# delete interfaces ge-0/0/0 mac [edit] root at mx86-bgl-1-r1# commit commit complete [edit] root at mx86-bgl-1-r1# show interfaces ge-0/0/0 { unit 0 { family inet { address 10.1.1.103/24; } } } [edit] root at mx86-bgl-1-r1# run show interfaces ge-0/0/0 extensive | grep current // Displays value from router's local database not from NIC. Current address: 02:06:0a:0e:ff:f0, Hardware address: 02:06:0a:0e:ff:f0 [edit] root at mx86-bgl-1-r1# run ping 10.1.1.101 PING 10.1.1.101 (10.1.1.101): 56 data bytes ^C 2 packets transmitted, 0 packets received, 100% packet loss [edit] root at mx86-bgl-1-r1# 7. LOGs: (I have added a debug log just before the return statement that you place) Log o/p in failure case .... Santosh ixgbevf_add_mac_addr returning .... code changes: ----------------------------- ixgbevf_add_mac_addr(....) { ... if (memcmp(hw->mac.perm_addr, mac_addr, sizeof(struct ether_addr)) == 0) { PMD_DRV_LOG(DEBUG, "Existing MAC \n"); printf("Santosh %s returning \n",__FUNCTION__); return; } 8. If I remove the above "return" statement, build the driver, loaded in router and repeat the steps-2 to steps-5 of MAC add and MAC delete on our router then ping passes. root at mx86-bgl-1-r1# run ping 10.1.1.101 PING 10.1.1.101 (10.1.1.101): 56 data bytes 64 bytes from 10.1.1.101: icmp_seq=0 ttl=64 time=2.356 ms 64 bytes from 10.1.1.101: icmp_seq=1 ttl=64 time=1.415 ms 64 bytes from 10.1.1.101: icmp_seq=2 ttl=64 time=1.226 ms ^C --- 10.1.1.101 ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max/stddev = 1.226/1.666/2.356/0.494 ms 9. Please let me know whether is it fine to remove that return statement added by you in "ixgbevf_add_mac_addr" ? Thanks & Regards, Santosh On Wed, Apr 20, 2016 at 3:31 AM, Ivan Boule <ivan.boule at 6wind.com> wrote: > Hi Santosh, > > I do not get exactly what you attempt to do on a VF. > Are you first deleting the so-called permanent MAC address by a call to the > function ixgbevf_remove_mac_addr() ? This operation is not allowed. > Can you explain exactly the sequence of operations that are done, so that I > can understand how the test (memcmp(hw->mac.perm_addr, mac_addr, > sizeof(struct ether_addr)) == 0) in the function ixgbevf_add_mac_addr() > prevents them to be successfully performed. > > Ivan > > PS : please, can you CC your emails to dev at dpdk.org > > > 2016-04-19 17:01 GMT+02:00 santosh <santosh.iitg at gmail.com>: >> >> Hi Ivan, >> >> Your following code changes causing issue in Vmware environment. >> >> ----------------------------------- ------------------- >> ------------------------------ >> + /* >> + * On a 82599 VF, adding again the same MAC addr is not an idempotent >> + * operation. Trap this case to avoid exhausting the [very limited] >> + * set of PF resources used to store VF MAC addresses. >> + */ >> + if (memcmp(hw->mac.perm_addr, mac_addr, sizeof(struct ether_addr)) == 0) >> + return; >> diag = ixgbevf_set_uc_addr_vf(hw, 2, mac_addr->addr_bytes); >> -------------------------------------------------------------------- >> ------------- ------- >> >> >> Issue: >> At CLI , we have provision to add /del MAC of an interface. >> During MAC delete, existing MAC is deleted and default MAC is applied. >> This default MAC is not being applied in VMware environment >> successfully due to "return" statement >> in your above code changes. As a result traffic is stopped completely. >> If I remove above >> "return" statement then traffic continues to flow after MAC delete. >> >> Please let me know your suggestion to handle this scenario . If I >> remove "return" what will be the consequences ? >> >> If removing "return" statement is not good idea then what are other >> way to handle MAC delete scenario ? we have only 1 VF per PF in our >> setup as of now. >> >> >> Thanks >> Santosh > > > > > -- > Ivan BOULE > 6WIND > Software Engineer > > Tel: +33 1 39 30 92 47 > Mob: + 33 6 77 25 26 38 > Fax: +33 1 39 30 92 11 > ivan.boule at 6wind.com > www.6wind.com > Join the Multicore Packet Processing Forum: > www.multicorepacketprocessing.com > > Ce courriel ainsi que toutes les pi?ces jointes, est uniquement destin? ? > son ou ses destinataires. Il contient des informations confidentielles qui > sont la propri?t? de 6WIND. Toute r?v?lation, distribution ou copie des > informations qu'il contient est strictement interdite. Si vous avez re?u ce > message par erreur, veuillez imm?diatement le signaler ? l'?metteur et > d?truire toutes les donn?es re?ues. > > This e-mail message, including any attachments, is for the sole use of the > intended recipient(s) and contains information that is confidential and > proprietary to 6WIND. All unauthorized review, use, disclosure or > distribution is prohibited. If you are not the intended recipient, please > contact the sender by reply e-mail and destroy all copies of the original > message. >