Skip to content

Commit 024d480

Browse files
committed
Add new API to danmep package for UID based search
1 parent 94fce42 commit 024d480

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

Diff for: pkg/danmep/ep.go

+13-7
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import (
1515
"github.com/j-keck/arping"
1616
)
1717

18+
const (
19+
InvalidMacAddress = "00:00:00:00:00:00"
20+
)
21+
1822
func createIpvlanInterface(dnet *danmtypes.DanmNet, ep *danmtypes.DanmEp) error {
1923
host, err := os.Hostname()
2024
if err != nil {
@@ -273,7 +277,6 @@ func deleteEp(ep *danmtypes.DanmEp) error {
273277

274278
func createDummyInterface(ep *danmtypes.DanmEp, dnet *danmtypes.DanmNet) error {
275279
origDummyName := ep.Spec.Iface.Name
276-
origDummyMac,_ := net.ParseMAC(ep.Spec.Iface.MacAddress)
277280
if dnet.Spec.Options.Vlan != 0 {
278281
origDummyName = ep.ObjectMeta.Name[0:14]
279282
}
@@ -282,12 +285,16 @@ func createDummyInterface(ep *danmtypes.DanmEp, dnet *danmtypes.DanmNet) error {
282285
Name: origDummyName,
283286
},
284287
}
285-
if origDummyMac.String() != "" {
288+
origDummyMac,_ := net.ParseMAC(ep.Spec.Iface.MacAddress)
289+
origDummyMacStr := origDummyMac.String()
290+
//It is observed VFIO bound VFs do not always retain their original MAC address for some reason
291+
//To avoid failing Pod instantiation in this case we only force MAC address on dummy if the VF looks "healthy"
292+
if origDummyMacStr != "" && origDummyMacStr != InvalidMacAddress {
286293
dummy.LinkAttrs.HardwareAddr = origDummyMac
287294
}
288295
err := netlink.LinkAdd(dummy)
289296
if err != nil {
290-
return errors.New("cannot create dummy interface for DPDK because:" + err.Error())
297+
return errors.New("cannot create dummy interface with MAC:" + origDummyMacStr + "for DPDK because:" + err.Error())
291298
}
292299
if dnet.Spec.Options.Vlan == 0 {
293300
err = netlink.LinkSetAlias(dummy, ep.Spec.Iface.DeviceID)
@@ -304,20 +311,19 @@ func createDummyInterface(ep *danmtypes.DanmEp, dnet *danmtypes.DanmNet) error {
304311
if err != nil {
305312
return errors.New("cannot find freshly created dummy interface because:" + err.Error())
306313
}
307-
vfMac, _ := net.ParseMAC(ep.Spec.Iface.MacAddress)
308314
dummyVlan := &netlink.Vlan {
309315
VlanId: dnet.Spec.Options.Vlan,
310316
LinkAttrs: netlink.LinkAttrs {
311317
ParentIndex: iface.Attrs().Index,
312318
Name: ep.Spec.Iface.Name,
313319
},
314320
}
315-
if vfMac.String() != "" {
316-
dummyVlan.LinkAttrs.HardwareAddr = vfMac
321+
if origDummyMacStr != "" && origDummyMacStr != InvalidMacAddress {
322+
dummyVlan.LinkAttrs.HardwareAddr = origDummyMac
317323
}
318324
err = netlink.LinkAdd(dummyVlan)
319325
if err != nil {
320-
return errors.New("cannot create VLAN on dummy interface for DPDK because:" + err.Error())
326+
return errors.New("cannot create VLAN on dummy interface with MAC:" + origDummyMacStr + " for DPDK because:" + err.Error())
321327
}
322328
err = netlink.LinkSetAlias(dummyVlan, ep.Spec.Iface.DeviceID)
323329
if err != nil {

0 commit comments

Comments
 (0)