Two weeks ago, my colleague posted a tip of the week about how to combine licenses from two software vendors into one license file. This week I will look at how to use two licenses from the same vendor - but created for different server IDs.
If you have two sets of licenses for one server, they can only be combined into one license file if the SERVER IDs are the same.
Only one instance of a vendor daemon (the Mentor daemon is "mgcld") can run on one machine.
This means that if you have two sets of licenses for the same daemon, but created for different IDs (for example a MacAddress and a Hardware Key) then:
They cannot be combined into one license file (because the server IDs are different).
You cannot run two servers (because only one "mgcld" can run at any time).
How to use both sets of licenses:
If your license server machine is running Windows, then by following the instructions below, you can use both sets of licenses. Note - this will not work for other operating systems. (The instructions below assume you already know how to set up a license server using lmtools.)
1) Create a folder to contain all the licenses, and save each license as a separate file with a .lic extension. For example:
SERVER put_server_name_here FLEXID=9-87654321 1717
DAEMON mgcld path_to_mgcld
INCREMENT padses_c mgcld 2013.090 30-sep-2013 ...
2) Edit the licenses so that they contain the name of your server, and the location of the vendor daemon. (The SERVER and DAEMON lines will be the same for each license, apart from the server ID which must not be changed.) So in the example above:
3) In the "Config Services" tab within "lmtools", in the box entitled "Path to the license file" - enter the folder name containing the licenses, instead of the path to a license file. So in the example above:
Path to the license file = C:\Licenses
4) Check "Use Services", and "Save Service" as usual, then start the server in the "Start/Stop/Reread" tab.
Your license server should now show that both sets of licenses are available.
If you are experiencing slow invocation times with one or more of your Mentor Graphics applications - here are some general tips and techniques, as well as application-specific options (for Expedition PCB and PADS Layout), that are available for use:
Check your licensing environment for any invalid or duplicate license server (port@host) references.
If you find any, remove them.
A quick and easy tool for editing your licensing environment is the Mentor License Utility:
Note: Before making any changes to the environment you can back-up your current settings via the 'File>Export Environment' menu-pick. To import previously saved settings navigate to 'File>Import Environment'.
2. Check your licensing environment for any license files containing un-edited lines starting with "SERVER put_server_name_here"
If you find any, AND your machine is NOT intended to be a license server:
Add a pound/hash character at the beginning of the line and also the line after it (starts with "DAEMON")
3. If you have any non-Mentor Graphics (mgcld daemon) license files or port@host references in your environment
Make sure all your Mentor Graphics (mgcld daemon) licenses and port@host references reside under the MGLS_LICENSE_FILE environment variable
If not, you can use the Mentor License Utility to move them
3b. If you have any non-Mentor Graphics (mgcld daemon) license files or port@host references set in the LM_LICENSE_FILE environment variable or registry entry
Set the MGLS_LICENSE_SEARCH environment variable to a value of 1. When set, Mentor Graphics licensing will ignore the LM_LICENSE_FILE values (and other vendor licenses) if it finds that the MGLS_LICENSE_FILE is set.
4. Use any application-specific license options/dialogs to reduce the number of licenses that get checked during the invocation
Two good example applications are Expedition PCB and PADS Layout, both of which check for many licenses on invocation in order to enable as many options as possible.
Note: This information only applies to users pointing to a license server for licenses
The reason it's not necessary to take these measures with a local Mobile Compute (a.k.a. Nodelocked Uncounted) license file, is because the checkouts are much quicker (no network latency), so any additional checks shouldn't add any noticeable delays to the invocation.
The default behavior is to check for all the options licenses in order to display the following dialog. In this example only the base licenses for Expedition Pinnacle, Ascent LX, and Ascent.
If it is taking a long time for the above dialog to appear, there are two options available:
A). Set the MGC_DISABLE_PRESPLASH_CHECKS environment variable to 1.
The MGC_DISABLE_PRESPLASH_CHECKS variable changes the number of licenses the Expedition checks for on invocation. Instead of checking for every option license it only looks for a base license (for Pinnacle, Ascent LX, or Ascent).
When the license selection dialog appears, all options are selectable regardless of whether or not a license exists and is available.
If you select an option that you don't have a license for (or it's not available) you will get a licensing warning after you click OK (and before Expedition comes up)
This option works well if you just want to select one of the first 4 radio buttons (for Pinnacle, Ascent LX, Ascent, or Xtreme Design Client), and checkout (and in) any option licenses via the 'Setup>Licensed Modules' menu-pick (on-demand licensing).
B). Add one of the following switches to the Expedition PCB Start Menu shortcut target path:
Right click on the Expedition PCB shortcut, and select "Properties".
Add the switch to the end of the "Target" field (add a space in-between)
Click Apply and OK.
With any of these switches in place, Expedition will bypass the license selection dialog and go directly into the requested mode (for Pinnacle, Ascent LX, or Ascent), provided the licenses are available.
You can then checkout (and in) any option licenses via the 'Setup>Licensed Modules' menu-pick
By default PADS Layout checks for all available options as seen in the 'Help>Installed Options...' dialog.
To change the behavior and have PADS Layout look for only those licenses that you have available, you can uncheck the 'Checkout all available options' and then uncheck the 'Not Available' options.
Note: If you add option licenses to your license server, PADS Layout will not pick these up (it's no longer looking for all available licenses). You would need to set the 'Checkout all available options' again, temporarily, to see what new options have become available.
The server hostids of the licenses to be combined must be identical. For example: License file 1: SERVER mozart 0050CCA420A3 1717 License file 2: SERVER server 0050CCA420A3 1700 In this example, the MAC address of the machine being used for the server is being used as the hostid and the server hostid of each file is exactly the same: 0050CCA420A3.
You can either group all of the DAEMON lines together at the beginning of the file:
SERVER mozart 0050CCA420A3 1717 DAEMON mgcld C:\MentorGraphics\Licensing\mgcld.exe DAEMON summit.d C:\Summit\summit.d
Or you can separate licenses according to daemon:
SERVER mozart 0050CCA420A3 1717 DAEMON mgcld C:\MentorGraphics\Licensing\mgcld.exe INCREMENT padses_c ...
DAEMON summit.d C:\Summit\summit.d
Note: The DAEMON line must appear in the license file before the first INCREMENT line that utilizes that vendor daemon.
We often see strange problems when the wrong characters are used to separate multiple license servers or license files in either the MGLS_LICENSE_FILE or LM_LICENSE_FILE variable.
The FlexNet standard is as follows:
Multiple independent servers and/or license files - colon ":" on Unix/Linux and semicolon ";" on Windows
For ex: MGLS_LICENSE_FILE=1717@server1;1717@server2;C:\MentorGraphics\License_Files\local_license.dat
This is a Windows example and the semicolons are used because a colon indicates a drive letter. Use colons on Unix/Linux.
A set of redundant servers - commas on both Windows and Linux
For ex: MGLS_LICENSE_FILE=1717@serverA,1717@serverB,1717@serverC:1717@local_server
Notice that the servers in the redundant cluster of serverA/serverB/serverC are separated by commas but the cluster as a whole is separated by a colon from the independent local_server. This would be a Unix/Linux example.
If you're not sure whether your license file will run the latest release of PADS Flow, or maybe you want to check the minimum license version date requirement for an older release, refer to the information in the following document.
We often get asked which license features are required by our applications and that can sometimes be difficult to answer due to a number of factors. However, we have the capability to output a debug log file for licensing that will show you the requested and granted license features for the application you're running. It's fairly simple to generate this debug file:
Set the MGLS_DEBUG_LOG_DIR environment variable to a writeable directory.
Run the application, using functionality that will consume a license.
Exit the application.
Check the specified directory.
The license transaction information is written to the end of the log file:
When starting or troubleshooting a license server, it's handy to have a way to verify a license checkout without having to run an application. We have two utilities to help you do just that.
On Linux we use the mgls_ok utility. Most applications have the mgls_ok utility located within the application tree's bin directory. However, you may need to set the MGLS_HOME variable to the application tree or the mgls package within it. For a standalone licensing tree, set MGLS_HOME to the top level folder (e.g.: mgls_v9-7_2-3-0.ixl). You'll also need to copy the mgc.pkginfo file to the lib directory. You can download that here. Make sure your MGLS_LICENSE_FILE variable is set to your license file or license server (port@host).
Once you have the the MGLS_HOME and MGLS_LICENSE_FILE variables set and the mgc.pkginfo file copied, the command to check out a license feature is simple:
$ $MGLS_HOME/bin/mgls_ok msimhdlsim
Checking availability of "msimhdlsim".
License granted through "msimhdlsim".
On Windows, we use the pcls_ok utility which provides a GUI. With the licensing software installed, you can access the pcls_ok utility from the Start Menu> All Programs> Mentor Graphics Licensing> pcls_ok. You can also navigate to C:\MentorGraphics\Licensing or possibly find pcls_ok in your applications start menu or tree. Here's an example of the pcls_ok interface:
The nice thing about the pcls_ok interface is it shows you the value of MGLS_LICENSE_FILE, which makes it easy to verify and know where you're attempting to get licenses from.
To check out a feature, just pick one from your license file and type or paste it into the Feature: field. Then, click Apply. A successful checkout will look like this:
If the checkout fails, A dialog will appear with an error message.
Mentor Graphics applications using floating licenses depend on a license server running a version of FlexNet that is equal to or greater than the version of FlexNet the client application was built with. Also, our vendor daemon (mgcld) requires a FlexNet License Manager daemon (lmgrd) that is equal to or greater than the version of FlexNet our vendor daemon was built on. Failing to follow these requirements in your environment can lead strange behavior and a loss of productivity. Some symptoms may include:
Error "Vendor daemon is too old."
Checkout failures without a specific error message.
Failure of the license server to start.
Failure to write the report log.
Incorrect license counts.
What this boils down to is the importance of keeping your license server one step ahead of your applications. You can check the release notes for the Mentor Graphics applications you're running to determine license server version requirements. Furthermore, when updating your license server, you must ensure that you update both the lmgrd and mgcld.
Download the latest release of Mentor Standard Licensing, including verifying your daemon versions and updating your server:
Setting up license servers, RSCM servers, DMS servers, etc..., they all require you to select an available port. Guessing just leads to frustration but fortunately, determining which ports are available is fairly simple. The netstat command works on both Windows and Linux and will show you which ports are in use and the processes that are using them. For example:
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:111 0.0.0.0:0 LISTENING 2856
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 856
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:902 0.0.0.0:0 LISTENING 2968
TCP 0.0.0.0:912 0.0.0.0:0 LISTENING 2968
TCP 0.0.0.0:1158 0.0.0.0:0 LISTENING 17196
-- More --
More specifically, you can check if a particular port is in use:
C:\>netstat -ano | find /i "1718"
TCP 0.0.0.0:1718 0.0.0.0:0 LISTENING 2528
$ netstat -tulpn | grep 1717
tcp 0 0 0.0.0.0:1717 0.0.0.0:* LISTEN 21066/lmgrd
Note: You'll need to be root to run netstat effectively.
Once you have this port usage information, you can make decisions about which ports you want your server processes to use.
Feel free to share your tips and ideas on this topic in the comments.
You might find yourself with a license file that has the Ethernet address of your license server but you have no idea which of your network hosts that Ethernet address resolves to. You could labor through a manual verification of every system on your network by loggin in remotely and checking the Ethernet address. On Windows, you might use a network utility like Wireshark (http://www.wireshark.org), which might actually work very well. But what if you're on Linux or Solaris? Fortunately, the ARP table can help you solve this problem.
ARP stands for Address Resolution Protocol (http://en.wikipedia.org/wiki/Address_Resolution_Protocol) and is the means of address resolution on your network. As network communication between hosts occur, ARP populates a table that contains the physical addresses of the hosts your system is communicating with. While not all hosts are cached in the table at a given time, you can populate the ARP table using ping or arping. Using one of these utilities in a loop can quickly move through all the IP adresses in a subnet and therby populate the ARP table for you.
Once this is done, it rather trivial to grep the ARP table for the Ethernet address you're looking for:
guyw@guyshost$ arp | grep 00:50:56:AB:4D:6E
netsrv-lic-o3.wv.me ether 00:50:56:AB:4D:6E C eth0
So in this case, I now know that 00:50:56:AB:4D:6E resolves to netsrv-lic-o3 and I can proceed with configuring my license server on that system.
There are likely numerous ways to address this problem. Feel free to share your tips with other users in the comments.
Many of your licensing environments are simple enough for you to "set it and forget it". Some may be more complex, involving local license files and pointers to floating servers on the network. Changes may occur over time that require you to point to new license files/servers or reorder them to improve performance and editing your licensing variables on Windows can be difficult. Fortunately, we have two utilities that makes this much easier.
Have you ever wondered what each field in your license is for? The Anatomy of a License File doc explains what each field does and will give you a better understanding of how your license environment works.