[Xymon] xymonnet additional capability -- pause

Jeremy Laidman jeremy at laidman.org
Sun May 30 03:27:48 CEST 2021


Shawn

An alternative to "waiting a tad" might be to flush the queue. Apparently
this can be done by disabling the Nagle algorithm that is designed to
collect multiple chunks in a single TCP segment. It appears that you can
disable Nagle and re-enable it again, to effectively flush the output
queue. A bit more info here:

https://stackoverflow.com/questions/855544/is-there-a-way-to-flush-a-posix-socket

So you might do something like this (although please note that I'm nto a C
programmer):

+               else if (strncmp(l, "flush", 5) == 0) {
+                       int flag=0;
+                       setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char *)
&flag, sizeof(int));
+                       int flag=1;
+                       setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char *)
&flag, sizeof(int));
+               }

Having said that, I don't think this is going to work. The netservices.c
file you're trying to patch is only used when reading the config file. This
is probably why your delay is not affecting the connection - it's probably
delaying only the reading of the configuration file.

I think the file that does the sending is contest.c. I can't see a simple
way of disabling and re-enabling Nagle (as above) at a specific stage in
the dialogue. However it might be possible, notwithstanding the bug
that Ralf mentioned, to introduce a sleep at the point that data are
written (eg after socket(write)).

Cheers
Jeremy


On Sun, 30 May 2021 at 10:19, Ralph M <ralphmitchell at gmail.com> wrote:

> As far as the sleep() thing goes, you may be running into this, from the
> 'man 3 sleep' man page:
>
>    BUGS
>           sleep()  may be implemented using SIGALRM; mixing calls to
> alarm(2) and
>           sleep() is a bad idea.
>
> I don't know how you'd fix it.  Hopefully this gives you a starting point.
>
> Ralph Mitchell
>
>
>
> On Sat, May 29, 2021 at 4:11 PM Shawn Heisey <hobbit at elyograg.org> wrote:
>
>> Over ten years ago, I asked on this list how I could get rid of the
>> "incorrect pipelining message" logged by postfix every time the smtp,
>> smtps, or submission tests are done.
>>
>> https://lists.xymon.com/oldarchive/2010/11/msg00207.html
>>
>> The fix that I claim worked (multiple send commands) was for a job I had
>> at the time.  Now I am have a personal mail server (that also runs
>> xymon) and that fix I mentioned so long ago is not working.
>>
>> I tweaked the code to allow a "pause" action in protocols.cfg and after
>> modifying protocols.cfg to utilize it, I have eliminated the "incorrect
>> command pipelining" message in mail.log.  Here's the patch:
>>
>> --- xymon-4.3.28/lib/netservices.c      2017-01-05 19:00:06.000000000
>> -0700
>> +++ pause-xymon-4.3.28/lib/netservices.c        2021-05-29
>> 12:51:09.717461323 -0600
>> @@ -259,6 +259,10 @@
>>                                  }
>>                          }
>>                  }
>> +               else if (strncmp(l, "pause ", 6) == 0) {
>> +                       int pausetime = atoi(skipwhitespace(l+5));
>> +                       sleep(pausetime);
>> +               }
>>          }
>>
>>          if (fd) stackfclose(fd);
>>
>> Here's the new definitions I created in protocols.cfg:
>>
>> [smtp]
>>     pause 2
>>     send "ehlo xymonnet.localdomain\r\n"
>>     pause 2
>>     send "mail\r\n"
>>     pause 2
>>     send "quit\r\n"
>>     expect "220"
>>     options banner
>>     port 25
>>
>> [smtps]
>>     pause 2
>>     send "ehlo xymonnet.localdomain\r\n"
>>     pause 2
>>     send "mail\r\n"
>>     pause 2
>>     send "quit\r\n"
>>     expect "220"
>>     options ssl,banner
>> #  No default port-number assignment for smtps - nonstandard according
>> to IANA
>>
>> [submission|msa]
>>     pause 2
>>     send "ehlo xymonnet.localdomain\r\n"
>>     pause 2
>>     send "mail\r\n"
>>     pause 2
>>     send "quit\r\n"
>>     expect "220"
>>     options banner
>>     port 587
>>
>>
>> And this is now what I see in mail.log (testing smtps and submission:
>>
>> May 29 13:51:15 bilbo postfix/submission/smtpd[16324]: connect from
>> bilbo.elyograg.org[172.31.8.104]
>> May 29 13:51:15 bilbo postfix/submission/smtpd[16324]: disconnect from
>> bilbo.elyograg.org[172.31.8.104] quit=1 commands=1
>> May 29 13:51:15 bilbo postfix/smtps/smtpd[16325]: connect from
>> bilbo.elyograg.org[172.31.8.104]
>> May 29 13:51:15 bilbo postfix/smtps/smtpd[16325]: disconnect from
>> bilbo.elyograg.org[172.31.8.104] quit=1 commands=1
>>
>> Interesting thing here is that it's not actually pausing.  Which
>> probably means that I implemented it incorrectly.  My training on C is
>> ancient and I'm very rusty.  But even though it doesn't pause, the error
>> is gone, simply because each smtp command is now sent in a separate
>> packet, which appears to *sometimes* be enough "delay" for postfix to
>> not complain about pipelining.  What happens now is occasionally I will
>> get a yellow status on smtps with the xymon UI saying "Service smtps on
>> bilbo.elyograg.org is not OK : Unexpected service response".
>>
>> So I think what I will do before submitting a patch is implement a
>> "null" action (which will do nothing) as well as a "pause" action, and
>> get some help from the real C developers here for making "pause" behave
>> as advertised.  Can somebody point me to some instructions on properly
>> creating and submitting a patch?  Also, if I could get some info on any
>> other files I need to modify (man pages, readme files, etc), I would
>> really appreciate it.
>>
>> Thanks,
>> Shawn
>> _______________________________________________
>> Xymon mailing list
>> Xymon at xymon.com
>> http://lists.xymon.com/mailman/listinfo/xymon
>>
> _______________________________________________
> Xymon mailing list
> Xymon at xymon.com
> http://lists.xymon.com/mailman/listinfo/xymon
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.xymon.com/pipermail/xymon/attachments/20210530/2aeddf18/attachment.htm>


More information about the Xymon mailing list