def _read_mode_route(self, size, kind):
if size < <NUM_LIT:3> or (size - <NUM_LIT:3>) % <NUM_LIT:4> != <NUM_LIT:0>:<EOL><INDENT>raise ProtocolError(f'<STR_LIT>')<EOL><DEDENT>_rptr = self._read_unpack(<NUM_LIT:1>)<EOL>if _rptr < <NUM_LIT:4>:<EOL><INDENT>raise ProtocolError(f'<STR_LIT>')<EOL><DEDENT>data = dict(<EOL>kind=kind,<EOL>type=self._read_opt_type(kind),<EOL>length=size,<EOL>pointer=_rptr,<EOL>)<EOL>counter = <NUM_LIT:4><EOL>address = list()<EOL>endpoint = min(_rptr, size)<EOL>while counter < endpoint:<EOL><INDENT>counter += <NUM_LIT:4><EOL>address.append(self._read_ipv4_addr())<EOL><DEDENT>data['<STR_LIT>'] = address or None<EOL>return data<EOL>
Read options with route data.

        Positional arguments:
            * size - int, length of option
            * kind - int, 7/131/137 (RR/LSR/SSR)

        Returns:
            * dict -- extracted option with route data

        Structure of these options:
            * [RFC 791] Loose Source Route
                +--------+--------+--------+---------//--------+
                |10000011| length | pointer|     route data    |
                +--------+--------+--------+---------//--------+
            * [RFC 791] Strict Source Route
                +--------+--------+--------+---------//--------+
                |10001001| length | pointer|     route data    |
                +--------+--------+--------+---------//--------+
            * [RFC 791] Record Route
                +--------+--------+--------+---------//--------+
                |00000111| length | pointer|     route data    |
                +--------+--------+--------+---------//--------+

            Octets      Bits        Name                    Description
              0           0     ip.opt.kind             Kind (7/131/137)
              0           0     ip.opt.type.copy        Copied Flag (0)
              0           1     ip.opt.type.class       Option Class (0/1)
              0           3     ip.opt.type.number      Option Number (3/7/9)
              1           8     ip.opt.length           Length
              2          16     ip.opt.pointer          Pointer (≥4)
              3          24     ip.opt.data             Route Data