code: func (k *Kademlia) On(p *Peer) (uint8, bool) {
  	k.lock.Lock()
  	defer k.lock.Unlock()
  	var ins bool
  	k.conns, _, _, _ = pot.Swap(k.conns, p, Pof, func(v pot.Val) pot.Val {
  		// if not found live
  		if v == nil {
  			ins = true
  			// insert new online peer into conns
  			return p
  		}
  		// found among live peers, do nothing
  		return v
  	})
  	if ins && !p.BzzPeer.LightNode {
  		a := newEntry(p.BzzAddr)
  		a.conn = p
  		// insert new online peer into addrs
  		k.addrs, _, _, _ = pot.Swap(k.addrs, p, Pof, func(v pot.Val) pot.Val {
  			return a
  		})
  		// send new address count value only if the peer is inserted
  		if k.addrCountC != nil {
  			k.addrCountC <- k.addrs.Size()
  		}
  	}
  	log.Trace(k.string())
  	// calculate if depth of saturation changed
  	depth := uint8(k.saturation())
  	var changed bool
  	if depth != k.depth {
  		changed = true
  		k.depth = depth
  	}
  	k.sendNeighbourhoodDepthChange()
  	return k.depth, changed
  }
docs: // On inserts the peer as a kademlia peer into the live peers