I'd like to see more clear direction for this. Is it a string manipulation library, or an IP address library?
There are ONLY TWO types of IP representations: 1. Network = 32 bit number AND 32 bit mask. That is the binary AND. The mask needs to be preserved, but not the network portion. Any library should return the ANDed result. Whether the number is 192.186.1.1/24 or 192.168.1.0/24, the result after 'and' is the same. Add a strict=false in case people need it for validation, better yet, add a validation helper function, but always return the proper form. 2. A host address is an IP address with no network info. No mask information, ever. What about Broadcast / Network IDs? The "Network-ID or Network Number" and "Broadcast" are meaningless without context. 1. A network number by itself it's just another address. Its use depends on context. When routing, it needs a mask. > route 10.0.0.0 255.0.0.0 192.168.1.1 > When writing firewall ACLs, it is a host. > access-list aclname permit ip any 192.168.1.2 255.255.255.254 > Since both are valid, preference shouldn't be given. Instead add a helper for firstip. 2. Same story with broadcast. Use depends on context. Add the lastip helper. What does iterating over a network mean? Iterating over the set of addresses in a network must return host addresses. If it returns a network, then the address should be ANDed, but that would return the same number for every iteration. Only returning hosts makes sense. We need to set a solid line between IP String manipulation and IP manipulation. If you want an IP with a mask that isn't a network, then you're not doing IP address manipulation, you're doing string manipulation. There are many use cases for it, but it's a separate consideration to pure IP manipulation. If string manipulation is desirable, then add another standard library called ipstring (or a separate class if you want it all jumbled in the same import). This way real network computing can be done without weird quirks of representation. R.
_______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com