Re: Small mrouted improvements

Russell Howe <[email protected]> Sat, 18 Jul 2026 08:46:25 +0100
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
On Wed, Jul 15, 2026 at 04:39:11PM +0200, Alexander Bluhm wrote:
> On Sun, Jun 28, 2026 at 12:48:34PM +0100, Russell Howe wrote:
> > I saw a couple of opportunities to improve mrouted's output.
> > 
> > First, if SIOCGETVIFCNT fails, it's useful to know the error code and
> > which vif it failed for:
> > 
> 
> I have commited this part.

Thanks!

> > Second, when logging the ratelimit for a multicast peer, include the
> > units.
> > 
> 
> Man page says unit is kilo bit per second.
> Kernel feature was removed here:
> https://github.com/openbsd/src/commit/9500e0064b973fbd2fac185909ed03e90413f2e2
> 
> Would it be better to remove the remains of rate limit in the daemon?

Indeed it would. Tunnel support was also removed, so I'll prep a patch
for that too.

Whitespace in the mrouted source is a bit all over the place, with a mix
of tabs and spaces somewhat at random - do we want to do anything about
that?

Here's the removal of ratelimit support:

diff --git usr.sbin/mrouted/cfparse.y usr.sbin/mrouted/cfparse.y
index d8872cfb9ca..f5b81aff53d 100644
--- usr.sbin/mrouted/cfparse.y
+++ usr.sbin/mrouted/cfparse.y
@@ -87,7 +87,7 @@ int numbounds = 0;			/* Number of named boundaries */
 %token CACHE_LIFETIME PRUNING
 %token PHYINT TUNNEL NAME
 %token DISABLE IGMPV1 SRCRT
-%token METRIC THRESHOLD RATE_LIMIT BOUNDARY NETMASK ALTNET
+%token METRIC THRESHOLD BOUNDARY NETMASK ALTNET
 %token <num> BOOLEAN
 %token <num> NUMBER
 %token <ptr> STRING
@@ -171,7 +171,6 @@ stmt	: error
 			v = &uvifs[numvifs];
 			v->uv_flags	= VIFF_TUNNEL;
 			v->uv_metric	= DEFAULT_METRIC;
-			v->uv_rate_limit= DEFAULT_TUN_RATE_LIMIT;
 			v->uv_threshold	= DEFAULT_THRESHOLD;
 			v->uv_lcl_addr	= $2;
 			v->uv_rmt_addr	= $3;
@@ -192,9 +191,8 @@ stmt	: error
 		tunnelmods
 					{
 			logit(LOG_INFO, 0,
-			    "installing tunnel from %s to %s as vif #%u - rate=%d",
-			    inet_fmt($2, s1), inet_fmt($3, s2),
-			    numvifs, v->uv_rate_limit);
+			    "installing tunnel from %s to %s as vif #%u",
+			    inet_fmt($2, s1), inet_fmt($3, s2), numvifs);
 
 			++numvifs;
 					}
