Re: How to achieve O_TTY_INIT when opening a USB modem?

2019-11-24 Thread Jeffrey Walton
On Sun, Nov 24, 2019 at 11:01 PM Philip Guenther  wrote:
>
> On Sun, Nov 24, 2019 at 7:53 PM Jeffrey Walton  wrote:
>>
>> On Sun, Nov 24, 2019 at 10:10 PM Philip Guenther  wrote:
>> >
>> > On Sun, Nov 24, 2019 at 3:11 AM Jeffrey Walton  wrote:
>> >>
>> >> I am struggling to get a USB modem and terminal configured properly
>> >> under OpenBSD. The same code on Linux is fine. The symptom I am seeing
>> >> is a hung read() after issuing ATZ\r to the modem.
>> >>
>> >> I'm guessing there's an uninitialized field in my struct termios tty.
>> >
>> > I'm not sure what you mean by that.  Do you mean you're concerned that 
>> > you're you making a tcsetattr(3) call on an incompletely initialized 
>> > structure?  Or do you mean you're concerned that the initial configuration 
>> > of the tty provided by the kernel is in a "not good" state?
>>
>> I think cfmakeraw is not initializing the structure properly. It is an
>> intermittent failure.
>
> This code is misusing cfmakeraw(3): it needs to call tcgetattr(3) on the tty 
> fd and only call cfmakeraw() on the termios structure that tcgetattr() has 
> filled in.

Ack, thanks.

> (There may be other problems; I only reviewed enough to see that it was 
> violating the rule I mentioned in my previous post.  The _only_ portable way 
> to initialize a struct termios is to use tcgetattr()!)

Ack, thanks.

At the risk of sounding argumentative, the OpenBSD man page on
cfmakeraw [0] does not detail the requirement of using cfmakeraw on a
struct termios obtained from tcgetattr. In fact I specifically avoid
it because Valgrind produced so many findings due to the unmapped
ioctl's.

The Linux man page does not detail the limitation either. But things
"just work" on Linux and it was not a problem.

I suggest adding text similar to the following to the man page (the
first sentence is existing):

The cfmakeraw() function sets the flags stored in the termios
structure to a state disabling all input and output processing,
giving a “raw I/O path”. cfmakeraw() must use a termios
structure obtained from tcgetattr().
(remaining text from man page)

Thanks for the help.

Jeff

[0] https://man.openbsd.org/tcsetattr.3



Re: How to achieve O_TTY_INIT when opening a USB modem?

2019-11-24 Thread Philip Guenther
On Sun, Nov 24, 2019 at 7:53 PM Jeffrey Walton  wrote:

> On Sun, Nov 24, 2019 at 10:10 PM Philip Guenther 
> wrote:
> >
> > On Sun, Nov 24, 2019 at 3:11 AM Jeffrey Walton 
> wrote:
> >>
> >> I am struggling to get a USB modem and terminal configured properly
> >> under OpenBSD. The same code on Linux is fine. The symptom I am seeing
> >> is a hung read() after issuing ATZ\r to the modem.
> >>
> >> I'm guessing there's an uninitialized field in my struct termios tty.
> >
> > I'm not sure what you mean by that.  Do you mean you're concerned that
> you're you making a tcsetattr(3) call on an incompletely initialized
> structure?  Or do you mean you're concerned that the initial configuration
> of the tty provided by the kernel is in a "not good" state?
>
> I think cfmakeraw is not initializing the structure properly. It is an
> intermittent failure.
>

This code is misusing cfmakeraw(3): it needs to call tcgetattr(3) on the
tty fd and only call cfmakeraw() on the termios structure that tcgetattr()
has filled in.

(There may be other problems; I only reviewed enough to see that it was
violating the rule I mentioned in my previous post.  The _only_ portable
way to initialize a struct termios is to use tcgetattr()!)


Philip Guenther


Re: How to achieve O_TTY_INIT when opening a USB modem?

2019-11-24 Thread Philip Guenther
On Sun, Nov 24, 2019 at 3:11 AM Jeffrey Walton  wrote:

> I am struggling to get a USB modem and terminal configured properly
> under OpenBSD. The same code on Linux is fine. The symptom I am seeing
> is a hung read() after issuing ATZ\r to the modem.
>
> I'm guessing there's an uninitialized field in my struct termios tty.
>

