# Raspberry Pi Network Manager

The Raspberry Pi OS Bookworm version now uses <mark style="color:blue;">Network Manager (nm)</mark> by default for network configuration, instead of dhcpcd which was used previously.

Network Manager manages the network based on "connections".&#x20;

On a fresh system, it creates a default wired connection called "Wired Connection 1" and a default wireless connection based on the SSID provided during setup.

### <mark style="color:green;">Check Active Network Services</mark>

To confirm <mark style="color:yellow;">which networking service your system is using</mark>, you can check for active network-related services:

```bash
systemctl list-units --type=service | grep -i network
```

#### <mark style="color:purple;">Output</mark>

<pre class="language-bash"><code class="lang-bash">networking.service                    loaded active exited 
NetworkManager-dispatcher.service     loaded active running Network Manager 
NetworkManager-wait-online.service    loaded active exited  Network Manager 
<strong>NetworkManager.service                loaded active running Network Manager
</strong></code></pre>

The output shows the  Raspberry Pi is using <mark style="color:yellow;">`NetworkManager`</mark> as its primary tool for managing network connections.&#x20;

This is indicated by the presence of <mark style="color:yellow;">`NetworkManager.service`</mark> marked as <mark style="color:yellow;">`loaded active running`</mark>. Additionally, you have <mark style="color:yellow;">`networking.service`</mark> which typically handles traditional networking scripts but seems to be managing less in this setup given that `NetworkManager` is also active.

### <mark style="color:green;">Key Points about Network Manager</mark>

1. Connection information is stored in <mark style="color:yellow;">/etc/NetworkManager/system-connections/\*.nmconnection</mark> files which must have 600 file permissions.  Editing these requires restarting the connection or rebooting.
2. The <mark style="color:yellow;">nmcli command line tool</mark> allows managing connections - viewing attributes, bringing connections up/down, modifying attributes, renaming, etc. Tab completion is supported.
3. nmtui provides a text user interface as an easier alternative to nmcli for complex setups without needing to remember all the nmcli details.
4. Connection files can be copied between systems for reuse. The UUIDs don't seem to cause issues.
5. Enabling a captive portal connection automatically enables IP forwarding, which may need to be manually disabled using sysctl if undesired.
6. For headless setup, it's <mark style="color:yellow;">recommended to switch from dhcpcd to NetworkManager on a running Bullseye system first before doing a dist-upgrade to Bookworm</mark>. Directly switching using raspi-config in a headless setup can lead to loss of network access.
7. Overall, Network Manager is seen as more user-friendly and a standard across Linux distros compared to the previous dhcpcd setup on Raspberry Pi OS. But it has a learning curve for those used to the old way.

### <mark style="color:blue;">If Network Manager is not installed</mark>

The last task we need to complete before we enable Network Manager on our Raspberry Pi is to install the actual software.

To install the “<mark style="color:yellow;">`network-manager`</mark>” package to your device, run the command below in the terminal.

```bash
sudo apt install network-manager
```

### <mark style="color:blue;">**Set Static IP via NetworkManager**</mark>

Here’s how you can proceed with setting a static IP address through <mark style="color:yellow;">`NetworkManager`</mark>:

### <mark style="color:blue;">Requirements</mark>

* Raspberry Pi running Raspberry Pi OS (Debian-based Linux)
* Access to a terminal or SSH session on the Raspberry Pi
* NetworkManager Installed

Checking Network Manager status: To verify if Network Manager is running, use the following command:

```bash
nmcli -t -f RUNNING general
```

### <mark style="color:blue;">We need to collect four important pieces of information first</mark>

<mark style="color:yellow;">`[your-static-ip]`</mark>

<mark style="color:yellow;">`[router-ip]`</mark>

<mark style="color:yellow;">`[dns-ip]`</mark>

<mark style="color:yellow;">`[dns-search-domain]`</mark>&#x20;

To find the placeholder details for configuring a static IP address using Network Manager, you need to gather the following information:

## <mark style="color:blue;">Static IP Address (</mark><mark style="color:blue;">`[`</mark><mark style="color:yellow;">`your-static-ip`</mark><mark style="color:blue;">`]`</mark><mark style="color:blue;">)</mark>

