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

def cmd_msg_parser(who, nlh, ops, cache_ops, arg):
    """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
    """
    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)