<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>
    Posts on ForwardingPlane.net
    
    </title>
    <link>https://forwardingplane.net/post/</link>
    <description>Recent content 
    
    in Posts on ForwardingPlane.net
    </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
    
    <copyright>Copyright (c) 2025, all rights reserved.</copyright>
    <lastBuildDate>Sun, 02 Aug 2026 00:00:00 +0000</lastBuildDate>
    
    
        <atom:link href="https://forwardingplane.net/post/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>piccolo-perf - a perfSONAR-lite for routers and SBCs</title>
      <link>https://forwardingplane.net/post/2026-08-02-piccolo-perf/</link>
      <pubDate>Sun, 02 Aug 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-08-02-piccolo-perf/</guid>
      <description>&lt;p&gt;I have a soft spot for &lt;a href=&#34;https://www.perfsonar.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;perfSONAR&lt;/a&gt; . It&amp;rsquo;s the gold standard for research and education network performance measurement, and if you run a network that touches ESnet, Internet2, or any of the big R&amp;amp;E backbones, you&amp;rsquo;ve probably got a perfSONAR node (or ten) somewhere. The problem is that perfSONAR is heavy. It wants a full OS, a stack of services, and real resources. That&amp;rsquo;s fine for a dedicated measurement box and that has served perfSonar well for 20 years, but it&amp;rsquo;s a non-starter for a router, a Raspberry Pi at a remote site, or anything else you&amp;rsquo;d call &amp;ldquo;constrained.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;That gap is exactly what &lt;a href=&#34;https://github.com/retecolo/piccolo-perf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;piccolo-perf&lt;/a&gt;  is going after. It&amp;rsquo;s a single static Go binary, no runtime dependencies, that gives you TWAMP-Light, TCP bandwidth, traceroute, MTU discovery, and DNS latency measurements, plus an agent mode that turns a fleet of these into a lightweight distributed mesh - InfluxDB and Prometheus included. Dual stack throughout, which matters to me more than it probably should. Honestly, I have been working on this for 15+ years, from trying to run OWAMP on a rpi1, to helping distribute mac minis for perfSonar tools into campuses, to even running lightweight versions of the toolkit on actual L3 switchines in the early days of virtualized NOSs&#39;. This project has been a labor of love and with my recent endeavor to teach myself golang, I thought &amp;ldquo;why not give it a try with this&amp;rdquo;? The results are surprisingly useful.&lt;/p&gt;
