what's the difference between lib2p2 and cjdns or yggdrasil

Hey everyone, I will choose a solution to build up my de-centralized mesh network. However, there are many options offered to me, such as libp2p, cjdns, yggdrasil, GNUnet, etc. I want to know what difference between them. Anyone who can give me some good suggestions?

cjdns and yggdrasil are level 2 (overlay) protocols.
Libp2p is a level 5 one.

You can use libp2p over TCP over cjdns for example.

Actually libp2p is not really a protocol, it’s an API and collection of multiple protocols, a simple libp2p connection can be as complex as identify over yamux over TLS1.3 over TCP.