detect.go 875 B

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