&lt;p&gt;The measurement set:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;twamp&lt;/strong&gt; - RTT, jitter, and packet loss via TWAMP-Light (RFC 5357 §5). No TCP control session, pure UDP test packets, so it&amp;rsquo;s cheap to run and interoperable with other TWAMP-Light endpoints.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bw&lt;/strong&gt; - TCP throughput, either a native Go implementation or iperf3 if it&amp;rsquo;s present on the box.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;trace&lt;/strong&gt; - per-hop RTT and path topology via ICMP TTL/HopLimit probing, IPv4 and IPv6.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mtu&lt;/strong&gt; - effective path MTU via ICMP binary search (DF-bit on v4, Packet Too Big on v6). Useful for finding where a WireGuard tunnel or a double-encapsulated path quietly knocked your MTU down - very common in managed-service-paths.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dns&lt;/strong&gt; - A successor to &lt;a href=&#34;https://dns.qosbox.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;DNS test&lt;/a&gt;  resolver latency and success rate, independent of the system resolver.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;agent&lt;/strong&gt; - runs all of the above on a schedule, reflects TWAMP for peers, and ships results to InfluxDB and/or exposes them as Prometheus metrics.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anything that needs raw sockets (mtu, trace) degrades gracefully without &lt;code&gt;CAP_NET_RAW&lt;/code&gt; rather than failing outright - it just reports &lt;code&gt;skipped=true&lt;/code&gt;. That&amp;rsquo;s a small detail, but it&amp;rsquo;s the kind of thing that tells you someone has actually run this on a box they don&amp;rsquo;t have root on. I&amp;rsquo;d be open to better ways to handle that.&lt;/p&gt;
&lt;p&gt;Getting it running is a one-liner:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;/bin/sh -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/retecolo/piccolo-perf/main/install.sh&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and a one-shot test looks like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;piccolo-perf twamp -mode client -server 2001:db8::1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[TWAMP-Light-Client] Starting TWAMP-Light test to 2001:db8::1 (count=10 interval=1s timeout=5s padding=0)
[TWAMP-Light-Client] seq=1 RTT=0.823ms
...
[TWAMP-Light-Client] === TWAMP-Light Test Statistics ===
[TWAMP-Light-Client] Packets sent:     10
[TWAMP-Light-Client] Packets received: 10
[TWAMP-Light-Client] Packet loss:      0.0%
[TWAMP-Light-Client] RTT min/avg/max:  0.778 / 0.812 / 0.857 ms
[TWAMP-Light-Client] Mean jitter:      0.018 ms
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The part I find more interesting than the one-shot CLI use is agent mode, and this harkens back to the inspiration for this peoject, perfSonar. Point a handful of hosts at a config server serving a JSON topology file, and each host stands up a TWAMP reflector, a bandwidth sink, and per-measurement schedulers, then pushes results upstream:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;┌─────────────────────────────────────────┐
│            Each Probe Host              │
│  piccolo-perf agent                     │
│  ├── TWAMP-Light reflector (UDP)        │
│  ├── BwServer (TCP sink, port 5201)     │
│  ├── Per-measurement schedulers         │
│  ├── Config poller (HTTP, live-reload)  │
│  ├── InfluxDB writer                    │
│  ├── Prometheus /metrics                │
│  └── Local JSONL resilience store       │
└──────────┬──────────────────┬───────────┘
           │ pull config      │ push metrics
           ▼                  ▼
  ┌──────────────┐    ┌──────────────┐
  │ Config Server│    │   InfluxDB   │◀─── Grafana
  └──────────────┘    │  Prometheus  │
                       └──────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Topology can be full mesh (every host probes every other host) or hub-and-spoke, which is the more realistic shape for most of us - a handful of spokes reporting back to a hub instead of an N² mesh. There&amp;rsquo;s also a local JSONL ring buffer for intermittently-connected edge devices, so a probe that loses its uplink keeps measuring and replays results once connectivity comes back instead of just dropping data on the floor.&lt;/p&gt;
&lt;h2 id=&#34;where-this-actually-fits&#34;&gt;Where this actually fits&lt;/h2&gt; &lt;p&gt;A few use cases jump out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IPv6 test pods and lab networks.&lt;/strong&gt; If you listened to &lt;a href=&#34;https://packetpushers.net/podcasts/ipv6-buzz/ipb173-the-ipv6-test-pod-project/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPB173&lt;/a&gt;  or any of the recent IPv6 Buzz episodes on lab builds, this is a natural fit for exactly that kind of environment - dual-stack RTT, jitter, and MTU measurement without standing up a perfSONAR node for every pod. Hey James, lets test this out =)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CPE and branch office monitoring.&lt;/strong&gt; Since it compiles to a static binary across amd64, arm64, arm, mips, ppc64le, and riscv64, it&amp;rsquo;ll run on the kind of small router or SBC that lives at a remote site where you have no business installing a full measurement stack.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VPN and tunnel path MTU troubleshooting.&lt;/strong&gt; The mtu subcommand&amp;rsquo;s binary search is a fast way to confirm whether a WireGuard or other tunnel is silently truncating your effective MTU, without reaching for tcpdump and doing the math by hand.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A perfSONAR-adjacent mesh on a budget.&lt;/strong&gt; Agent mode with hub-and-spoke topology and Grafana on top gets you a reasonable approximation of a perfSONAR mesh dashboard for a fraction of the deployment overhead, which is appealing if you want visibility into a network that doesn&amp;rsquo;t justify (or fit) the full perfSONAR toolkit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;rsquo;s early days for the project, but the design choices - graceful degradation without root, IPv6 treated as a first-class citizen rather than an afterthought, and a resilience store for flaky links - suggest someone building this against real constraints rather than a whiteboard. Worth a look if smokeping and perfSONAR are two ends of a spectrum you&amp;rsquo;ve been missing the middle of.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>IPB 204 - Tayga and IPv6 Translation</title>
      <link>https://forwardingplane.net/post/2026-07-23-ipv6buzz-204/</link>
      <pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-07-23-ipv6buzz-204/</guid>
      <description>&lt;p&gt;Andrew Palardy joins the hosts to discuss how Tayga, the open-source NAT64 daemon for Linux, is being updated to ensure it is up to date with all the current RFCs. The discussion covers RFC compliance updates and UDP checksum fixes for resolving connectivity problems, plus new eBPF CLAT support arriving in NetworkManager to provide automatic CLAT functionality.&lt;/p&gt;
