createFakeInternet creates multiple namespaces with veth pairs between them with the following topology: . veth ┌────────┐ veth . ┌─────────────────┤ Bridge ├───────────────────┐ . │ └───┬────┘ │ . │
(t *testing.T)
| 253 | // box. Default routes are created from the edge namespaces (client1, client2) |
| 254 | // to their respective routers, but no NAT rules are created. |
| 255 | func createFakeInternet(t *testing.T) fakeInternet { |
| 256 | t.Helper() |
| 257 | const ( |
| 258 | bridgePrefix = "10.0.0." |
| 259 | serverIP = bridgePrefix + "1" |
| 260 | client1Prefix = "10.0.2." |
| 261 | client2Prefix = "10.0.3." |
| 262 | ) |
| 263 | var ( |
| 264 | namePrefix = uniqNetName(t) + "_" |
| 265 | router = fakeInternet{ |
| 266 | NamePrefix: namePrefix, |
| 267 | BridgeName: namePrefix + "b", |
| 268 | } |
| 269 | ) |
| 270 | |
| 271 | // Create bridge namespace and bridge interface. |
| 272 | router.BridgeNetNS = createNetNS(t, router.BridgeName) |
| 273 | err := createBridge(router.BridgeNetNS, router.BridgeName) |
| 274 | require.NoError(t, err, "create bridge in netns") |
| 275 | |
| 276 | // Create server namespace and veth pair between bridge and server. |
| 277 | router.ServerNetNS = createNetNS(t, namePrefix+"s") |
| 278 | router.ServerVethPair = vethPair{ |
| 279 | Outer: namePrefix + "b-s", |
| 280 | Inner: namePrefix + "s-b", |
| 281 | } |
| 282 | err = joinBridge(joinBridgeOpts{ |
| 283 | bridgeNetNS: router.BridgeNetNS, |
| 284 | netNS: router.ServerNetNS, |
| 285 | bridgeName: router.BridgeName, |
| 286 | vethPair: router.ServerVethPair, |
| 287 | ip: serverIP, |
| 288 | }) |
| 289 | require.NoError(t, err, "join bridge with server") |
| 290 | |
| 291 | leaves := []struct { |
| 292 | leaf *fakeRouterLeaf |
| 293 | routerName string |
| 294 | clientName string |
| 295 | routerBridgeIP string |
| 296 | routerClientIP string |
| 297 | clientIP string |
| 298 | }{ |
| 299 | { |
| 300 | leaf: &router.Client1, |
| 301 | routerName: "c1r", |
| 302 | clientName: "c1", |
| 303 | routerBridgeIP: bridgePrefix + "2", |
| 304 | routerClientIP: client1Prefix + "1", |
| 305 | clientIP: client1Prefix + "2", |
| 306 | }, |
| 307 | { |
| 308 | leaf: &router.Client2, |
| 309 | routerName: "c2r", |
| 310 | clientName: "c2", |
| 311 | routerBridgeIP: bridgePrefix + "3", |
| 312 | routerClientIP: client2Prefix + "1", |
no test coverage detected