code: def read_ipv6_opts(self, length, extension):
          
          if length is None:
              length = len(self)
  
          _next = self._read_protos(1)
          _hlen = self._read_unpack(1)
          # _opts = self._read_fileng(_hlen*8+6)
  
          ipv6_opts = dict(
              next=_next,
              length=(_hlen + 1) * 8,
          )
  
          options = self._read_ipv6_opts_options(_hlen * 8 + 6)
          ipv6_opts['options'] = options[0]       # tuple of option acronyms
          ipv6_opts.update(options[1])            # merge option info to buffer
  
          length -= ipv6_opts['length']
          ipv6_opts['packet'] = self._read_packet(header=ipv6_opts['length'], payload=length)
  
          if extension:
              self._protos = None
              return ipv6_opts
          return self._decode_next_layer(ipv6_opts, _next, length)
docs: Read Destination Options for IPv6.
  
          Structure of IPv6-Opts header [RFC 8200]:
              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
              |  Next Header  |  Hdr Ext Len  |                               |
              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
              |                                                               |
              .                                                               .
              .                            Options                            .
              .                                                               .
              |                                                               |
              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  
              Octets      Bits        Name                    Description
                0           0     opt.next                Next Header
                1           8     opt.length              Header Extensive Length
                2          16     opt.options             Options