&lt;p&gt;Have a listen:&lt;/p&gt;
&lt;iframe width=&#34;320&#34; height=&#34;30&#34; src=&#34;https://packetpushers.net/?powerpress_embed=75821-podcast&amp;amp;powerpress_player=mediaelement-audio&#34; title=&#34;Blubrry Podcast Player&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;Podcast link: &lt;a href=&#34;https://packetpushers.net/podcasts/ipv6-buzz/ipb204-tayga-and-ipv6-translation/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPB204: Tayga and IPv6 Translation&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Show links:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/apalrd/tayga&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Tayga (GitHub)&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/c/apalrdsadventures&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Andrew Palardy on YouTube&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://apalrd.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Andrew Palardy&amp;rsquo;s Website&lt;/a&gt; &lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>IPv6 - Why You Should Care</title>
      <link>https://forwardingplane.net/post/2026-07-22-ipv6-why-care/</link>
      <pubDate>Wed, 22 Jul 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-07-22-ipv6-why-care/</guid>
      <description>&lt;p&gt;I had the opportunity to speak at the &lt;a href=&#34;https://chinog.org/chi-nog-13/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Chicago Network Operators Group&lt;/a&gt;  conference for CHI-NOG 13. As one may imagine, I talked about IPv6, and why folks should care. Now, you&amp;rsquo;re probably thinking &amp;ldquo;yeah, yeah, IPv6 has been &lt;code&gt;almost here&lt;/code&gt; for 20 years&amp;rdquo;, and I&amp;rsquo;d move along and not try to convince you otherwise. However, this talk was slightly different - the whole point was to acknoledge that yes, it&amp;rsquo;s taking a long time. Yes, enterprises are the long pole in the tent. But no, it&amp;rsquo;s not &lt;code&gt;almost here&lt;/code&gt;. It&amp;rsquo;a already here, and it&amp;rsquo;s been here for a decade. Where it isn&amp;rsquo;t is in the enterprise - and that&amp;rsquo;s not really a surprise. the talk was very well received, garnering probably the most flattering write up of any talk I have ever given, and by a highly technical author that was in the front row of the talk. you can read that &lt;a href=&#34;https://routerjockey.com/buraglio-ipv6-why-you-should-care-chi-nog-13/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;here&lt;/a&gt; , which I highly encourage you to do.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested, the talk is &lt;a href=&#34;https://www.youtube.com/watch?v=dWO-bgcoU1s&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;available on youtube&lt;/a&gt; . It&amp;rsquo;s 30 minutes and I would argue that it makes a pretty compelling argument, if i do say so myself =)&lt;/p&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/dWO-bgcoU1s?si=69Sa8jO7Ya6mCC8V&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;</description>
    </item>
    
    <item>
      <title>IPB 203 - The Death of NAT</title>
      <link>https://forwardingplane.net/post/2026-06-25-ipv6buzz-203/</link>
      <pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-06-25-ipv6buzz-203/</guid>
      <description>&lt;p&gt;Network Address Translation (NAT), a foundational element of IPv4, faces critical reassessment as IPv6 deployment shifts the landscape. Ed and Tom evaluate the evolving role of NAT, questioning whether traditional translation models remain necessary when stateful packet inspection offers more robust, transparent security solutions.&lt;/p&gt;
&lt;p&gt;Have a listen:&lt;/p&gt;
&lt;iframe width=&#34;320&#34; height=&#34;30&#34; src=&#34;https://packetpushers.net/?powerpress_embed=75618-podcast&amp;amp;powerpress_player=mediaelement-audio&#34; title=&#34;Blubrry Podcast Player&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;Podcast link: &lt;a href=&#34;https://packetpushers.net/podcasts/ipv6-buzz/ipb203-the-death-of-nat/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPB203: The Death of NAT&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Show links:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/v26BAlfWBm8?si=PX_KlbOxmzKGTrRi&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&amp;ldquo;Fanboy&amp;rdquo; series – IPv6 and NATs&lt;/a&gt; &lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>IPB 202 - How to Get Hands-On IPv6 Deployment Experience</title>
      <link>https://forwardingplane.net/post/2026-06-11-ipv6buzz-202/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-06-11-ipv6buzz-202/</guid>
      <description>&lt;p&gt;The episode explores gaining practical IPv6 experience through hands-on deployment. Guest John Osmon discusses setting up a personal IPv6 lab environment, including low-cost home lab options and how this experience has increased his confidence in tackling IPv6 projects.&lt;/p&gt;
