Index | Thread | Search

From:
dns@strangeloop.cc
Subject:
BGPd "prepend-as" feature
To:
tech@openbsd.org
Date:
Wed, 20 May 2026 11:13:49 +0300

Download raw body.

Thread
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 .