On Fri, Jan 6, 2017 at 3:51 PM, Vitaly Burovoy <vitaly.buro...@gmail.com>
wrote:

> On 1/4/17, Haribabu Kommi <kommi.harib...@gmail.com> wrote:
> > On Tue, Nov 29, 2016 at 8:36 PM, Haribabu Kommi <
> kommi.harib...@gmail.com>
> > wrote:
> >> Updated patch attached with added cast function from macaddr8 to
> >> macaddr.
> >>
> >> Currently there are no support for cross operators. Is this required
> >> to be this patch only or can be handled later if required?
> >>
> >
> > Updated patch attached to address the duplicate OID problem.
> > There are no other functional changes to the previous patch.
>
> Hello,
>
> several thoughts about the patch:
>
>
Thanks for the review.


> Documentation:
> 1.
> +     The remaining six input formats are not part of any standard.
> Which ones (remaining six formats)?
>

Updated the documentation to point to correct six formats.

2.
> + <function>trunc(<type>macaddr8</type>)</function></literal> returns a
> MAC
> +   address with the last 3 bytes set to zero.
> It is a misprinting or a copy-paste error.
> The implementation and the standard says that the last five bytes are
> set to zero and the first three are left as is.
>

Fixed.


> 3.
> + for lexicographical ordering
> I'm not a native English speaker, but I'd say just "for ordering"
> since there are no words, it is just a big number with a special
> input/output format.
>

Changed accordingly.


> The code:
> 4.
> +       if ((a == 0) && (b == 0) && (c == 0) && (d == 0)
> +                       && (e == 0) && (f == 0) && (g == 0) && (h == 0))
> ...
> +       if ((a == 255) && (b == 255) && (c == 255) && (d == 255)
> +                       && (e == 255) && (f == 255) && (g == 255) && (h ==
> 255))
> The standard forbids these values from using in real hardware, no
> reason to block them as input data.
> Moreover these values can be stored as a result of binary operations,
> users can dump them but can not restore.
>

Ok. Removed the above code that blocks the input.


>
> 5.
> +       if (!eight_byte_address)
> +       {
> +               result->d = 0xFF;
> ...
>
> Don't you think the next version is simplier (all sscanf for macaddr6
> skip "d" and "e")?
>
> +       count = sscanf(str, "%x:%x:%x:%x:%x:%x%1s",
> +                                  &a, &b, &c, &f, &g, &h, junk);
> ...
> +       if (!eight_byte_address)
> +       {
> +               d = 0xFF;
> +               e = 0xFE;
> +       }
> +       result->a = a;
> +       result->b = b;
> +       result->c = c;
> +       result->d = d;
> +       result->e = e;
> +       result->f = f;
> +       result->g = g;
> +       result->h = h;
>
> Also:
> +       if (buf->len == 6)
> +       {
> +               addr->d = 0xFF;
> +               addr->e = 0xFE;
> +               addr->f = pq_getmsgbyte(buf);
> +               addr->g = pq_getmsgbyte(buf);
> +               addr->h = pq_getmsgbyte(buf);
> +       }
> +       else
> +       {
> +               addr->d = pq_getmsgbyte(buf);
> +               addr->e = pq_getmsgbyte(buf);
> +               addr->f = pq_getmsgbyte(buf);
> +               addr->g = pq_getmsgbyte(buf);
> +               addr->h = pq_getmsgbyte(buf);
> +       }
>
> can be written as:
> +       if (buf->len == 6)
> +       {
> +               addr->d = 0xFF;
> +               addr->e = 0xFE;
> +       }
> +       else
> +       {
> +               addr->d = pq_getmsgbyte(buf);
> +               addr->e = pq_getmsgbyte(buf);
> +       }
> +       addr->f = pq_getmsgbyte(buf);
> +       addr->g = pq_getmsgbyte(buf);
> +       addr->h = pq_getmsgbyte(buf);
>
> but it is only my point of view (don't need to pay close attention
> that only those two bytes are written differently, not the last tree
> ones), it is not an error.
>

Updated as per you suggestion.


> 6.
> +                                errmsg("macaddr8 out of range to convert
> to macaddr")));
> I think a hint should be added which values are allowed to convert to
> "macaddr".
>

Added the hint message to explain in detail about addresses that are
eligible for
conversion from macaddr8 type to macaddr.

7.
> +DATA(insert (  829     774    4123 i f ));
> +DATA(insert (  774  829           4124 i f ));
> It is a nitpicking, but try to use tabs as in the code around.
> (tab between "774" and "829" and space instead of tab between "829" and
> "4124").
>

Done the indentation to correct the problem.


> 8.
> +#define hibits(addr) \
> +  ((unsigned long)(((addr)->a<<24)|((addr)->b<<16)|((addr)->c<<8)))
> +
> +#define lobits(addr) \
> +  ((unsigned long)(((addr)->d<<16)|((addr)->e<<8)|((addr)->f)))
> +
> +#define lobits_extra(addr) \
> +  ((unsigned long)((addr)->g<<8)|((addr)->h))
>
> I mentioned that fitting all 4 bytes is a wrong idea[1]
> > The macros "hibits" should be 3 octets long, not 4;
>
> ... but now I do not think so (there is no UB[2] because source and
> destination are not signed).
> Moreover you've already fill in "hibits" the topmost byte by shifting by
> 24.
> If you use those two macros ("hibits" and "lobits") it allows to avoid
> two extra comparisons in macaddr8_cmp_internal.
> Version from the "macaddr64_poc.patch" is correct.
>
>
> [1]https://www.postgresql.org/message-id/CAKOSWNng9_+=
> fvo6oz4tgv1kkhmom11ankihbokpuzki1ca...@mail.gmail.com
> [2]http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1817.htm



Corrected.

Updated patch is attached.

Regards,
Hari Babu
Fujitsu Australia

Attachment: mac_eui64_support_5.patch
Description: Binary data

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to