I don’t know about you, but I love the Skype for Business location database. You know that little thing that automatically updates your location based on where you are? it doesn’t? Maybe you need to check your LIS config!
As a Skype4B admin setting the LIS up can be a bit of a pain as it requires detailed information from the networking team on each individual subnet in the customers topology and what I find more often than not is that the data provided by the networking team is SuperNetted.
Note: if you know how LIS and supernetting work, skip ahead, but for the rest of us..
About the LIS
The LIS database doesn’t maintain a list of Networks and Subnet masks like CAC and other applications in Skype do, when using IP addresses it relies entirely on the NetworkID of a user to figure out where a user is located.
This NetworkID is calculated by doing some simple math on the users IP address and Subnet mask at the client side and has no regard for routers or even the networking teams map of IP addresses.
For those not of a networking background a NetworkID is the first address of a subnet and it is unusable
To calculate the NetworkID of a user, the Skype4B client simply grabs the current IPAddress and Subnet mask of the client machine, discards the host bits and is left with the NetworkID. What are the host bits? That’s what you tell windows when defining a Subnet mask. Any bits set to 1 in the subnet mask are network bits and any bits set to 0 are host bits. But as we humans aren’t too good with binary we represent it as multiple 8 bit numbers.. hence the term octets (8 bits) I can divulge into deep networking here, but that’s really out of the scope of this article.
In the example below. We have a Mask of 255.255.255.0 also known as a /24 as 24 bits are used for the NetworkID
This means the first 24 bits of the IP address are the NetworkID (in green) and the last 8 bits are the Host Bits (in red)
Okay, that’s nice. So now I can be a Cisco engineer. What does that have to do with the LIS?
This is where SuperNetting comes into play. Quite often, network engineers assign blocks of subnets to levels, buildings, locations and then roll these “blocks” of subnets up into SuperNets in their documentation. From a routing perspective this is fine and in fact the preferred method to keep CPU load low. But when a network admin provides a location map. They may say “Location A 10.10.8.0/22” or “Location A 10.10.8.0 255.255.252.0” when in actual fact in this SuperNet is several smaller networks that have been summarized into a SuperNet
10.10.10.0 255.255.255.0 (Our Client is here)
This is important to understand because the Skype4B client is not aware of these other networks so when it performs the LIS lookup process it will look for its own network ID
Our client in this case looks at the IP and Subnet mask and determines a NetworkID of 10.10.10.0 and if we haven’t performed our due diligence on the data provided by the network administrator the entry for the subnet 10.10.10.0 wont exist.. only 10.10.8.0 thus the client fails the LIS lookup and moves on to other methods to determine the users location.
What does this tool do then?
I wrote this tool as a quick and simple way to test if a users IP address is present in the LIS database.
Simply run the tool specifying the IP Address and Mask from machine with the Skype4B management tools installed and it will calculate the network ID based on the details you provided. Then query the LIS db for that NetworkID
If the Subnet is present it’s details will be returned. If not the script will provide feedback suggesting the IP isn’t present or warn you of multiple matches.
You can specify either IP Address and Subnet Mask, or CIDR notation for network nerds like me.
You can grab it from the TechNet Gallery here Download
As alot of my code is open source, I’ve moved from storing my Git repo on VSTS over to GitHub. Feel free to fork the code for your own purposes over here
Minor Bug Fix Release
Fixed Auto Update URL
Fixed Various Typos
Flattened GitHub structure