I'm not sure what you mean by that.  Do you mean you're concerned that
you're you making a tcsetattr(3) call on an incompletely initialized
structure?  Or do you mean you're concerned that the initial configuration
of the tty provided by the kernel is in a "not good" state?


> The latest Posix provides O_TTY_INIT to ensure a terminal is in a good
> configuration, but OpenBSD does not recognize it.
>
What is the equivalent under OpenBSD?


OpenBSD, like all BSDs, does not require anything special to be done to
initialize a tty on first open.  We can (and I guess we should at this
point) define O_TTY_INIT to be zero.


How do I achieve O_TTY_INIT when
> using a struct termios tty?
>

Before calling tcsetattr(3) you should call tcgetattr(3) to get the tty
device's current settings and only alter the setting you care about.


Philip Guenther


Re: Turn off Swap on boot disk

2019-11-24 Thread gwes

On 11/24/19 9:35 AM, Stuart Henderson wrote:

On 2019-11-22, gwes  wrote:

First, why is your workload causing swapping? That hasn't been
a good idea since the beginning of computing.

Even if the main workload is OK, relinking the kernel (reorder_kernel)
causes swapping on smaller-memory systems.

Been there in 1980 on a KA-10. We fixed the linker to
do multiple passes so it never had to have all the inputs
in core at the same time. Not gonna happen to gnu ld.

Just for giggles I split the link into 4 partials with -r
then linked the partials with the low core.

Reduced RSS from over 200M to about 80M.
The output text size is identical.
Unfortunately some bss allocation changed so I can't
say the output is identical.

That could be tracked down if there were any interest.

Observation: ulimit -d 9 didn't change behavior even
when dsize was well over 100. Or am I assuming wrong things?

I've never seen an Alix so this may be impossible but
why don't you install a larger boot drive?

With how they're often used, it's usually easier to replace the whole
machine. Maybe also cheaper, if they can be replaced by mailing a new
machine rather than having to visit a remote site (swapping the CF card
requires removing the system board from the case, not just opening the
case).

Adding swap on USB is one way to eke out another release or two's use
from the machine that can be done fairly easily without a visit..

All very reasonable when the machine is in someone else's place.
I'm thinking ahead about my little Edgerouter... will I have to
replace that for 6.8? Will i386 die [well, it should have decades ago]

Geoff Steckel



Re: dmesg for Riverbed Steelhead 250/550

2019-11-24 Thread Aaron Mason
On Fri, Nov 22, 2019 at 6:57 PM Mik J  wrote:
>
> Hello,
>
> > The primary and AUX NICs work, the LAN0/0 and WAN0/0 ports do not,
> > likely because there's some GPIO magic required to switch back the
> > relays.
>
> It's strange because when the OS is switched off, the relays are closed (act 
> as a wire). I would have thought at least, you could plug cables on these 
> interfaces and a ping would go through.
>

You would think that, but it seems the Riverbed OS flicks those relays
on boot, and there are configuration commands to flick them back
manually.  There's clearly some magic going on but there doesn't seem
to be any GPIO available, at least not in OpenBSD.

> Which benefits do you find in recycling these hardwares ? What is your usage ?
>

I heard they make good pfSense firewalls, no reason we couldn't do PF
natively :)

They're cheap, low profile, rack mountable devices with ECC memory,
gigabit NICs and (at least for the 550 at the time of manufacture)
somewhat enterprise-grade CPUs.  Most "appliance" style systems one
finds tend to run mobile CPUs or the old Core 2s - or worse, first gen
Atoms.  There's no beating that level of bang for buck.

