pollable_fd is an internal data structure and shouldn't be used. It's the right tool though, we just need to use it indirectly.
We need a way for an existing abstraction to "adopt" a file descriptor. I think the best existing abstraction is datagram_channel. It uses sendmsg/recvmsg and I believe TUN supports that. Best to verify that with a small C program.
Option 1:
datagram_channel network_stack::make_datagram_channel_from_file_descriptor(file_desc)
Option 2:
datagram_channel network_stack::make_datagram_channel_from_tun_device(path)
Option 1 is more generic.