|
1 | | -{ ... }: |
| 1 | +{ pkgs, ... }: |
2 | 2 | { |
3 | 3 | name = "bgp-simple"; |
4 | 4 |
|
|
12 | 12 | ipv4.addresses = [ |
13 | 13 | { |
14 | 14 | address = "192.0.2.1"; |
15 | | - prefixLength = 30; |
| 15 | + prefixLength = 29; |
16 | 16 | } |
17 | 17 | ]; |
18 | 18 | ipv6.addresses = [ |
|
33 | 33 | neighbor 192.0.2.2 remote-as 64497 |
34 | 34 | neighbor 2001:db8::2 remote-as 64497 |
35 | 35 |
|
| 36 | + neighbor 192.0.2.3 remote-as 64498 |
| 37 | + neighbor 2001:db8::3 remote-as 64498 |
| 38 | +
|
36 | 39 | address-family ipv4 unicast |
37 | 40 | neighbor 192.0.2.2 activate |
| 41 | + neighbor 192.0.2.3 activate |
38 | 42 | exit-address-family |
39 | 43 |
|
40 | 44 | address-family ipv6 unicast |
41 | 45 | neighbor 2001:db8::2 activate |
| 46 | + neighbor 2001:db8::3 activate |
42 | 47 | exit-address-family |
43 | 48 | ''; |
44 | 49 | }; |
|
48 | 53 | ipv4.addresses = [ |
49 | 54 | { |
50 | 55 | address = "192.0.2.2"; |
51 | | - prefixLength = 30; |
| 56 | + prefixLength = 29; |
52 | 57 | } |
53 | 58 | ]; |
54 | 59 | ipv6.addresses = [ |
|
106 | 111 | }; |
107 | 112 | } |
108 | 113 |
|
| 114 | + protocol bgp c_v4 { |
| 115 | + local as 64497; |
| 116 | + neighbor 192.0.2.3 as 64498; |
| 117 | +
|
| 118 | + ipv4 { |
| 119 | + import all; |
| 120 | + export all; |
| 121 | + }; |
| 122 | + } |
| 123 | +
|
109 | 124 | protocol bgp a_v6 { |
110 | 125 | local as 64497; |
111 | 126 | neighbor 2001:db8::1 as 64496; |
|
115 | 130 | export all; |
116 | 131 | }; |
117 | 132 | } |
| 133 | +
|
| 134 | + protocol bgp c_v6 { |
| 135 | + local as 64497; |
| 136 | + neighbor 2001:db8::3 as 64498; |
| 137 | +
|
| 138 | + ipv6 { |
| 139 | + import all; |
| 140 | + export all; |
| 141 | + }; |
| 142 | + } |
118 | 143 | ''; |
119 | 144 | }; |
120 | 145 | }; |
| 146 | + c = { |
| 147 | + environment.systemPackages = with pkgs; [ gobgp ]; |
| 148 | + networking.interfaces.eth1 = { |
| 149 | + ipv4.addresses = [ |
| 150 | + { |
| 151 | + address = "192.0.2.3"; |
| 152 | + prefixLength = 29; |
| 153 | + } |
| 154 | + ]; |
| 155 | + ipv6.addresses = [ |
| 156 | + { |
| 157 | + address = "2001:db8::3"; |
| 158 | + prefixLength = 64; |
| 159 | + } |
| 160 | + ]; |
| 161 | + }; |
| 162 | + services.gobgpd = { |
| 163 | + enable = true; |
| 164 | + settings = { |
| 165 | + global.config = { |
| 166 | + as = 64498; |
| 167 | + router-id = "192.0.2.3"; |
| 168 | + }; |
| 169 | + neighbors = [ |
| 170 | + { |
| 171 | + config = { |
| 172 | + neighbor-address = "192.0.2.1"; |
| 173 | + peer-as = 64496; |
| 174 | + }; |
| 175 | + afi-safis = [ |
| 176 | + { |
| 177 | + config.afi-safi-name = "ipv4-unicast"; |
| 178 | + } |
| 179 | + ]; |
| 180 | + } |
| 181 | + { |
| 182 | + config = { |
| 183 | + neighbor-address = "192.0.2.2"; |
| 184 | + peer-as = 64497; |
| 185 | + }; |
| 186 | + afi-safis = [ |
| 187 | + { |
| 188 | + config.afi-safi-name = "ipv4-unicast"; |
| 189 | + } |
| 190 | + ]; |
| 191 | + } |
| 192 | + { |
| 193 | + config = { |
| 194 | + neighbor-address = "2001:db8::1"; |
| 195 | + peer-as = 64496; |
| 196 | + }; |
| 197 | + afi-safis = [ |
| 198 | + { |
| 199 | + config.afi-safi-name = "ipv6-unicast"; |
| 200 | + } |
| 201 | + ]; |
| 202 | + } |
| 203 | + { |
| 204 | + config = { |
| 205 | + neighbor-address = "2001:db8::2"; |
| 206 | + peer-as = 64497; |
| 207 | + }; |
| 208 | + afi-safis = [ |
| 209 | + { |
| 210 | + config.afi-safi-name = "ipv6-unicast"; |
| 211 | + } |
| 212 | + ]; |
| 213 | + } |
| 214 | + ]; |
| 215 | + }; |
| 216 | + }; |
| 217 | + }; |
121 | 218 | }; |
122 | 219 |
|
123 | 220 | testScript = '' |
124 | 221 | start_all() |
125 | 222 |
|
126 | 223 | a.wait_for_unit("network.target") |
127 | 224 | b.wait_for_unit("network.target") |
| 225 | + c.wait_for_unit("network.target") |
128 | 226 |
|
129 | 227 | a.wait_for_unit("frr.service") |
130 | 228 | b.wait_for_unit("bird.service") |
| 229 | + c.wait_for_unit("gobgpd.service") |
131 | 230 |
|
132 | 231 | a.wait_until_succeeds("vtysh -c 'show bgp ipv4 summary' | grep '192.0.2.2.*0\\s*0\\s*N/A'") |
| 232 | + a.wait_until_succeeds("vtysh -c 'show bgp ipv4 summary' | grep '192.0.2.3.*0\\s*0\\s*N/A'") |
133 | 233 | b.wait_until_succeeds("birdc show protocols | grep 'a_v4.*Established'") |
| 234 | + b.wait_until_succeeds("birdc show protocols | grep 'c_v4.*Established'") |
| 235 | + c.wait_until_succeeds("gobgp neighbor -a 'ipv4' | grep '192.0.2.1.*Establ'") |
| 236 | + c.wait_until_succeeds("gobgp neighbor -a 'ipv4' | grep '192.0.2.2.*Establ'") |
134 | 237 |
|
135 | 238 | # IPv6 DAD might need some time to complete for the local link address, which is required by frr |
136 | 239 | a.wait_until_succeeds("vtysh -c 'show bgp ipv6 summary' | grep '2001:db8::2.*0\\s*0\\s*N/A'") |
| 240 | + a.wait_until_succeeds("vtysh -c 'show bgp ipv6 summary' | grep '2001:db8::3.*0\\s*0\\s*N/A'") |
137 | 241 | b.wait_until_succeeds("birdc show protocols | grep 'a_v6.*Established'") |
| 242 | + b.wait_until_succeeds("birdc show protocols | grep 'c_v4.*Established'") |
| 243 | + c.wait_until_succeeds("gobgp neighbor -a 'ipv6' | grep '2001:db8::1.*Establ'") |
| 244 | + c.wait_until_succeeds("gobgp neighbor -a 'ipv6' | grep '2001:db8::2.*Establ'") |
138 | 245 | ''; |
139 | 246 | } |
0 commit comments