> Regards
>
>
>
> Le mardi 19 novembre 2019 à 03:45:11 UTC+1, Aaron Mason 
>  a écrit :
>
>
> Here's a quick rundown on how I got it installed - you will need an
> existing OpenBSD installation.
>
> 1. Download the FS install image.
> 2. Mount it in your existing OpenBSD system and edit etc/boot.conf to
> set the tty to com0.
> 3. Write the resulting image to a USB stick.
> 4. Plug in your USB stick, then plug in the power.
> 5. When it says to press any key, do so.  When the GRUB menu appears, hit 'c'.
> 6. Set the root device (which will likely be hd2): root (hd2)
> 7. Fire up the chainloader: chainloader +1
> 8. Boot: boot
> 9. ???
> 10. Profit!
>
> On Tue, Nov 19, 2019 at 1:31 PM Aaron Mason  wrote:
> >
> > All
> >
> > Fired up OpenBSD 6.6 on a Riverbed Steelhead 250 and a 550, purchased
> > from fleabay for about $30 ea (plus shipping) - the 250 runs a single
> > core Celeron M @ 1.66GHz and 1GB DDR2, the 550 runs a low power
> > dual-core Xeon at the same speed and 2GB DDR2 - both x86 only.  Both
> > have a 2GB USB DOM and a separate laptop HDD (120GB for the 250 and
> > 320GB for the 550) likely for caching (these being WAN accelerators).
> >
> > The primary and AUX NICs work, the LAN0/0 and WAN0/0 ports do not,
> > likely because there's some GPIO magic required to switch back the
> > relays.  The Xeon-powered 550 definitely seems to have a bit more
> > oompf than the 250's hamster whee-- err, Celeron M CPU.
> >
> > The output for dmesg for each is attached.
> >
> > --
> > Aaron Mason - Programmer, open source addict
> > I've taken my software vows - for beta or for worse
>
>
>
>
> --
> Aaron Mason - Programmer, open source addict
> I've taken my software vows - for beta or for worse
>


-- 
Aaron Mason - Programmer, open source addict
I've taken my software vows - for beta or for worse



athn panic when changing wpakey

2019-11-24 Thread Jan Stary
This is current/i386 on an ALIX - dmesg below
It's my home wifi router via athn(4).

It seems that changing the wpakey causes a panic
if there are wifi clients associated. After I tweak the
hostname.athn0 to used the new wpakey,

# cat /etc/hostname.athn0
inet 192.168.33.1 255.255.255.0 NONE
media autoselect mediaopt hostap mode 11g chan 11
nwid stare.cz wpakey PASSWORDHERE

this is what happens:

# sh -x /etc/netstart athn0
+ set +o sh
+ id -u
+ let 0 != 0
+ . /etc/rc.d/rc.subr
+ FUNCS_ONLY=1
+ _rc_actions=start stop restart reload check
+ readonly _rc_actions
+ [ -n 1 ]
+ return
+ _rc_parse_conf
+ PRINT_ONLY=false
+ V4_DHCPCONF=false
+ V6_AUTOCONF=false
+ getopts :n opt
+ shift 0
+ false
+ false
p sysctl -q net.inet6.ip6.soiikey=7ba282b71ed026ff4cc964c9e57a0e71
+ let 1 > 0
+ aifstart athn0
nic: ieee80211_encrypt: key unset for sw crypto: 0
Stopped at  db_enter+0x4:   popl%ebp
TIDPIDUID PRFLAGS PFLAGS  CPU  COMMAND
*402536  42511  0 0x3  00  ifconfig
db_enter() at db_enter+0x4
panic(d0b780c2) at panic+0xcc
ieee80211_encrypt(d193e030,d195c000,d193eb00) at ieee80211_encrypt+0x70
ar5008_tx(d193e000,d195c000,d199,2) at ar5008_tx+0x9b
ar5008_swba_intr(d193e000) at ar5008_swba_intr+0x238
ar5008_intr(d193e000) at ar5008_intr+0x12f
intr_handler(f372944c,d1935480) at intr_handler+0x18
Xintr_legacy9_untramp() at Xintr_legacy9_untramp+0xf7
end of kernel
https://www.openbsd.org/ddb.html describes the minimum info required in bug
reports.  Insufficient info makes it difficult to find and fix bugs.

ddb> trace
db_enter() at db_enter+0x4
panic(d0b780c2) at panic+0xcc
ieee80211_encrypt(d193e030,d195c000,d193eb00) at ieee80211_encrypt+0x70
ar5008_tx(d193e000,d195c000,d199,2) at ar5008_tx+0x9b
ar5008_swba_intr(d193e000) at ar5008_swba_intr+0x238
ar5008_intr(d193e000) at ar5008_intr+0x12f
intr_handler(f372944c,d1935480) at intr_handler+0x18
Xintr_legacy9_untramp() at Xintr_legacy9_untramp+0xf7
end of kernel

ddb> ps
   PID TID   PPIDUID  S   FLAGS  WAIT  COMMAND