* Determine the static IP address you want to assign to your device.
* It should be an available IP address within your network's range.
* Example: `192.168.1.100`

<mark style="color:purple;">**Check the current IP address**</mark>

```bash
hostname -I
```

Note down the IP address displayed.

### <mark style="color:green;">**For example:**</mark>**&#x20;**<mark style="color:yellow;">**192.168.68.64**</mark>

## <mark style="color:blue;">Subnet Mask</mark>

* The subnet mask is usually denoted by `/24` for a typical home network, which corresponds to `255.255.255.0`.
* Adjust the subnet mask according to your network's configuration.

```bash
ip addr show wlan0
```

The output:

{% code overflow="wrap" %}

```
wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 2c:cf:67:2c:91:1a brd ff:ff:ff:ff:ff:ff
    inet 192.168.68.67/22 brd 192.168.71.255 scope global dynamic noprefixroute wlan0
       valid_lft 5851sec preferred_lft 5851sec
    inet6 fe80::62a8:8dd9:cb43:c3b1/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
```

{% endcode %}

From the output <mark style="color:yellow;">`inet 192.168.68.64/22`</mark>, the `/22` is the CIDR (Classless Inter-Domain Routing) notation that represents the subnet mask.&#x20;

This notation indicates that the first 22 bits of the IP address are used to identify the network part of the address, with the remaining bits (out of 32 in total for IPv4) available for host addresses.

## <mark style="color:blue;">Identifying all network interfaces</mark>

First, get a detailed <mark style="color:yellow;">list of all interfaces</mark> with <mark style="color:yellow;">`nmcli device status`</mark><mark style="color:yellow;">:</mark>

```bash
nmcli device status
```

#### <mark style="color:purple;">The output</mark>

```bash
DEVICE         TYPE      STATE                   CONNECTION    
wlan0          wifi      connected               preconfigured 
lo             loopback  connected (externally)  lo            
docker0        bridge    connected (externally)  docker0       
p2p-dev-wlan0  wifi-p2p  disconnected            --            
eth0           ethernet  unavailable             --    
```

### <mark style="color:green;">**What does the output mean?**</mark>

### <mark style="color:green;">**wlan0**</mark>

* **Type**: wifi (Wireless LAN interface)
* **State**: connected
* **Connection**: preconfigured
* **Explanation**: The wireless network interface `wlan0` is currently connected to a WiFi network using a connection profile named "preconfigured". This indicates that your Raspberry Pi is actively connected to a wireless network using this profile.

### <mark style="color:green;">**lo**</mark>

* **Type**: loopback
* **State**: connected (externally)
* **Connection**: lo
* **Explanation**: The loopback interface (`lo`) is always considered connected. It's used by the system for internal communications (e.g., communicating with itself). "Connected (externally)" here indicates that it’s managed outside of the typical network management frameworks but still operational for its purposes.

### <mark style="color:green;">**docker0**</mark>

* **Type**: bridge
* **State**: connected (externally)
* **Connection**: docker0
* **Explanation**: `docker0` is a network bridge used by Docker to handle communications between Docker containers and the host machine. Similar to `lo`, "connected (externally)" suggests it’s managed by Docker and not directly by standard network management tools.

### <mark style="color:green;">**eth0**</mark>

* **Type**: ethernet
* **State**: unavailable
* **Connection**: --
* **Explanation**: The Ethernet interface `eth0` is marked as unavailable, which means there is no Ethernet cable connected or the interface is not configured/activated, making it not ready for use.

### <mark style="color:blue;">Which Network Interface to use?</mark>

\
To set up a static IP address on your Raspberry Pi, you should <mark style="color:yellow;">choose the network interface that is actively connected to the network and that you typically use to communicate over your network.</mark>&#x20;

Based on our configuration, the best candidate is:

* **wlan0**
  * **Type**: wifi (Wireless LAN interface)
  * **State**: connected
  * **Connection**: preconfigured

### <mark style="color:blue;">Reasons to Choose wlan0</mark>

1. **Active Connection**: It is currently connected to a WiFi network, which means it's actively being used to connect your Raspberry Pi to the network.
2. **WiFi Access**: As it's a WiFi connection, setting a static IP address can be particularly useful if you frequently connect to this Raspberry Pi remotely, as WiFi-assigned IPs can change more frequently due to the dynamic nature of DHCP allocations by routers.

