blob: 83604acb1613e65f1cff33edd3dd59a6523686c3 [file] [log] [blame] [view]
# Troubleshoot network connectivity: Interface configuration
When diagnosing Fuchsia device network connectivity issues, first check to ensure the following:
- The host machine is correctly enumerating the connected Fuchsia CDC device.
- The host machine is configured correctly.
## Does the host machine see the device? {:#does-the-host-machine-see-the-device}
Determine if the hosts USB stack is aware of the Fuchsia device. If not, theres no network
interface to configure.
For example, Googles public USB vendor identifier (VID) is `0x18d1`, which is used by all
Fuchsia USB devices (CDC or otherwise). And Fuchsia devices have a product identifier (PID) in
the range of` 0xa000-0xafff`.
Use the `lsusb` command to determine if the host sees any USB-attached Fuchsia device(s),
which reports a VID:PID tuple for any attached device:
```posix-terminal
lsusb
```
Look for an entry in the output mentioning `Google Inc. CDC Ethernet`.
You may see other results corresponding to other Google products whose PID is outside the range
of Fuchsia PIDs.
### Caveat: PID=0xa025 {:#caveat}
Some product configurations do not expose a CDC interface in the enumerated Fuchsia USB device.
An `adb`-only configuration will have a PID of `0xa025`. If you see a Fuchsia device whose PID is
`0xa025`, it intentionally contains no CDC interface, and thus theres no corresponding network
interface to configure.
## Is the CDC interface named correctly? {:#is-the-cdc-interface-named-correctly}
Fuchsia CDC network interfaces are named similar to `zx-XXXXXXXXXXXX`, with the actual interface
name representing the interfaces MAC address.
You must have a setup that will detect and name the Fuchsia CDC interfaces properly. Currently the
Fuchsia source tree contains a [Puppet script][puppet-script] that can be run for machines that
support it. Running this script requires that you're using **NetworkManager, Puppet, and
a Debian-like Linux distribution.** If all of this applies to you, you can run this Pupptet script
using the following command:
```posix-terminal
curl -s 'https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/scripts/puppet/networkmanager-cfg.pp?format=TEXT' | base64 -d | sudo puppet apply
```
Then you can check the interfaces using the following command:
```posix-terminal
ip -6 --oneline addr | grep 'zx-'
```
This command looks for IPv6 interfaces named with a prefix of `zx-` and print output similar to
the following:
```none {:.devsite-disable-click-to-copy}
$ ip -6 --oneline addr | grep 'zx-'
7: zx-c863147051da inet6 fe80::ca63:14ff:fe70:51da/64 <snip>
```
## Was the interface assigned the Fuchsia CDC profile? {:#was-the-interface-assigned-the-fuchsia-cdc-profile}
In a nutshell, the local NetworkManager service needs to configure the interface with a link-local
IPv6 address and not attempt DHCP lease acquisition. The configuration exists in the Fuchsia CDC
NetworkManager connection profile. This means that we need to ensure the CDC interface is being
applied the profile.
Use the `nmcli conn show` command to verify that the correct profile was assigned:
```posix-terminal
nmcli conn show
```
In the Fuchsia-CDC profile row, check for the CDC interface:
```none {:.devsite-disable-click-to-copy}
$ nmcli conn show
NAME UUID TYPE DEVICE
...
Fuchsia CDC 25b512f5-70e0-4fd3-9bc2-34432a01bc80 ethernet zx-c863147051da
...
```
You can ignore the UUID field since it is an unimportant opaque identifier.
The Fuchsia CDC profile configures the host-side interface with an IPv6 link-local address,
which are addresses are on the `fe80::/10` network. Verify with the following `ip `command:
```none {:.devsite-disable-click-to-copy}
$ ip -6 --oneline addr | grep 'zx-'
7: zx-c863147051da inet6 fe80::ca63:14ff:fe70:51da/64 <snip>
```
Here, the address `fe80::ca63:14ff:fe70:51da` is the link-local address of the host-side network
interface. Notably, it is not the address of the connected Fuchsia CDC device.
<!-- Reference links -->
[puppet-script]: https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/scripts/puppet/networkmanager-cfg.pp