*42511  402536  16918  0  7 0x3ifconfig
 16918   65954   7176  0  30x10008b  pause sh
  7176  195115  1  0  30x10008b  pause ksh
 39636  276573  1  0  30x100098  poll  cron
 50319  116399  67423 74  30x100092  bpf   pflogd
 67423  115038  1  0  30x80  netio pflogd
  6429  504036  1 79  30x100090  kqreadtftpd
 89081  471963  97968 95  30x100092  kqreadsmtpd
 69172  235576  97968103  30x100092  kqreadsmtpd
 93551  495188  97968 95  30x100092  kqreadsmtpd
 48333  425981  97968 95  30x100092  kqreadsmtpd
 74393  225787  97968 95  30x100092  kqreadsmtpd
 23071  274116  97968 95  30x100092  kqreadsmtpd
 97968  252852  1  0  30x100080  kqreadsmtpd
 54496  519475  1 77  30x100090  poll  dhcpd
 83016  322113  1  0  30x80  selectsshd
 55084  409085  1  0  30x100080  poll  ntpd
 19536   72605   9702 83  30x100092  poll  ntpd
  9702   89424  1 83  30x100092  poll  ntpd
 82303  414616  1 53  30x90  kqreadunbound
 80058  460534  32429 97  30x100090  kqreadnsd
-32429or193013  94599 97  30x100090  poll  nsd
 94599  500502  1 97  30x100090  kqreadnsd
 81325  222879  42514 74  30x100092  bpf   pflogd
 42514  289357  1  0  30x80  netio pflogd
 57711  190343   7938 73  30x100090  kqreadsyslogd
  7938  237583  1  0  30x100082  netio syslogd
 50143   65556  59920115  30x100092  kqreadslaacd
  7553  158390  59920115  30x100092  kqreadslaacd
 59920   27928  1  0  30x100080  kqreadslaacd
 50619   91852  0  0  2 0x14200zerothread
 95698  341284  0  0  3 0x14200  aiodoned  aiodoned
 78346  384185  0  0  3 0x14200  syncerupdate
 35483   96485  0  0  3 0x14200  cleaner   cleaner
 37455  212619  0  0  3 0x14200  reaperreaper
 97057  373157  0  0  3 0x14200  pgdaemon  pagedaemon
 91493   60759  0  0  3 0x14200  bored crynlk
 35056   57745  0  0  3 0x14200  bored crypto
 98887  438542  0  0  3 0x14200  usbtskusbtask
  7033  285367  0  0  3 0x14200  usbatsk   usbatsk
 67842   14075  0  0  3 0x14200  bored sensors
 64913  152421  0  0  3 0x14200  bored softnet
 58192  505341  0  0  3 0x14200  bored systqmp
 14935  112859  0  0  3 0x14200  bored systq
-41646or205859 

iked as roadwarrior and strongswan server

2019-11-24 Thread List
Hi *, 

is there someone here who has got a setup running strongswan as server
and openbsd's iked as client ? In a Site-To-Site situation ? 

Thanks alot in advance. 

g Stephan



Re: cron output direct to mbox without smtpd?

2019-11-24 Thread chohag
Andrew Kanaber writes:
> Hi,
>
> I'm setting up an embedded machine that won't be able to send mail to
> the internet and it seems excessive to leave smtpd running just so root
> can receive cron job output, but I can't see a way to cut smtpd out of
> the delivery chain because mail.local doesn't implement sendmail-style
> command-line options (in particular it doesn't have the -t option to
> extract the recipient from the message headers) so I can't use it in
> place of smtpctl in /etc/mailer.conf.

It may seem that way but consider: in order to write to the file a
sequence is going to be followed by whatever cron kicks off which
is incredibly similar to that which is already being done by smtpd,
only it's one you're going to have to write and manage yourself
instead of being "just there" from day one and kept up to date by
a bunch of developers who weirdly want to just produce safe, stable
code for free. Why balk?

> Is there some other way to do this? Is there a reason I've missed that
> this is actually just a bad idea?

I recommend doing nothing; that way this problem will solve itself
by virtue of having already been solved and you can do something
interesting, ie. literally anything other than email. Do you really
need the extra few bytes of memory that a dud process takes up?

Matthew



Re: cron output direct to mbox without smtpd?

