def _decode_next_layer(self, ipv6, proto=None, length=None):
hdr_len = <NUM_LIT>                <EOL>raw_len = ipv6['<STR_LIT>']   <EOL>_protos = list()            <EOL>while proto in EXT_HDR:<EOL><INDENT>if proto.value == <NUM_LIT>:<EOL><INDENT>ipv6['<STR_LIT>'] = self._read_packet(header=hdr_len, payload=raw_len)<EOL><DEDENT>next_ = self._import_next_layer(proto, version=<NUM_LIT:6>, extension=True)<EOL>info = next_.info<EOL>name = next_.alias.lstrip('<STR_LIT>').lower()<EOL>ipv6[name] = info<EOL>_protos.append(next_)<EOL>proto = info.next  <EOL>hdr_len += info.length  <EOL>raw_len -= info.length  <EOL><DEDENT>ipv6['<STR_LIT>'] = hdr_len<EOL>ipv6['<STR_LIT>'] = raw_len<EOL>ipv6['<STR_LIT>'] = proto<EOL>return super()._decode_next_layer(ipv6, proto, raw_len, ipv6_exthdr=_protos)<EOL>
Decode next layer extractor.

        Positional arguments:
            * ipv6 -- dict, info buffer
            * proto -- str, next layer protocol name
            * length -- int, valid (not padding) length

        Returns:
            * dict -- current protocol with next layer extracted