Process responses from from the query sent by genl_ctrl_probe_by_name().

    https://github.com/thom311/libnl/blob/libnl3_2_25/lib/genl/ctrl.c#L203

    Process returned messages, filling out the missing information in the genl_family structure.

    Positional arguments:
    msg -- returned message (nl_msg class instance).
    arg -- genl_family class instance to fill out.

    Returns:
    Indicator to keep processing frames or not (NL_SKIP or NL_STOP).

def probe_response(msg, arg):
    """Process responses from from the query sent by genl_ctrl_probe_by_name().

    https://github.com/thom311/libnl/blob/libnl3_2_25/lib/genl/ctrl.c#L203

    Process returned messages, filling out the missing information in the genl_family structure.

    Positional arguments:
    msg -- returned message (nl_msg class instance).
    arg -- genl_family class instance to fill out.

    Returns:
    Indicator to keep processing frames or not (NL_SKIP or NL_STOP).
    """
    tb = dict((i, None) for i in range(CTRL_ATTR_MAX + 1))
    nlh = nlmsg_hdr(msg)
    ret = arg
    if genlmsg_parse(nlh, 0, tb, CTRL_ATTR_MAX, ctrl_policy):
        return NL_SKIP
    if tb[CTRL_ATTR_FAMILY_ID]:
        genl_family_set_id(ret, nla_get_u16(tb[CTRL_ATTR_FAMILY_ID]))
    if tb[CTRL_ATTR_MCAST_GROUPS] and parse_mcast_grps(ret, tb[CTRL_ATTR_MCAST_GROUPS]) < 0:
        return NL_SKIP
    return NL_STOP