<mark style="color:green;">**Modify Network Connections Using**</mark><mark style="color:green;">**&#x20;**</mark><mark style="color:green;">**`nmcli`**</mark>

Then, let's find the name of the connection you want to configure.  Again use the command:

```bash
nmcli device status
```

#### <mark style="color:purple;">The output</mark>

```bash
NAME                UUID                                  TYPE      DEVICE
preconfigured       8c6e2331-08f0-4e8e-a392-710af4dc3e5c  wifi      wlan0
lo                  12d503fa-b077-41fb-a0b4-4229c0a9cdfa  loopback  lo
docker0             b3300958-c4e3-4d75-826f-7c787a2070ed  bridge    docker0
Wired connection 1  c2e4dd17-2c70-35cf-a746-151f5ba9d0f6  ethernet  --
```

We have decided to configure the <mark style="color:yellow;">wireless connection and its default name is</mark> <mark style="color:yellow;"></mark><mark style="color:yellow;">**'preconfigured'**</mark>

```
NAME                UUID                                  TYPE      DEVICE
preconfigured       8c6e2331-08f0-4e8e-a392-710af4dc3e5c  wifi      wlan0
```

### <mark style="color:blue;">Gateway IP Address (</mark><mark style="color:blue;">`[`</mark><mark style="color:yellow;">`router-ip`</mark><mark style="color:blue;">`]`</mark><mark style="color:blue;">)</mark>

* Find the IP address of your network's gateway (router).
* It is usually the first IP address in your network's range.
* Example: `192.168.1.1`

<mark style="color:blue;">**This is how we identify the default network interface and gateway**</mark>

```bash
ip r | grep default
```

This command will show the <mark style="color:yellow;">default gateway used by the Raspberry Pi and the interface it is connected through,</mark> such as `eth0` for Ethernet or `wlan0` for Wi-Fi.

<details>

<summary><mark style="color:green;">Example Output</mark></summary>

The response from the command <mark style="color:yellow;">`ip r | grep default`</mark> executed on your Raspberry Pi gives information about the default gateway and the network interface configuration for your device. Let's break down the output:

{% code overflow="wrap" %}

```bash
default via 192.168.68.1 dev wlan0 proto dhcp src 192.168.68.67 metric 600
```

{% endcode %}

**Explanation of Each Part:**

* <mark style="color:green;">**default**</mark><mark style="color:green;">:</mark> This indicates that this entry in the routing table is for the default route. The default route is used when no other route matches the destination IP of the packets. Essentially, it's the gateway through which the Raspberry Pi sends all traffic directed to destinations not in its local network.
* <mark style="color:green;">**via 192.168.68.1**</mark><mark style="color:green;">:</mark> This part tells you the <mark style="color:yellow;">IP address of the default gateway</mark>. All traffic that doesn’t match a more specific route will be sent through this gateway. In this case, <mark style="color:yellow;">`192.168.68.1`</mark> is the router or another networking device in your network that provides access to the Internet or other networks.
* <mark style="color:green;">**dev wlan0**</mark><mark style="color:green;">:</mark> This specifies the network device used for this route. Here, <mark style="color:yellow;">`wlan0`</mark> indicates that the <mark style="color:yellow;">wireless network interface (typically Wi-Fi) is used for connecting to the network.</mark> It's the interface through which the Raspberry Pi connects to the default gateway.
* <mark style="color:green;">**proto dhcp**</mark><mark style="color:green;">:</mark> This indicates that the <mark style="color:yellow;">IP address configuration on</mark> <mark style="color:yellow;"></mark><mark style="color:yellow;">`wlan0`</mark> <mark style="color:yellow;"></mark><mark style="color:yellow;">is obtained via DHCP (Dynamic Host Configuration Protocol).</mark> DHCP is a network management protocol used on IP networks <mark style="color:yellow;">whereby a server dynamically assigns an IP address</mark> and other network configuration parameters to each device on the network, so they can communicate with other IP networks.
* <mark style="color:green;">**src 192.168.68.67**</mark><mark style="color:green;">:</mark> This shows the source IP address that the Raspberry Pi uses when it sends packets out through `wlan0`. This would be the IP address assigned to your Raspberry Pi by the DHCP server (likely your router).
* <mark style="color:green;">**metric 600**</mark><mark style="color:green;">:</mark> The metric is a <mark style="color:yellow;">value used by the IP routing protocol to determine the preference for using this route</mark>. The lower the metric, the higher the preference. In the context of multiple routes to a destination, a route with a lower metric is preferred. The metric can be important in systems with multiple network interfaces or multiple gateways; it helps in deciding which route is most efficient or quickest.