&lt;p&gt;Have a listen:&lt;/p&gt;
&lt;iframe width=&#34;320&#34; height=&#34;30&#34; src=&#34;https://packetpushers.net/?powerpress_embed=75465-podcast&amp;amp;powerpress_player=mediaelement-audio&#34; title=&#34;Blubrry Podcast Player&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;Podcast link: &lt;a href=&#34;https://packetpushers.net/podcasts/ipv6-buzz/ipb202-how-to-get-hands-on-ipv6-deployment-experience/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPB202: How to Get Hands-On IPv6 Deployment Experience&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Show links:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.miscreantsinaction.com/2026/03/where-in-contract-does-it-say-you-cant.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&amp;ldquo;Where in the contract does it say you can&amp;rsquo;t NAT IPv6?&amp;quot;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.miscreantsinaction.com/2025/09/so-you-want-to-try-ipv6.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&amp;ldquo;So, you want to try IPv6?&amp;quot;&lt;/a&gt; &lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>IPB 201 - The Never-Ending Prefix Debate: Revisiting Best Current Practices</title>
      <link>https://forwardingplane.net/post/2026-05-28-ipv6buzz-201/</link>
      <pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-05-28-ipv6buzz-201/</guid>
      <description>&lt;p&gt;Today&amp;rsquo;s conversation centers around a new Best Current Practices (BCP) RFC draft written by Jordi Palet Martinez. Our hosts explore the document for service providers and enterprises, including prefix sizing for point-to-point links, the pros and cons of numbering choices, and best practices for prefix pool allocation.&lt;/p&gt;
&lt;p&gt;Have a listen:&lt;/p&gt;
&lt;iframe width=&#34;320&#34; height=&#34;30&#34; src=&#34;https://packetpushers.net/?powerpress_embed=75291-podcast&amp;amp;powerpress_player=mediaelement-audio&#34; title=&#34;Blubrry Podcast Player&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;Podcast link: &lt;a href=&#34;https://packetpushers.net/podcasts/ipv6-buzz/ipb201-the-never-ending-prefix-debate-revisiting-best-current-practices/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPB201: The Never-Ending Prefix Debate: Revisiting Best Current Practices&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Show links:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://datatracker.ietf.org/doc/draft-ietf-v6ops-prefix-to-end-sites/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPv6 Prefix Assignment to End-Sites&lt;/a&gt; &lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>IPB 200 - Yes, IPv6 Is Complicated. IPv8 Won&#39;t Help</title>
      <link>https://forwardingplane.net/post/2026-05-14-ipv6buzz-200/</link>
      <pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-05-14-ipv6buzz-200/</guid>
      <description>&lt;p&gt;Why is IPv6 so much more complicated than IPv4? Could a newer version such as IPv8 be the solution? Guest Brian Carpenter joins our hosts to explain that many of IPv6&amp;rsquo;s complications are mathematical necessities. They point out that IPv6 has a 30 year head start on any IPv8 proposal that would struggle with many of the same issues. They also discuss features like automatic address configuration and the slow but inevitable global adoption of IPv6.&lt;/p&gt;
&lt;p&gt;Have a listen:&lt;/p&gt;
&lt;iframe width=&#34;320&#34; height=&#34;30&#34; src=&#34;https://packetpushers.net/?powerpress_embed=75132-podcast&amp;amp;powerpress_player=mediaelement-audio&#34; title=&#34;Blubrry Podcast Player&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;Podcast link: &lt;a href=&#34;https://packetpushers.net/podcasts/ipv6-buzz/ipb200-yes-ipv6-is-complicated-ipv8-wont-help/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPB200: Yes, IPv6 Is Complicated. IPv8 Won&amp;rsquo;t Help&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Show links:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/becarpenter/misc/blob/main/why6why.md&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&amp;ldquo;Why is IPv6 so complicated?&amp;quot;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/becarpenter/book6/tree/main&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Book6 – An open source book on IPv6&lt;/a&gt; &lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>IPB 199 - Developing IPv6-Friendly Code</title>
      <link>https://forwardingplane.net/post/2026-04-30-ipv6buzz-199/</link>
      <pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-04-30-ipv6buzz-199/</guid>
      <description>&lt;p&gt;Tom Coffeen and Nick Buraglio welcome Fern Cummings to talk about developing code for IPv6. Fern argues that moving to IPv6 restores end-to-end connectivity, which reduces complexity for developers without the need for &amp;ldquo;ridiculous hacks&amp;rdquo; caused by IPv4 NAT. The discussion offers practical advice on avoiding common developer traps, and covers financial benefits such as reduced logging costs and improved security.&lt;/p&gt;
