The fact that ASIC-powered IPv4 routers even have a "slow path" should be a huge clue that designing accelerated IPv4 routers involves some degree of complexity beyond the ASIC.
IPv6 has a slow path too.
In any case, sometimes you need to be able to "punt" packets to the control plane. E.g. when you receive packets destined for yourself. (Ssh, SNMP, BGP, IS-IS, OSPF, etc). Or packets that generate an error (ICMP).
Accelerated IPv6 routers have no need for a "slow path" because all IPv6 headers are guaranteed to be the same size, and headers are also guaranteed to align on an octet bounder (IPv4 has no such guarantee).
That nonsense about "octet-boundery" and "64-bit aligned" keeps coming back. I heard the same nonsense about "OSPF has all IP-fields on a 4-byte boundary" and IS-IS has them all over the place (because of TLV-encoding). Guess what ? It doesn't matter one bit. In fact, the fact that OSPF had all its fields are fixed locations made the protocol a pain to deal with.
When you design a forwarding ASIC, you should design an ASIC that.
1) take N bits from location L in an incoming packet.
2) does a lookup for longest match prefix in a table (radix-trie or TCAM)
3) queue the packet on an output queue.
It shouldn't matter where those bits live. I won't believe that alignment would matter much.
IPv4 requires the computation of checksums, which requires at least one instruction, and may require up to n instructions. IPv6 doesn't require a checksum, so it requires zero checksum computation instructions. Even if an IPv4 router only requires a single instruction to compute a checksum, that's still infinitely more than zero. In addition, this checksum needs to be recomputed by every node in the path.
The IP header checksum is literally a sum. It adds the value of all (20) bytes in the header (modulo 256 of course). The only change in the header when forwarding a packet, is that the TTL gets decremented by 1. That results in the fact that the IPv4 header checksum also gets decremented by 1. Ergo: all you need to adjust the IPv4 header checksum is 1 single instruction: decrement the TTL octet by one.
One instruction. And if you don't want to check the headerchecksum, then don't do it. If you think it's not needed in IPv6, then it won't do much good in IPv4 either. One instruction, in the big bulk of route-lookup, firewall checks, NAT (maybe), QoS, queueing, etc. It's nothing. Mentioning the fact that IPv6 has no header checksum shows that you took your list from a list on the Internet, and didn't do you own thinking.
Modern client IP stacks attempt to do PMTUD, but it's not a requirement of the spec, and so many network operator block or otherwise mangle IPv4 ICMP that IPv4 PMTUD can't be relied upon to reliable set the MTU for the traffic flow. As such, intermediate routers still need to check if the packet needs to be fragmented, and they also need to process existing fragmented packets to ensure that they send them down the wire in the right order.
And still I don't think fragmentation is a big deal.
A big part of the reason why the IPv4 routing table is so bloated is because organizations have had to continually request new IP address allotments as their network needs grow, and these allotments are very unlikely to be contiguous.
That was the case 25-20 years ago.
In the early nineties, there was the
CIDR-initiative. The goal was to summarize prefixes better, and reduce the amount of entries in the global routing table.
Then it turned out you need to advertise extra entries in the globabl routing table if you want to multi-home your site. And this has been done on a large scale. In the early nineties the global routing table kept stable in size for a short while (because of CIDR). And then it started to grow again, because of multi-homing.
You are right that in theory IPv6 would allow for much better summarization. But in reality, it's just a big a mess as IPv4. And because it's easier to get PI addresses in IPv6, chances are we will see many more PI-prefixes advertised in the global IPv6 routing table. Of course you need to wait and see the full effect when (if) IPv6 gets really popular.
You can see the impact of this efficiency on the current size of the global IPv6 routing table. The IPv6 routing table is only about 3% of the size of the current IPv4 routing table, even though about 16% of the registered AS's on the Internet are advertising at least one IPv6 prefix.
Just wait till more non-ISPs get their own prefixes.
So an ASIC designed to route 20-bytes headers at 400Mpps routes 40-byte headers at 200Mpps?
No shit.
You can't use an ASIC designed for IPv4 routing as a benchmark for IPv6 performance. It's obviously going to favor the IPv4 use case.
That's a linecard designed for both IPv4 and IPv6. And the result is that it can forward less pps with IPv6. What more do you want ?
A similar discussion sometimes happened with MPLS. MPLS forwarding does a simple table-lookup O(1) in a small array. People were boasting that this was much faster than an IPv4 lookup. And thus that MPLS forwarding was much faster than IPv4 forwarding. Guess what, it's hype. It doesn't matter. If you use the right datastructure (tree with nodes with 256 pointers down) the cost of doing a route-lookup is O(4). In real life, it doesn't matter at all.
3. The Linksys WRT54GL is bottlenecked by its CPU and is unable to route at line-speeds, so any differences in efficiency between the protocols will become immediately apparent.
If that is the case, and the box can't do simple forwarding at line-speed, it has more issues to worry about. (Like performance when you enable a few features, like QoS).
Anyway, it is still my opinion that IPv6 brings nothing valuable to the table. Besides a larger address space. No real problems (like multi-homing, on the fly-readdressing, locator-identifier separation, et) are tackled by IPv6. It was a missed opportunity to improve the network layer.