A non-transitory computer readable medium having stored therein instructions to be executed by a packet processing unit, PPU, in a communications network to allow a plurality of PPUs in the communications network to independently allocate IP addresses from a shared pool arranged into blocks of IP addresses allocated to the PPUs, the instructions when executed by the PPU cause the PPU to perform a set of operations comprising the steps of: receiving, by the PPU, a request to allocate an IP address to a user entity, UE,, wherein the plurality of PPUs in the communications network collectively maintain a distributed hash table, DHT, the DHT stores a distributed block allocation table, DBAT, and a plurality of distributed address allocation tables, DAATs, wherein the DBAT includes an entry (405A-405E) for each of a plurality of blocks of IP addresses to indicate which of the plurality of blocks are allocated to which of the plurality of PPUs, and wherein each of the plurality of DAATs corresponds to one of the blocks in the DBAT and includes an entry (410A-410E) for each of the IP addresses in that block to indicate which of the IP addresses in that block are allocated to which UEs; choosing, from one of a set of one or more of the blocks of IP addresses currently allocated to the PPU, one of the IP addresses in the block that a locally cached version of the DAAT corresponding to the block indicates as being available; looking up, using a DHT algorithm, which of the plurality of PPUs is responsible for storing the DAAT entry in the DHT for the chosen IP address; causing the PPU responsible for storing the DAAT entry in the DHT for the chosen IP address to update that DAAT entry to indicate that the chosen IP address is allocated to the UE; updating the locally cached version of the DAAT corresponding to the block to indicate that the chosen IP address is allocated to the UE; and allocating the chosen IP address to the UE. receiving, by the PPU, a request to allocate an IP address to a user entity, UE,, wherein the plurality of PPUs in the communications network collectively maintain a distributed hash table, DHT, the DHT stores a distributed block allocation table, DBAT, and a plurality of distributed address allocation tables, DAATs, wherein the DBAT includes an entry (405A-405E) for each of a plurality of blocks of IP addresses to indicate which of the plurality of blocks are allocated to which of the plurality of PPUs, and wherein each of the plurality of DAATs corresponds to one of the blocks in the DBAT and includes an entry (410A-410E) for each of the IP addresses in that block to indicate which of the IP addresses in that block are allocated to which UEs; choosing, from one of a set of one or more of the blocks of IP addresses currently allocated to the PPU, one of the IP addresses in the block that a locally cached version of the DAAT corresponding to the block indicates as being available; looking up, using a DHT algorithm, which of the plurality of PPUs is responsible for storing the DAAT entry in the DHT for the chosen IP address; causing the PPU responsible for storing the DAAT entry in the DHT for the chosen IP address to update that DAAT entry to indicate that the chosen IP address is allocated to the UE; updating the locally cached version of the DAAT corresponding to the block to indicate that the chosen IP address is allocated to the UE; and allocating the chosen IP address to the UE.