Description

A known issue with vSRX spawned in Azure public cloud is that ge* interfaces may have all zeroes as their MAC addresses, which black-holes traffic destined to these network interfaces. This problem has not been resolved yet and currently requires manual hardcoding of MAC addresses for ge* interfaces.

This article describes how to detect such failure and how to work around it at the moment.

 

Symptoms

Suppose that a user has already created a vSRX instance via the Azure Marketplace page as shown below:

 

 

Further the user has already created a few ge* interfaces such as ge-0/0/0, ge-0/0/1, and ge-0/0/2 that have been attached to the vSRX instance. However, traffic does not go through the ge-0/0/1 or ge-0/0/2 interface. When you check the details on the ge-0/0/1 and ge-0/0/2 interfaces, you see that they have 0's for MAC addresses as shown below:

lab@vSRX-2> show interfaces ge*|match hardware 
  Current address: 00:0d:3a:8f:3e:d4, Hardware address: 00:0d:3a:8f:3e:d4  <= ge-0/0/0
  Current address: 00:00:00:00:00:00, Hardware address: 00:00:00:00:00:00 <=ge-0/0/1
  Current address: 00:00:00:00:00:00, Hardware address: 00:00:00:00:00:00 <=ge-0/0/2

The vSRX instance in Azure has the following software version information:

lab@vSRX-2> show configuration version 
## Last commit: 2020-05-15 02:13:53 UTC by lab
version 20191212.201431_builder.r1074901;

 

Solution

This issue seems to be a known bug as described in PR1410825 , which says that if the PFE dpdk driver of vSRX fails to get a reply from Azure within 0.01 seconds on request by the assigned MAC addresses, all zeroes will be set as default. 

 

The workaround at the moment is to manually set the MAC address for any network interface that has all 0's based on the assigned MAC address described in the Azure portal. For example, we can retrieve the MAC addresses for ge-0/0/1 and ge-0/0/2 from Azure as shown below:

 

 

 

Then we can set the MAC addresses from those two interfaces:

lab@vSRX-2> configure 
Entering configuration mode

[edit]
lab@vSRX-2# edit interfaces ge-0/0/1  

[edit interfaces ge-0/0/1]
lab@vSRX-2# set mac 00:0d:3a:8f:30:96 

[edit interfaces ge-0/0/1]
lab@vSRX-2# up 1 

[edit interfaces]
lab@vSRX-2# set ge-0/0/2 mac 00:0d:3a:8f:3b:af 

[edit interfaces]
lab@vSRX-2# commit 
commit complete

[edit interfaces]
lab@vSRX-2# run show interfaces ge* |match hardware                    
  Current address: 00:0d:3a:8f:3e:d4, Hardware address: 00:0d:3a:8f:3e:d4
  Current address: 00:0d:3a:8f:30:96, Hardware address: 00:00:00:00:00:00
  Current address: 00:0d:3a:8f:3b:af, Hardware address: 00:00:00:00:00:00

And now we should see traffic pass on these two interfaces.