[Python-Dev] PEP 3144 review.

Peter Moody peter at hda3.com
Sun Sep 27 02:28:49 CEST 2009


On Sat, Sep 26, 2009 at 4:27 PM, Daniel Stutzbach
<daniel at stutzbachenterprises.com> wrote:
> On Sat, Sep 26, 2009 at 4:57 PM, DrKJam <drkjam at gmail.com> wrote:
>>
>> 2009/9/26 Daniel Stutzbach <daniel at stutzbachenterprises.com>
>>>
>>> On Sat, Sep 26, 2009 at 2:07 PM, DrKJam <drkjam at gmail.com> wrote:
>>>>
>>>> The current version of the PEP and reference implementation do not
>>>> mention or deal with IPv4 classful addressing (A, B, C, D and E). It would
>>>> be good to know if any of this (admittedly older yet no less important)
>>>> functionality is going to be supported. If the library is to concentrate
>>>> solely on classless addressing (i.e. CIDR) please can this be stated in
>>>> future revisions of the PEP.

I'll call this out in the PEP if necessary.  As mentioned elsewhere,
classful addressing is so long deprecated that I would expect it to
cause confusion if it was assumed.

>>> Classful addressing was deprecated more than 15 years ago!
>>>
>>> Quoting RFC 4632: "With the full deployment of CIDR on the Internet, such
>>> scenarios are no longer operationally relevant."
>>
>> Interesting as evidence of classful IPv4 behaviour seems fairly pervasive
>> in current IP stacks and software that supports IPv4 addressing (e.g.
>> PostgreSQL inet and cidr data types).
>
> PostgreSQL's inet type stores a host address and optionally a network mask.
> It's cidr type stores a network address and mask.  Neither of them are
> classful.
>
>>
>> Here's an excerpt from the 'ifconfig' man page (taken from an Ubuntu 9.04
>> install) :-
>> netmask addr
>>
>> Set the IP network mask for this interface. This value defaults to the
>> usual class A, B or C network mask (as derived from the interface IP
>> address). but it can be set to any value.
>
> Since the network mask can be set to any legal value, that means it's stored
> as CIDR.  It falls back on the classful network mask as a default.
> Undoubtedly that was useful when ifconfig was updated for CIDR.  There were
> still many classful networks and it needed to retain backward
> compatibility.  After all, ifconfig is around 25 years old, and CIDR is only
> 16.
>
> Today, all IP networks are classless (CIDR), and a system administrator
> would have to do extra work to figure out if the default value happened to
> be just right for the network they're setting up.
>
>>
>>  The point being that you can't always assume /32 implicitly for all use
>> cases.
>
> Certainly, which is why the user can explicitly set the netmask.
>
>>
>> Here is how IP addresses without an explicit prefix or netmask are
>> currently handled :-
>>
>> >>> import ipaddr
>> >>> ipaddr.IPv4Network('10.0.0.1')
>> IPv4Network('10.0.0.1/32')
>>
>> It may not be something we want to support (you could always force the end
>> user to specify a prefix or netmask explicitly). This is fair enough, but
>> let's indicate that it's a considered choice. Somewhere in the PEP text is
>> might be a good place for treatment of this topic.
>
> +1 on forcing the user to specify a netmask explicitly and documenting it.

-(1/0) forcing a user to include a prefixlen when creating a network
object doesn't actually serve any useful purpose. when dealing with
network objects, it's very useful (and common) to assume a /32 prefix
length when none is supplied.

Cheers,
/peter

> --
> Daniel Stutzbach, Ph.D.
> President, Stutzbach Enterprises, LLC
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe:
> http://mail.python.org/mailman/options/python-dev/python-dev%40hda3.com
>
>


More information about the Python-Dev mailing list