* while the packets use the mac-addr on the physical device.
         */
        return dev_hard_header(skb, phy_dev, type, daddr,
-                              saddr ? : dev->dev_addr, len);
+                              saddr ? : phy_dev->dev_addr, len);
 }
 
 static const struct header_ops ipvlan_header_ops = {
                        ipvlan_adjust_mtu(ipvlan, dev);
                break;
 
+       case NETDEV_CHANGEADDR:
+               list_for_each_entry(ipvlan, &port->ipvlans, pnode)
+                       ether_addr_copy(ipvlan->dev->dev_addr, dev->dev_addr);
+               break;
+
        case NETDEV_PRE_TYPE_CHANGE:
                /* Forbid underlying device to change its type. */
                return NOTIFY_BAD;