code: def cmd_msg_parser(who, nlh, ops, cache_ops, arg):
      
      ghdr = genlmsg_hdr(nlh)
      cmd = lookup_cmd(ops, ghdr.cmd)
      if not cmd:
          return -NLE_MSGTYPE_NOSUPPORT
      if cmd.c_msg_parser is None:
          return -NLE_OPNOTSUPP
  
      tb = dict((i, None) for i in range(cmd.c_maxattr + 1))
      info = genl_info(who=who, nlh=nlh, genlhdr=ghdr, userhdr=genlmsg_user_hdr(ghdr), attrs=tb)
      err = nlmsg_parse(nlh, GENL_HDRSIZE(ops.o_hdrsize), tb, cmd.c_maxattr, cmd.c_attr_policy)
      if err < 0:
          return err
      return cmd.c_msg_parser(cache_ops, cmd, info, arg)
docs: https://github.com/thom311/libnl/blob/libnl3_2_25/lib/genl/mngt.c#L47.
  
      Positional arguments:
      who -- sockaddr_nl class instance.
      nlh -- nlmsghdr class instance.
      ops -- genl_ops class instance.
      cache_ops -- nl_cache_ops class instance.
      arg -- to be passed along to .c_msg_parser().
  
      Returns:
      Integer