2019-11-24 Thread gilles
November 24, 2019 4:34 PM, "Andrew Kanaber"  
wrote:

> Hi,
> 
> I'm setting up an embedded machine that won't be able to send mail to
> the internet and it seems excessive to leave smtpd running just so root
> can receive cron job output, but I can't see a way to cut smtpd out of
> the delivery chain because mail.local doesn't implement sendmail-style
> command-line options (in particular it doesn't have the -t option to
> extract the recipient from the message headers) so I can't use it in
> place of smtpctl in /etc/mailer.conf.
> 
> I could probably get cron to mail.local delivery working by editing and
> recompiling cron to change the popen arguments but that seems like more
> trouble than it's worth in the long run.
> 

or simpler, you can write a wrapper to mail.local and use that wrapper in
the mailwrapper config, but bear in mind that mail.local requires root as
it writes to /var/mail, so your wrapper must either be restricted to root
crontab or be setuid with all that implies.


> Is there some other way to do this? Is there a reason I've missed that
> this is actually just a bad idea?
> 

I'd use a wrapper... but I'd also leave smtpd because it's idle when not
in work so the cost of running it vs hacking a work-around is not too in
favor of the work-around as far as I'm concerned.



cron output direct to mbox without smtpd?

2019-11-24 Thread Andrew Kanaber
Hi,

I'm setting up an embedded machine that won't be able to send mail to
the internet and it seems excessive to leave smtpd running just so root
can receive cron job output, but I can't see a way to cut smtpd out of
the delivery chain because mail.local doesn't implement sendmail-style
command-line options (in particular it doesn't have the -t option to
extract the recipient from the message headers) so I can't use it in
place of smtpctl in /etc/mailer.conf.

I could probably get cron to mail.local delivery working by editing and
recompiling cron to change the popen arguments but that seems like more
trouble than it's worth in the long run.

Is there some other way to do this? Is there a reason I've missed that
this is actually just a bad idea?

Thanks for your help,

-- 
Andrew Kanaber



Re: Turn off Swap on boot disk

2019-11-24 Thread Stuart Henderson
On 2019-11-22, gwes  wrote:
> First, why is your workload causing swapping? That hasn't been
> a good idea since the beginning of computing.

Even if the main workload is OK, relinking the kernel (reorder_kernel)
causes swapping on smaller-memory systems.

> I've never seen an Alix so this may be impossible but
> why don't you install a larger boot drive?

With how they're often used, it's usually easier to replace the whole
machine. Maybe also cheaper, if they can be replaced by mailing a new
machine rather than having to visit a remote site (swapping the CF card
requires removing the system board from the case, not just opening the
case).

Adding swap on USB is one way to eke out another release or two's use
from the machine that can be done fairly easily without a visit..




Re: T430 power draw unexpectedly high

2019-11-24 Thread Raymond, David
I don't know whether this is pertinent, but I have a Lenovo X1 Carbon
(gen 4 I think) which ran the fan at full speed under Linux.  A bios
update solved this problem.  I have converted to OpenBSD (6.6 stable)
and the problem has not reappeared. It might be worth checking with
Lenovo to see if a similar problem/solution exists for your machine.
Bios updates are easy to install on Thinkpads.

Dave Raymond

On 11/23/19, Jonathan Thornburg  wrote:
> In ,
> Dave Trudgian  writes
> [[6.6 or a recent snapshot, Thinkpad T430]]
>> Under OpenBSD with the system sitting idle at a GUI, WiFi active, 50%
>> brightness I see ~15W power draw from the battery. This is with `apmd
>> -A` and the output of `apm` showing that it is throttled to 1200MHz.
>> The CPU fan is running at a constant low speed.
>
> On a Thinkpad T530 (= similar hardware except for 14" --> 15.4" screen)
> running 6.5-stable (amd64), also with WiFi active and the system sitting
> idle at a GUI, I see a power draw of ~20W/10W with the screen at max/min
> brightness, so overall very similar to what Dave Trudgian sees.  I've
> never tried a non-OpenBSD OS on this hardware.
>
> --
> -- "Jonathan Thornburg [remove -color to reply]"
> 
>"He wakes me up every morning meowing to death because he wants to go
> out, and then when I open the door he stays put, undecided, and then
> glares at me when I put him out"
>   -- Nathalie Loiseau (French minister for European Affairs,
>explaining why she named her cat "Brexit")
>
>


