On 10/12/16, Vitaly Burovoy <vitaly.buro...@gmail.com> wrote: > On 10/12/16, Alvaro Herrera <alvhe...@2ndquadrant.com> wrote: >> Julien Rouhaud wrote: >>> On 12/10/2016 14:32, Alvaro Herrera wrote: >>> > Julien Rouhaud wrote: >>> > >>> >> and you can instead make macaddr64 support both format, and provide a >>> >> macaddr::macaddr64 cast >>> > >>> > Having macaddr64 support both formats sounds nice, but how does it >>> > work? >>> > Will we have to reserve one additional bit to select the >>> > representation? >>> > That would make the type be 65 bits which is a clear loser IMO. >>> > >>> > Is it allowed to just leave 16 bits as zeroes which would indicate >>> > that >>> > the address is EUI48? I wouldn't think so ... >>> >>> From what I read, you can indicate it's an EUI-48 address by storing >>> FF:FF (or FF:FE for MAC-48) in 4th and 5th bytes of the EUI-64 address. >> >> That seems reasonable at first glance; so the new type would be able to >> store both 48-bit and 64-bit values, and there would be assignment casts >> in both directions > > I think either "macaddr" should be renamed to "macaddr6" (saved its > oid), a new type "macaddr8" is added with introducing a new alias > "macaddr" or the current "macaddr" should accept both versions as the > "inet" type does. > > The function "macaddr_recv" can distinguish them by the > StringInfoData.len member, "macaddr_in" - by number of parts split by > ":". > The "macaddr_out" and "macaddr_send" can out 6 octets if the stored > value is mapped to MAC-48. > Storing can be done always as 8 bytes using the rule above. > > In the other case there is hard from user's PoV to detect at the > design stage when it is necessary to define column as macaddr and when > to macaddr8. > If users need to update a column type (a new hardware appears with > EUI-64 address), they should keep in mind that all things are changed > for the new column type - stored procedure's parameters, application > code interacting with the DB etc.). > I don't agree with Tom's proposal to introduce a new type, it would be > inconvenient for users. > > We have types "int2", "int4", "int8" and an alias "int" for a type > "int4", at least psql does not show it: > postgres=# \dT+ int > List of data types > Schema | Name | Internal name | Size | Elements | Owner | Access > privileges | Description > --------+------+---------------+------+----------+-------+-------------------+------------- > (0 rows) > > It is understandable to have 3 types for integers because most space > of the DB occupied by them and in the real life we just don't use big > numbers, but cases for "inet" and "macaddr" are different. > >> and a suite of operators to enable interoperability >> of 48-bit values in macaddr8 with values in type macaddr. Right? >> >> (The cast function from macaddr8 to macaddr would raise error if the >> 4th and 5th bytes are not either FF:FF or FF:FE -- I don't think we can >> in practice distinguish EUI-48 from MAC-48 in this context. > > The wikipedia says[1] they are the same things but MAC-48 is an > obsolete term for a special case, so there is no necessary to > distinguish them. > >> The cast in the other direction would have no restriction and should >> probably always use FF:FE). > > [1] > https://en.wikipedia.org/wiki/Organizationally_unique_identifier#48-bit_Media_Access_Control_Identifier_.28MAC-48.29
Haribabu Kommi, why have you read enough about EUI-64? Your function "macaddr64_trunc" sets 4 lower bytes as 0 whereas (according to the Wikipedia, but I can look for a standard) 3 bytes are still define an OUI (organizationally unique identifier), so truncation should be done for 5, not 4 lower octets. The macros "hibits" should be 3 octets long, not 4; "lobits" --- 5 bytes, not 4. In the other case your comparisons fail. What document have you used to write the patch? Are short form formats correct in macaddr64_in? P.S.: I still think it is a good idea to change storage format, macaddr_{in,out,send,recv}, fill 4th and 5th bytes if necessary; change "lobits" macros and add new fields to bit operation functions. It avoids a new type, casting, comparison functions between macaddr6 and macaddr8 etc. Proposed patch is mostly copy-paste of mac.c -- Best regards, Vitaly Burovoy -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers