-/* Copyright (c) 2008 The Board of Trustees of The Leland Stanford
+/* Copyright (c) 2008, 2009 The Board of Trustees of The Leland Stanford
* Junior University
*
* We are making the OpenFlow specification and associated documentation
static const uint8_t eth_addr_broadcast[ETH_ADDR_LEN] UNUSED
= { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+/* This is the Ethernet address used by virtual interfaces under Xen. */
+static const uint8_t eth_addr_vif[ETH_ADDR_LEN] UNUSED
+ = { 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff };
+
static inline bool eth_addr_is_broadcast(const uint8_t ea[6])
{
return (ea[0] & ea[1] & ea[2] & ea[3] & ea[4] & ea[5]) == 0xff;
}
+static inline bool eth_addr_is_vif(const uint8_t ea[6])
+{
+ return ea[0] == 0xfe && (ea[1] & ea[2] & ea[3] & ea[4] & ea[5]) == 0xff;
+}
static inline bool eth_addr_is_multicast(const uint8_t ea[6])
{
return ea[0] & 1;
}
}
}
- if (eth_addr_is_multicast(ea)) {
+ if (eth_addr_is_multicast(ea) || eth_addr_is_vif(ea)) {
memcpy(ea, br->default_ea, ETH_ADDR_LEN);
VLOG_WARN("bridge %s: using default bridge Ethernet "
"address "ETH_ADDR_FMT, br->name, ETH_ADDR_ARGS(ea));