docs: def genlmsg_parse(nlh, hdrlen, tb, maxtype, policy):
      """Parse Generic Netlink message including attributes.
  
      https://github.com/thom311/libnl/blob/libnl3_2_25/lib/genl/genl.c#L191
  
      Verifies the validity of the Netlink and Generic Netlink headers using genlmsg_valid_hdr() and calls nla_parse() on
      the message payload to parse eventual attributes.
  
      Positional arguments:
      nlh -- Netlink message header (nlmsghdr class instance).
      hdrlen -- length of user header (integer).
      tb -- empty dict, to be updated with nlattr class instances to store parsed attributes.
      maxtype -- maximum attribute id expected (integer).
      policy -- dictionary of nla_policy class instances as values, with nla types as keys.
  
      Returns:
      0 on success or a negative error code.
      """
      if not genlmsg_valid_hdr(nlh, hdrlen):
          return -NLE_MSG_TOOSHORT
  
      ghdr = genlmsghdr(nlmsg_data(nlh))
      return int(nla_parse(tb, maxtype, genlmsg_attrdata(ghdr, hdrlen), genlmsg_attrlen(ghdr, hdrlen), policy))