Mapping your network with Windows 7

Link Layer Topology Discovery first appeared when Windows Vista came out in 2006, but wasn’t very exciting back then, as most people playing with Vista had existing home networks full of XP, which doesn’t support LLTD by default. Now, though, with Vista machines more common and regular people up to testing Windows 7, it’s becoming more than just a curiosity: it actually works now.

networkmap

This is Windows 7’s network mapper in action at a recent LAN gathering. C7 and Pitchblack aren’t shown in the map; those PCs were running Windows XP and Ubuntu Linux respectively, both of which need a little tweaking to show up properly in Vista/7’s network mapper.

LLTD on Windows XP

lltd-error

Microsoft publish an LLTD responder for XP, but you can’t install it directly if you already have service pack 3 – it’ll tell you something cryptic about how this update is too new and already installed anyway and that you’re basically wasting your time. Which is not very helpful, and actually incorrect, but whatever.

There is a workaround, involving extracting files from that installer and manually placing them in various Windows folders yourself, but like a couple of the commenters there, I got the “failed to install MS_RSPNDR” error. Probably the easiest reliable method would be this:

  1. Extract the files as explained in that workaround, from the commandline, using the -x switch. Or download the same files in a zip file from my server here: https://tim.id.au/static/WindowsXP-KB922120-v5-x86-ENU.zip
  2. Go to Network Connections in Control Panel, right-click your network adapter (wired or wireless, doesn’t matter), and click on Properties.
    lltd-connections
  3. Click the Install… button, select Protocol, click Have Disk… and browse to and select rspndr.inf (you can find it in \SP2QFE\ip\ or \ic\ in my zip file above).
    lltd-properties lltd-protocol
  4. Click OK twice, and it should add the Link-Layer Topology Discovery Responder to the “This connection uses the following items:” list. Reboot, and your XP machine should now appear correctly in the network map on a Windows Vista or 7 PC.
    lltd-responder

Note that this has nothing at all to do with sharing files on a network between XP and Vista; this is just to make XP show up properly in Vista/7’s network mapper. If you’re having filesharing issues, I suggest taking a look at this and/or this.

LLTD on Linux

Microsoft also have a “development kit” for Rally products, including generic C code for an LLTD responder. It has been successfully compiled and run on Debian – here‘s that walkthrough. I had a go at setting it up on Ubuntu 8.04 using his instructions, but ran into a pile of errors:

tim@isengard:~/lltd/Sample Code/native-linux$ sudo make
gcc -pipe -Wall -Wno-unused -O3 -g   -c -o osl-linux.o ../src/osl-linux.c
In file included from ../src/osl-linux.c:46:
/usr/include/linux/wireless.h:4: error: expected identifier or '(' before '/' token
In file included from ../src/osl-linux.c:46:
/usr/include/linux/wireless.h:7:17: error: too many decimal points in number
/usr/include/linux/wireless.h:9: error: stray '@' in program
/usr/include/linux/wireless.h:904: error: field 'nwid' has incomplete type
/usr/include/linux/wireless.h:909: error: field 'sens' has incomplete type
/usr/include/linux/wireless.h:910: error: field 'bitrate' has incomplete type
/usr/include/linux/wireless.h:911: error: field 'txpower' has incomplete type
/usr/include/linux/wireless.h:912: error: field 'rts' has incomplete type
/usr/include/linux/wireless.h:913: error: field 'frag' has incomplete type
/usr/include/linux/wireless.h:915: error: field 'retry' has incomplete type
/usr/include/linux/wireless.h:918: error: field 'power' has incomplete type
/usr/include/linux/wireless.h:924: error: field 'param' has incomplete type
In file included from ../src/lld2d_types.h:86,
                 from ../src/globals.h:58,
                 from ../src/osl-linux.c:62:
[snipped: warnings about ignored attributes]
make: *** [osl-linux.o] Error 1
tim@isengard:~/lltd/Sample Code/native-linux$

I did a bit of googling, but couldn’t find anyone with a solution, just more people with the same problem. If any Linux gurus happen to see this, feel free to leave suggestions in the comments or email me with ideas – I’ll happily credit you if you come up with the fix.

