<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def nla_parse(tb, maxtype, head, len_, policy):
 """Create attribute index based on a stream of attributes. https://github.com/thom311/libnl/blob/libnl3_2_25/lib/attr.c#L242 Iterates over the stream of attributes and stores a pointer to each attribute in the index array using the attribute type as index to the array. Attribute with a type greater than the maximum type specified will be silently ignored in order to maintain backwards compatibility. If `policy` is not None, the attribute will be validated using the specified policy. Positional arguments: tb -- dictionary to be filled (maxtype+1 elements). maxtype -- maximum attribute type expected and accepted (integer). head -- first nlattr with more in its bytearray payload (nlattr class instance). len_ -- length of attribute stream (integer). policy -- dictionary of nla_policy class instances as values, with nla types as keys. Returns: 0 on success or a negative error code. """

    rem = c_int()
    for nla in nla_for_each_attr(head, len_, rem):
        type_ = nla_type(nla)
        if type_ > maxtype:
            continue

        if policy:
            err = validate_nla(nla, maxtype, policy)
            if err < 0:
                return err

        if type_ in tb and tb[type_]:
            _LOGGER.debug('Attribute of type %d found multiple times in message, previous attribute is being ignored.',
                          type_)
        tb[type_] = nla

    if rem.value > 0:
        _LOGGER.debug('netlink: %d bytes leftover after parsing attributes.', rem.value)

    return 0