Najłatwiej zerżnąć ze źródeł tych narzędzi - tak jak powiedział przedmówca. Sprawdź jednak wcześniej do czego służy bilioteka libnl, być może będzie użyteczna (sam nie jestem pewien co ona robiła, więc na szczegółowe pytania nie odpowiem).
A z tego co wiem to wszystkie takie operacje polegają na założeniu socketa typu RAW i wykonywaniu na nim rządań ioctl, które przesyłają do i z jądra structy z danymi.
à propos pytania gdzie te informacje są w jądrze: zapewne w odpowiedniej strukturze net_device, jednak z racji że jądro nie współdzieli pamięci wirtualnej z procesami użytkownika, nijak się nie można do tych struktur odwołać.