Here's a preliminary hack against .11, doesn't even have a ChangeLog.
Reporting via /stats v. It works ok with a non-AsLL 2.10.11 server, and
presumably with a .10 too. I'm curious if this is what you had in mind.
Also note that, at least for now, the upstream/downstream lag calculations
rely on the two servers' clocks being sychronized. RTT will always be
correct.
--
Alex "Vampire-" Badea * Undernet Coder-Com contributer
? tools/mkpasswd
Index: include/struct.h
===================================================================
RCS file: /home/coder-com/cvs/ircu2.10/include/struct.h,v
retrieving revision 1.2.46.2
diff -u -r1.2.46.2 struct.h
--- include/struct.h 2002/02/03 20:31:46 1.2.46.2
+++ include/struct.h 2002/06/04 21:45:36
@@ -52,6 +52,10 @@
unsigned short nn_last; /* Last numeric nick for p9 servers only */
unsigned int nn_mask; /* [Remote] FD_SETSIZE - 1 */
char nn_capacity[4]; /* numeric representation of server capacity */
+
+ unsigned long asll_rtt; /* AsLL round-trip time */
+ unsigned long asll_to; /* AsLL upstream lag */
+ unsigned long asll_from; /* AsLL downstream lag */
char *last_error_msg; /* Allocated memory with last message receive with an
ERROR */
char by[NICKLEN + 1];
Index: ircd/ircd.c
===================================================================
RCS file: /home/coder-com/cvs/ircu2.10/ircd/ircd.c,v
retrieving revision 1.51.2.6
diff -u -r1.51.2.6 ircd.c
--- ircd/ircd.c 2002/05/10 11:58:20 1.51.2.6
+++ ircd/ircd.c 2002/06/04 21:45:36
@@ -41,6 +41,7 @@
#include "msg.h"
#include "numeric.h"
#include "numnicks.h"
+#include "opercmds.h"
#include "parse.h"
#include "res.h"
#include "s_auth.h"
@@ -410,7 +411,8 @@
if (IsUser(cptr))
sendrawto_one(cptr, MSG_PING " :%s", cli_name(&me));
else
- sendcmdto_one(&me, CMD_PING, cptr, ":%s", cli_name(&me));
+ sendcmdto_one(&me, CMD_PING, cptr, "%s %s %s", cli_name(&me),
+ cli_name(cptr), militime(NULL, NULL));
}
expire = cli_lasttime(cptr) + max_ping * 2;
Index: ircd/m_ping.c
===================================================================
RCS file: /home/coder-com/cvs/ircu2.10/ircd/m_ping.c,v
retrieving revision 1.6.2.1
diff -u -r1.6.2.1 m_ping.c
--- ircd/m_ping.c 2001/10/30 20:47:44 1.6.2.1
+++ ircd/m_ping.c 2002/06/04 21:45:36
@@ -140,6 +140,7 @@
#include "msg.h"
#include "numeric.h"
#include "numnicks.h"
+#include "opercmds.h"
#include "s_debug.h"
#include "send.h"
@@ -239,6 +240,14 @@
}
origin = parv[1];
destination = parv[2]; /* Will get NULL or pointer (parc >= 2!!) */
+
+ if (parc > 4) {
+ /* AsLL ping, send reply back */
+ int diff = atoi(militime(parv[3], parv[4]));
+ sendcmdto_one(&me, CMD_PONG, sptr, "%C %s %s %s %d %s", &me, origin,
+ parv[3], parv[4], diff, militime(NULL, NULL));
+ return 0;
+ }
if (!EmptyString(destination) && 0 != ircd_strcmp(destination, cli_name(&me))) {
if ((acptr = FindServer(destination))) {
Index: ircd/m_pong.c
===================================================================
RCS file: /home/coder-com/cvs/ircu2.10/ircd/m_pong.c,v
retrieving revision 1.12
diff -u -r1.12 m_pong.c
--- ircd/m_pong.c 2001/06/29 15:51:02 1.12
+++ ircd/m_pong.c 2002/06/04 21:45:36
@@ -89,6 +89,7 @@
#include "msg.h"
#include "numeric.h"
#include "numnicks.h"
+#include "opercmds.h"
#include "s_user.h"
#include "send.h"
@@ -119,6 +120,14 @@
cli_flags(cptr) &= ~FLAGS_PINGSENT;
cli_flags(sptr) &= ~FLAGS_PINGSENT;
cli_lasttime(cptr) = CurrentTime;
+
+ if (parc > 7) {
+ /* AsLL pong */
+ cli_serv(cptr)->asll_rtt = atoi(militime(parv[3], parv[4]));
+ cli_serv(cptr)->asll_to = atoi(parv[5]);
+ cli_serv(cptr)->asll_from = atoi(militime(parv[6], parv[7]));
+ return 0;
+ }
if (!EmptyString(destination) && 0 != ircd_strcmp(destination, cli_name(&me))) {
struct Client* acptr;
Index: ircd/m_stats.c
===================================================================
RCS file: /home/coder-com/cvs/ircu2.10/ircd/m_stats.c,v
retrieving revision 1.22.2.4
diff -u -r1.22.2.4 m_stats.c
--- ircd/m_stats.c 2002/06/04 18:22:13 1.22.2.4
+++ ircd/m_stats.c 2002/06/04 21:45:36
@@ -187,7 +187,7 @@
* uppercase 'V' is for machine-readable */
if (stat == 'v')
send_reply(sptr, SND_EXPLICIT | RPL_STATSVERBOSE,
- "%-20s %-20s Burst Hops Numeric Lag Clients/Max Proto "
+ "%-20s %-20s Burst Hops Numeric Lag RTT Up Down Clients/Max Proto
+"
"%-10s :Info", "Servername", "Uplink", "LinkTS");
for (acptr = GlobalClientList; acptr; acptr = cli_next(acptr))
@@ -195,7 +195,7 @@
if (!IsServer(acptr) && !IsMe(acptr))
continue;
send_reply(sptr, SND_EXPLICIT | RPL_STATSVERBOSE, stat == 'v' ?
- "%-20s %-20s %c%c %4i %s %-4i %5i %5i %5i P%-2i %Tu :%s" :
+ "%-20s %-20s %c%c %4i %s %-4i %5i %4i %4i %4i %5i %5i P%-2i %Tu
+:%s" :
"%s %s %c%c %i %s %i %i %i %i P%i %Tu :%s",
cli_name(acptr),
cli_name(cli_serv(acptr)->up),
@@ -205,6 +205,9 @@
NumServ(acptr),
base64toint(cli_yxx(acptr)),
cli_serv(acptr)->lag,
+ cli_serv(acptr)->asll_rtt,
+ cli_serv(acptr)->asll_to,
+ cli_serv(acptr)->asll_from,
cli_serv(acptr)->clients,
cli_serv(acptr)->nn_mask,
cli_serv(acptr)->prot,
Index: ircd/s_bsd.c
===================================================================
RCS file: /home/coder-com/cvs/ircu2.10/ircd/s_bsd.c,v
retrieving revision 1.45.2.4
diff -u -r1.45.2.4 s_bsd.c
--- ircd/s_bsd.c 2002/01/28 21:06:17 1.45.2.4
+++ ircd/s_bsd.c 2002/06/04 21:45:36
@@ -702,7 +702,8 @@
switch (os_recv_nonb(cli_fd(cptr), readbuf, sizeof(readbuf), &length)) {
case IO_SUCCESS:
if (length) {
- cli_lasttime(cptr) = CurrentTime;
+ if (!IsServer(cptr))
+ cli_lasttime(cptr) = CurrentTime;
if (cli_lasttime(cptr) > cli_since(cptr))
cli_since(cptr) = cli_lasttime(cptr);
cli_flags(cptr) &= ~(FLAGS_PINGSENT | FLAGS_NONL);