| 1484 | } |
| 1485 | |
| 1486 | func (e *userspaceEngine) sendTSMPDiscoAdvertisement(ip netip.Addr) { |
| 1487 | srcIP, err := e.mySelfIPMatchingFamily(ip) |
| 1488 | if err != nil { |
| 1489 | e.logf("getting matching node: %s", err) |
| 1490 | return |
| 1491 | } |
| 1492 | tdka := packet.TSMPDiscoKeyAdvertisement{ |
| 1493 | Src: srcIP, |
| 1494 | Dst: ip, |
| 1495 | Key: e.magicConn.DiscoPublicKey(), |
| 1496 | } |
| 1497 | payload, err := tdka.Marshal() |
| 1498 | if err != nil { |
| 1499 | e.logf("error generating TSMP Advertisement: %s", err) |
| 1500 | metricTSMPDiscoKeyAdvertisementError.Add(1) |
| 1501 | } else if err := e.tundev.InjectOutbound(payload); err != nil { |
| 1502 | e.logf("error sending TSMP Advertisement: %s", err) |
| 1503 | metricTSMPDiscoKeyAdvertisementError.Add(1) |
| 1504 | } else { |
| 1505 | metricTSMPDiscoKeyAdvertisementSent.Add(1) |
| 1506 | } |
| 1507 | } |
| 1508 | |
| 1509 | func (e *userspaceEngine) setTSMPPongCallback(data [8]byte, cb func(packet.TSMPPongReply)) { |
| 1510 | e.mu.Lock() |