@@ -286,15 +284,6 @@ mod	: THRESHOLD NUMBER	{ if ($2 < 1 || $2 > 255)
 
 		    warn("Expected number after metric keyword, ignored");
 
-				}
-	| RATE_LIMIT NUMBER	{ if ($2 > MAX_RATE_LIMIT)
-				    fatal("Invalid rate_limit %d",$2);
-				  v->uv_rate_limit = $2;
-				}
-	| RATE_LIMIT		{
-
-		    warn("Expected number after rate_limit keyword, ignored");
-
 				}
 	| BOUNDARY bound	{
 
@@ -463,8 +452,6 @@ yylex(void)
 		return METRIC;
 	if (!strcmp(q,"threshold"))
 		return THRESHOLD;
-	if (!strcmp(q,"rate_limit"))
-		return RATE_LIMIT;
 	if (!strcmp(q,"srcrt") || !strcmp(q,"sourceroute"))
 		return SRCRT;
 	if (!strcmp(q,"boundary"))
diff --git usr.sbin/mrouted/config.c usr.sbin/mrouted/config.c
index 9ba913f577f..d66bfbe5e34 100644
--- usr.sbin/mrouted/config.c
+++ usr.sbin/mrouted/config.c
@@ -88,7 +88,6 @@ config_vifs_from_kernel(void)
 	v  = &uvifs[numvifs];
 	v->uv_flags       = 0;
 	v->uv_metric      = DEFAULT_METRIC;
-	v->uv_rate_limit  = DEFAULT_PHY_RATE_LIMIT;
 	v->uv_threshold   = DEFAULT_THRESHOLD;
 	v->uv_lcl_addr    = addr;
 	v->uv_rmt_addr    = 0;
@@ -101,9 +100,9 @@ config_vifs_from_kernel(void)
 	v->uv_acl         = NULL;
 	v->uv_addrs	  = NULL;
 
-	logit(LOG_INFO,0,"installing %s (%s on subnet %s) as vif #%u - rate=%d",
+	logit(LOG_INFO,0,"installing %s (%s on subnet %s) as vif #%u",
 	    v->uv_name, inet_fmt(addr, s1), inet_fmts(subnet, mask, s2),
-	    numvifs, v->uv_rate_limit);
+	    numvifs);
 
 	++numvifs;
 
diff --git usr.sbin/mrouted/dvmrp.h usr.sbin/mrouted/dvmrp.h
index 18cc3732a34..7f168e9a397 100644
--- usr.sbin/mrouted/dvmrp.h
+++ usr.sbin/mrouted/dvmrp.h
@@ -163,10 +163,6 @@
 #define DEFAULT_METRIC		1	/* default subnet/tunnel metric     */
 #define DEFAULT_THRESHOLD	1	/* default subnet/tunnel threshold  */
 
-#define MAX_RATE_LIMIT		100000	/* max rate limit		    */
-#define DEFAULT_PHY_RATE_LIMIT  0	/* default phyint rate limit	    */
-#define DEFAULT_TUN_RATE_LIMIT	500	/* default tunnel rate limit	    */
-
 #define DEFAULT_CACHE_LIFETIME	300	/* kernel route entry discard time  */
 #define GRAFT_TIMEOUT_VAL	5	/* retransmission time for grafts   */
 
diff --git usr.sbin/mrouted/kern.c usr.sbin/mrouted/kern.c
index 2c0154d3276..ff9d195283b 100644
--- usr.sbin/mrouted/kern.c
+++ usr.sbin/mrouted/kern.c
@@ -123,7 +123,7 @@ void k_add_vif(vifi_t vifi, struct uvif *v)
     vc.vifc_vifi            = vifi;
     vc.vifc_flags           = v->uv_flags & VIFF_KERNEL_FLAGS;
     vc.vifc_threshold       = v->uv_threshold;
-    vc.vifc_rate_limit	    = v->uv_rate_limit;
+    vc.vifc_rate_limit	    = 0;
     vc.vifc_lcl_addr.s_addr = v->uv_lcl_addr;
     vc.vifc_rmt_addr.s_addr = v->uv_rmt_addr;
 
diff --git usr.sbin/mrouted/mrouted.8 usr.sbin/mrouted/mrouted.8
index 8463f2e508f..f45d1a6f544 100644
--- usr.sbin/mrouted/mrouted.8
+++ usr.sbin/mrouted/mrouted.8
@@ -154,7 +154,6 @@ There are five types of configuration commands:
 .Op Cm disable
 .br
 .Op Cm metric Ar m
-.Op Cm rate_limit Ar b
 .Op Cm threshold Ar t
 .It
 .Cm pruning
@@ -169,7 +168,6 @@ There are five types of configuration commands:
 .Ar boundary-name | scoped-addr Ns / Ns Ar mask-len
 .Oc
 .Op Cm metric Ar m
-.Op Cm rate_limit Ar b
 .Op Cm threshold Ar t
 .El
 .Pp
@@ -253,12 +251,6 @@ Metrics should be kept as small as possible, because
 .Nm
 cannot route along paths with a sum of metrics greater than 31.
 .Pp
-.Cm rate_limit
-allows the network administrator to specify a
-certain bandwidth in Kbits/second which would be allocated to multicast
-traffic.
-It defaults to 500Kbps on tunnels, and 0 (unlimited) on physical interfaces.
-.Pp
 .Cm threshold
 is the minimum IP time-to-live required for a multicast datagram
 to be forwarded to the given interface or tunnel.
@@ -309,10 +301,7 @@ phyint 172.16.12.38 boundary EE altnet 172.16.15.0/26
 phyint atm0 disable
 #
 # This is an internal tunnel to another EE subnet.
-# Remove the default tunnel rate limit, since this
-# tunnel is over Ethernets.
 tunnel 192.168.5.4 192.168.55.101 metric 1 threshold 1
-	rate_limit 0
 #
 # This is our tunnel to the outside world.
 # Careful with those boundaries, Eugene.
diff --git usr.sbin/mrouted/vif.c usr.sbin/mrouted/vif.c
index d8ae8805b0d..6cf97c93b18 100644
--- usr.sbin/mrouted/vif.c
+++ usr.sbin/mrouted/vif.c
@@ -1265,11 +1265,11 @@ dump_vifs(FILE *fp)
     "\nVirtual Interface Table\n%s",
     "Vif  Name  Local-Address                               ");
     fprintf(fp,
-    "M  Thr  Rate   Flags\n");
+    "M  Thr  Flags\n");
 
     for (vifi = 0, v = uvifs; vifi < numvifs; vifi++, v++) {
 
-	fprintf(fp, "%2u %6s  %-15s %6s: %-18s %2u %3u  %5u  ",
+	fprintf(fp, "%2u %6s  %-15s %6s: %-18s %2u %3u  ",
 		vifi,
 		v->uv_name,
 		inet_fmt(v->uv_lcl_addr, s1),
@@ -1280,8 +1280,7 @@ dump_vifs(FILE *fp)
 			inet_fmt(v->uv_rmt_addr, s2) :
 			inet_fmts(v->uv_subnet, v->uv_subnetmask, s3),
 		v->uv_metric,
-		v->uv_threshold,
-		v->uv_rate_limit);
+		v->uv_threshold);
 
 	if (v->uv_flags & VIFF_ONEWAY)   fprintf(fp, " one-way");
 	if (v->uv_flags & VIFF_DOWN)     fprintf(fp, " down");
diff --git usr.sbin/mrouted/vif.h usr.sbin/mrouted/vif.h
index bb3a0f05b06..21bfe0453af 100644
--- usr.sbin/mrouted/vif.h
+++ usr.sbin/mrouted/vif.h
@@ -19,7 +19,6 @@
 struct uvif {
     u_short	     uv_flags;	    /* VIFF_ flags defined below            */
     u_char	     uv_metric;     /* cost of this vif                     */
-    u_int	     uv_rate_limit; /* rate limit on this vif               */
     u_char	     uv_threshold;  /* min ttl required to forward on vif   */
     u_int32_t	     uv_lcl_addr;   /* local address of this vif            */
     u_int32_t	     uv_rmt_addr;   /* remote end-point addr (tunnels only) */



-- 
Russell Howe
[email protected]