-- 
David J. Raymond
david.raym...@nmt.edu
http://physics.nmt.edu/~raymond



How to achieve O_TTY_INIT when opening a USB modem?

2019-11-24 Thread Jeffrey Walton
I am struggling to get a USB modem and terminal configured properly
under OpenBSD. The same code on Linux is fine. The symptom I am seeing
is a hung read() after issuing ATZ\r to the modem.

I'm guessing there's an uninitialized field in my struct termios tty.
The latest Posix provides O_TTY_INIT to ensure a terminal is in a good
configuration, but OpenBSD does not recognize it.

What is the equivalent under OpenBSD? How do I achieve O_TTY_INIT when
using a struct termios tty?

Thanks in advance.



Re: how to configure directory in which X server logfile is written?

2019-11-24 Thread Raf Czlonka
On Sun, Nov 24, 2019 at 02:10:15AM GMT, Jonathan Thornburg wrote:
> In a fresh install of 6.6/amd64, if I login on a console as a non-root
> user and start X via 'startx', the X server tries to write log information
> in the file
>   $HOME/.local/share/xorg/Xorg.0.log
> 
> I have two questions:
> 1. Is there any way to change the directory
>  $HOME/.local/share/xorg/
>in which the X server logfile is written?
> 2. This being OpenBSD, is there a Fine Manual in which this configuration
>is documented?
> 
> None of
>   man Xorg
>   man Xserver
>   man startx
>   man xinit
>   man xorg.conf
>   man xorg.conf.d
>   man -k log|egrep '^X'
>   cd /etc/ && find . -type f | xargs fgrep share/xorg
>   cd /usr/X11R6/share/X11/xorg.conf.d/ \
>&& find . -type f | xargs fgrep share/xorg
>   cd /usr/X11R6/share/X11/ \
>&& find . -type f | xargs fgrep share/xorg
>   cd /usr/X11R6/share/ \
>&& find . -type f | xargs fgrep share/xorg
> or grepping my (minimal) /etc/x11/xorg.conf have thus far yielded any
> relevant info.
> 
> (The reason I'd like to change this directory is that in my setup
> $HOME/.local is a symlink to a different filesystem which may not yet
> be mounted at the time when 'startx' is run.)
> 

Hi Jonathan,

The right places, but the wrong string:

$ man 1 Xorg
[...]
-logfile filename
Use the file called filename as the Xorg server log
file.  The default log file when running as root
is /var/log/Xorg.n.log and for non root it is
$XDG_DATA_HOME/xorg/Xorg.n.log where n is the display
number of the Xorg server.  The default may be in
a different directory on some platforms.  This
option is only available when the server is run as
root (i.e, with real- uid 0).
[...]

The '.local/share' should have hinted at $XDG_DATA_HOME[0] :^)

[0] https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html

Regards,

Raf



Re: sysupgrade to 6.6 failed at comp66.tgz

2019-11-24 Thread Consus
On 23:21 Sat 23 Nov, cho...@jtan.com wrote:
> > You can't seriously be calling "-x* -game*" an unsupported configuration ?  
> > Seems to me
> >  like a sensible thing to do on any box that's going to be headless for its 
> > entire life
> >  and only ever accessed via SSH (or text console at a push).
> 
> Lines 159-160 of /usr/sbin/sysupgrade read as follows:
> 
>   SETS=$(sed -n -e 's/^SHA256 (\(.*\)) .*/\1/' \
>   -e '/^INSTALL\./p;/^bsd/p;/\.tgz$/p' SHA256)
> 
> This is followed by ~45 lines which download, verify and extract
> them. The entire thing from that point takes up less than two
> thirds of this small laptop screen.
> 
> It would have been quicker to write a patch to include the desired
> functionality than create this email thread.
> 
> Here's a quick-and-dirty thing I just made up:
> 
> ed /usr/sbin/sysupgrade
> /^SETS=/s//: ${SETS:=/
> +s/$/}/
> wq
> 
> Now you can, possibly, set SETS in the environent to override what
> sysupgrade will even consider.

U - usability :D

I guess Theo is right and it's best to merge all sets into baseXX.tgz
(except for siteXX.tgz) to prevent "it works until it's not" situations.