Merge "Update the docs for ICS."
diff --git a/src/source/downloading.md b/src/source/downloading.md
index 43d2b55..81f1ba9 100644
--- a/src/source/downloading.md
+++ b/src/source/downloading.md
@@ -72,6 +72,31 @@
 Repo commands, see [Version Control](version-control.html).
 
 
+## Using authentication ##
+
+By default, access to the Android source code is anonymous. To protect the
+servers against excessive usage, each IP address is associated with a quota.
+
+When sharing an IP address with other users (e.g. when accessing the source
+repositories from beyond a NAT firewall), the quotas can trigger even for
+regular usage patterns (e.g. if many users sync new clients from the same IP
+address within a short period).
+
+In that case, it is possible to use authenticated access, which then uses
+a separate quota for each user, regardless of the IP address.
+
+The first step is to create a password from
+[the password generator](https://android.googlesource.com/new-password) and
+to save it in `~/.netrc` according to the instructions on that page.
+
+The second step is to force authenticated access, by using the following
+manifest URI: `https://android.googlesource.com/a/platform/manifest`. Notice
+how the `/a/` directory prefix triggers mandatory authentication. You can
+convert an existing client to use mandatory authentication with the following
+command:
+
+    $ repo init -u https://android.googlesource.com/a/platform/manifest
+
 ## Troubleshooting network issues ##
 
 When downloading from behind a proxy (which is common in some
@@ -91,6 +116,43 @@
     $ repo sync -j1
 
 
+## Using a local mirror ##
+
+When using many clients, especially in situations where bandwidth is scarce,
+it is better to create a local mirror of the entire server content, and to
+sync clients from that mirror (which requires no network access).
+
+These instructions assume that the mirror is created in `/usr/local/aosp/mirror`.
+The first step is to create and sync the mirror itself, which uses close to
+10GB of network bandwidth and a similar amount of disk space. Notice the
+`--mirror` flag, which can only be specified when creating a new client:
+
+    $ mkdir -p /usr/local/aosp/mirror
+    $ cd /usr/local/aosp/mirror
+    $ repo init -u https://android.googlesource.com/mirror/manifest --mirror
+    $ repo sync
+
+Once the mirror is synced, new clients can be created from it. Note that it's
+important to specify an absolute path:
+
+    $ mkdir -p /usr/local/aosp/master
+    $ cd /usr/local/aosp/master
+    $ repo init -u /usr/local/aosp/mirror/platform/manifest.git
+    $ repo sync
+
+Finally, to sync a client against the server, the mirror needs to be synced
+against the server, then the client against the mirror:
+
+    $ cd /usr/local/aosp/mirror
+    $ repo sync
+    $ cd /usr/local/aosp/master
+    $ repo sync
+
+It's possible to store the mirror on a LAN server and to access it over
+NFS, SSH or Git. It's also possible to store it on a removable drive and
+to pass that drive around between users or between machines.
+
+
 ## Verifying Git Tags ##
 
 Load the following public key into your GnuPG key database. The key is used to sign annotated tags that represent releases.
diff --git a/src/source/known-issues.md b/src/source/known-issues.md
index 9f5e872..a7dd9fa 100644
--- a/src/source/known-issues.md
+++ b/src/source/known-issues.md
@@ -19,6 +19,17 @@
 Even with our best care, small problems sometimes slip in. This page keeps
 track of the known issues around using the Android source code.
 
+## Missing CTS Native XML Generator ##
+
+**Symptom**: On some builds of IceCreamSandwich and later, the following
+warning is printed early during the build:
+`/bin/bash: line 0: cd: cts/tools/cts-native-xml-generator/src/res: No
+such file or directory`
+
+**Cause**: Some makefile references that path, which doesn't exist.
+
+**Fix**: None. This is a harmless warning.
+
 ## Black Gingerbread Emulator ##
 
 **Symptom**: The emulator built directly from the gingerbread branch