Other thoughts

timsmap

Here’s dexter (W7) and radiostar (XP) back on my home network, along with mothership (Vista) and isengard (Ubuntu).

The laptop’s got an Intel 2915ABG wireless card in it, while mothership has a bargain bin Edimax EW-7128g in it. I guess the Edimax card’s drivers don’t support broadcasting their own signal strength or something.

Wireless access points don’t seem to show up on the map unless they’ve got at least one active client.

Mousing over computers in the map reveals their IP address and MAC address, which would be useful for troubleshooting. Right-click another computer, and you can browse their shared files or start a Remote Desktop session.

Rightclicking the gateway lets you go to your modem’s webconfig, which in 3 years’ time (assuming gradual uptake of Windows 7 over XP) might be a useful shortcut when helping people out on the phone.

5 Responses to “Mapping your network with Windows 7”

  1. bsh says:

    hello,
    i could make it to compile on ubuntu 7.04. the solution is here: http://www.jcxp.net/forums/index.php?showtopic=19789
    read post #14 posted by pgn674.
    i didn’t put the #include in wireless.h, but in osl-linux.c, and then it compiled successfully (but with many warnings)
    the thing is running on my 7.04 server, and the server then appears on the vista map, but not in the right place. it took over the place of the network switch, while the switch itself is gone.
    but it works.

  2. tim says:

    On a stock install of Ubuntu 8.10, I’ve discovered that with no addition of #include <linux/if.h> anywhere, compilation fails with just one error:

    ../src/state.c: In function ‘state_process_packet’:
    ../src/state.c:179: error: ‘UINT_MAX’ undeclared (first use in this function)
    ../src/state.c:179: error: (Each undeclared identifier is reported only once
    ../src/state.c:179: error: for each function it appears in.)

    A quick google suggests UINT_MAX is defined in limits.h (didn’t expect to find that on Wikipedia!), so I added #include <limits.h> to Sample Code/src/state.c and lo and behold, it compiles and produces the executable file lld2d.

    Run it with sudo ./lld2d -d eth1 (-d means don’t background it, and log errors to the console; eth1 is the relevant network card), and it’s perfectly happy until I refresh the network map on the W7 box, when it hits a segmentation fault and dies.

    There was also a warning just before the segfault, a failure to read /etc/icon.ico. It was the work of a moment to put this wonderful thing there, but it segfaults just the same.

    I’m pretty much stuck here; I don’t have the coding knowledge to trace and fix this. Anyone care to help?

  3. bsh says:

    the limits.h is mentioned in the debian how-to too, but it wasn’t enough to get it to compile, i still needed to include if.h too.
    it works on a vista7-based network, but doesn’t display things correctly. this is how it looks like WITHOUT lld2d running on the server: http://img5.imageshack.us/my.php?image=clipboard01gt7.jpg
    and this is with lld2d: http://img5.imageshack.us/my.php?image=clipboard02pz4.jpg
    as you can see, the server takes over the place of the switch, which is incorrect: the server is on the same switch as the others. the switch is also gone… and notice the wrong icon displayed for the server, too.
    there’s a lld2d.conf file in the source, which contains references for the wrt54gl icon. i have modified this conf file to point to the tux icon (which is also included in the source), and recompiled, but it didn’t help. also tried putting the icons and the config file to the same folder as lld2d, without any effect on the icon. also put the conf and the icon to /etc, no change.
    i think the icon is taken from vista, and for some reason, vista misinterprets the server’s role and place, and identifies as a wireless device, hence the wrong icon.

  4. Tom.B. says:

    Official LLTD Responder for XP SP3 Available

    WindowsXP-KB922120-v6-x86-ENU.exe is available from the KB article. It’s a hotfix so you have to give your e-mail address and MS will e-mail you a link to a zip file and a password for the zip file. To get it, click the hotfix link at the top of the KB article.

  5. Илья Сазонов (from Windows Live) : Опять это Сетевое окружение says:

    […] Но есть обходной путь в виде ручной установки https://tim.id.au/blog/2009/02/01/mapping-your-network-with-windows-7/ Ð’ этой же статье упоминается возможность приобщить к […]