summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorkardel <kardel@pkgsrc.org>2020-12-10 16:43:24 +0000
committerkardel <kardel@pkgsrc.org>2020-12-10 16:43:24 +0000
commit1770c1d6e03a63f57ceeed1d64285f399dd7feb3 (patch)
tree935c715a7ff6a617bf9f1e88630e40e8e39ae3e4 /net
parent64ed1b5f9230e07372250110928ddbb878437249 (diff)
downloadpkgsrc-1770c1d6e03a63f57ceeed1d64285f399dd7feb3.tar.gz
net/frr: import frr-7.5
FRRouting ========= FRR is free software that implements and manages various IPv4 and IPv6 routing protocols. It runs on nearly all distributions of Linux and BSD as well as Solaris and supports all modern CPU architectures. FRR currently supports the following protocols: * BGP * OSPFv2 * OSPFv3 * RIPv1 * RIPv2 * RIPng * IS-IS ...
Diffstat (limited to 'net')
-rw-r--r--net/frr/DESCR17
-rw-r--r--net/frr/MESSAGE11
-rw-r--r--net/frr/Makefile116
-rw-r--r--net/frr/PLIST319
-rw-r--r--net/frr/distinfo9
-rwxr-xr-xnet/frr/files/staticd.sh27
-rw-r--r--net/frr/options.mk25
-rw-r--r--net/frr/patches/patch-pkgsrc_zebra.sh.in16
-rw-r--r--net/frr/patches/patch-zebra_ioctl.c116
-rw-r--r--net/frr/patches/patch-zebra_kernel__socket.c30
10 files changed, 686 insertions, 0 deletions
diff --git a/net/frr/DESCR b/net/frr/DESCR
new file mode 100644
index 00000000000..a553bdffe7e
--- /dev/null
+++ b/net/frr/DESCR
@@ -0,0 +1,17 @@
+FRRouting
+=========
+
+FRR is free software that implements and manages various IPv4 and IPv6 routing
+protocols. It runs on nearly all distributions of Linux and BSD as well as
+Solaris and supports all modern CPU architectures.
+
+FRR currently supports the following protocols:
+
+* BGP
+* OSPFv2
+* OSPFv3
+* RIPv1
+* RIPv2
+* RIPng
+* IS-IS
+...
diff --git a/net/frr/MESSAGE b/net/frr/MESSAGE
new file mode 100644
index 00000000000..34e81176e2e
--- /dev/null
+++ b/net/frr/MESSAGE
@@ -0,0 +1,11 @@
+===========================================================================
+$NetBSD: MESSAGE,v 1.1 2020/12/10 16:43:24 kardel Exp $
+
+IMPORTANT:
+To complete the installation you need to add
+the user "${FRR_USER}" to the (secondary) group "${FRR_VTY_GROUP}".
+
+You can find some example config files in
+${PREFIX}/share/examples/frr
+
+===========================================================================
diff --git a/net/frr/Makefile b/net/frr/Makefile
new file mode 100644
index 00000000000..48865735559
--- /dev/null
+++ b/net/frr/Makefile
@@ -0,0 +1,116 @@
+# $NetBSD: Makefile,v 1.1 2020/12/10 16:43:24 kardel Exp $
+
+GITHUB_PROJECT= frr
+VERSION= 7.5
+GITHUB_TAG= frr-${VERSION}
+DISTNAME= frr-${VERSION}
+CATEGORIES= net
+MASTER_SITES= ${MASTER_SITE_GITHUB:=FRRouting/}
+
+MAINTAINER= kardel@NetBSD.org
+HOMEPAGE= https://github.com/FRRouting/frr/
+COMMENT= Frr routing multi protocol suite
+LICENSE= gnu-gpl-v2
+
+CONFLICTS= quagga-[0-9]*
+
+WRKSRC= ${WRKDIR}/frr-frr-${VERSION}
+USE_LANGUAGES= c c++
+USE_TOOLS+= gmake perl bash pkg-config autoconf automake autoreconf
+USE_LIBTOOL= YES
+GNU_CONFIGURE= yes
+BUILD_DEFS= VARBASE
+
+.include "../../mk/bsd.prefs.mk"
+.include "options.mk"
+
+# to pick up the atomic implementation on i386
+.if ${MACHINE_ARCH} == "i386"
+CPPFLAGS+= -march=i586
+.endif
+
+FRR_GROUP?= _frr
+FRR_VTY_GROUP?= frrvty
+
+FRR_USER?= _frr
+FRR_CONF_MODE= 0640
+FRR_CONFDIR_MODE= 0755
+FRR_LOG_MODE= 0640
+
+PKG_SYSCONFDIR_PERMS= ${FRR_USER} ${FRR_VTY_GROUP} ${FRR_CONFDIR_MODE}
+PKG_SYSCONFSUBDIR= frr
+
+PKG_GECOS.${FRR_USER}= FRRouting User
+PKG_HOME.${FRR_USER}= /nonexistent
+PKG_SHELL.${FRR_USER}= /bin/sh
+
+PKG_GROUPS= ${FRR_GROUP} ${FRR_VTY_GROUP}
+PKG_USERS= ${FRR_USER}:${FRR_GROUP}
+
+RCD_SUPPLIED= bgpd ospf6d ospfd ripd ripngd zebra
+RCD_SCRIPTS= ${RCD_SUPPLIED} staticd
+
+.for f in ${RCD_SUPPLIED}
+RCD_SCRIPT_SRC.${f}= ${WRKSRC}/pkgsrc/${f}.sh
+.endfor
+
+CONFIG_TEMPLATE_PATH= share/examples/${PKG_SYSCONFSUBDIR}/configsamples
+
+USE_TOOLS+= bash:run
+REPLACE_BASH= tools/frr.in tools/*.sh.in
+
+REPLACE_PYTHON= tools/generate_support_bundle.py tools/frr-reload.py
+
+MESSAGE_SUBST+= FRR_USER=${FRR_USER}
+MESSAGE_SUBST+= FRR_VTY_GROUP=${FRR_VTY_GROUP}
+
+SUBST_CLASSES+= ids
+SUBST_STAGE.ids= pre-configure
+SUBST_MESSAGE.ids= Fixing user/group references.
+SUBST_FILES.ids= pkgsrc/zebra.sh.in
+SUBST_VARS.ids= FRR_USER FRR_VTY_GROUP
+
+SUBST_CLASSES+= workdir
+SUBST_STAGE.workdir= post-configure
+SUBST_MESSAGE.workdir= Fixing absolute workdir references.
+SUBST_FILES.workdir= lib/version.h
+SUBST_SED.workdir= -e "s,${WRKDIR},"'{WRKDIR},g'
+SUBST_VARS.workdir=
+
+CONFIGURE_ARGS+= --sysconfdir=${PKG_SYSCONFDIR}
+CONFIGURE_ARGS+= --enable-user=${FRR_USER}
+CONFIGURE_ARGS+= --enable-group=${FRR_GROUP}
+CONFIGURE_ARGS+= --enable-exampledir=${PREFIX}/${CONFIG_TEMPLATE_PATH}
+CONFIGURE_ARGS+= --localstatedir=${VARBASE}/run/frr
+CONFIGURE_ARGS+= --enable-multipath=64
+CONFIGURE_ARGS+= --enable-vty-group=${FRR_VTY_GROUP}
+CONFIGURE_ARGS+= --enable-configfile-mask=${FRR_CONF_MODE}
+CONFIGURE_ARGS+= --enable-logfile-mask=${FRR_LOG_MODE}
+CONFIGURE_ARGS+= --enable-fpm
+CONFIGURE_ARGS+= --with-pkg-git-version
+CONFIGURE_ARGS+= --with-pkg-extra-version=/${DISTNAME}
+# CONFIGURE_ARGS+= --enable-address-sanitizer
+
+pre-configure:
+ cd ${WRKSRC} && ${SH} bootstrap.sh
+
+.include "../../devel/libyang/buildlink3.mk"
+.include "../../textproc/json-c/buildlink3.mk"
+.include "../../lang/python/application.mk"
+.include "../../devel/readline/buildlink3.mk"
+
+.include "../../mk/bsd.pkg.mk"
+
+# needs to be here to have ${EGREP} defined
+CONFIG_TEMPLATES!= ${EGREP} ${CONFIG_TEMPLATE_PATH:Q} PLIST 2>/dev/null
+CONF_FILES?=
+
+.for l in ${CONFIG_TEMPLATES}
+. if ${l:C,^${CONFIG_TEMPLATE_PATH}/(.*)\.sample,\1,} == "vtysh.conf"
+CONF_FILES_PERMS+= /dev/null ${PKG_SYSCONFDIR}${l:C,^${CONFIG_TEMPLATE_PATH}(/.*)\.sample,\1,} \
+ ${FRR_USER} ${FRR_VTY_GROUP} ${FRR_CONF_MODE}
+. else
+CONF_FILES_PERMS+= /dev/null ${PKG_SYSCONFDIR}${l:C,^${CONFIG_TEMPLATE_PATH}(/.*)\.sample,\1,} \
+ ${FRR_USER} ${FRR_GROUP} ${FRR_CONF_MODE}
+. endif
+.endfor
diff --git a/net/frr/PLIST b/net/frr/PLIST
new file mode 100644
index 00000000000..c4b4086f093
--- /dev/null
+++ b/net/frr/PLIST
@@ -0,0 +1,319 @@
+@comment $NetBSD: PLIST,v 1.1 2020/12/10 16:43:24 kardel Exp $
+bin/mtracebis
+bin/vtysh
+include/frr/agg_table.h
+include/frr/atomlist.h
+include/frr/bfd.h
+include/frr/bitfield.h
+include/frr/buffer.h
+include/frr/checksum.h
+include/frr/command.h
+include/frr/command_graph.h
+include/frr/command_match.h
+include/frr/compiler.h
+include/frr/csv.h
+include/frr/db.h
+include/frr/debug.h
+include/frr/defaults.h
+include/frr/distribute.h
+include/frr/eigrpd/eigrp_dump.h
+include/frr/eigrpd/eigrp_topology.h
+include/frr/eigrpd/eigrpd.h
+include/frr/ferr.h
+include/frr/filter.h
+include/frr/freebsd-queue.h
+include/frr/frr_pthread.h
+include/frr/frratomic.h
+include/frr/frrcu.h
+include/frr/frrlua.h
+include/frr/frrstr.h
+include/frr/getopt.h
+include/frr/graph.h
+include/frr/hash.h
+include/frr/hook.h
+include/frr/iana_afi.h
+include/frr/id_alloc.h
+include/frr/if.h
+include/frr/if_rmap.h
+include/frr/imsg.h
+include/frr/ipaddr.h
+include/frr/jhash.h
+include/frr/json.h
+include/frr/keychain.h
+include/frr/lib_errors.h
+include/frr/lib_vty.h
+include/frr/libfrr.h
+include/frr/libospf.h
+include/frr/linklist.h
+include/frr/log.h
+include/frr/log_vty.h
+include/frr/md5.h
+include/frr/memory.h
+include/frr/mlag.h
+include/frr/module.h
+include/frr/monotime.h
+include/frr/mpls.h
+include/frr/network.h
+include/frr/nexthop.h
+include/frr/nexthop_group.h
+include/frr/nexthop_group_private.h
+include/frr/northbound.h
+include/frr/northbound_cli.h
+include/frr/northbound_db.h
+include/frr/ns.h
+include/frr/openbsd-queue.h
+include/frr/openbsd-tree.h
+include/frr/ospfapi/ospf_apiclient.h
+include/frr/ospfd/ospf_api.h
+include/frr/ospfd/ospf_asbr.h
+include/frr/ospfd/ospf_dump.h
+include/frr/ospfd/ospf_dump_api.h
+include/frr/ospfd/ospf_ism.h
+include/frr/ospfd/ospf_lsa.h
+include/frr/ospfd/ospf_lsdb.h
+include/frr/ospfd/ospf_nsm.h
+include/frr/ospfd/ospf_opaque.h
+include/frr/ospfd/ospfd.h
+include/frr/pbr.h
+include/frr/plist.h
+include/frr/prefix.h
+include/frr/printfrr.h
+include/frr/privs.h
+include/frr/ptm_lib.h
+include/frr/pullwr.h
+include/frr/pw.h
+include/frr/qobj.h
+include/frr/queue.h
+include/frr/ringbuf.h
+include/frr/route_types.h
+include/frr/routemap.h
+include/frr/routing_nb.h
+include/frr/sbuf.h
+include/frr/seqlock.h
+include/frr/sha256.h
+include/frr/sigevent.h
+include/frr/skiplist.h
+include/frr/smux.h
+include/frr/sockopt.h
+include/frr/sockunion.h
+include/frr/spf_backoff.h
+include/frr/srcdest_table.h
+include/frr/srte.h
+include/frr/srv6.h
+include/frr/stream.h
+include/frr/systemd.h
+include/frr/table.h
+include/frr/termtable.h
+include/frr/thread.h
+include/frr/typerb.h
+include/frr/typesafe.h
+include/frr/vector.h
+include/frr/version.h
+include/frr/vlan.h
+include/frr/vrf.h
+include/frr/vrf_int.h
+include/frr/vty.h
+include/frr/vxlan.h
+include/frr/wheel.h
+include/frr/workqueue.h
+include/frr/yang.h
+include/frr/yang_translator.h
+include/frr/yang_wrappers.h
+include/frr/zassert.h
+include/frr/zclient.h
+include/frr/zebra.h
+include/frr/zlog.h
+include/frr/zlog_targets.h
+${PLIST.doc}info/frr.info
+lib/frr/modules/zebra_fpm.la
+lib/libfrr.la
+lib/libfrrospfapiclient.la
+${PLIST.doc}man/man1/frr.1
+${PLIST.doc}man/man1/vtysh.1
+${PLIST.doc}man/man8/frr-bfdd.8
+${PLIST.doc}man/man8/frr-bgpd.8
+${PLIST.doc}man/man8/frr-eigrpd.8
+${PLIST.doc}man/man8/frr-isisd.8
+${PLIST.doc}man/man8/frr-ldpd.8
+${PLIST.doc}man/man8/frr-ospf6d.8
+${PLIST.doc}man/man8/frr-ospfd.8
+${PLIST.doc}man/man8/frr-pbrd.8
+${PLIST.doc}man/man8/frr-pimd.8
+${PLIST.doc}man/man8/frr-ripd.8
+${PLIST.doc}man/man8/frr-ripngd.8
+${PLIST.doc}man/man8/frr-staticd.8
+${PLIST.doc}man/man8/frr-watchfrr.8
+${PLIST.doc}man/man8/frr-zebra.8
+${PLIST.doc}man/man8/mtracebis.8
+sbin/babeld
+sbin/bfdd
+sbin/bgpd
+sbin/eigrpd
+sbin/fabricd
+sbin/frr
+sbin/frr-reload
+sbin/frr-reload.py
+sbin/frrcommon.sh
+sbin/frrinit.sh
+sbin/generate_support_bundle.py
+sbin/isisd
+sbin/ldpd
+sbin/ospf6d
+sbin/ospfd
+sbin/pbrd
+sbin/pimd
+sbin/ripd
+sbin/ripngd
+sbin/ssd
+sbin/staticd
+sbin/watchfrr
+sbin/watchfrr.sh
+sbin/zebra
+${PLIST.doc}share/doc/frr/html/.buildinfo
+${PLIST.doc}share/doc/frr/html/_images/fig-normal-processing.png
+${PLIST.doc}share/doc/frr/html/_images/fig-rs-processing.png
+${PLIST.doc}share/doc/frr/html/_images/fig-vnc-commercial-route-reflector.png
+${PLIST.doc}share/doc/frr/html/_images/fig-vnc-frr-route-reflector.png
+${PLIST.doc}share/doc/frr/html/_images/fig-vnc-gw.png
+${PLIST.doc}share/doc/frr/html/_images/fig-vnc-mesh.png
+${PLIST.doc}share/doc/frr/html/_images/fig-vnc-redundant-route-reflectors.png
+${PLIST.doc}share/doc/frr/html/_images/fig_dmvpn_topologies.png
+${PLIST.doc}share/doc/frr/html/_images/fig_topologies_full.png
+${PLIST.doc}share/doc/frr/html/_images/fig_topologies_rs.png
+${PLIST.doc}share/doc/frr/html/_sources/babeld.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/basic.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/bfd.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/bgp.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/bmp.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/bugs.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/eigrpd.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/fabricd.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/filter.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/frr-reload.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/glossary.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/grpc.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/index.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/installation.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/ipv6.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/isisd.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/kernel.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/ldpd.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/nhrpd.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/ospf6d.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/ospfd.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/overview.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/packet-dumps.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/pbr.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/pim.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/ripd.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/ripngd.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/routemap.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/setup.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/sharp.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/snmp.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/static.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/vnc.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/vrrp.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/vtysh.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/watchfrr.rst.txt
+${PLIST.doc}share/doc/frr/html/_sources/zebra.rst.txt
+${PLIST.doc}share/doc/frr/html/_static/basic.css
+${PLIST.doc}share/doc/frr/html/_static/classic.css
+${PLIST.doc}share/doc/frr/html/_static/default.css
+${PLIST.doc}share/doc/frr/html/_static/doctools.js
+${PLIST.doc}share/doc/frr/html/_static/documentation_options.js
+${PLIST.doc}share/doc/frr/html/_static/file.png
+${PLIST.doc}share/doc/frr/html/_static/frr-icon.svg
+${PLIST.doc}share/doc/frr/html/_static/frr-logo-icon.png
+${PLIST.doc}share/doc/frr/html/_static/jquery-3.4.1.js
+${PLIST.doc}share/doc/frr/html/_static/jquery.js
+${PLIST.doc}share/doc/frr/html/_static/language_data.js
+${PLIST.doc}share/doc/frr/html/_static/minus.png
+${PLIST.doc}share/doc/frr/html/_static/overrides.css
+${PLIST.doc}share/doc/frr/html/_static/overrides.js
+${PLIST.doc}share/doc/frr/html/_static/plus.png
+${PLIST.doc}share/doc/frr/html/_static/pygments.css
+${PLIST.doc}share/doc/frr/html/_static/searchtools.js
+${PLIST.doc}share/doc/frr/html/_static/sidebar.js
+${PLIST.doc}share/doc/frr/html/_static/underscore-1.3.1.js
+${PLIST.doc}share/doc/frr/html/_static/underscore.js
+${PLIST.doc}share/doc/frr/html/babeld.html
+${PLIST.doc}share/doc/frr/html/basic.html
+${PLIST.doc}share/doc/frr/html/bfd.html
+${PLIST.doc}share/doc/frr/html/bgp.html
+${PLIST.doc}share/doc/frr/html/bmp.html
+${PLIST.doc}share/doc/frr/html/bugs.html
+${PLIST.doc}share/doc/frr/html/eigrpd.html
+${PLIST.doc}share/doc/frr/html/fabricd.html
+${PLIST.doc}share/doc/frr/html/filter.html
+${PLIST.doc}share/doc/frr/html/frr-reload.html
+${PLIST.doc}share/doc/frr/html/genindex.html
+${PLIST.doc}share/doc/frr/html/glossary.html
+${PLIST.doc}share/doc/frr/html/grpc.html
+${PLIST.doc}share/doc/frr/html/index.html
+${PLIST.doc}share/doc/frr/html/installation.html
+${PLIST.doc}share/doc/frr/html/ipv6.html
+${PLIST.doc}share/doc/frr/html/isisd.html
+${PLIST.doc}share/doc/frr/html/kernel.html
+${PLIST.doc}share/doc/frr/html/ldpd.html
+${PLIST.doc}share/doc/frr/html/nhrpd.html
+${PLIST.doc}share/doc/frr/html/objects.inv
+${PLIST.doc}share/doc/frr/html/ospf6d.html
+${PLIST.doc}share/doc/frr/html/ospfd.html
+${PLIST.doc}share/doc/frr/html/overview.html
+${PLIST.doc}share/doc/frr/html/packet-dumps.html
+${PLIST.doc}share/doc/frr/html/pbr.html
+${PLIST.doc}share/doc/frr/html/pim.html
+${PLIST.doc}share/doc/frr/html/ripd.html
+${PLIST.doc}share/doc/frr/html/ripngd.html
+${PLIST.doc}share/doc/frr/html/routemap.html
+${PLIST.doc}share/doc/frr/html/search.html
+${PLIST.doc}share/doc/frr/html/searchindex.js
+${PLIST.doc}share/doc/frr/html/setup.html
+${PLIST.doc}share/doc/frr/html/sharp.html
+${PLIST.doc}share/doc/frr/html/snmp.html
+${PLIST.doc}share/doc/frr/html/static.html
+${PLIST.doc}share/doc/frr/html/vnc.html
+${PLIST.doc}share/doc/frr/html/vrrp.html
+${PLIST.doc}share/doc/frr/html/vtysh.html
+${PLIST.doc}share/doc/frr/html/watchfrr.html
+${PLIST.doc}share/doc/frr/html/zebra.html
+share/examples/frr/configsamples/babeld.conf.sample
+share/examples/frr/configsamples/bfdd.conf.sample
+share/examples/frr/configsamples/bgpd.conf.sample
+share/examples/frr/configsamples/bgpd.conf.sample2
+share/examples/frr/configsamples/bgpd.conf.vnc.sample
+share/examples/frr/configsamples/eigrpd.conf.sample
+share/examples/frr/configsamples/fabricd.conf.sample
+share/examples/frr/configsamples/isisd.conf.sample
+share/examples/frr/configsamples/ldpd.conf.sample
+share/examples/frr/configsamples/ospf6d.conf.sample
+share/examples/frr/configsamples/ospfd.conf.sample
+share/examples/frr/configsamples/pbrd.conf.sample
+share/examples/frr/configsamples/pimd.conf.sample
+share/examples/frr/configsamples/ripd.conf.sample
+share/examples/frr/configsamples/ripngd.conf.sample
+share/examples/frr/configsamples/staticd.conf.sample
+share/examples/frr/configsamples/vtysh.conf.sample
+share/examples/frr/configsamples/zebra.conf.sample
+share/yang/frr-bfdd.yang
+share/yang/frr-eigrpd.yang
+share/yang/frr-filter.yang
+share/yang/frr-igmp.yang
+share/yang/frr-interface.yang
+share/yang/frr-isisd.yang
+share/yang/frr-module-translator.yang
+share/yang/frr-nexthop.yang
+share/yang/frr-pim-rp.yang
+share/yang/frr-pim.yang
+share/yang/frr-ripd.yang
+share/yang/frr-ripngd.yang
+share/yang/frr-route-map.yang
+share/yang/frr-route-types.yang
+share/yang/frr-routing.yang
+share/yang/frr-staticd.yang
+share/yang/frr-test-module.yang
+share/yang/frr-vrf.yang
+share/yang/frr-zebra.yang
+share/yang/ietf-interfaces.yang
+share/yang/ietf-routing-types.yang
diff --git a/net/frr/distinfo b/net/frr/distinfo
new file mode 100644
index 00000000000..4c298a175b3
--- /dev/null
+++ b/net/frr/distinfo
@@ -0,0 +1,9 @@
+$NetBSD: distinfo,v 1.1 2020/12/10 16:43:24 kardel Exp $
+
+SHA1 (frr-7.5.tar.gz) = 266129c3de20d5ffbe1ae9751fbbf88184405617
+RMD160 (frr-7.5.tar.gz) = 368fae09311e2b4210cf793f09a33238c19f5441
+SHA512 (frr-7.5.tar.gz) = d0d3c0bc0d30e2ebb93e20906768a996d21db23b23118c8e3c50d238e7bfdee7a789b4a90c9d7dbdc842d857f60bd44f0922b01b0c2c8b289ac860f008a430a9
+Size (frr-7.5.tar.gz) = 6730659 bytes
+SHA1 (patch-pkgsrc_zebra.sh.in) = d458e74a1f3319f6e075d3d3a81414bc7d7022f2
+SHA1 (patch-zebra_ioctl.c) = 99b7606564f4dc620df997889156b5c09f7fb396
+SHA1 (patch-zebra_kernel__socket.c) = 9bf24d86923715e3e15cad073df1210bc0608e89
diff --git a/net/frr/files/staticd.sh b/net/frr/files/staticd.sh
new file mode 100755
index 00000000000..5b553bff34d
--- /dev/null
+++ b/net/frr/files/staticd.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+#
+# staticd is part of the frr routing beast
+#
+# PROVIDE: staticd
+# REQUIRE: zebra
+##
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin:@PREFIX@/sbin:@PREFIX@/bin
+export PATH
+
+if [ -f /etc/rc.subr ]
+then
+ . /etc/rc.subr
+fi
+
+name="staticd"
+rcvar=$name
+required_files="@PREFIX@/etc/frr/${name}.conf"
+command="@PREFIX@/sbin/${name}"
+command_args="-d"
+
+socket_dir="@VARBASE@/run/frr"
+pidfile="${socket_dir}/${name}.pid"
+
+load_rc_config $name
+run_rc_command "$1"
diff --git a/net/frr/options.mk b/net/frr/options.mk
new file mode 100644
index 00000000000..3cc533172f1
--- /dev/null
+++ b/net/frr/options.mk
@@ -0,0 +1,25 @@
+# $NetBSD: options.mk,v 1.1 2020/12/10 16:43:24 kardel Exp $
+
+PKG_OPTIONS_VAR= PKG_OPTIONS.frr
+PKG_SUPPORTED_OPTIONS= doc
+PKG_SUGGESTED_OPTIONS= doc
+
+PLIST_VARS+= doc
+
+.include "../../mk/bsd.options.mk"
+
+# Package-specific option-handling
+
+###
+### doc/man support
+###
+.if !empty(PKG_OPTIONS:Mdoc)
+USE_TOOLS+= makeinfo
+CONFIGURE_ARGS+= --enable-doc-html
+CONFIGURE_ARGS+= --infodir=${PREFIX}/info
+TOOL_DEPENDS+= ${PYPKGPREFIX}-sphinx>=2.4.4:../../textproc/py-sphinx
+PLIST.doc= yes
+INFO_FILES= yes
+.else
+CONFIGURE_ARGS+= --disable-doc
+.endif
diff --git a/net/frr/patches/patch-pkgsrc_zebra.sh.in b/net/frr/patches/patch-pkgsrc_zebra.sh.in
new file mode 100644
index 00000000000..bb5fc5d6f31
--- /dev/null
+++ b/net/frr/patches/patch-pkgsrc_zebra.sh.in
@@ -0,0 +1,16 @@
+$NetBSD: patch-pkgsrc_zebra.sh.in,v 1.1 2020/12/10 16:43:24 kardel Exp $
+
+ don't hard-code quagga.quagga in chown command in
+ pkgsrc/zebra.sh.in.
+
+--- pkgsrc/zebra.sh.in.orig 2020-06-30 11:08:57.000000000 +0000
++++ pkgsrc/zebra.sh.in
+@@ -28,7 +28,7 @@ pidfile="${socket_dir}/${name}.pid"
+ zebra_precmd()
+ {
+ mkdir -p "${socket_dir}"
+- chown quagga.quagga "${socket_dir}"
++ chown @FRR_USER@.@FRR_VTY_GROUP@ "${socket_dir}"
+ chmod 750 "${socket_dir}"
+ rc_flags="$(
+ set -- $rc_flags
diff --git a/net/frr/patches/patch-zebra_ioctl.c b/net/frr/patches/patch-zebra_ioctl.c
new file mode 100644
index 00000000000..acb1d9bf8f6
--- /dev/null
+++ b/net/frr/patches/patch-zebra_ioctl.c
@@ -0,0 +1,116 @@
+$NetBSD: patch-zebra_ioctl.c,v 1.1 2020/12/10 16:43:24 kardel Exp $
+
+ In NetBSD the correct way to determine link status is
+ ifi_link_state in if_data. This also avoids many
+ error messages on interfaces that do not support
+ SIOCGIFMEDIA.
+
+--- zebra/ioctl.c.orig 2020-06-30 11:08:57.000000000 +0000
++++ zebra/ioctl.c
+@@ -421,9 +421,6 @@ void if_get_flags(struct interface *ifp)
+ {
+ int ret;
+ struct ifreq ifreq;
+-#ifdef HAVE_BSD_LINK_DETECT
+- struct ifmediareq ifmr;
+-#endif /* HAVE_BSD_LINK_DETECT */
+
+ ifreq_set_name(&ifreq, ifp);
+
+@@ -434,34 +431,80 @@ void if_get_flags(struct interface *ifp)
+ safe_strerror(errno));
+ return;
+ }
+-#ifdef HAVE_BSD_LINK_DETECT /* Detect BSD link-state at start-up */
++
++ if (!CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_LINKDETECTION))
++ goto out;
+
+ /* Per-default, IFF_RUNNING is held high, unless link-detect says
+ * otherwise - we abuse IFF_RUNNING inside zebra as a link-state flag,
+ * following practice on Linux and Solaris kernels
+ */
+- SET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
+
+- if (CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_LINKDETECTION)) {
+- (void)memset(&ifmr, 0, sizeof(ifmr));
+- strlcpy(ifmr.ifm_name, ifp->name, sizeof(ifmr.ifm_name));
+-
+- /* Seems not all interfaces implement this ioctl */
+- if (if_ioctl(SIOCGIFMEDIA, (caddr_t)&ifmr) == -1 &&
+- errno != EINVAL)
++#ifdef SIOCGIFDATA
++ /*
++ * BSD gets link state from ifi_link_link in struct if_data.
++ * All BSD's have this in getifaddrs(3) ifa_data for AF_LINK addresses.
++ * We can also access it via SIOCGIFDATA.
++ */
++
++#ifdef __NetBSD__
++ struct ifdatareq ifdr = { .ifdr_data.ifi_link_state = 0 };
++ struct if_data *ifdata = &ifdr.ifdr_data;
++
++ strlcpy(ifdr.ifdr_name, ifp->name, sizeof(ifdr.ifdr_name));
++ ret = vrf_if_ioctl(SIOCGIFDATA, (caddr_t)&ifdr, ifp->vrf_id);
++#else
++ struct if_data ifd = { .ifi_link_state = 0 };
++ struct if_data *ifdata = &ifd;
++
++ ifreq.ifr_data = (caddr_t)ifdata;
++ ret = vrf_if_ioctl(SIOCGIFDATA, (caddr_t)&ifreq, ifp->vrf_id);
++#endif
++
++ if (ret == -1)
++ /* Very unlikely. Did the interface disappear? */
++ flog_err_sys(EC_LIB_SYSTEM_CALL,
++ "if_ioctl(SIOCGIFDATA) failed: %s",
++ safe_strerror(errno));
++ else {
++ if (ifdata->ifi_link_state >= LINK_STATE_UP)
++ SET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
++ else if (ifdata->ifi_link_state == LINK_STATE_UNKNOWN)
++ /* BSD traditionally treats UNKNOWN as UP */
++ SET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
++ else
++ UNSET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
++ }
++
++#elif defined(HAVE_BSD_LINK_DETECT)
++ /*
++ * This is only needed for FreeBSD older than FreeBSD-13.
++ * Valid and active media generally means the link state is
++ * up, but this is not always the case.
++ * For example, some BSD's with a net80211 interface in MONITOR
++ * mode will treat the media as valid and active but the
++ * link state is down - because we cannot send anything.
++ * Also, virtual interfaces such as PPP, VLAN, etc generally
++ * don't support media at all, so the ioctl will just fail.
++ */
++ struct ifmediareq ifmr = { .ifm_status = 0 };
++
++ strlcpy(ifmr.ifm_name, ifp->name, sizeof(ifmr.ifm_name));
++
++ if (if_ioctl(SIOCGIFMEDIA, (caddr_t)&ifmr) == -1) {
++ if (errno != EINVAL)
+ flog_err_sys(EC_LIB_SYSTEM_CALL,
+ "if_ioctl(SIOCGIFMEDIA) failed: %s",
+ safe_strerror(errno));
+- else if (ifmr.ifm_status & IFM_AVALID) /* Link state is valid */
+- {
+- if (ifmr.ifm_status & IFM_ACTIVE)
+- SET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
+- else
+- UNSET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
+- }
++ } else if (ifmr.ifm_status & IFM_AVALID) { /* media state is valid */
++ if (ifmr.ifm_status & IFM_ACTIVE) /* media is active */
++ SET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
++ else
++ UNSET_FLAG(ifreq.ifr_flags, IFF_RUNNING);
+ }
+ #endif /* HAVE_BSD_LINK_DETECT */
+
++out:
+ if_flags_update(ifp, (ifreq.ifr_flags & 0x0000ffff));
+ }
+
diff --git a/net/frr/patches/patch-zebra_kernel__socket.c b/net/frr/patches/patch-zebra_kernel__socket.c
new file mode 100644
index 00000000000..c0d9b2a344f
--- /dev/null
+++ b/net/frr/patches/patch-zebra_kernel__socket.c
@@ -0,0 +1,30 @@
+$NetBSD: patch-zebra_kernel__socket.c,v 1.1 2020/12/10 16:43:24 kardel Exp $
+
+ Pass IFP interface index if known (normal case) to make
+ interface specific routes work such as in
+
+ ipv6 route ::/0 <ipv6 address> carp0 100
+ ivv6 route ::/0 <other ipv6 address> 200
+
+--- zebra/kernel_socket.c.orig 2020-06-30 11:08:57.000000000 +0000
++++ zebra/kernel_socket.c
+@@ -1277,6 +1277,19 @@ int rtm_write(int message, union sockuni
+ #ifdef __OpenBSD__
+ SOCKADDRSET(mpls, RTA_SRC);
+ #endif
++#ifdef __NetBSD__
++ if (index > 0) {
++ struct sockaddr_dl sdl;
++
++ memset(&sdl, 0, sizeof(sdl));
++ sdl.sdl_len = sizeof(sdl);
++ sdl.sdl_family = AF_LINK;
++ sdl.sdl_index = index;
++
++ msg.rtm.rtm_addrs |= RTA_IFP;
++ SOCKADDRSET(&sdl, RTA_IFP);
++ }
++#endif
+
+ msg.rtm.rtm_msglen = pnt - (caddr_t)&msg;
+