detect.go 788 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package main
  2. import (
  3. "goa.design/clue/log"
  4. "douglasthrift.net/presence/neighbors"
  5. )
  6. type (
  7. Detect struct {
  8. Interface string `arg:""`
  9. HardwareAddrs []string `arg:""`
  10. }
  11. )
  12. func (d *Detect) Run(cli *CLI) error {
  13. ctx := cli.Context()
  14. ifs := neighbors.Interfaces{d.Interface: true}
  15. hws := make(neighbors.HardwareAddrStates, len(d.HardwareAddrs))
  16. for _, hw := range d.HardwareAddrs {
  17. hws[hw] = neighbors.NewState()
  18. }
  19. a, err := neighbors.NewARP(1)
  20. if err != nil {
  21. return err
  22. }
  23. ok, err := a.Present(ctx, ifs, hws)
  24. if err != nil {
  25. return err
  26. }
  27. log.Info(ctx, log.KV{K: "present", V: ok})
  28. for hw, state := range hws {
  29. log.Info(ctx, log.KV{K: "hw", V: hw}, log.KV{K: "present", V: state.Present()}, log.KV{K: "changed", V: state.Changed()})
  30. }
  31. return nil
  32. }