<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_home(self, code, *, desc):
 """Read HOPOPT Home Address option. Structure of HOPOPT Home Address option [RFC 6275]: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option Type | Option Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Home Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Octets Bits Name Description 0 0 hopopt.home.type Option Type 0 0 hopopt.home.type.value Option Number 0 0 hopopt.home.type.action Action (11) 0 2 hopopt.home.type.change Change Flag (0) 1 8 hopopt.home.length Length of Option Data 2 16 hopopt.home.ip Home Address """

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

        opt = dict(
            desc=desc,
            type=_type,
            length=_size + 2,
            ip=ipaddress.ip_address(_addr),
        )

        return opt