|
8 | 8 | "github.com/named-data/ndnd/dv/config" |
9 | 9 | "github.com/named-data/ndnd/dv/nfdc" |
10 | 10 | "github.com/named-data/ndnd/dv/table" |
| 11 | + "github.com/named-data/ndnd/fw/defn" |
11 | 12 | enc "github.com/named-data/ndnd/std/encoding" |
12 | 13 | "github.com/named-data/ndnd/std/log" |
13 | 14 | "github.com/named-data/ndnd/std/ndn" |
@@ -285,64 +286,51 @@ func (dv *Router) register() (err error) { |
285 | 286 | } |
286 | 287 |
|
287 | 288 | for _, prefix := range pfxs { |
288 | | - dv.nfdc.Exec(nfdc.NfdMgmtCmd{ |
289 | | - Module: "pet", |
290 | | - Cmd: "add-nexthop", |
291 | | - Args: &mgmt.ControlArgs{ |
292 | | - Name: prefix, |
293 | | - }, |
294 | | - Retries: -1, |
| 289 | + dv.execMgmtRetry("pet", "add-nexthop", &mgmt.ControlArgs{ |
| 290 | + Name: prefix, |
295 | 291 | }) |
296 | 292 | } |
297 | 293 | // Allow outgoing local-prefix-sync Interests to use two-phase forwarding. |
298 | 294 | // Incoming Interests still terminate locally on the same prefix. |
299 | | - dv.nfdc.Exec(nfdc.NfdMgmtCmd{ |
300 | | - Module: "pet", |
301 | | - Cmd: "add-egress", |
302 | | - Args: &mgmt.ControlArgs{ |
303 | | - Name: dv.pfx.SyncPrefix(), |
304 | | - Egress: &mgmt.EgressRecord{Name: neighborsPrefix.Clone()}, |
305 | | - }, |
306 | | - Retries: -1, |
| 295 | + dv.execMgmtRetry("pet", "add-egress", &mgmt.ControlArgs{ |
| 296 | + Name: dv.pfx.SyncPrefix(), |
| 297 | + Egress: &mgmt.EgressRecord{Name: neighborsPrefix.Clone()}, |
| 298 | + Multicast: true, |
307 | 299 | }) |
308 | 300 | // Set Advertisement Sync to localhop neighbors |
309 | | - dv.nfdc.Exec(nfdc.NfdMgmtCmd{ |
310 | | - Module: "pet", |
311 | | - Cmd: "add-egress", |
312 | | - Args: &mgmt.ControlArgs{ |
313 | | - Name: dv.config.AdvertisementSyncPrefix(), |
314 | | - Egress: &mgmt.EgressRecord{Name: neighborsPrefix.Clone()}, |
315 | | - }, |
316 | | - Retries: -1, |
317 | | - }) |
318 | | - // Set strategy to broadcast for advertisement sync Interests, so |
319 | | - // /localhop/.../DV/ADS traffic fan-outs to all neighbor nexthops. |
320 | | - dv.nfdc.Exec(nfdc.NfdMgmtCmd{ |
321 | | - Module: "strategy-choice", |
322 | | - Cmd: "set", |
323 | | - Args: &mgmt.ControlArgs{ |
324 | | - Name: dv.config.AdvertisementSyncPrefix(), |
325 | | - Strategy: &mgmt.Strategy{ |
326 | | - Name: config.BroadcastStrategy, |
327 | | - }, |
328 | | - }, |
329 | | - Retries: -1, |
330 | | - }) |
331 | | - dv.nfdc.Exec(nfdc.NfdMgmtCmd{ |
332 | | - Module: "strategy-choice", |
333 | | - Cmd: "set", |
334 | | - Args: &mgmt.ControlArgs{ |
335 | | - Name: dv.pfx.SyncPrefix(), |
336 | | - Strategy: &mgmt.Strategy{ |
337 | | - Name: config.BroadcastStrategy, |
338 | | - }, |
339 | | - }, |
340 | | - Retries: -1, |
| 301 | + dv.execMgmtRetry("pet", "add-egress", &mgmt.ControlArgs{ |
| 302 | + Name: dv.config.AdvertisementSyncPrefix(), |
| 303 | + Egress: &mgmt.EgressRecord{Name: neighborsPrefix.Clone()}, |
| 304 | + Multicast: true, |
341 | 305 | }) |
342 | 306 |
|
| 307 | + // Force multicast strategy for sync prefixes to broadcast. |
| 308 | + broadcastPrefixes := []enc.Name{ |
| 309 | + dv.pfx.SyncPrefix(), |
| 310 | + dv.config.AdvertisementSyncPrefix(), |
| 311 | + } |
| 312 | + for _, prefix := range broadcastPrefixes { |
| 313 | + dv.execMgmtRetry("multicast-strategy-choice", "set", &mgmt.ControlArgs{ |
| 314 | + Name: prefix, |
| 315 | + Strategy: &mgmt.Strategy{Name: defn.BROADCAST_STRATEGY}, |
| 316 | + }) |
| 317 | + } |
| 318 | + |
343 | 319 | return nil |
344 | 320 | } |
345 | 321 |
|
| 322 | +func (dv *Router) execMgmtRetry(module, cmd string, args *mgmt.ControlArgs) { |
| 323 | + var err error |
| 324 | + for i := 0; ; i++ { |
| 325 | + if _, err = dv.engine.ExecMgmtCmd(module, cmd, args); err == nil { |
| 326 | + break |
| 327 | + } |
| 328 | + log.Error(dv, "Forwarder command failed", "err", err, "attempt", i, |
| 329 | + "module", module, "cmd", cmd, "args", args) |
| 330 | + time.Sleep(100 * time.Millisecond) |
| 331 | + } |
| 332 | +} |
| 333 | + |
346 | 334 | // createFaces creates faces to all neighbors. |
347 | 335 | func (dv *Router) createFaces() { |
348 | 336 | neighborsPrefix := enc.LOCALHOP.Append(enc.NewGenericComponent("neighbors")) |
@@ -370,15 +358,10 @@ func (dv *Router) createFaces() { |
370 | 358 | dv.mutex.Unlock() |
371 | 359 |
|
372 | 360 | // Add neighbor to localhop neighbors |
373 | | - dv.nfdc.Exec(nfdc.NfdMgmtCmd{ |
374 | | - Module: "fib", |
375 | | - Cmd: "add-nexthop", |
376 | | - Args: &mgmt.ControlArgs{ |
377 | | - Name: neighborsPrefix.Clone(), |
378 | | - Cost: optional.Some(uint64(1)), |
379 | | - FaceId: optional.Some(faceId), |
380 | | - }, |
381 | | - Retries: 3, |
| 361 | + dv.execMgmtRetry("fib", "add-nexthop", &mgmt.ControlArgs{ |
| 362 | + Name: neighborsPrefix.Clone(), |
| 363 | + Cost: optional.Some(uint64(1)), |
| 364 | + FaceId: optional.Some(faceId), |
382 | 365 | }) |
383 | 366 | } |
384 | 367 | } |
|
0 commit comments