code: func (s *Ethereum) Start(srvr *p2p.Server) error {
  	// Start the bloom bits servicing goroutines
  	s.startBloomHandlers(params.BloomBitsBlocks)
  
  	// Start the RPC service
  	s.netRPCService = ethapi.NewPublicNetAPI(srvr, s.NetVersion())
  
  	// Figure out a max peers count based on the server limits
  	maxPeers := srvr.MaxPeers
  	if s.config.LightServ > 0 {
  		if s.config.LightPeers >= srvr.MaxPeers {
  			return fmt.Errorf("invalid peer config: light peer count (%d) >= total peer count (%d)", s.config.LightPeers, srvr.MaxPeers)
  		}
  		maxPeers -= s.config.LightPeers
  	}
  	// Start the networking layer and the light server if requested
  	s.protocolManager.Start(maxPeers)
  	if s.lesServer != nil {
  		s.lesServer.Start(srvr)
  	}
  	return nil
  }
docs: // Start implements node.Service, starting all internal goroutines needed by the
  // Ethereum protocol implementation.