This output provides a concise overview of how the Raspberry Pi connects to other networks, particularly how it is configured to access the internet or other networks outside of its local subnet. It is crucial for troubleshooting network connectivity issues or for configuring network-related services on your device.

</details>

Here is the output from our Raspberry Pi

```bash
default via 192.168.68.1 dev wlan0 proto dhcp src 192.168.68.67 metric 600
```

This indicates that your <mark style="color:yellow;">**default gateway IP address**</mark> <mark style="color:yellow;"></mark><mark style="color:yellow;">is</mark> <mark style="color:yellow;"></mark><mark style="color:yellow;">**192.168.68.1**</mark>**.**&#x20;

This is the IP address of the router your Raspberry Pi communicates with for accessing networks outside your local network, such as the internet.

<mark style="color:green;">**dev wlan0**</mark><mark style="color:green;">:</mark> This specifies that the network device used for this connection is `wlan0`, which is typically a WiFi interface on the Raspberry Pi.

<mark style="color:green;">**proto dhcp**</mark><mark style="color:green;">:</mark> This tells you that the IP address was assigned via DHCP (Dynamic Host Configuration Protocol), which means the IP configuration is dynamically assigned by your network's DHCP server (usually your router).

<mark style="color:green;">**src**</mark> <mark style="color:yellow;">**192.168.68.67**</mark>: This is the current IP address assigned to your Raspberry Pi on the network.

### <mark style="color:blue;">DNS Server IP Address</mark>

DNS Server IP Address <mark style="color:yellow;">(</mark><mark style="color:yellow;">`[dns-ip]`</mark><mark style="color:yellow;">)</mark>:

* Determine the IP address of your DNS server.
* You can use the IP address of your router if it acts as a DNS server, or you can use public DNS servers like Google's DNS (`8.8.8.8` or `8.8.4.4`).
* Example: `192.168.1.1` or `8.8.8.8`

Using <mark style="color:yellow;">NetworkManager</mark> you can use the <mark style="color:yellow;">`nmcli`</mark> command to find DNS settings:

```bash
nmcli dev show wlan0 | grep 'IP4.DNS'
```

This command will <mark style="color:yellow;">output the DNS servers configured for the</mark> <mark style="color:yellow;"></mark><mark style="color:yellow;">`wlan0`</mark> <mark style="color:yellow;"></mark><mark style="color:yellow;">interface</mark>.

```bash
IP4.DNS[1]:                             202.142.142.142
IP4.DNS[2]:                             202.142.142.242
```

The command `nmcli dev show wlan0 | grep 'IP4.DNS'` does the following:

<mark style="color:yellow;">`nmcli dev show wlan0`</mark><mark style="color:yellow;">:</mark> This command is used to display detailed information about the network device named `wlan0`, which is typically the wireless network interface.

<mark style="color:yellow;">`|`</mark>: This is the pipe symbol, which is used to pass the output of the previous command as input to the next command.

<mark style="color:yellow;">`grep 'IP4.DNS'`</mark>: The `grep` command is used to search for specific patterns within the output. In this case, it searches for the pattern `'IP4.DNS'` in the output of the <mark style="color:yellow;">`nmcli dev show wlan0`</mark> command.

```basic
IP4.DNS[1]: 202.142.142.142
IP4.DNS[2]: 202.142.142.242
```

These lines indicate the DNS (Domain Name System) server IP addresses that are currently assigned to the `wlan0` interface. In this case, there are two DNS servers configured:

* <mark style="color:yellow;">`IP4.DNS[1]`</mark><mark style="color:yellow;">:</mark> The first DNS server has the IP address <mark style="color:yellow;">`202.142.142.142`</mark>.
* <mark style="color:yellow;">`IP4.DNS[2]`</mark><mark style="color:yellow;">:</mark> The second DNS server has the IP address <mark style="color:yellow;">`202.142.142.242`</mark>.

