def _read_mptcp_add(self, bits, size, kind):
        """Read Add Address option.

        Positional arguments:
            * bits - str, 4-bit data
            * size - int, length of option
            * kind - int, 30 (Multipath TCP)

        Returns:
            * dict -- extracted Add Address (ADD_ADDR) option

        Structure of ADD_ADDR [RFC 6824]:
                                 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
            +---------------+---------------+-------+-------+---------------+
            |     Kind      |     Length    |Subtype| IPVer |  Address ID   |
            +---------------+---------------+-------+-------+---------------+
            |          Address (IPv4 - 4 octets / IPv6 - 16 octets)         |
            +-------------------------------+-------------------------------+
            |   Port (2 octets, optional)   |
            +-------------------------------+

            Octets      Bits        Name                        Description
              0           0     tcp.mp.kind                 Kind (30)
              1           8     tcp.mp.length               Length
              2          16     tcp.mp.subtype              Subtype (3)
              2          20     tcp.mp.addaddr.ipver        IP Version
              3          24     tcp.mp.addaddr.addrid       Address ID
              4          32     tcp.mp.addaddr.addr         IP Address (4/16)
              8-20   64-160     tcp.mp.addaddr.port         Port (optional)

        """
        vers = int(bits, base=2)
        adid = self._read_unpack(1)
        ipad = self._read_fileng(4) if vers == 4 else self._read_fileng(16)
        ip_l = 4 if vers == 4 else 16
        pt_l = size - 1 - ip_l
        port = self._read_unpack(2) if pt_l else None

        data = dict(
            kind=kind,
            length=size + 1,
            subtype='ADD_ADDR',
            addaddr=dict(
                ipver=vers,
                addrid=adid,
                addr=ipaddress.ip_address(ipad),
                port=port,
            ),
        )

        return data
Read Add Address option.

        Positional arguments:
            * bits - str, 4-bit data
            * size - int, length of option
            * kind - int, 30 (Multipath TCP)

        Returns:
            * dict -- extracted Add Address (ADD_ADDR) option

        Structure of ADD_ADDR [RFC 6824]:
                                 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
            +---------------+---------------+-------+-------+---------------+
            |     Kind      |     Length    |Subtype| IPVer |  Address ID   |
            +---------------+---------------+-------+-------+---------------+
            |          Address (IPv4 - 4 octets / IPv6 - 16 octets)         |
            +-------------------------------+-------------------------------+
            |   Port (2 octets, optional)   |
            +-------------------------------+

            Octets      Bits        Name                        Description
              0           0     tcp.mp.kind                 Kind (30)
              1           8     tcp.mp.length               Length
              2          16     tcp.mp.subtype              Subtype (3)
              2          20     tcp.mp.addaddr.ipver        IP Version
              3          24     tcp.mp.addaddr.addrid       Address ID
              4          32     tcp.mp.addaddr.addr         IP Address (4/16)
              8-20   64-160     tcp.mp.addaddr.port         Port (optional)