def _read_opt_calipso(self, code, *, desc):
_type = self._read_opt_type(code)<EOL>_size = self._read_unpack(<NUM_LIT:1>)<EOL>if _size < <NUM_LIT:8> and _size % <NUM_LIT:8> != <NUM_LIT:0>:<EOL><INDENT>raise ProtocolError(f'<STR_LIT>')<EOL><DEDENT>_cmpt = self._read_unpack(<NUM_LIT:4>)<EOL>_clen = self._read_unpack(<NUM_LIT:1>)<EOL>if _clen % <NUM_LIT:2> != <NUM_LIT:0>:<EOL><INDENT>raise ProtocolError(f'<STR_LIT>')<EOL><DEDENT>_sens = self._read_unpack(<NUM_LIT:1>)<EOL>_csum = self._read_fileng(<NUM_LIT:2>)<EOL>opt = dict(<EOL>desc=desc,<EOL>type=_type,<EOL>length=_size + <NUM_LIT:2>,<EOL>domain=_cmpt,<EOL>cmpt_len=_clen * <NUM_LIT:4>,<EOL>level=_sens,<EOL>chksum=_csum,<EOL>)<EOL>if _clen:<EOL><INDENT>_bmap = list()<EOL>for _ in range(_clen // <NUM_LIT:2>):<EOL><INDENT>_bmap.append(self._read_binary(<NUM_LIT:8>))<EOL><DEDENT>opt['<STR_LIT>'] = tuple(_bmap)<EOL><DEDENT>_plen = _size - _clen * <NUM_LIT:4> - <NUM_LIT:8><EOL>if _plen:<EOL><INDENT>self._read_fileng(_plen)<EOL><DEDENT>return opt<EOL>
Read HOPOPT CALIPSO option.

        Structure of HOPOPT CALIPSO option [RFC 5570]:
            ------------------------------------------------------------
            | Next Header | Hdr Ext Len   | Option Type | Option Length|
            +-------------+---------------+-------------+--------------+
            |             CALIPSO Domain of Interpretation             |
            +-------------+---------------+-------------+--------------+
            | Cmpt Length |  Sens Level   |     Checksum (CRC-16)      |
            +-------------+---------------+-------------+--------------+
            |      Compartment Bitmap (Optional; variable length)      |
            +-------------+---------------+-------------+--------------+

            Octets      Bits        Name                        Description
              0           0     hopopt.calipso.type         Option Type
              0           0     hopopt.calipso.type.value   Option Number
              0           0     hopopt.calipso.type.action  Action (00)
              0           2     hopopt.calipso.type.change  Change Flag (0)
              1           8     hopopt.calipso.length       Length of Option Data
              2          16     hopopt.calipso.domain       CALIPSO Domain of Interpretation
              6          48     hopopt.calipso.cmpt_len     Cmpt Length
              7          56     hopopt.calipso.level        Sens Level
              8          64     hopopt.calipso.chksum       Checksum (CRC-16)
              9          72     hopopt.calipso.bitmap       Compartment Bitmap