[Linux-decnet-commit] CVS: latd configure.in,1.9,1.10 server.cc,1.76,1.77
Brought to you by:
chrissie_c,
ph3-der-loewe
From: Patrick C. <pa...@us...> - 2004-01-06 09:29:05
|
Update of /cvsroot/linux-decnet/latd In directory sc8-pr-cvs1:/tmp/cvs-serv11473 Modified Files: configure.in server.cc Log Message: Add configure option to disable the default login service. Don't send out service multicasts if we have no services to advertise. Index: configure.in =================================================================== RCS file: /cvsroot/linux-decnet/latd/configure.in,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** configure.in 5 Jan 2004 13:13:47 -0000 1.9 --- configure.in 6 Jan 2004 09:29:02 -0000 1.10 *************** *** 147,150 **** --- 147,159 ---- AC_DEFINE_UNQUOTED(LLOGIN_SOCKNAME, "$LLOGINSOCK") + + dnl Disable default login service + AC_ARG_ENABLE(defservice, + [ --disable-defservice disable default login service], + [ ], [enable_defservice=yes]) + if test "x$enable_defservice" = "xyes"; then + CXXFLAGS="${CXXFLAGS-} -DENABLE_DEFAULT_SERVICE" + fi + dnl Configure debugging and/or warnings. AC_ARG_ENABLE(debug, Index: server.cc =================================================================== RCS file: /cvsroot/linux-decnet/latd/server.cc,v retrieving revision 1.76 retrieving revision 1.77 diff -C2 -r1.76 -r1.77 *** server.cc 5 Jan 2004 13:13:47 -0000 1.76 --- server.cc 6 Jan 2004 09:29:02 -0000 1.77 *************** *** 204,332 **** char *myname; ! LAT_ServiceAnnounce *announce = (LAT_ServiceAnnounce *)packet; ! ptr = sizeof(LAT_ServiceAnnounce); ! ! announce->cmd = LAT_CCMD_SERVICE; ! announce->circuit_timer = circuit_timer; ! announce->hiver = LAT_VERSION; ! announce->lover = LAT_VERSION; ! announce->latver = LAT_VERSION; ! announce->latver_eco = LAT_VERSION_ECO; ! announce->incarnation = --multicast_incarnation; ! announce->flags = 0x1f; ! announce->mtu = dn_htons(1500); ! announce->multicast_timer = multicast_timer; ! if (do_shutdown) ! { ! announce->node_status = 3; // Not accepting connections ! } ! else ! { ! announce->node_status = 2; // Accepting connections ! } ! ! // Send group codes ! if (groups_set) ! { ! announce->group_length = 32; ! memcpy(&packet[ptr], groups, 32); ! ptr += 32; ! announce->flags |= 1; ! } ! else { ! announce->group_length = 1; ! packet[ptr++] = 01; ! } ! ! /* Get host info */ ! uname(&uinfo); ! // Node name ! myname = (char*)get_local_node(); ! packet[ptr++] = strlen(myname); ! strcpy((char*)packet+ptr, myname); ! ptr += strlen(myname); ! ! // Greeting ! packet[ptr++] = strlen((char*)greeting); ! strcpy((char*)packet+ptr, (char*)greeting); ! ptr += strlen((char*)greeting); ! ! // Number of services ! packet[ptr++] = servicelist.size(); ! std::list<serviceinfo>::iterator i(servicelist.begin()); ! for (; i != servicelist.end(); i++) ! { ! // Service rating ! unsigned char real_rating; ! if (i->get_static()) { ! real_rating = i->get_rating(); } else { ! /* Calculate dynamic rating */ ! real_rating = (unsigned char)(i->get_rating() / (get_loadavg()+1.0)); ! debuglog(("Dynamic service rating is %d\n", real_rating)); ! } ! packet[ptr++] = real_rating; ! ! // Service name ! const std::string name = i->get_name(); ! packet[ptr++] = name.length(); ! strcpy((char *)packet+ptr, i->get_name().c_str()); ! ptr += name.length(); ! ! // Service Identification ! std::string id = i->get_id(); ! if (id.length() == 0) ! { ! // Default service identification string ! char stringbuf[1024]; ! sprintf(stringbuf, "%s %s", uinfo.sysname, uinfo.release); ! id = std::string(stringbuf); ! } ! ! packet[ptr++] = id.length(); ! strcpy((char *)packet+ptr, id.c_str()); ! ptr += id.length(); ! ! // Make sure the service table knows about all our services ! unsigned char dummy_macaddr[6]; ! memset(dummy_macaddr, 0, sizeof(dummy_macaddr)); ! if (!do_shutdown) ! LATServices::Instance()->add_service(std::string((char*)get_local_node()), ! name, ! id, real_rating, 0, dummy_macaddr); ! } ! ! // Not sure what node service classes are ! // probably somthing to do with port services and stuff. ! packet[ptr++] = 0x01; // Node service classes length ! packet[ptr++] = 0x01; // Node service classes ! packet[ptr++] = 0x00; ! packet[ptr++] = 0x00; ! ! unsigned char addr[6]; ! /* This is the LAT multicast address */ ! addr[0] = 0x09; ! addr[1] = 0x00; ! addr[2] = 0x2b; ! addr[3] = 0x00; ! addr[4] = 0x00; ! addr[5] = 0x0f; ! for (int i=0; i<num_interfaces;i++) ! { ! if (iface->send_packet(interface_num[i], addr, packet, ptr) < 0) { ! debuglog(("sending service announcement, send error: %d\n", errno)); ! interface_error(interface_num[i], errno); } else ! interface_errs[interface_num[i]] = 0; // Clear errors ! } /* Send it every minute */ signal(SIGALRM, &alarm_signal); --- 204,335 ---- char *myname; ! // Only send it if we have some services ! if (servicelist.size()) { ! LAT_ServiceAnnounce *announce = (LAT_ServiceAnnounce *)packet; ! ptr = sizeof(LAT_ServiceAnnounce); ! announce->cmd = LAT_CCMD_SERVICE; ! announce->circuit_timer = circuit_timer; ! announce->hiver = LAT_VERSION; ! announce->lover = LAT_VERSION; ! announce->latver = LAT_VERSION; ! announce->latver_eco = LAT_VERSION_ECO; ! announce->incarnation = --multicast_incarnation; ! announce->flags = 0x1f; ! announce->mtu = dn_htons(1500); ! announce->multicast_timer = multicast_timer; ! if (do_shutdown) { ! announce->node_status = 3; // Not accepting connections } else { ! announce->node_status = 2; // Accepting connections ! } ! // Send group codes ! if (groups_set) { ! announce->group_length = 32; ! memcpy(&packet[ptr], groups, 32); ! ptr += 32; ! announce->flags |= 1; } else ! { ! announce->group_length = 1; ! packet[ptr++] = 01; ! } ! ! /* Get host info */ ! uname(&uinfo); ! ! // Node name ! myname = (char*)get_local_node(); ! packet[ptr++] = strlen(myname); ! strcpy((char*)packet+ptr, myname); ! ptr += strlen(myname); ! ! // Greeting ! packet[ptr++] = strlen((char*)greeting); ! strcpy((char*)packet+ptr, (char*)greeting); ! ptr += strlen((char*)greeting); ! ! // Number of services ! packet[ptr++] = servicelist.size(); ! std::list<serviceinfo>::iterator i(servicelist.begin()); ! for (; i != servicelist.end(); i++) ! { ! // Service rating ! unsigned char real_rating; ! if (i->get_static()) ! { ! real_rating = i->get_rating(); ! } ! else ! { ! /* Calculate dynamic rating */ ! real_rating = (unsigned char)(i->get_rating() / (get_loadavg()+1.0)); ! debuglog(("Dynamic service rating is %d\n", real_rating)); ! } ! packet[ptr++] = real_rating; ! ! // Service name ! const std::string name = i->get_name(); ! packet[ptr++] = name.length(); ! strcpy((char *)packet+ptr, i->get_name().c_str()); ! ptr += name.length(); ! ! // Service Identification ! std::string id = i->get_id(); ! if (id.length() == 0) ! { ! // Default service identification string ! char stringbuf[1024]; ! sprintf(stringbuf, "%s %s", uinfo.sysname, uinfo.release); ! id = std::string(stringbuf); ! } ! ! packet[ptr++] = id.length(); ! strcpy((char *)packet+ptr, id.c_str()); ! ptr += id.length(); ! ! // Make sure the service table knows about all our services ! unsigned char dummy_macaddr[6]; ! memset(dummy_macaddr, 0, sizeof(dummy_macaddr)); ! if (!do_shutdown) ! LATServices::Instance()->add_service(std::string((char*)get_local_node()), ! name, ! id, real_rating, 0, dummy_macaddr); ! } ! ! // Not sure what node service classes are ! // probably somthing to do with port services and stuff. ! packet[ptr++] = 0x01; // Node service classes length ! packet[ptr++] = 0x01; // Node service classes ! packet[ptr++] = 0x00; ! packet[ptr++] = 0x00; ! ! unsigned char addr[6]; ! /* This is the LAT multicast address */ ! addr[0] = 0x09; ! addr[1] = 0x00; ! addr[2] = 0x2b; ! addr[3] = 0x00; ! addr[4] = 0x00; ! addr[5] = 0x0f; + for (int i=0; i<num_interfaces;i++) + { + if (iface->send_packet(interface_num[i], addr, packet, ptr) < 0) + { + debuglog(("sending service announcement, send error: %d\n", errno)); + interface_error(interface_num[i], errno); + } + else + interface_errs[interface_num[i]] = 0; // Clear errors + } + } /* Send it every minute */ signal(SIGALRM, &alarm_signal); *************** *** 1037,1044 **** --- 1040,1049 ---- } + #ifdef ENABLE_DEFAULT_SERVICE // Add the default session servicelist.push_back(serviceinfo(_service, _rating, _static_rating)); + #endif strcpy((char *)greeting, _greeting); |