]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Conf: Bytestrings with hex: should use the same general format as ones without.
authorOndrej Zajicek <santiago@crfreenet.org>
Fri, 6 Oct 2023 00:36:59 +0000 (02:36 +0200)
committerOndrej Zajicek <santiago@crfreenet.org>
Fri, 6 Oct 2023 02:59:47 +0000 (04:59 +0200)
Either hex:01234567, or hex:01:23:45:67. No confusing formats like
hex:0123:4567:ab:cdef, which looks like there is an implicit zero byte.

conf/cf-lex.l
doc/bird.sgml
lib/strtoul.c

index 0fa4628a4ff90e08235f2561958ad6844ba3125f..2f95f2e137b2296c01e22b7805d2996ea65c0165 100644 (file)
@@ -242,7 +242,7 @@ WHITE [ \t]
   return IP4;
 }
 
-({XIGIT}{2}){16,}|{XIGIT}{2}(:{XIGIT}{2}){15,}|hex:({XIGIT}{2}(:?{XIGIT}{2})*)? {
+({XIGIT}{2}){16,}|{XIGIT}{2}(:{XIGIT}{2}){15,}|hex:({XIGIT}{2}*|{XIGIT}{2}(:{XIGIT}{2})*) {
   char *s = yytext;
   struct adata *bs;
 
index d5bc8d5701b5ee4e9fffacbd7ddb27d11a4f6156..eb8205d5b7cbe5a95b5a01eb9a39a41b5afdc6e2 100644 (file)
@@ -1561,22 +1561,18 @@ in the foot).
        This is a sequences of arbitrary bytes. There are no ways to modify
        bytestrings in filters. You can pass them between function, assign
        them to variables of type <cf/bytestring/, print such values,
-       compare bytestings (<cf/=, !=/). Bytestring literals are written
-       in several ways:
+       compare bytestings (<cf/=, !=/).
 
-       A sequence of hexadecimal digit pairs, optionally colon-separated.
-       A bytestring specified this way must be at least 16 bytes (32 digits)
-       long: <cf/01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef/ or
-       <cf/0123456789abcdef0123456789abcdef/.
-
-       A sequence of hexadecimal digit pairs of any lengh (including zero)
-       with the <cf/hex:/ prefix. Colon separators can be inserted
-       arbitrarily between any bytes: <cf/hex:/, <cf/hex:1234/,
-       <cf/hex:1234:56:78/.
+       Bytestring literals are written as a sequence of hexadecimal digit
+       pairs, optionally colon-separated. A bytestring specified this way
+       must be either at least 16 bytes (32 digits) long, or prefixed by the
+       <cf/hex:/ prefix: <cf/01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef/,
+       <cf/0123456789abcdef0123456789abcdef/, <cf/hex:/, <cf/hex:12:34:56/,
+       <cf/hex:12345678/.
 
        A bytestring can be made from a hex string using <cf/from_hex()/
-       function. Source strings can use any number of colons, hyphens and
-       spaces as byte separators: <cf/from_hex(" 1234 56:78 ab-cd-ef ")/.
+       function. Source strings can use any number of dots, colons, hyphens
+       and spaces as byte separators: <cf/from_hex(" 12.34 56:78 ab-cd-ef ")/.
 
        <tag><label id="type-ip">ip</tag>
        This type can hold a single IP address. The IPv4 addresses are stored as
@@ -5006,7 +5002,7 @@ definitions, prefix definitions and DNS definitions:
 
        <label id="radv-custom-option-exam">
 <p><code>
-custom option type 38 value hex:0e10:2001:0db8:000a:000b:0000:0000;
+custom option type 38 value hex:0e:10:20:01:0d:b8:00:0a:00:0b:00:00:00:00;
 </code>
 
        <tag><label id="radv-trigger">trigger <m/prefix/</tag>
index e0c0142f8ab4d1276420231af322048d793e49f4..420931a40d9baa5a28cb35b55bdae3d7e441bbe8 100644 (file)
@@ -87,7 +87,7 @@ bstrhextobin(const char *s, byte *b)
     int v = fromxdigit(*s);
     if (v < 0)
     {
-      if (strchr(" :-", *s) && !hi)
+      if (strchr(" -.:", *s) && !hi)
        continue;
       else
        return -1;