diff --git a/bird/Makefile b/bird/Makefile new file mode 100644 index 0000000..5cc3447 --- /dev/null +++ b/bird/Makefile @@ -0,0 +1,160 @@ +# +# Copyright (C) 2009-2012 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. + +include $(TOPDIR)/rules.mk + +PKG_NAME:=bird +PKG_VERSION:=1.3.11 +PKG_RELEASE:=1 + +PKG_SOURCE:=bird-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=ftp://bird.network.cz/pub/bird +PKG_MD5SUM:=8ad2eb997fb8251bc5b24cf32619571b +PKG_BUILD_DEPENDS:=libncurses libreadline + +include $(INCLUDE_DIR)/package.mk + +define Package/bird/Default + TITLE:=The BIRD Internet Routing Daemon + URL:=http://bird.network.cz/ + DEPENDS:= +endef + +define Package/birdc/Default + TITLE:=The BIRD command-line client + URL:=http://bird.network.cz/ + DEPENDS:= +libreadline +libncurses +endef + +define Package/bird/Default/description1 +BIRD is an internet routing daemon which manages TCP/IP routing tables +with support of modern routing protocols, easy to use configuration +interface and powerful route filtering language. It is lightweight and +efficient and therefore appropriate for small embedded routers. + +endef + +define Package/bird/Default/description2 +In BGP, BIRD supports communities, multiprotocol extensions, MD5 +authentication, 32bit AS numbers and could act as a route server or a +route reflector. BIRD also supports multiple RIBs, multiple kernel +routing tables and redistribution between the protocols with a powerful +configuration syntax. + +endef + +define Package/bird/Default/description3 +This is a BIRD command-line client. It is used to send commands to BIRD, +commands can perform simple actions such as enabling/disabling of +protocols, telling BIRD to show various information, telling it to show +a routing table filtered by a filter, or asking BIRD to reconfigure. + +Unless you can't afford dependency on ncurses and readline, you +should install BIRD command-line client together with BIRD. + +endef + +define Package/bird4 +$(call Package/bird/Default) + SECTION:=net + CATEGORY:=Network + SUBMENU:=Routing and Redirection + TITLE+= (IPv4) +endef + +define Package/birdc4 +$(call Package/birdc/Default) + SECTION:=net + CATEGORY:=Network + SUBMENU:=Routing and Redirection + TITLE+= (IPv4) + DEPENDS+= +bird4 +endef + +define Package/bird6 +$(call Package/bird/Default) + SECTION:=net + CATEGORY:=Network + TITLE+= (IPv6) +endef + +define Package/birdc6 +$(call Package/birdc/Default) + SECTION:=net + CATEGORY:=Network + TITLE+= (IPv6) + DEPENDS+= +bird6 +endef + +define Package/bird4/description +$(call Package/bird/Default/description1) +This is IPv4 version of BIRD, it supports OSPFv2, RIPv2 and BGP +protocols. + +$(call Package/bird/Default/description2) +endef + +define Package/birdc4/description +$(call Package/bird/Default/description1) +$(call Package/bird/Default/description3) +endef + +define Package/bird6/description +$(call Package/bird/Default/description1) +This is IPv6 version of BIRD, it supports OSPFv3, RIPng and BGP +protocols. + +$(call Package/bird/Default/description2) +endef + +define Package/birdc6/description +$(call Package/bird/Default/description1) +$(call Package/bird/Default/description3) +endef + +CONFIGURE_ARGS += --with-linux-headers="$(LINUX_DIR)" + +define Build/Template + +$(STAMP_BUILT)-$(2): $(STAMP_PREPARED) + $(call Build/Configure/Default,$(3)) + $(call Build/Compile/Default,) + ( cd $(PKG_BUILD_DIR); mv -f bird bird$(2); mv -f birdc birdc$(2) ) + -$(MAKE) -C $(PKG_BUILD_DIR) clean + touch $$@ + +$(STAMP_BUILT): $(STAMP_BUILT)-$(2) + +define Package/bird$(2)/install + $(INSTALL_DIR) $$(1)/usr/sbin + $(INSTALL_BIN) $$(PKG_BUILD_DIR)/bird$(2) $$(1)/usr/sbin/ + $(INSTALL_BIN) ./files/bird$(2)loop $$(1)/usr/sbin/ + $(INSTALL_DIR) $$(1)/etc + $(INSTALL_DATA) ./files/bird$(2).conf $$(1)/etc + $(INSTALL_DIR) $$(1)/etc/init.d + $(INSTALL_BIN) ./files/bird$(2).init $$(1)/etc/init.d/bird$(2) + +endef + +define Package/bird$(2)/conffiles +/etc/bird$(2).conf +endef + +define Package/birdc$(2)/install + $(INSTALL_DIR) $$(1)/usr/sbin + $(INSTALL_BIN) $$(PKG_BUILD_DIR)/birdc$(2) $$(1)/usr/sbin/ +endef + +endef + + +$(eval $(call Build/Template,bird4,4, --disable-ipv6)) +$(eval $(call Build/Template,bird6,6, --enable-ipv6)) + +$(eval $(call BuildPackage,bird4)) +$(eval $(call BuildPackage,birdc4)) +$(eval $(call BuildPackage,bird6)) +$(eval $(call BuildPackage,birdc6)) diff --git a/bird/files/bird4.conf b/bird/files/bird4.conf new file mode 100644 index 0000000..8616a0a --- /dev/null +++ b/bird/files/bird4.conf @@ -0,0 +1,121 @@ + +# THIS CONFIG FILE IS NOT A COMPLETE DOCUMENTATION +# PLEASE LOOK IN THE BIRD DOCUMENTATION FOR MORE INFO + +# However, most of options used here are just for example +# and will be removed in real-life configs. + +log syslog all; + +# Override router ID +#router id 192.168.0.1; + +# Turn on global debugging of all protocols +#debug protocols all; + + +# Define a route filter... +# filter test_filter { +# if net ~ 10.0.0.0/16 then accept; +# else reject; +# } + +# The direct protocol automatically generates device routes to all network +# interfaces. Can exist in as many instances as you wish if you want to +# populate multiple routing tables with device routes. Because device routes +# are handled by Linux kernel, this protocol is usually not needed. +# protocol direct { +# interface "*"; # Restrict network interfaces it works with +# } + +# This pseudo-protocol performs synchronization between BIRD's routing +# tables and the kernel. You can run multiple instances of the kernel +# protocol and synchronize different kernel tables with different BIRD tables. +protocol kernel { +# learn; # Learn all alien routes from the kernel +# persist; # Don't remove routes on bird shutdown + scan time 20; # Scan kernel routing table every 20 seconds +# import none; # Default is import all +# export all; # Default is export none +} + +# This pseudo-protocol watches all interface up/down events. +protocol device { + scan time 10; # Scan interfaces every 10 seconds +} + +# Static routes (again, there can be multiple instances, so that you +# can disable/enable various groups of static routes on the fly). +protocol static { +# export all; # Default is export none +# route 0.0.0.0/0 via 62.168.0.13; +# route 10.0.0.0/8 reject; +# route 192.168.0.0/16 reject; +} + + +#protocol rip { +# disabled; +# import all; +# export all; +# export filter test_filter; + +# port 1520; +# period 7; +# infinity 16; +# garbage time 60; +# interface "*" { mode broadcast; }; +# honor neighbor; +# honor always; +# honor never; +# authentication none; +#} + + +#protocol ospf { +# disabled; +# import all; +# export all; +# export where source = RTS_STATIC; + +# area 0 { +# interface "eth*" { +# cost 10; +# hello 3; +# retransmit 2; +# wait 5; +# dead 20; +# type broadcast; +# authentication simple; +# password "pass"; +# }; +# }; +#} + + +#protocol bgp { +# disabled; +# import all; +# export all; +# export where source = RTS_STATIC; + +# local as 65000; +# neighbor 192.168.1.1 as 65001; +# multihop 20 via 192.168.2.1; + +# hold time 240; +# startup hold time 240; +# connect retry time 120; +# keepalive time 80; # defaults to hold time / 3 +# start delay time 5; # How long do we wait before initial connect +# error wait time 60, 300;# Minimum and maximum time we wait after an error (when consecutive +# # errors occur, we increase the delay exponentially ... +# error forget time 300; # ... until this timeout expires) +# disable after error; # Disable the protocol automatically when an error occurs +# next hop self; # Disable next hop processing and always advertise our local address as nexthop +# source address 62.168.0.14; # What local address we use for the TCP connection +# password "secret" # Password used for MD5 authentication +# rr client; # I am a route reflector and the neighor is my client +# rr cluster id 1.0.0.1 # Use this value for cluster id instead of my router id +# }; +#} diff --git a/bird/files/bird4.init b/bird/files/bird4.init new file mode 100644 index 0000000..18243bb --- /dev/null +++ b/bird/files/bird4.init @@ -0,0 +1,24 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2010-2011 OpenWrt.org + +START=99 +STOP=10 + +SERVICE_DAEMONIZE=1 +SERVICE_WRITE_PID=1 + +BIRD="/usr/sbin/bird4 -c /etc/bird4.conf" + +start() { + service_start $BIRD -d +# ( SERVICE_MATCH_NAME=1 service_start /usr/sbin/bird4loop ) +} + +stop() { +# ( SERVICE_MATCH_NAME=1 service_stop /usr/sbin/bird4loop ) + service_stop $BIRD +} + +reload() { + service_reload $BIRD +} diff --git a/bird/files/bird4loop b/bird/files/bird4loop new file mode 100644 index 0000000..8154902 --- /dev/null +++ b/bird/files/bird4loop @@ -0,0 +1,24 @@ +#!/bin/sh + +BIRD="/usr/sbin/bird4 -c /etc/bird4.conf" + +$BIRD -p || return 1 + +. /lib/functions.sh +. /lib/functions/service.sh + +SERVICE_DAEMONIZE=1 +SERVICE_WRITE_PID=1 + +sig_handler() { + running=0 + service_stop $BIRD +} + +running=1 +trap sig_handler INT +trap sig_handler TERM +while [ $running -gt 0 ]; do + service_check $BIRD || service_start $BIRD -d "$@" + sleep 3 +done diff --git a/bird/files/bird6.conf b/bird/files/bird6.conf new file mode 100644 index 0000000..8616a0a --- /dev/null +++ b/bird/files/bird6.conf @@ -0,0 +1,121 @@ + +# THIS CONFIG FILE IS NOT A COMPLETE DOCUMENTATION +# PLEASE LOOK IN THE BIRD DOCUMENTATION FOR MORE INFO + +# However, most of options used here are just for example +# and will be removed in real-life configs. + +log syslog all; + +# Override router ID +#router id 192.168.0.1; + +# Turn on global debugging of all protocols +#debug protocols all; + + +# Define a route filter... +# filter test_filter { +# if net ~ 10.0.0.0/16 then accept; +# else reject; +# } + +# The direct protocol automatically generates device routes to all network +# interfaces. Can exist in as many instances as you wish if you want to +# populate multiple routing tables with device routes. Because device routes +# are handled by Linux kernel, this protocol is usually not needed. +# protocol direct { +# interface "*"; # Restrict network interfaces it works with +# } + +# This pseudo-protocol performs synchronization between BIRD's routing +# tables and the kernel. You can run multiple instances of the kernel +# protocol and synchronize different kernel tables with different BIRD tables. +protocol kernel { +# learn; # Learn all alien routes from the kernel +# persist; # Don't remove routes on bird shutdown + scan time 20; # Scan kernel routing table every 20 seconds +# import none; # Default is import all +# export all; # Default is export none +} + +# This pseudo-protocol watches all interface up/down events. +protocol device { + scan time 10; # Scan interfaces every 10 seconds +} + +# Static routes (again, there can be multiple instances, so that you +# can disable/enable various groups of static routes on the fly). +protocol static { +# export all; # Default is export none +# route 0.0.0.0/0 via 62.168.0.13; +# route 10.0.0.0/8 reject; +# route 192.168.0.0/16 reject; +} + + +#protocol rip { +# disabled; +# import all; +# export all; +# export filter test_filter; + +# port 1520; +# period 7; +# infinity 16; +# garbage time 60; +# interface "*" { mode broadcast; }; +# honor neighbor; +# honor always; +# honor never; +# authentication none; +#} + + +#protocol ospf { +# disabled; +# import all; +# export all; +# export where source = RTS_STATIC; + +# area 0 { +# interface "eth*" { +# cost 10; +# hello 3; +# retransmit 2; +# wait 5; +# dead 20; +# type broadcast; +# authentication simple; +# password "pass"; +# }; +# }; +#} + + +#protocol bgp { +# disabled; +# import all; +# export all; +# export where source = RTS_STATIC; + +# local as 65000; +# neighbor 192.168.1.1 as 65001; +# multihop 20 via 192.168.2.1; + +# hold time 240; +# startup hold time 240; +# connect retry time 120; +# keepalive time 80; # defaults to hold time / 3 +# start delay time 5; # How long do we wait before initial connect +# error wait time 60, 300;# Minimum and maximum time we wait after an error (when consecutive +# # errors occur, we increase the delay exponentially ... +# error forget time 300; # ... until this timeout expires) +# disable after error; # Disable the protocol automatically when an error occurs +# next hop self; # Disable next hop processing and always advertise our local address as nexthop +# source address 62.168.0.14; # What local address we use for the TCP connection +# password "secret" # Password used for MD5 authentication +# rr client; # I am a route reflector and the neighor is my client +# rr cluster id 1.0.0.1 # Use this value for cluster id instead of my router id +# }; +#} diff --git a/bird/files/bird6.init b/bird/files/bird6.init new file mode 100644 index 0000000..67b32f1 --- /dev/null +++ b/bird/files/bird6.init @@ -0,0 +1,24 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2010-2011 OpenWrt.org + +START=99 +STOP=10 + +SERVICE_DAEMONIZE=1 +SERVICE_WRITE_PID=1 + +BIRD="/usr/sbin/bird6 -c /etc/bird6.conf" + +start() { + service_start $BIRD -d +# ( SERVICE_MATCH_NAME=1 service_start /usr/sbin/bird6loop ) +} + +stop() { +# ( SERVICE_MATCH_NAME=1 service_stop /usr/sbin/bird6loop ) + service_stop $BIRD +} + +reload() { + service_reload $BIRD +} diff --git a/bird/files/bird6loop b/bird/files/bird6loop new file mode 100644 index 0000000..510add4 --- /dev/null +++ b/bird/files/bird6loop @@ -0,0 +1,24 @@ +#!/bin/sh + +BIRD="/usr/sbin/bird6 -c /etc/bird6.conf" + +$BIRD -p || return 1 + +. /lib/functions.sh +. /lib/functions/service.sh + +SERVICE_DAEMONIZE=1 +SERVICE_WRITE_PID=1 + +sig_handler() { + running=0 + service_stop $BIRD +} + +running=1 +trap sig_handler INT +trap sig_handler TERM +while [ $running -gt 0 ]; do + service_check $BIRD || service_start $BIRD -d "$@" + sleep 3 +done