&lt;p&gt;Have a listen:&lt;/p&gt;
&lt;iframe width=&#34;320&#34; height=&#34;30&#34; src=&#34;https://packetpushers.net/?powerpress_embed=74970-podcast&amp;amp;powerpress_player=mediaelement-audio&#34; title=&#34;Blubrry Podcast Player&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;Podcast link: &lt;a href=&#34;https://packetpushers.net/podcasts/ipv6-buzz/ipb199-developing-ipv6-friendly-code/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPB199: Developing IPv6-Friendly Code&lt;/a&gt; &lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>IPB 198 - IPv6 Privacy and Temporary Addresses</title>
      <link>https://forwardingplane.net/post/2026-04-16-ipv6buzz-198/</link>
      <pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-04-16-ipv6buzz-198/</guid>
      <description>&lt;p&gt;Today our hosts discuss IPv6 Privacy and Temporary Addresses to clarify how address provisioning can potentially work for host operating systems. The discussion covers the difference between permanent and temporary privacy addresses, their uses, and how interface identifiers are assigned to hosts.&lt;/p&gt;
&lt;p&gt;Have a listen:&lt;/p&gt;
&lt;iframe width=&#34;320&#34; height=&#34;30&#34; src=&#34;https://packetpushers.net/?powerpress_embed=74783-podcast&amp;amp;powerpress_player=mediaelement-audio&#34; title=&#34;Blubrry Podcast Player&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;Podcast link: &lt;a href=&#34;https://packetpushers.net/podcasts/ipv6-buzz/ipb198-ipv6-privacy-and-temporary-addresses/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPB198: IPv6 Privacy and Temporary Addresses&lt;/a&gt; &lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>IPB 197 - SLAAC and the End of DHCP?</title>
      <link>https://forwardingplane.net/post/2026-04-02-ipv6buzz-197/</link>
      <pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-04-02-ipv6buzz-197/</guid>
      <description>&lt;p&gt;Today our hosts discuss the essential role of Stateless Address Autoconfiguration (SLAAC) in successfully deploying an IPv6-mostly network. SLAAC is required to assign a unique IPv6 address to the Customer-side Translator (CLAT), which allows devices to operate on IPv6. However, enterprise operators might prefer using DHCPv6 for network tracking and accountability, potentially trapping them in complex dual-stack environments.&lt;/p&gt;
&lt;p&gt;Have a listen:&lt;/p&gt;
&lt;iframe width=&#34;320&#34; height=&#34;30&#34; src=&#34;https://packetpushers.net/?powerpress_embed=74600-podcast&amp;amp;powerpress_player=mediaelement-audio&#34; title=&#34;Blubrry Podcast Player&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;Podcast link: &lt;a href=&#34;https://packetpushers.net/podcasts/ipv6-buzz/ipb197-slaac-and-the-end-of-dhcp/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPB197: SLAAC and the End of DHCP?&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Show links:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://datatracker.ietf.org/doc/rfc9686/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RFC 9686: Registering Self-Generated IPv6 Addresses Using DHCPv6&lt;/a&gt; &lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>IPB 196 - Is End-to-End Connectivity the Right Goal?</title>
      <link>https://forwardingplane.net/post/2026-03-19-ipv6buzz-196/</link>
      <pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-03-19-ipv6buzz-196/</guid>
      <description>&lt;p&gt;One of the early design principles of the Internet was end-to-end connectivity: that is, every device on the Internet would be publicly addressable, and every device could share its resources or provide services. The hosts examine whether this foundational principle remains realistic for IPv6, discussing its historical erosion in IPv4 and the IETF&amp;rsquo;s continued adherence to it.&lt;/p&gt;
