ASDOT started out as sort of a joke, but unfortunately gained some
popularity in the 2010s with the rise of 4-byte ASNs and some people
thinking "cute, I can write my longish number in a shorter exotic
notation".
Then, many operators came to realize that using a '.' (dot) in places
which used to be simple integers is quite annoying (for example when
regular expressions also are in play), and more fundamentally: why go
through the trouble of using a complicated syntax when you can just
write number itself?
Perhaps time to bring ASDOT to the gardenshed? :-)
Kind regards,
Job
Index: bgpd.conf.5
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/bgpd.conf.5,v
retrieving revision 1.230
diff -u -p -r1.230 bgpd.conf.5
--- bgpd.conf.5 24 Jan 2023 14:13:11 -0000 1.230
+++ bgpd.conf.5 29 Jan 2023 13:53:02 -0000
@@ -127,17 +127,9 @@ for Latin America and the Caribbean
for Europe, the Middle East, and parts of Asia
.El
.Pp
-The AS numbers 64512 \(en 65534 are designated for private use.
+The AS numbers 64496 \(en 65534 and 4200000000 \(en 4294967294 are designated
+for private use.
The AS number 23456 is reserved and should not be used.
-4-byte AS numbers may be specified in either the ASPLAIN format:
-.Bd -literal -offset indent
-AS 196618
-.Ed
-.Pp
-or in the older ASDOT format:
-.Bd -literal -offset indent
-AS 3.10
-.Ed
.Pp
.It Ic connect-retry Ar seconds
Set the number of seconds to wait before attempting to re-open
@@ -1991,7 +1983,7 @@ Communities are encoded as
.Ar as-number : Ns Ar local .
Four-octet encoding is used if the
.Ar as-number
-is bigger than 65535 or if the AS_DOT encoding is used.
+is bigger than 65535.
IPv4 Address Specific Extended Communities are encoded as
.Ar IP : Ns Ar local .
Opaque Extended Communities are encoded with a single numeric value.
Index: parse.y
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/parse.y,v
retrieving revision 1.440
diff -u -p -r1.440 parse.y
--- parse.y 24 Jan 2023 14:13:11 -0000 1.440
+++ parse.y 29 Jan 2023 13:53:02 -0000
@@ -242,7 +242,7 @@ typedef struct {
%token NE LE GE XRANGE LONGER MAXLEN MAX
%token <v.string> STRING
%token <v.number> NUMBER
-%type <v.number> asnumber as4number as4number_any optnumber
+%type <v.number> asnumber as4number optnumber
%type <v.number> espah family safi restart origincode nettype
%type <v.number> yesno inout restricted expires enforce
%type <v.number> validity aspa_validity
@@ -297,39 +297,7 @@ asnumber : NUMBER {
}
}
-as4number : STRING {
- const char *errstr;
- char *dot;
- uint32_t uvalh = 0, uval;
-
- if ((dot = strchr($1,'.')) != NULL) {
- *dot++ = '\0';
- uvalh = strtonum($1, 0, USHRT_MAX, &errstr);
- if (errstr) {
- yyerror("number %s is %s", $1, errstr);
- free($1);
- YYERROR;
- }
- uval = strtonum(dot, 0, USHRT_MAX, &errstr);
- if (errstr) {
- yyerror("number %s is %s", dot, errstr);
- free($1);
- YYERROR;
- }
- free($1);
- } else {
- yyerror("AS %s is bad", $1);
- free($1);
- YYERROR;
- }
- if (uvalh == 0 && (uval == AS_TRANS || uval == 0)) {
- yyerror("AS %u is reserved and may not be used",
- uval);
- YYERROR;
- }
- $$ = uval | (uvalh << 16);
- }
- | asnumber {
+as4number : asnumber {
if ($1 == AS_TRANS || $1 == 0) {
yyerror("AS %u is reserved and may not be used",
(uint32_t)$1);
@@ -339,38 +307,6 @@ as4number : STRING {
}
;
-as4number_any : STRING {
- const char *errstr;
- char *dot;
- uint32_t uvalh = 0, uval;
-
- if ((dot = strchr($1,'.')) != NULL) {
- *dot++ = '\0';
- uvalh = strtonum($1, 0, USHRT_MAX, &errstr);
- if (errstr) {
- yyerror("number %s is %s", $1, errstr);
- free($1);
- YYERROR;
- }
- uval = strtonum(dot, 0, USHRT_MAX, &errstr);
- if (errstr) {
- yyerror("number %s is %s", dot, errstr);
- free($1);
- YYERROR;
- }
- free($1);
- } else {
- yyerror("AS %s is bad", $1);
- free($1);
- YYERROR;
- }
- $$ = uval | (uvalh << 16);
- }
- | asnumber {
- $$ = $1;
- }
- ;
-
string : string STRING {
if (asprintf(&$$, "%s %s", $1, $2) == -1)
fatal("string: asprintf");
@@ -460,8 +396,8 @@ as_set : ASSET STRING '{' optnl {
free($2);
}
-as_set_l : as4number_any { add_as_set($1); }
- | as_set_l comma as4number_any { add_as_set($3); }
+as_set_l : asnumber { add_as_set($1); }
+ | as_set_l comma asnumber { add_as_set($3); }
prefixset : PREFIXSET STRING '{' optnl {
if ((curpset = new_prefix_set($2, 0)) == NULL) {
@@ -575,7 +511,7 @@ expires : /* empty */ {
$$ = $2;
}
-roa_set_l : prefixset_item SOURCEAS as4number_any expires {
+roa_set_l : prefixset_item SOURCEAS asnumber expires {
if ($1->p.len_min != $1->p.len) {
yyerror("unsupported prefixlen operation in "
"roa-set");
@@ -585,7 +521,7 @@ roa_set_l : prefixset_item SOURCEAS as4n
add_roa_set($1, $3, $1->p.len_max, $4);
free($1);
}
- | roa_set_l comma prefixset_item SOURCEAS as4number_any expires
{
+ | roa_set_l comma prefixset_item SOURCEAS asnumber expires
{
if ($3->p.len_min != $3->p.len) {
yyerror("unsupported prefixlen operation in "
"roa-set");
@@ -630,14 +566,14 @@ aspa_tas_l : aspa_tas { $$ =
$1; }
}
;
-aspa_tas : as4number_any {
+aspa_tas : asnumber {
if (($$ = calloc(1, sizeof(*$$))) == NULL)
fatal(NULL);
$$->as = $1;
$$->aid = AID_UNSPEC;
$$->num = 1;
}
- | as4number_any family {
+ | asnumber family {
if (($$ = calloc(1, sizeof(*$$))) == NULL)
fatal(NULL);
$$->as = $1;
@@ -2337,7 +2273,7 @@ filter_as_l : filter_as
}
;
-filter_as : as4number_any {
+filter_as : asnumber {
if (($$ = calloc(1, sizeof(struct filter_as_l))) ==
NULL)
fatal(NULL);
@@ -2351,7 +2287,7 @@ filter_as : as4number_any {
fatal(NULL);
$$->a.flags = AS_FLAG_NEIGHBORAS;
}
- | equalityop as4number_any {
+ | equalityop asnumber {
if (($$ = calloc(1, sizeof(struct filter_as_l))) ==
NULL)
fatal(NULL);
@@ -2359,7 +2295,7 @@ filter_as : as4number_any {
$$->a.as_min = $2;
$$->a.as_max = $2;
}
- | as4number_any binaryop as4number_any {
+ | asnumber binaryop asnumber {
if (($$ = calloc(1, sizeof(struct filter_as_l))) ==
NULL)
fatal(NULL);