docs: def genlmsg_put(msg, port, seq, family, hdrlen, flags, cmd, version):
      """Add Generic Netlink headers to Netlink message.
  
      https://github.com/thom311/libnl/blob/libnl3_2_25/lib/genl/genl.c#L348
  
      Calls nlmsg_put() on the specified message object to reserve space for the Netlink header, the Generic Netlink
      header, and a user header of specified length. Fills out the header fields with the specified parameters.
  
      Positional arguments:
      msg -- Netlink message object (nl_msg class instance).
      port -- Netlink port or NL_AUTO_PORT (c_uint32).
      seq -- sequence number of message or NL_AUTO_SEQ (c_uint32).
      family -- numeric family identifier (integer).
      hdrlen -- length of user header (integer).
      flags -- additional Netlink message flags (integer).
      cmd -- numeric command identifier (c_uint8).
      version -- interface version (c_uint8).
  
      Returns:
      bytearray starting at user header or None if an error occurred.
      """
      hdr = genlmsghdr(cmd=cmd, version=version)
      nlh = nlmsg_put(msg, port, seq, family, GENL_HDRLEN + hdrlen, flags)
      if nlh is None:
          return None
      nlmsg_data(nlh)[:hdr.SIZEOF] = hdr.bytearray[:hdr.SIZEOF]
      _LOGGER.debug('msg 0x%x: Added generic netlink header cmd=%d version=%d', id(msg), cmd, version)
      return bytearray_ptr(nlmsg_data(nlh), GENL_HDRLEN)