diff options
Diffstat (limited to 'source/nameannounce.doc')
-rw-r--r-- | source/nameannounce.doc | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/source/nameannounce.doc b/source/nameannounce.doc new file mode 100644 index 00000000000..41759526c6d --- /dev/null +++ b/source/nameannounce.doc @@ -0,0 +1,207 @@ +this module deals with announcements: the sending of announcement requests +and the sending of announcements either to refresh other servers' records +or as a response to announcement requests. + + +/************************************************************************* + announce_master() + *************************************************************************/ + +this function is responsible for announcing samba as a master browser +to all known primary domain controllers. + +this announcement is sent out at CHECK_TIME_MST_ANNOUNCE minute +intervals, only if samba is a master browser on one or more of +its local interfaces. + +if no domain controller has been specified (lp_domain_controller()) +samba goes through its list of servers looking for primary domain +controllers. when it finds one (other than itself) it will either +initiate a NAME_QUERY_PDC_SRV_CHK by broadcast or with a WINS +server. this will result in a NAME_STATUS_PDC_SRV_CHK, which +will result in a sync browse list and an announcement +ANN_MasterAnnounce being sent (see sync_server()). + +if a domain controller has been specified, samba will search for +a primary domain controller for its workgroup (either by directed +packet or by broadcast if it cannot resolve the domain controller +name using DNS), which results in the same action as listed above. + +------------ +NOTE FROM TRIDGE: + +PDC in the above should really be DMB (domain master browser). They +might be separate entities. + +I also propose a simpler scheme :-) + +If a DMB is not configured with lp_domain_controller() (perhaps +renamed to lp_domain_master()?) then just don't do master +announcements. Remember that most peoples networks are very simple and +don't need DMB capabilities. Those that do need them will have more +complex network topologies and they really need to choose themselves +which box will act as the "hub" for netbios name resolution. Doing it +via name queries will just lead to lag and propogation delays, because +if two parts of the net choose different DMBs then the data will be +very slow to propoogate. + +If a DMB is configured then just sent the master announcemnt to that +box! Thats all that needs to be done. Just send a udp 138 packet and +forget it. If the recipient is indeed a DMB (as it should be if the +config file is correct) then it should initiate a browse list sync +with us at some later time, but that is take care of by smbd and nmbd +doesn't even need to know it happened. + +Additionally, if a DMB is configured we need to sync our workgroup +list and server list with them occasionally. Note that this is only +time a non-DMB should do a browse sync, and it should only do it with +a DMB. Essentially WAN based netbios is just a simple star. There is a +DMB in the centre, and the individual master browsers for each subnet +talk to it, but never talk to each other. If they start talking to +each other then the network load will go as the square of the number +of machines, which will result in meltdown :-) +------------- + + +/************************************************************************* + announce_host() + *************************************************************************/ + +this complex-looking function is responsible for announcing samba's +existence to other servers by broadcast. the actual announcement +is carried out by announce_server(). + +the time period between samba's announcement will stretch from one +minute to twelve minutes by one minute. if samba has received an +announce request from a master browser, then it should answer at +any random interval between zero and thirty seconds after the +request is received. this is to ensure that the master browser +does not get overloaded with responses! + + +/************************************************************************* + announce_server() + *************************************************************************/ + +this function is responsible for sending announcement packets. +these packets are received by other servers, which will then +update their records accordingly: what services we have, our +name, our comment field and our time to live (to name a few). + +if we are a master browser, then using do_announce_host() we +must send an announcement notifying members of that workgroup +that we are their master browser, and another announcement +indicating to all backup browsers and master browsers that +we are a master browser. + +(note: if another master browser receives this announcement +and thinks that it is also the master browser for this +workgroup, it stops being a master browser and forces an +election). + +if we are not a master browser, then we send an announcement +notifying the master browser that we are a member of its +workgroup. + + +/************************************************************************* + remove_my_servers() + *************************************************************************/ + +this function is responsible for informing other servers that +samba is about to go down. it announces, on all subnets, that +samba's time to live is zero and that it has no services. + + +/************************************************************************* + do_announce_host() + *************************************************************************/ + +this function is responsible for sending out an announcement +MAILSLOT browse packet. it contains information such as the +time to live, name of the server, services that the server +offers etc. + +the format of this MAILSLOT browse packet is described in +draft-heizer-cifs-v1-spec-00.txt 3.9.50.4.1 page 165-6. + + +/************************************************************************* + announce_backup() + *************************************************************************/ + +this function is responsible for getting master browsers and domain +controllers to send us lists of backup servers. this is done by +sending an ANN_GetBackupListReq browse mailslot. + +the master browser, or primary domain controller, should respond +with an ANN_GetBackupListResp browse mailslot containing the list +of backup servers. + +-------------- +NOTE FROM TRIDGE: I don't see why nmbd should ever send one of +these. The only reason I can see for any part of Samba sending one of +these is if we implement it in smbclient. + +This packet is used to request a list of backup master browsers from +the master browser. It is used by clients (not servers!) to spread the +browse load over more than one server. The only server that needs to +know what the list of backups is is the master browser, and as it is +also responsible for generating this list it will never ask anyone +else for it. +-------------- + + +/************************************************************************* + sync_server() + *************************************************************************/ + +this function is responsible for initiating a sync browse list +sequence and, if necessary, carrying out an ANN_MasterAnnouncement +to the primary domain controller (that we are also sync'ing +browse lists with). + +see nameservresp.c:response_name_status_check(). + + +/************************************************************************* + announce_request() + *************************************************************************/ + +this function is responsible for sending an announcement request to +another server. this server should respond with an announcement. + +if the announce request is sent to WORKGROUP(0x1e) then members of +the workgroup will respond (with ANN_HostAnnounce packets) + +if the announce request is sent to WORKGROUP(0x1d) then the master +browser of the workgroup should respond (ANN_LocalMasterAnnounce). +this is untested. + +if the announce request is sent to ^1^2__MSBROWSE__^2(0x1) then +(and this is pure speculation), all backup browsers and master +browsers should respond with ANN_DomainAnnounce packets. +this is untested. + +----------- +NOTE FROM TRIDGE: + +I had great trouble getting machines to actually respond to this +packet. Either we have the format wrong or MS chose not to implement +it. + +Not implementing it doesn't break anything, it just means a new master +browser won't get a complete server list as quickly. + +Also note that this packet should be used as little as possible as it +could easily cause meltdown if too many servers used it. Imagine a +dozen samba servers on a net all sending this packet! You will get 244 +responses all within 30 seconds. now imagine 50 samba servers .... + +So I think we should restrict ourselves to sending this packet only if +we are already the master browser for a workgroup. We could send a +single "announce request" when we become the master, just to prime our +server lists. From then on the normal announce cycles should take care +of keeping it uptodate. +----------- + |