&lt;p&gt;Have a listen:&lt;/p&gt;
&lt;iframe width=&#34;320&#34; height=&#34;30&#34; src=&#34;https://packetpushers.net/?powerpress_embed=74394-podcast&amp;amp;powerpress_player=mediaelement-audio&#34; title=&#34;Blubrry Podcast Player&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;Podcast link: &lt;a href=&#34;https://packetpushers.net/podcasts/ipv6-buzz/ipb196-is-end-to-end-connectivity-the-right-goal/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPB196: Is End-to-End Connectivity the Right Goal?&lt;/a&gt; &lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Linkwarden with docker compose and nginx proxy manager</title>
      <link>https://forwardingplane.net/post/2026-03-12-self-host-linkwarden-docker-compose/</link>
      <pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-03-12-self-host-linkwarden-docker-compose/</guid>
      <description>&lt;p&gt;[Linkwarden(https://github.com/linkwarden/linkwarden) is a tool for better managing bookmarks. If you&amp;rsquo;re nything like me, you keep 1000 browser tabs open across a series of profiles, with full intention of revisiting them later, and then never do. A colleague shpoed me linkwarden and I was interested straight away. I did have a few hangups, however:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I don&amp;rsquo;t want to rely on a cloud service if I don&amp;rsquo;t have to&lt;/li&gt;
&lt;li&gt;I prefer to control my own content&lt;/li&gt;
&lt;li&gt;I am not a big fan of docker, which is required for self hosting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I got over the docker hangup since it wasn&amp;rsquo;t really an option to do any other way and got straight to it. Very quickly I ran into the near-universal issues I have with docker:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;poor understanding or lack of attention of networking by the developers (this needs to run over IPv6 for me to use it)&lt;/li&gt;
&lt;li&gt;spotty documentation for running this securely via a SSL enabled web service&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As I have done with other services that require docker, I went to nginx proxy manager. This container is a nice front end for proxying services via SSL / NGINX, and is far easier to wrestle than something like Traefik.&lt;/p&gt;
&lt;p&gt;After much fighting of the docker compose file I ended up with this, which works.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;services:
  postgres:
    image: postgres:16-alpine
    env_file: .env
    restart: always
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    networks:
      - linkwarden-network
  linkwarden:
    env_file: .env
    environment:
      - DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres
    restart: always
    # build: . # uncomment to build from source
    image: ghcr.io/linkwarden/linkwarden:latest # comment to build from source
    ports:
      - 3000:3000
    volumes:
      - ./data:/data/data
    depends_on:
      - postgres
      - meilisearch
    networks:
      - linkwarden-network
  meilisearch:
    image: getmeili/meilisearch:v1.12.8
    restart: always
    env_file:
      - .env
    networks:
      - linkwarden-network
    volumes:
      - ./meili_data:/meili_data
  nginx-proxy-manager:
    image: jc21/nginx-proxy-manager:latest
    container_name: npm
    ports:
      - &amp;quot;81:81&amp;quot;    # Admin interface
      - &amp;quot;80:80&amp;quot;    # HTTP
      - &amp;quot;443:443&amp;quot;  # HTTPS
    volumes:
      - ./npm/data:/data
      - ./npm/letsencrypt:/etc/letsencrypt
    networks:
      - linkwarden-network
networks:
  linkwarden-network:
    driver: bridge
    enable_ipv6: true
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This configuration will work with NPM front ending the https pieces, and will also work behind cloudflare. You&amp;rsquo;ll need to find the address of the container to put into the NPM proxy manager. This can be found with the following command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo docker inspect &amp;lt;container ID&amp;gt; | grep IP&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The output should look similar to&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;buraglio@dockhost1:/opt/linkwarden$ sudo docker inspect af8e7a6c4edd | grep IP
                &amp;quot;RSS_SUBSCRIPTION_LIMIT_PER_USER=&amp;quot;,
                &amp;quot;PIPEDRIVE_CUSTOM_NAME=&amp;quot;,
                &amp;quot;NEXT_PUBLIC_PIPEDRIVE_ENABLED=&amp;quot;,
                &amp;quot;PIPEDRIVE_CLIENT_ID=&amp;quot;,
                &amp;quot;PIPEDRIVE_CLIENT_SECRET=&amp;quot;,
                    &amp;quot;IPAMConfig&amp;quot;: null,
                    &amp;quot;IPAddress&amp;quot;: &amp;quot;172.19.0.4&amp;quot;,
                    &amp;quot;IPPrefixLen&amp;quot;: 16,
                    &amp;quot;IPv6Gateway&amp;quot;: &amp;quot;fd64:b2a0:6eac:1::1&amp;quot;,
                    &amp;quot;GlobalIPv6Address&amp;quot;: &amp;quot;fd64:b2a0:6eac:1::4&amp;quot;,
                    &amp;quot;GlobalIPv6PrefixLen&amp;quot;: 64,
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;for anyone who would rather not deal with this amount of complexity, linkwarden has a &lt;a href=&#34;https://linkwarden.app/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;very reasonable hosted option&lt;/a&gt; .&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>IPB 195 - Start Network Automation with IPv6!</title>
      <link>https://forwardingplane.net/post/2026-03-05-ipv6buzz-195/</link>
      <pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-03-05-ipv6buzz-195/</guid>
      <description>&lt;p&gt;The hosts propose using IPv6 as a low-risk environment for learning network automation. Since production traffic typically runs on IPv4, experimenting with automated configurations on IPv6 allows engineers to get a two-for-one experience learning both IPv6 and automation with low risk of disruption.&lt;/p&gt;
&lt;p&gt;Have a listen:&lt;/p&gt;
&lt;iframe width=&#34;320&#34; height=&#34;30&#34; src=&#34;https://packetpushers.net/?powerpress_embed=74175-podcast&amp;amp;powerpress_player=mediaelement-audio&#34; title=&#34;Blubrry Podcast Player&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;Podcast link: &lt;a href=&#34;https://packetpushers.net/podcasts/ipv6-buzz/ipb195-start-network-automation-with-ipv6/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPB195: Start Network Automation with IPv6!&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Show links:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pynet.twb-tech.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Netmiko Library&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pynet.twb-tech.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;FREE course – Learning Python: Python for Network Engineers&lt;/a&gt; &lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>IPB 194 - Navel Gazing at NAT in IPv6</title>
      <link>https://forwardingplane.net/post/2026-02-19-ipv6buzz-194/</link>
      <pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-02-19-ipv6buzz-194/</guid>
      <description>&lt;p&gt;Ed, Nick, and Tom discuss the need for Network Address Translation v6 to v6 (NAT66). While Network Prefix Translation (NPTv6) exists, its limitations make it insufficient for real-world business needs. They also highlight that without a standardized NAT66, the market is forcing vendors to implement their own, hindering widespread IPv6 adoption.&lt;/p&gt;
&lt;p&gt;Have a listen:&lt;/p&gt;
&lt;iframe width=&#34;320&#34; height=&#34;30&#34; src=&#34;https://packetpushers.net/?powerpress_embed=74014-podcast&amp;amp;powerpress_player=mediaelement-audio&#34; title=&#34;Blubrry Podcast Player&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;Podcast link: &lt;a href=&#34;https://packetpushers.net/podcasts/ipv6-buzz/ipb194-naval-gazing-at-nat-in-ipv6/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPB194: Navel Gazing at NAT in IPv6&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Show links:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ietf.org/archive/id/draft-mrw-nat66-00.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IPv6-to-IPv6 Network Address Translation (NAT66)&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://datatracker.ietf.org/doc/rfc6296/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RFC 6296: IPv6-to-IPv6 Network Prefix Translation&lt;/a&gt; &lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Mikrotik wireguard optimization</title>
      <link>https://forwardingplane.net/post/2026-02-17-routeros-wireguard-optimization/</link>
      <pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate>
      
      <guid>https://forwardingplane.net/post/2026-02-17-routeros-wireguard-optimization/</guid>
      <description>&lt;p&gt;Most modern mikrotik can handle reasonable wireguard performance, but it is a CPU based encryption model, so there are some tweaks that can be made to improve performance. The following can be used to optimize for better wireguard behavior. However, it should be noted that unlike the IPSec capabilities that are measured and reported on the Mikrotik product pages for each platform, wireguard limits are not published for any mikrotik platform. This can be translated into &amp;ldquo;you get what you get&amp;rdquo;, essentially, and as stated, wireguard is all CPU based, so perfornmance and scale will be limited by CPU.&lt;/p&gt;
&lt;h3 id=&#34;set-the-queuing-for-the-wan-interface-to-fq-codel-or-cake&#34;&gt;Set the queuing for the WAN interface to &lt;code&gt;fq-codel&lt;/code&gt; or &lt;code&gt;cake&lt;/code&gt;&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;FQ-CoDel&lt;/strong&gt; and &lt;strong&gt;CAKE&lt;/strong&gt; are both modern queue management systems designed to reduce bufferbloat and ensure fair bandwidth distribution, but CAKE offers several enhancements:&lt;/p&gt;
&lt;p&gt;1. &lt;strong&gt;Flow Hashing&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;FQ-CoDel&lt;/strong&gt;: Uses a basic hash to assign packets to flows, which can lead to collisions under high flow counts. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CAKE&lt;/strong&gt;: Uses an &lt;strong&gt;8-way set-associative hash&lt;/strong&gt;, drastically reducing collisions and improving flow isolation. &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2. &lt;strong&gt;Fairness&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;FQ-CoDel&lt;/strong&gt;: Fairness is per-flow—clients with more connections get more bandwidth. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CAKE&lt;/strong&gt;: Adds &lt;strong&gt;per-host fairness&lt;/strong&gt; (via Cobalt), so a client with 10 connections doesn’t dominate one with 1. &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;3. &lt;strong&gt;Shaping &amp;amp; Overhead Handling&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;FQ-CoDel&lt;/strong&gt;: Often paired with a separate shaper (e.g., HTB), increasing CPU use. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CAKE&lt;/strong&gt;: Includes an &lt;strong&gt;integrated shaper&lt;/strong&gt;, is more CPU-efficient, and supports &lt;strong&gt;framing compensation&lt;/strong&gt; (e.g., for PPPoE, ATM). &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;4. &lt;strong&gt;MSS &amp;amp; MTU Awareness&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CAKE&lt;/strong&gt;: Tracks packet sizes in &lt;strong&gt;bytes&lt;/strong&gt;, not packets, avoiding issues with large GSO/GRO packets. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;FQ-CoDel&lt;/strong&gt;: Uses packet count, which can misrepresent memory usage.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;5. &lt;strong&gt;Diffserv Support&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CAKE&lt;/strong&gt;: Built-in &lt;strong&gt;DiffServ mode&lt;/strong&gt; for traffic class prioritization. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;FQ-CoDel&lt;/strong&gt;: No native Diffserv support.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/queue type
add kind=cake name=cake
/queue interface
set sfp-sfpplus1 queue=cake
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Or, with &lt;code&gt;fq_codel&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/queue type
add kind=fq-codel name=fq-codel
/queue interface
set sfp-sfpplus1 queue=fq-codel
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;disable-fasttrack-for-the-wireguard-interface&#34;&gt;Disable fasttrack for the wireguard interface&lt;/h3&gt; &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/ip firewall raw add action=notrack chain=prerouting in-interface=wg1   
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Set the correct MTU and MSS in order to to account for encapsulation overhead. 
Clamp MSS on TCP traffic to prevent fragmentation.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/ip firewall mangle add protocol=tcp tcp-flags=syn action=change-mss new-mss=1400 chain=forward out-interface=wg1   
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;strong&gt;MTU&lt;/strong&gt; and &lt;strong&gt;MSS&lt;/strong&gt; are related but distinct values:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MTU (Maximum Transmission Unit)&lt;/strong&gt; = 1420 bytes: This is the largest IP packet size the WireGuard interface can transmit, including all headers. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MSS (Maximum Segment Size)&lt;/strong&gt; = 1400 bytes: This is the largest payload size for &lt;strong&gt;TCP data&lt;/strong&gt; within that packet, excluding the TCP and IP headers. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The difference accounts for the &lt;strong&gt;40-byte overhead&lt;/strong&gt; of the TCP and IPv4 headers (20 bytes each). Explicitly:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;MSS = MTU - 40
1400 = 1420 - 40
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Setting MSS to 1400 ensures that when TCP adds its 40-byte header, the total packet size (1440 bytes) stays safely below the effective path MTU, preventing fragmentation. However, since WireGuard itself adds ~80 bytes of encapsulation overhead, the outer packet must be smaller — therefor setting the WireGuard interface MTU to &lt;strong&gt;1420&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;This combination avoids fragmentation and packet drops, especially on paths with lower MTU or blocked ICMP (which breaks Path MTU Discovery).&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
