def _read_opt_ra(self, code, *, desc):
_type = self._read_opt_type(code)<EOL>_size = self._read_unpack(<NUM_LIT:1>)<EOL>if _size != <NUM_LIT:2>:<EOL><INDENT>raise ProtocolError(f'<STR_LIT>')<EOL><DEDENT>_rval = self._read_unpack(<NUM_LIT:2>)<EOL>if <NUM_LIT:4> <= _rval <= <NUM_LIT>:<EOL><INDENT>_dscp = f'<STR_LIT>'   <EOL><DEDENT>elif <NUM_LIT> <= _rval <= <NUM_LIT>:<EOL><INDENT>_dscp = f'<STR_LIT>'            <EOL><DEDENT>elif <NUM_LIT> <= _rval <= <NUM_LIT>:<EOL><INDENT>_dscp = '<STR_LIT>'                     <EOL><DEDENT>else:<EOL><INDENT>_dscp = _ROUTER_ALERT.get(_rval, '<STR_LIT>')<EOL><DEDENT>opt = dict(<EOL>desc=desc,<EOL>type=_type,<EOL>length=_size + <NUM_LIT:2>,<EOL>value=_rval,<EOL>alert=_dscp,<EOL>)<EOL>return opt<EOL>
Read IPv6_Opts Router Alert option.

        Structure of IPv6_Opts Router Alert option [RFC 2711]:
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            |0 0 0|0 0 1 0 1|0 0 0 0 0 0 1 0|        Value (2 octets)       |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

            Octets      Bits        Name                        Description
              0           0     ipv6_opts.ra.type           Option Type
              0           0     ipv6_opts.ra.type.value     Option Number
              0           0     ipv6_opts.ra.type.action    Action (00)
              0           2     ipv6_opts.ra.type.change    Change Flag (0)
              1           8     ipv6_opts.opt.length        Length of Option Data
              2          16     ipv6_opts.ra.value          Value