Well the "one address" bit sure :) but given the scale supported by CGNAT systems today, I don't think being able to support an entire country behind a single cluster is that far off. At which point the difficulty becomes "is the 100.64.0.0/10 block big enough"? Or maybe they're using DS-lite for the hauling from private network to the NAT.
Fred
While exploring solutions, I use f or ffto mean “follow-up/to-squash” and a to mean logically separate. Sometimes other (additional) short abbreviations to know where to move, squash, and edit the changes to.
I recently discovered git commit --fixup=abcd1234: it will make a new commit with a message of fixup! <message from abcd1234>. (It's the only special thing that flag does: a specially formatted commit message, which you can craft yourself if you remember the spelling of the fixup! marker.)
When you later rebase, git rebase --interactive --autosquash will automatically mark that commit to be a fixup of abcd1234.
magit for emacs has shortcut for creating a fixup commit selecting the previous commit, I'm sure other interfaces do too.
I guess my commit descriptions get better with project lifetime
I've found that too, which I think is because as the project matures, you're more likely to make fixes or contained features, as opposed to regular "change everything" as you explore the design in a young project.
As @shane@feddit.nl says, you can use the same public port for many different destination address, vendors may call it something like "port overloading".
More importantly, you can install a large pool of public address on your CGNAT. For instance if you install a /20 pool, work with a 100 users / public address multiplexing, you can have 400,000 users on that CGNAT. 100 users / address is a comfortable ratio that will not affect most users. 1000 users / address would be pushing it, but I'm sure some ISP will try it.
If you search for "CGNAT datasheet" for products you can deploy today, the first couple of results:
- https://www.fortinet.com/content/dam/fortinet/assets/data-sheets/fortinet-cgnat-solution.pdf Fortinet claiming 1.8 billion concurrent TCP sessions, supporting 25 million new TCP session/s
- https://www.f5.com/pdf/products/big-ip-cgnat-datasheet.pdf F5 claiming "Scales up to 310 Gbps of throughput at Layer 7 with over 480 million concurrent sessions"
- https://www.a10networks.com/wp-content/uploads/A10-DS-Thunder-CGN.pdf A10 Thunder 8665S 800 million concurrent TCP sessions
This is the behaviour of inet_aton, which ping uses to translate ASCII representations of IPv4 addresses to a 32 bit number. Its manpage: https://man7.org/linux/man-pages/man3/inet_aton.3.html
It recognizes the usual quad decimal notation of course, but also addresses of the form a.b.c or a.b, or in this instance, a, with is taken to be a 32bit number.
Each part can also be written in hex or octal, with the right prefix, such that 10.012.0x800a is as valid form for 10.10.128.10.
Not all software use inet _aton to translate ASCII addresses. inet_pton for instance (which understands both v4 and v6) doesn't
Inside the lambda expression you can have a comprehension to unpack the keys list to get the same sort of uplet as your "manual" example, like this:
>>> items = [{"core_name": "a", "label": "b"},{"core_name": "c", "label": "d"}, ]
>>> keys = ["core_name", "label"]
>>> tuple(items[0][k] for k in keys)
('a', 'b')
>>> sorted(items, key=lambda d: tuple(d[k] for k in keys))
[{'core_name': 'a', 'label': 'b'}, {'core_name': 'c', 'label': 'd'}]
I actually had to look it up when writing that post, I think I searched for "garden gate lock" at first :)
Offering a crate as a safe and cosy space to relax, sleep, etc. is recommended by the RSPCA (and the Dog Trust, Battersea, and many more).
In normal use it's fitted with a small mattress, vet bed, toys (that I didn't show because I didn't make those myself).
A standard poodle. In that picture he hadn't had his first trim yet, so he's showing gloriously fluffy puppy hair
Since I have a few pictures and you're asking nicely 😃 I opened another post: https://programming.dev/post/25943048
The second thing I mentionned were some shelves that had to fit in a very specific spot, but I don't have pictures to hand
As a beginner who mostly learned from the University of YouTube, I hear you, it was more involved and messier work than I thought it'd be
We're a couple months later, I ended up doing a second small project, this time I used half tung oil half orang oil, and adjusted my technique: wiped with a clean rag after application, and I think the room was warmer them last time.
Got better results, more even and it didn't take 2+ weeks for the first coat to cure (more like a few days).
Thanks for the advice 🙂





Don't forget the tech giants are all IPv6 enabled. Google Netflix Apple xhamster Facebook Microsoft are all reachable over v6.