These DNS server IP addresses are used by the system to resolve domain names to their corresponding IP addresses when accessing network resources or browsing the internet.

By using the `nmcli dev show` command with `grep`, you can quickly retrieve specific information about a network interface, such as the assigned DNS servers, without displaying all the other details provided by `nmcli`.

<details>

<summary><mark style="color:green;">DNS Search Domain</mark></summary>

The DNS search domain is a configuration parameter that specifies the default domain name to be appended to unqualified hostnames during DNS resolution. It is used to simplify accessing hosts within the same domain.

When a DNS search domain is set, and you try to access a hostname without specifying its fully qualified domain name (FQDN), the system will automatically append the search domain to the hostname and attempt to resolve it.

For example, if the DNS search domain is set to `example.com`, and you try to access a host named `server1`, the system will first try to resolve `server1.example.com` instead of just `server1`.

To find the current DNS search domain configured on your system using Network Manager, you can use the following command:

```bash
bashCopy codenmcli con show "Connection Name" | grep 'ipv4.dns-search'
```

Replace `"Connection Name"` with the actual name of the connection you want to check.

If the DNS search domain is configured, the output will show a line like:

```
Copy codeipv4.dns-search: example.com
```

The importance of the DNS search domain depends on your network setup and requirements:

1. If your network uses a specific domain name, setting the DNS search domain can make it easier to access hosts within that domain without typing the full FQDN every time.
2. In corporate or organizational networks, the DNS search domain is often set to the company's domain name to facilitate internal host resolution.
3. For home networks or standalone systems, the DNS search domain may not be as important, especially if you always use FQDNs or IP addresses to access hosts.

If you don't have a specific domain name for your network or don't need the automatic domain appending feature, you can leave the DNS search domain blank or unconfigured.

Keep in mind that the DNS search domain setting is connection-specific in Network Manager, so you may have different search domains configured for different connections (e.g., Ethernet, Wi-Fi, VPN).

In summary, the DNS search domain is a configuration parameter that helps with resolving unqualified hostnames by appending a default domain name. Its importance depends on your network setup and naming conventions. You can find the current DNS search domain using the `nmcli` command and grep for `'ipv4.dns-search'`.

</details>

### <mark style="color:blue;">Once you have the connection name, modify its settings</mark>

{% code overflow="wrap" %}

```bash
nmcli con mod "Connection Name" ipv4.addresses [your-static-ip]/24 ipv4.gateway [router-ip] ipv4.dns [dns-ip] ipv4.dns-search [dns-search-domain] ipv4.method manual
```

{% endcode %}

<mark style="color:yellow;">`[your-static-ip] -`</mark> <mark style="color:purple;">**192.168.68.67**</mark>

<mark style="color:yellow;">`[router-ip] -`</mark> <mark style="color:purple;">**192.168.68.1**</mark>

<mark style="color:yellow;">`[dns-ip] -`</mark> <mark style="color:purple;">**202.142.142.142**</mark>

<mark style="color:yellow;">`[dns-search-domain]`</mark> <mark style="color:purple;">**Not relevant**</mark>

Based on the information you provided, you can use the following command to configure the static IP address using Network Manager:

<pre class="language-bash" data-overflow="wrap"><code class="lang-bash"><strong>sudo nmcli con mod "will-wifi" ipv4.addresses 192.168.68.67/24 ipv4.gateway 192.168.68.1 ipv4.dns 202.142.142.142 ipv4.method manual
</strong></code></pre>

We will replace "Connection Name" with <mark style="color:yellow;">"will-wifi'</mark> -which is the actual name of the connection you want to modify.&#x20;

You can find the connection name by running `nmcli connection show`.

Here's a breakdown of the command:

* `nmcli con mod`: This command is used to modify an existing network connection.
* `"Connection Name"`: Replace this with the actual name of the connection you want to modify - 'will-wifi'.
* `ipv4.addresses 192.168.68.67/24`: This sets the static IP address to `192.168.68.67` with a subnet mask of `/24` (equivalent to `255.255.255.0`).
* `ipv4.gateway 192.168.68.1`: This sets the gateway IP address to `192.168.68.1`.
* `ipv4.dns 202.142.142.142`: This sets the DNS server IP address to `202.142.142.142`.
* `ipv4.method manual`: This sets the IPv4 configuration method to manual, indicating that you want to use a static IP address.

