OSPF supports several instances and they work fine. But to run the second or more instances need to manually run ospfd with key -n 1. For example: run default instance: #cat /etc/rc.conf |grep frr frr_enable="YES" frr_daemons="zebra ospfd" #/usr/local/etc/rc.d/frr start run ospd with instance 1: /usr/local/sbin/ospfd -d -n 1 run ospd with instance 1: /usr/local/sbin/ospfd -d -n 2222. And so on. This is well described in this commit: https://github.com/CumulusNetworks/quagga/commit/7c8ff89e9346227f0e721f7686d4c4d58f9c9135
https://github.com/FRRouting/frr/commit/e6f1b8310336f669062f5d75f5d4ed03690687f0 On frr add documentation about OSPF instance
FRR's RC script is quiet complex with all the daemons to manage. If you've got an idea to add multiple OSPF instances to this mess: your ideas are welcome!
(In reply to Olivier Cochard from comment #2) Hello! I thought for a long time how to organize this and recently through experiments I have achieved some results. My ideas lead to the likeness of VRF in FreeBSD, not only for ospfd, but and for other daimons (staticd, bgpd ..). First thing we need to implement my idea is to add the line net.fibs=16 to the /boot/loader.conf file (or write this option in the kernel config and recompile the kernel). The following action is to add to the start script add the option frr_fib="1,2,3, .. 15" Next, in the start script, need while cycle that start all copies of daemons in your FIB using the set fib utility with the option -N 1 ... -N 15 In addition, we need to create a directory for the configurations of each FIB table: /usr/local/etc/frr/1 /usr/local/etc/frr/... /usr/local/etc/frr/15 /var/run/frr/1/ /var/run/frr/... /var/run/frr/15/ To connect VRF, we need to add a key for vtysh -N and id FIB. Information from man frr-zebra: -N, --pathspace pathspace Insert pathspace into all default paths, changing the defaults to: /etc/frr/pathspace/<daemon>.conf /var/run/frr/pathspace/<daemon>.pid /var/run/frr/pathspace/<daemon>.vty /var/run/frr/pathspace/zserv.api ´.´ and ´/´ characters will not be accepted in pathspace, but the empty string will be accepted. Note that this only changes the respective defaults, it has no effect on the respective path if the -f, -i, -z or –vty_socket options are used. The purpose of this option is to easily group all file system related bits together for running multiple fully-separate “logical routers” on a system, particularly with Linux network namespaces. Groups of daemons running with distinct pathspace values will be completely unaware of each other and not interact in any way. This option does not do any system setup (like network namespaces.) This must be done by the user, for example by running: ip netns exec namespace <daemon> -N namespace Below are the logs of my experiments: [root@nas5 /home/pautina]# setfib 1 /usr/local/sbin/staticd -d -N 1 [root@nas5 /usr/local/etc]# ps -aux |grep frr frr 1624 0,0 0,0 70336 8952 - Is 23:50 0:00,01 /usr/local/sbin/zebra -d frr 1728 0,0 0,0 97684 9320 - Is 00:02 0:00,01 /usr/local/sbin/zebra -d -N 1 frr 1734 0,0 0,0 42192 7592 - Is 00:03 0:00,00 /usr/local/sbin/staticd -d -N 1 root 1743 0,0 0,0 11308 2600 0 R+ 00:05 0:00,00 grep frr [root@nas5 /home/pautina]# vtysh -N 1 Hello, this is FRRouting (version 7.3). Copyright 1996-2005 Kunihiro Ishiguro, et al. nas1.istec.net.ua# show ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued route, r - rejected route S>* 10.0.0.1/32 [1/0] unreachable (blackhole), 00:00:06 S>* 10.0.0.10/32 [1/0] unreachable (blackhole), 00:00:06 C>* 192.168.254.0/24 [0/1] is directly connected, igb0, 00:00:10 nas1.istec.net.ua# wr Note: this version of vtysh never writes vtysh.conf Building Configuration... Configuration saved to /usr/local/etc/frr/1/zebra.conf Configuration saved to /usr/local/etc/frr/1/staticd.conf nas1.istec.net.ua# [root@nas5 /home/pautina]# netstat -rn -F1 Routing tables (fib: 1) Internet: Destination Gateway Flags Netif Expire 10.0.0.1/32 127.0.0.1 UG1B lo0 10.0.0.10/32 127.0.0.1 UG1B lo0 127.0.0.1 link#5 UH lo0 192.168.254.0/24 00:25:90:62:e8:bc US igb0 [root@nas5 /home/pautina]# netstat -rn -F0 Routing tables Internet: Destination Gateway Flags Netif Expire default 192.168.254.1 UGS igb0 127.0.0.1 link#5 UH lo0 192.168.254.0/24 link#1 U igb0 192.168.254.76 link#1 UHS lo0 [root@nas5 /home/pautina]# If you are interested in my idea - please help to implement this functionality through rc.d script frr