tridge at samba.anu.edu.au
Sun Aug 30 11:39:00 GMT 1998
One of the more delicate parts of the browse protocols is browse
synchronisation. This is where a NBT name server (nmbd in our case)
contacts another server to request a list of workgroups and
servers. This is done using a TCP/139 connection to the IPC$ share and
subsequent NetServerEnum calls.
Right now we do these inline in nmbd for two cases:
- we are the DMB and we wish to sync with a LMB for the same workgroup
that has sent us a sync request
- we are a LMB and we wish to sync with the DMB for our workgroup.
The problem with doing these requests in nmbd is that they can take
time, and while they are happening nmbd is blocked. In most situations
this is OK as they are only run every 15 minutes or so and they block
for only a couple of seconds, but it is quite possible for them to
take much longer if the network is misbehaving for some reason. There
is also the problem that with a large number of subnets the number of
browse syncs that the DMB needs to do can grow quite large,
potentially to the point where it spends all its time doing browse
syncs and never answers any normal name queries.
This problem is somewhat similar to the one we solved with the async
dns process, and I think a similar solution is called for. We need to
be able to do asynchronous browse synchronisation requests.
Why am I raising this now? Because I noticed a situation at ANU where
browse lists (in particular workgroup lists) were not being propogated
between subnets and I wanted to fix it by introducing a 3rd type of
browse synchronisation, a inter-DMB sync. Right now we have no
automatic inter-DMB sync (neither does MS) and I think this is at the
heart of the problem of WANs with many separated workgroups not seeing
I could just add another inline browse sync. It would only be a couple
of lines of code. The problem is that the number of DMBs at some sites
could be very large (easily dozens) so if it took just a few seconds
for each sync then nmbd would be "blind" for a significant portion of
the time. That isn't acceptable.
I'm going to start adding the async browse synchronisation, unless
someone knows of a good reason not to!
More information about the samba-technical