Download raw body.
BGPd "prepend-as" feature
Hi guys!
I thought I'd post this, been hanging around for awhile, just in case if
any maintainer is interested. :)
On my network, I "need" the ability to prepend a specific AS number for
some routes so I made these additions.
TIA,
Dennis
OpenBSD (alpha) since 2001
--- rde_filter.c.orig Fri Oct 20 22:39:00 2023
+++ rde_filter.c Thu Oct 3 21:46:12 2024
@@ -125,6 +125,14 @@
state->aspath.aspath = aspath_get(np, nl);
free(np);
break;
+ case ACTION_SET_PREPEND_AS:
+ prep_as = set->action.id;
+ np = aspath_prepend(state->aspath.aspath, prep_as,
+ 1, &nl);
+ aspath_put(state->aspath.aspath);
+ state->aspath.aspath = aspath_get(np, nl);
+ free(np);
+ break;
case ACTION_SET_AS_OVERRIDE:
if (from == NULL)
break;
@@ -609,6 +617,11 @@
a->action.prepend == b->action.prepend)
continue;
break;
+ case ACTION_SET_PREPEND_AS:
+ if (a->type == b->type &&
+ a->action.id == b->action.id)
+ continue;
+ break;
case ACTION_SET_AS_OVERRIDE:
if (a->type == b->type)
continue;
@@ -717,6 +730,8 @@
return ("prepend-self");
case ACTION_SET_PREPEND_PEER:
return ("prepend-peer");
+ case ACTION_SET_PREPEND_AS:
+ return ("prepend-as");
case ACTION_SET_AS_OVERRIDE:
return ("as-override");
case ACTION_SET_NEXTHOP:
--- parse.y.orig Wed May 20 10:24:41 2026
+++ parse.y Fri May 2 12:35:28 2025
@@ -264,8 +264,8 @@
%token ASPASET ROASET ORIGINSET OVS AVS EXPIRES
%token ASSET SOURCEAS TRANSITAS PEERAS PROVIDERAS CUSTOMERAS MAXASLEN
MAXASSEQ
%token SET LOCALPREF MED METRIC NEXTHOP REJECT BLACKHOLE NOMODIFY SELF
-%token PREPEND_SELF PREPEND_PEER PFTABLE WEIGHT RTLABEL ORIGIN PRIORITY
-%token ERROR INCLUDE
+%token PREPEND_SELF PREPEND_PEER PREPEND_AS PFTABLE WEIGHT RTLABEL
ORIGIN
+%token PRIORITY ERROR INCLUDE
%token IPSEC ESP AH SPI IKE
%token IPV4 IPV6 EVPN
%token QUALIFY VIA
@@ -3322,6 +3322,12 @@
$$->type = ACTION_SET_PREPEND_SELF;
$$->action.prepend = $2;
}
+ | PREPEND_AS NUMBER {
+ if (($$ = calloc(1, sizeof(struct filter_set))) == NULL)
+ fatal(NULL);
+ $$->type = ACTION_SET_PREPEND_AS;
+ $$->action.id = $2;
+ }
| PREPEND_PEER NUMBER {
if ($2 < 0 || $2 > 128) {
yyerror("bad number of prepends");
@@ -3656,6 +3662,7 @@
{ "prefix", PREFIX },
{ "prefix-set", PREFIXSET },
{ "prefixlen", PREFIXLEN },
+ { "prepend-as", PREPEND_AS},
{ "prepend-neighbor", PREPEND_PEER },
{ "prepend-self", PREPEND_SELF },
{ "priority", PRIORITY },
--- bgpd.conf.5.orig Wed May 20 10:28:10 2026
+++ bgpd.conf.5 Tue Oct 28 13:52:52 2025
@@ -2358,6 +2358,12 @@
times to the
.Em AS path .
.Pp
+.It Ic prepend-as Ar number
+Prepend AS
+.Ar number
+to the
+.Em AS path .
+.Pp
.It Ic rtlabel Ar label
Add the prefix to the kernel routing table with the specified
.Ar label .
BGPd "prepend-as" feature