grout-frr - Man Page

Introduction

This guide demonstrates how to configure FRR (Free Range Routing) and Linux networking to establish BGP peering between Grout and an upstream router, without assigning IP addresses directly to the Linux interface.

Context

By default, FRR daemons such as bgpd require binding to a local IP address to accept incoming peer connections. This necessitates explicitly adding all Grout "local" IPs to the gr-loop0 interface. However, this approach is cumbersome and not ideal.

The objective is to run bgpd without assigning any IP address to the gr-loop0 network device. This is achieved by utilizing the IP_TRANSPARENT socket option and FRR's capability to bind to a specific interface.

PACKETS FROM GROUT TO gr-loop0

All packets received to a local IP configured in grout will be processed by the node ip_input_local/ip6_input_local. If the protocol isn't handled locally (ICMP, Neighbor Disc, ...), the packets are forwarded to l4_input_local. If still unhandled (e.g., VXLAN Tunnel), the packet is sent to the corresponding gr-loopX interface associated with the VRF.

FRR Configuration Overview

Zebra must be run with the -M option to load the plugin: Edit the file /etc/frr/daemons, for example:

  zebra_options="  -A 127.0.0.1 -s 90000000 -M dplane_grout"

And the corresponding frr.conf:

  service integrated-vtysh-config
  !
  interface cv0
  	ip address 192.168.210.1/24
  exit
  !
  router bgp 64513
  	neighbor 192.168.210.3 remote-as 64513
  	neighbor 192.168.210.3 interface gr-loop0
  	neighbor 192.168.210.3 update-source 192.168.210.1
  exit
  !
  end

Two additional configurations for a neighbor are required:

With that configuration, BGP messages are properly exchanged, and routes are visible in grout:

  vtysh# show bgp summary

IPv4 Unicast Summary:
BGP router identifier 192.168.211.0, local AS number 64513 VRF default vrf-id 0
BGP table version 15
RIB entries 28, using 3584 bytes of memory
Peers 2, using 47 KiB of memory

Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt Desc
192.168.210.3   4      64513        50        48       15    0    0 00:43:31           14        2 N/A

Total number of neighbors 1
  grout# route show
  VRF  DESTINATION        NEXT_HOP
  0    192.168.1.0/24     type=L3 id=10 iface=p0 vrf=0 origin=bgp af=IPv4 addr=192.168.210.3 state=new
  0    192.168.2.0/24     type=L3 id=10 iface=p0 vrf=0 origin=bgp af=IPv4 addr=192.168.210.3 state=new
  0    192.168.11.254/32  type=L3 id=10 iface=p0 vrf=0 origin=bgp af=IPv4 addr=192.168.210.3 state=new
  0    192.168.11.0/24    type=L3 id=10 iface=p0 vrf=0 origin=bgp af=IPv4 addr=192.168.210.3 state=new
  0    192.168.20.0/24    type=L3 id=10 iface=p0 vrf=0 origin=bgp af=IPv4 addr=192.168.210.3 state=new
  0    192.168.94.0/24    type=L3 id=10 iface=p0 vrf=0 origin=bgp af=IPv4 addr=192.168.210.3 state=new
  0    192.168.95.0/24    type=L3 id=10 iface=p0 vrf=0 origin=bgp af=IPv4 addr=192.168.210.3 state=new
  0    192.168.200.0/24   type=L3 id=10 iface=p0 vrf=0 origin=bgp af=IPv4 addr=192.168.210.3 state=new
  0    192.168.201.0/24   type=L3 id=10 iface=p0 vrf=0 origin=bgp af=IPv4 addr=192.168.210.3 state=new
  0    192.168.203.0/24   type=L3 id=10 iface=p0 vrf=0 origin=bgp af=IPv4 addr=192.168.210.3 state=new
  0    192.168.210.0/24   type=L3 iface=p0 vrf=0 origin=link af=IPv4 addr=192.168.210.1/24 mac=f0:0d:ac:dc:00:00 static local link
  0    192.168.211.0/24   type=L3 iface=p1 vrf=0 origin=link af=IPv4 addr=192.168.211.1/24 mac=f0:0d:ac:dc:00:01 static local link
  0    192.168.239.0/24   type=L3 id=10 iface=p0 vrf=0 origin=bgp af=IPv4 addr=192.168.210.3 state=new
  0    192.168.254.0/24   type=L3 id=10 iface=p0 vrf=0 origin=bgp af=IPv4 addr=192.168.210.3 state=new
  0    192.168.255.10/32  type=L3 id=10 iface=p0 vrf=0 origin=bgp af=IPv4 addr=192.168.210.3 state=new

Authors

Created by Christophe Fontaine Updated by Maxime Leroy

Info

2025-12-12