diff --git a/pkg/proxy/winkernel/proxier.go b/pkg/proxy/winkernel/proxier.go index d87aec75a0..b490fd2526 100644 --- a/pkg/proxy/winkernel/proxier.go +++ b/pkg/proxy/winkernel/proxier.go @@ -128,12 +128,23 @@ type endpointsInfo struct { refCount uint16 } +//Uses mac prefix and IPv4 address to return a mac address +//This ensures mac addresses are unique for proper load balancing +//Does not support IPv6 and returns a dummy mac +func conjureMac(macPrefix string, ip net.IP) string { + if ip4 := ip.To4(); ip4 != nil { + a, b, c, d := ip4[0], ip4[1], ip4[2], ip4[3] + return fmt.Sprintf("%v-%02x-%02x-%02x-%02x", macPrefix, a, b, c, d) + } + return "02-11-22-33-44-55" +} + func newEndpointInfo(ip string, port uint16, isLocal bool) *endpointsInfo { info := &endpointsInfo{ ip: ip, port: port, isLocal: isLocal, - macAddress: "00:11:22:33:44:55", // Hardcoding to some Random Mac + macAddress: conjureMac("02-11", net.ParseIP(ip)), refCount: 0, hnsID: "", }