OpenBSD 6
=========================================

Install required packages
-------------------------

Configure PKG\_PATH

::

    export PKG_PATH=http://ftp5.usa.openbsd.org/pub/OpenBSD/$(uname -r)/packages/$(machine -a)/

Add packages:

::

    pkg_add clang libcares python3
    pkg_add git autoconf-2.69p2 automake-1.15.1 libtool bison
    pkg_add gmake json-c py-test py-sphinx libexecinfo protobuf-c

Select Python2.7 as default (required for pytest)

::

    ln -s /usr/local/bin/python2.7 /usr/local/bin/python

.. include:: building-libyang.rst

Get FRR, compile it and install it (from Git)
---------------------------------------------

**This assumes you want to build and install FRR from source and not
using any packages**

Add frr group and user
^^^^^^^^^^^^^^^^^^^^^^

::

    groupadd -g 525 _frr
    groupadd -g 526 _frrvty
    useradd -g 525 -u 525 -c "FRR suite" -G _frrvty \
        -d /nonexistent -s /sbin/nologin _frr

Download Source, configure and compile it
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

(You may prefer different options on configure statement. These are just
an example)

.. warning::

   In openbsd the proper links for the libyang library may not have been created.

::

    ln -s /usr/lib/libyang.so.1.10.17 /usr/lib/libyang.so

.. warning::

   ``openbsd`` since version 6.2 has ``clang`` as the default compiler so to 
   build frr, clang must be used (the included gcc version is very old).

::

    git clone https://github.com/frrouting/frr.git frr
    cd frr
    export AUTOCONF_VERSION="2.69"
    export AUTOMAKE_VERSION="1.15"
    ./bootstrap.sh
    export LDFLAGS="-L/usr/local/lib"
    export CPPFLAGS="-I/usr/local/include"
    ./configure \
        --sysconfdir=/etc \
        --localstatedir=/var \
        --enable-multipath=64 \
        --enable-user=_frr \
        --enable-group=_frr \
        --enable-vty-group=_frrvty \
        --enable-configfile-mask=0640 \
        --enable-logfile-mask=0640 \
        --enable-fpm \
        --with-pkg-git-version \
        --with-pkg-extra-version=-MyOwnFRRVersion \
        CC=clang
    gmake
    gmake check
    doas gmake install

Create empty FRR configuration files
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

::

    doas mkdir /var/frr
    doas chown _frr:_frr /var/frr
    doas chmod 755 /var/frr
    doas mkdir /etc/frr
    doas touch /etc/frr/zebra.conf
    doas touch /etc/frr/bgpd.conf
    doas touch /etc/frr/ospfd.conf
    doas touch /etc/frr/ospf6d.conf
    doas touch /etc/frr/isisd.conf
    doas touch /etc/frr/ripd.conf
    doas touch /etc/frr/ripngd.conf
    doas touch /etc/frr/pimd.conf
    doas touch /etc/frr/ldpd.conf
    doas touch /etc/frr/nhrpd.conf
    doas chown -R _frr:_frr /etc/frr
    doas touch /etc/frr/vtysh.conf
    doas chown -R _frr:_frrvty /etc/frr/vtysh.conf
    doas chmod 750 /etc/frr
    doas chmod 640 /etc/frr/*.conf

Enable IP & IPv6 forwarding
^^^^^^^^^^^^^^^^^^^^^^^^^^^

Add the following lines to the end of ``/etc/rc.conf``:

::

    net.inet6.ip6.forwarding=1      # 1=Permit forwarding of IPv6 packets
    net.inet6.ip6.mforwarding=1     # 1=Permit forwarding of IPv6 multicast packets
    net.inet6.ip6.multipath=1       # 1=Enable IPv6 multipath routing

**Reboot** to apply the config to the system

Enable MPLS Forwarding
^^^^^^^^^^^^^^^^^^^^^^

To enable MPLS forwarding on a given interface, use the following
command:

::

    doas ifconfig em0 mpls

Alternatively, to make MPLS forwarding persistent across reboots, add
the "mpls" keyword in the hostname.\* files of the desired interfaces.
Example:

::

    cat /etc/hostname.em0
    inet 10.0.1.1 255.255.255.0 mpls

Install rc.d init files
^^^^^^^^^^^^^^^^^^^^^^^

(create them in /etc/rc.d - no example are included at this time with
FRR source)

Example (for zebra - store as ``/etc/rc.d/frr_zebra.sh``)

::

    #!/bin/sh
    #
    # $OpenBSD: frr_zebra.rc,v 1.1 2013/04/18 20:29:08 sthen Exp $

    daemon="/usr/local/sbin/zebra -d"

    . /etc/rc.d/rc.subr

    rc_cmd $1

Enable FRR processes
^^^^^^^^^^^^^^^^^^^^

(Enable the required processes only)

::

    echo "frr_zebra=YES" >> /etc/rc.conf
    echo "frr_bgpd=YES" >> /etc/rc.conf
    echo "frr_ospfd=YES" >> /etc/rc.conf
    echo "frr_ospf6d=YES" >> /etc/rc.conf
    echo "frr_isisd=YES" >> /etc/rc.conf
    echo "frr_ripngd=YES" >> /etc/rc.conf
    echo "frr_ripd=YES" >> /etc/rc.conf
    echo "frr_pimd=YES" >> /etc/rc.conf
    echo "frr_ldpd=YES" >> /etc/rc.conf