Note that you haven't provided a value for `[dns-search-domain]`, so I haven't included the `ipv4.dns-search` option in the command. If you have a specific DNS search domain you want to use, you can add it to the command like this:

```bash
nmcli con mod "will-wifi" ipv4.addresses 192.168.68.67/24 ipv4.gateway 192.168.68.1 ipv4.dns 202.142.142.142 ipv4.dns-search example.com ipv4.method manual
```

After running the command, the <mark style="color:yellow;">static IP configuration will be applied to the specified connection.</mark>&#x20;

To activate the changes, you can either bring the connection down and up again:

```bash
sudo nmcli con down "will-wifi"
sudo nmcli con up "will-wifi"
```

Or, you can reboot your system to ensure the changes take effect:

```bash
sudo reboot
```

After applying the changes, your device should have the specified static IP address (<mark style="color:yellow;">`192.168.68.67`</mark>) configured through Network Manager.

```bash
nmcli device status
```

#### <mark style="color:purple;">The output</mark>

```
DEVICE         TYPE      STATE                   CONNECTION    
wlan0          wifi      connected               will-wifi  
lo             loopback  connected (externally)  lo         
docker0        bridge    connected (externally)  docker0    
p2p-dev-wlan0  wifi-p2p  disconnected            --         
end0           ethernet  unavailable             --           
```

### <mark style="color:blue;">Changing Connection Name</mark>

To change the connection name using Network Manager, you can use the <mark style="color:yellow;">`nmcli`</mark> command with the <mark style="color:yellow;">`connection modify`</mark> or <mark style="color:yellow;">`connection edit`</mark> option. Here's how you can change the connection name:

Using <mark style="color:yellow;">`connection modify`</mark>

```bash
nmcli connection modify "Old Connection Name" connection.id "New Connection Name"
```

Replace `"Old Connection Name"` with the current name of the connection you want to modify, and `"New Connection Name"` with the desired new name for the connection. For example, to rename the connection "preconfigured" to "will-wifi":

```bash
nmcli connection modify "preconfigured" connection.id "will-wifi"
```

Once you have gathered these details, you can modify the connection using the `nmcli` command:

{% code overflow="wrap" %}

```bash
nmcli con mod "will-wifi" ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 192.168.1.1 ipv4.dns-search example.com ipv4.method manual
```

{% endcode %}

Make sure to replace `"Connection Name"` with the actual name of your connection and the placeholders with the corresponding values you found.

To apply the changes, you can either bring the connection down and up again:

```bash
nmcli con down "Connection Name"
nmcli con up "Connection Name"
```

Or, you can reboot your system to ensure the changes take effect:

```bash
sudo reboot
```

After applying the changes, your device should have the specified static IP address configured through Network Manager.

### <mark style="color:blue;">**Check the IP Configuration**</mark>

To verify the changes:

```bash
ip addr show
```

<mark style="color:purple;">**Restart NetworkManager Service**</mark>

If you want to make sure all settings are correctly applied or need to refresh the NetworkManager:

```bash
sudo systemctl restart NetworkManager
```

**Troubleshooting Tips**

* Ensure that the connection name and parameters you use with `nmcli` match exactly what’s required for your network configuration.
* Use `nmcli` to list detailed information about a connection, which can help in troubleshooting:

```bash
nmcli con show "will-wifi"
```

* Sometimes changes might not take effect until the network service is restarted or the device is rebooted.

### <mark style="color:blue;">Verify the Configuration</mark>

After your Raspberry Pi reboots, check that the static IP address is correctly assigned:

```bash
hostname -I
```

You should see the static IP address you configured.

### <mark style="color:blue;">Conclusion</mark>

Setting a static IP address makes your Raspberry Pi accessible consistently at the same address, which is particularly useful for network applications like file servers or media centres.&#x20;

By following these steps, you've ensured that your Raspberry Pi will retain the same IP address across reboots, making it easier to connect and manage remotely.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://education.raspberrypiaustralia.online/network-manager/raspberry-pi-network-manager.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
