]> git.ipfire.org Git - network.git/blob - src/functions/functions.bird
c6fea321c6743e8795135c8541aec133b718bb0b
[network.git] / src / functions / functions.bird
1 #!/bin/bash
2 ###############################################################################
3 # #
4 # IPFire.org - A linux based firewall #
5 # Copyright (C) 2018 IPFire Network Development Team #
6 # #
7 # This program is free software: you can redistribute it and/or modify #
8 # it under the terms of the GNU General Public License as published by #
9 # the Free Software Foundation, either version 3 of the License, or #
10 # (at your option) any later version. #
11 # #
12 # This program is distributed in the hope that it will be useful, #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15 # GNU General Public License for more details. #
16 # #
17 # You should have received a copy of the GNU General Public License #
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
19 # #
20 ###############################################################################
21
22 BIRD_CONF="/etc/bird.conf"
23
24 bird_start() {
25 service_start "bird.service"
26 }
27
28 bird_stop() {
29 service_stop "bird.service"
30 }
31
32 bird_reload() {
33 service_reload "bird.service"
34 }
35
36 bird_generate_config() {
37 log DEBUG "Write BIRD configuration file"
38
39 # Write header
40 config_header "bird" > ${BIRD_CONF}
41
42 # Write some basic settings
43 local proto
44 (
45 print "# Log everything to syslog"
46 print "log syslog all;"
47 print
48
49 print "# Turn on internal watchdog"
50 print "watchdog warning 5s;"
51 print "watchdog timeout 30s;"
52 print
53
54 print "# Define default route tables"
55 print "ipv6 table master6;"
56 print "ipv4 table master4;"
57
58 print "# Enable device configuration"
59 print "protocol device {}"
60 print
61
62 print "# Export all routes to kernel"
63 for proto in ${IP_SUPPORTED_PROTOCOLS}; do
64 print "protocol kernel {"
65 print " ${proto} {"
66 print " table ${proto/ipv/master};"
67 print " export all;"
68 print " };"
69 print " learn;"
70 print "}"
71 print
72 done
73 ) >> ${BIRD_CONF}
74
75 # Static routes
76 for proto in ${IP_SUPPORTED_PROTOCOLS}; do
77 print "protocol static {"
78 print " ${proto};"
79 print
80
81 # Read routes for this protocol from configuration
82 __bird_static_routes "${proto}"
83
84 print "}"
85 print
86 done >> ${BIRD_CONF}
87 }
88
89 __bird_static_routes() {
90 local proto="${1}"
91 assert isset proto
92
93 local ${NETWORK_CONFIG_ROUTES_PARAMS}
94 local line
95 while read line; do
96 route_parse_line "${line}"
97 [ $? -eq ${EXIT_OK} ] || continue
98
99 local type
100 local arg
101 for arg in unreachable prohibit blackhole; do
102 if enabled "${arg}"; then
103 type="${arg}"
104 break
105 fi
106 done
107
108 # Skip all routes of another protocol
109 local _proto="$(ip_detect_protocol "${network}")"
110 if [ "${proto}" != "${_proto}" ]; then
111 continue
112 fi
113
114 case "${type}" in
115 unreachable|prohibit|blackhole)
116 print " route ${network} ${type};"
117 ;;
118
119 *)
120 print " route ${network} via ${gateway};"
121 ;;
122 esac
123 done < ${NETWORK_CONFIG_ROUTES}
124 }