<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _read_opt_ra(self, code, *, desc):
 """Read HOPOPT Router Alert option. Structure of HOPOPT 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 hopopt.ra.type Option Type 0 0 hopopt.ra.type.value Option Number 0 0 hopopt.ra.type.action Action (00) 0 2 hopopt.ra.type.change Change Flag (0) 1 8 hopopt.opt.length Length of Option Data 2 16 hopopt.ra.value Value """

        _type = self._read_opt_type(code)
        _size = self._read_unpack(1)
        if _size != 2:
            raise ProtocolError(f'{self.alias}: [Optno {code}] invalid format')
        _rval = self._read_unpack(2)

        if 4 <= _rval <= 35:
            _dscp = f'Aggregated Reservation Nesting Level {_rval-4}'   # [RFC 3175]
        elif 36 <= _rval <= 67:
            _dscp = f'QoS NSLP Aggregation Level {_rval-36}'            # [RFC 5974]
        elif 65503 <= _rval <= 65534:
            _dscp = 'Reserved for experimental use'                     # [RFC 5350]
        else:
            _dscp = _ROUTER_ALERT.get(_rval, 'Unassigned')

        opt = dict(
            desc=desc,
            type=_type,
            length=_size + 2,
            value=_rval,
            alert=_dscp,
        )

        return opt