def _read_para_dh_group_list(self, code, cbit, clen, *, desc, length, version):
        """Read HIP DH_GROUP_LIST parameter.

        Structure of HIP DH_GROUP_LIST parameter [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
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            |             Type              |             Length            |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            | DH GROUP ID #1| DH GROUP ID #2| DH GROUP ID #3| DH GROUP ID #4|
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            | DH GROUP ID #n|                Padding                        |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

            Octets      Bits        Name                    Description
              0           0     dh_group_list.type      Parameter Type
              1          15     dh_group_list.critical  Critical Bit
              2          16     dh_group_list.length    Length of Contents
              4          32     dh_group_list.id        DH GROUP ID

        """
        _dhid = list()
        for _ in range(clen):
            _dhid.append(_GROUP_ID.get(self._read_unpack(1), 'Unassigned'))

        dh_group_list = dict(
            type=desc,
            critical=cbit,
            length=clen,
            id=tuple(_dhid),
        )

        _plen = length - clen
        if _plen:
            self._read_fileng(_plen)

        return dh_group_list