# orderedItems[].object.content
I've been working on building a #VPP-based router for the last year to support a small ISP I've been partnering with. I recently began polishing it (e.g., building an image that can be installable from USB, etc.) and adding a unified configuration CLI that abstracts away the details of managing multiple VPP processes, FRR, ZFS snapshots, (eventually) immutable system, etc.

This weekend I began experimenting with adding local #LLM capabilities (using #Ollama with gpt-oss:120b running on an AMD AI MAX 395+ system with 128GB of unified RAM) and I'm really excited by the possibilities.

imp> agent

[+] Connected to Ollama (gpt-oss:120b)
Type your request, or 'exit' to return

agent> Let's add a new loopback interface with IPv4 10.5.5.1/32 and IPv6 fc00::5:5:1/128. It can be called "service".
Thinking...
[Tool: add_loopback]
  create_lcp: True
  ipv4_cidr: 10.5.5.1/32
  ipv6_cidr: fc00::5:5:1/128
  name: service
  → Added loop0 (service) with 10.5.5.1/32, fc00::5:5:1/128
Thinking...

The loopback interface loop0 (named “service”) has been created with:

 • IPv4 10.5.5.1/32
 • IPv6 fc00::5:5:1/128

Let me know if you’d like any further changes!

agent> exit
Returning to IMP REPL...
imp*> apply
[+] Configuration saved to /persistent/config/router.json
[+] Configuration files generated in /tmp/imp-generated-config

Changes detected:
  Detected 1 configuration change(s):
    - ADD loopback loop0

  [DRY-RUN] VPP Core changes (5 commands):
    create loopback interface instance 0
    set interface state loop0 up
    lcp create loop0 host-if lo0
    set interface ip address loop0 10.5.5.1/32
    set interface ip address loop0 fc00::5:5:1/128


Apply changes live? [Y/n]: y
[+] Applying changes live...
  Detected 1 configuration change(s):
    - ADD loopback loop0

  Applying VPP Core changes...
[+] OK (5 commands)
[+] Live changes applied successfully
imp>

…and watching it come up (and be automatically handled by #iBGP since I'm pinging from a host that's not directly connected).

> ping 10.5.5.1
PING 10.5.5.1 (10.5.5.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
Request timeout for icmp_seq 4
Request timeout for icmp_seq 5
Request timeout for icmp_seq 6
Request timeout for icmp_seq 7
Request timeout for icmp_seq 8
Request timeout for icmp_seq 9
64 bytes from 10.5.5.1: icmp_seq=10 ttl=63 time=3.067 ms
64 bytes from 10.5.5.1: icmp_seq=11 ttl=63 time=3.132 ms
64 bytes from 10.5.5.1: icmp_seq=12 ttl=63 time=3.128 ms
64 bytes from 10.5.5.1: icmp_seq=13 ttl=63 time=4.260 ms
64 bytes from 10.5.5.1: icmp_seq=14 ttl=63 time=3.189 ms
64 bytes from 10.5.5.1: icmp_seq=15 ttl=63 time=3.992 ms

# orderedItems[].object.source.content
I've been working on building a #VPP-based router for the last year to support a small ISP I've been partnering with. I recently began polishing it (e.g., building an image that can be installable from USB, etc.) and adding a unified configuration CLI that abstracts away the details of managing multiple VPP processes, FRR, ZFS snapshots, (eventually) immutable system, etc.

This weekend I began experimenting with adding local #LLM capabilities (using #Ollama with `gpt-oss:120b` running on an AMD AI MAX 395+ system with 128GB of unified RAM) and I'm really excited by the possibilities.

```
imp> agent

[+] Connected to Ollama (gpt-oss:120b)
Type your request, or 'exit' to return

agent> Let's add a new loopback interface with IPv4 10.5.5.1/32 and IPv6 fc00::5:5:1/128. It can be called "service".
Thinking...
[Tool: add_loopback]
  create_lcp: True
  ipv4_cidr: 10.5.5.1/32
  ipv6_cidr: fc00::5:5:1/128
  name: service
  → Added loop0 (service) with 10.5.5.1/32, fc00::5:5:1/128
Thinking...

The loopback interface loop0 (named “service”) has been created with:

 • IPv4 10.5.5.1/32
 • IPv6 fc00::5:5:1/128

Let me know if you’d like any further changes!

agent> exit
Returning to IMP REPL...
imp*> apply
[+] Configuration saved to /persistent/config/router.json
[+] Configuration files generated in /tmp/imp-generated-config

Changes detected:
  Detected 1 configuration change(s):
    - ADD loopback loop0

  [DRY-RUN] VPP Core changes (5 commands):
    create loopback interface instance 0
    set interface state loop0 up
    lcp create loop0 host-if lo0
    set interface ip address loop0 10.5.5.1/32
    set interface ip address loop0 fc00::5:5:1/128

Apply changes live? [Y/n]: y
[+] Applying changes live...
  Detected 1 configuration change(s):
    - ADD loopback loop0

  Applying VPP Core changes...
[+] OK (5 commands)
[+] Live changes applied successfully
imp>
```
...and watching it come up (and be automatically handled by #iBGP since I'm pinging from a host that's not directly connected).

```
> ping 10.5.5.1
PING 10.5.5.1 (10.5.5.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
Request timeout for icmp_seq 4
Request timeout for icmp_seq 5
Request timeout for icmp_seq 6
Request timeout for icmp_seq 7
Request timeout for icmp_seq 8
Request timeout for icmp_seq 9
64 bytes from 10.5.5.1: icmp_seq=10 ttl=63 time=3.067 ms
64 bytes from 10.5.5.1: icmp_seq=11 ttl=63 time=3.132 ms
64 bytes from 10.5.5.1: icmp_seq=12 ttl=63 time=3.128 ms
64 bytes from 10.5.5.1: icmp_seq=13 ttl=63 time=4.260 ms
64 bytes from 10.5.5.1: icmp_seq=14 ttl=63 time=3.189 ms
64 bytes from 10.5.5.1: icmp_seq=15 ttl=63 time=3.992 ms
```