Support multiple backends and add alloc backend

It might make more sense to return a struct with the MTU and IP instead of trying to rely on multi-return.