Netlink is a socket family used for inter-process communication (IPC) between both the kernel and userspace processes, and between different userspace processes, in a way similar to the Unix domain sockets available on certain Unix-like operating systems, including its original incarnation as a Linux kernel interface, as well as in the form of a later implementation on FreeBSD.
[3] Netlink is designed and used for transferring miscellaneous networking information between the kernel space and userspace processes.
Netlink provides a standard socket-based interface for userspace processes, and a kernel-side API for internal use by kernel modules.
Netlink is designed to be a more flexible successor to ioctl; RFC 3549 describes the protocol in detail.
Netlink was created by Alexey Kuznetsov[4] as a more flexible alternative to the sophisticated but awkward ioctl communication method used for setting and getting external socket options.
The subset is referenced by the protocol field in the socket call: Lacking a standard, SOCK_DGRAM and SOCK_RAW are not guaranteed to be implemented in a given Linux (or other OS) release.
Linux implements a large subset of messages: NETLINK_FIREWALL provides an interface for a user-space app to receive packets from the firewall.