If we do this, i think the as-path loop detection needs to also check for these additional ASes.
Otherwise we create a nice loop when we get our own route from an ebgp neighbor with this as in the path. Peter Hessler(phess...@openbsd.org) on 2016.09.26 20:09:13 +0200: > We already have a local AS saved per peer. Let's use it. This is very > useful when one needs to change their local AS. > > " > neighbor 192.0.2.1 { > remote-as 65530 > local-as 131000 > } > " > > OK? > > > Index: parse.y > =================================================================== > RCS file: /cvs/openbsd/src/usr.sbin/bgpd/parse.y,v > retrieving revision 1.288 > diff -u -p -u -p -r1.288 parse.y > --- parse.y 21 Jun 2016 21:35:24 -0000 1.288 > +++ parse.y 26 Sep 2016 14:46:23 -0000 > @@ -175,7 +175,7 @@ typedef struct { > %token RDOMAIN RD EXPORTTRGT IMPORTTRGT > %token RDE RIB EVALUATE IGNORE COMPARE > %token GROUP NEIGHBOR NETWORK > -%token REMOTEAS DESCR LOCALADDR MULTIHOP PASSIVE MAXPREFIX RESTART > +%token LOCALAS REMOTEAS DESCR LOCALADDR MULTIHOP PASSIVE MAXPREFIX > RESTART > %token ANNOUNCE CAPABILITIES REFRESH AS4BYTE CONNECTRETRY > %token DEMOTE ENFORCE NEIGHBORAS REFLECTOR DEPEND DOWN SOFTRECONFIG > %token DUMP IN OUT SOCKET RESTRICTED > @@ -1004,6 +1004,9 @@ peeroptsl : peeropts nl > peeropts : REMOTEAS as4number { > curpeer->conf.remote_as = $2; > } > + | LOCALAS as4number { > + curpeer->conf.local_as = $2; > + } > | DESCR string { > if (strlcpy(curpeer->conf.descr, $2, > sizeof(curpeer->conf.descr)) >= > @@ -2249,6 +2252,7 @@ lookup(char *s) > { "key", KEY}, > { "listen", LISTEN}, > { "local-address", LOCALADDR}, > + { "local-as", LOCALAS}, > { "localpref", LOCALPREF}, > { "log", LOG}, > { "match", MATCH}, > Index: printconf.c > =================================================================== > RCS file: /cvs/openbsd/src/usr.sbin/bgpd/printconf.c,v > retrieving revision 1.97 > diff -u -p -u -p -r1.97 printconf.c > --- printconf.c 13 Jul 2016 20:07:38 -0000 1.97 > +++ printconf.c 26 Sep 2016 17:41:58 -0000 > @@ -365,6 +365,8 @@ print_peer(struct peer_config *p, struct > printf("%s\trib \"%s\"\n", c, p->rib); > if (p->remote_as) > printf("%s\tremote-as %s\n", c, log_as(p->remote_as)); > + if (p->local_as != conf->as) > + printf("%s\tlocale-as %s\n", c, log_as(p->local_as)); > if (p->down) > printf("%s\tdown\n", c); > if (p->distance > 1) > Index: session.c > =================================================================== > RCS file: /cvs/openbsd/src/usr.sbin/bgpd/session.c,v > retrieving revision 1.354 > diff -u -p -u -p -r1.354 session.c > --- session.c 3 Sep 2016 16:22:17 -0000 1.354 > +++ session.c 26 Sep 2016 17:47:59 -0000 > @@ -1461,7 +1461,7 @@ session_open(struct peer *p) > if (p->capa.ann.as4byte) { /* 4 bytes data */ > u_int32_t nas; > > - nas = htonl(conf->as); > + nas = htonl(p->conf.local_as); > errs += session_capa_add(opb, CAPA_AS4BYTE, sizeof(nas)); > errs += ibuf_add(opb, &nas, sizeof(nas)); > } > @@ -2120,7 +2120,7 @@ parse_open(struct peer *peer) > /* if remote-as is zero and it's a cloned neighbor, accept any */ > if (peer->template && !peer->conf.remote_as && as != AS_TRANS) { > peer->conf.remote_as = as; > - peer->conf.ebgp = (peer->conf.remote_as != conf->as); > + peer->conf.ebgp = (peer->conf.remote_as != peer->conf.local_as); > if (!peer->conf.ebgp) > /* force enforce_as off for iBGP sessions */ > peer->conf.enforce_as = ENFORCE_AS_OFF; > @@ -3074,7 +3074,7 @@ session_template_clone(struct peer *p, s > > if (as) { > p->conf.remote_as = as; > - p->conf.ebgp = (p->conf.remote_as != conf->as); > + p->conf.ebgp = (p->conf.remote_as != p->conf.local_as); > if (!p->conf.ebgp) > /* force enforce_as off for iBGP sessions */ > p->conf.enforce_as = ENFORCE_AS_OFF; > Index: bgpd.conf.5 > =================================================================== > RCS file: /cvs/openbsd/src/usr.sbin/bgpd/bgpd.conf.5,v > retrieving revision 1.146 > diff -u -p -u -p -r1.146 bgpd.conf.5 > --- bgpd.conf.5 17 Aug 2016 08:14:40 -0000 1.146 > +++ bgpd.conf.5 26 Sep 2016 18:03:06 -0000 > @@ -855,6 +855,10 @@ is given, > .Xr bgpd 8 > binds to this address first. > .Pp > +.It Ic local-as Ar as-number > +Set the AS number sent to the remote system. > +Intended to be used temporarily, for migrations to another AS. > +.Pp > .It Ic log no > Disable neighbor specific logging. > .Pp > > > > -- > "But I don't like Spam!!!!" >