def read_hip(self, length, extension):
if length is None:<EOL><INDENT>length = len(self)<EOL><DEDENT>_next = self._read_protos(<NUM_LIT:1>)<EOL>_hlen = self._read_unpack(<NUM_LIT:1>)<EOL>_type = self._read_binary(<NUM_LIT:1>)<EOL>if _type[<NUM_LIT:0>] != '<STR_LIT:0>':<EOL><INDENT>raise ProtocolError('<STR_LIT>')<EOL><DEDENT>_vers = self._read_binary(<NUM_LIT:1>)<EOL>if _vers[<NUM_LIT:7>] != '<STR_LIT:1>':<EOL><INDENT>raise ProtocolError('<STR_LIT>')<EOL><DEDENT>_csum = self._read_fileng(<NUM_LIT:2>)<EOL>_ctrl = self._read_binary(<NUM_LIT:2>)<EOL>_shit = self._read_unpack(<NUM_LIT:16>)<EOL>_rhit = self._read_unpack(<NUM_LIT:16>)<EOL>hip = dict(<EOL>next=_next,<EOL>length=(_hlen + <NUM_LIT:1>) * <NUM_LIT:8>,<EOL>type=_HIP_TYPES.get(int(_type[<NUM_LIT:1>:], base=<NUM_LIT:2>), '<STR_LIT>'),<EOL>version=int(_vers[:<NUM_LIT:4>], base=<NUM_LIT:2>),<EOL>chksum=_csum,<EOL>control=dict(<EOL>anonymous=True if int(_ctrl[<NUM_LIT:15>], base=<NUM_LIT:2>) else False,<EOL>),<EOL>shit=_shit,<EOL>rhit=_rhit,<EOL>)<EOL>_prml = _hlen - <NUM_LIT><EOL>if _prml:<EOL><INDENT>parameters = self._read_hip_para(_prml, version=hip['<STR_LIT:version>'])<EOL>hip['<STR_LIT>'] = parameters[<NUM_LIT:0>]   <EOL>hip.update(parameters[<NUM_LIT:1>])           <EOL><DEDENT>length -= hip['<STR_LIT>']<EOL>hip['<STR_LIT>'] = self._read_packet(header=hip['<STR_LIT>'], payload=length)<EOL>if extension:<EOL><INDENT>self._protos = None<EOL>return hip<EOL><DEDENT>return self._decode_next_layer(hip, _next, length)<EOL>
Read Host Identity Protocol.

        Structure of HIP header [RFC 5201][RFC 7401]:
             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
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            | Next Header   | Header Length |0| Packet Type |Version| RES.|1|
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            |          Checksum             |           Controls            |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            |                Sender's Host Identity Tag (HIT)               |
            |                                                               |
            |                                                               |
            |                                                               |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            |               Receiver's Host Identity Tag (HIT)              |
            |                                                               |
            |                                                               |
            |                                                               |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            |                                                               |
            /                        HIP Parameters                         /
            /                                                               /
            |                                                               |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

            Octets      Bits        Name                    Description
              0           0     hip.next                Next Header
              1           8     hip.length              Header Length
              2          16     -                       Reserved (0)
              2          17     hip.type                Packet Type
              3          24     hip.version             Version
              3          28     -                       Reserved
              3          31     -                       Reserved (1)
              4          32     hip.chksum              Checksum
              6          48     hip.control             Controls
              8          64     hip.shit                Sender's Host Identity Tag
              24        192     hip.rhit                Receiver's Host Identity Tag
              40        320     hip.parameters          HIP Parameters