On Mon, 3 Dec 2012 16:34:21 +0000, Hamilton, Robert <rhamil...@cas.org> wrote:

>I'm having trouble with IPv6...er...something overwriting some storage in a 
>gateway server, and I want to use an SA SLIP trap to catch it. I can observe 
>the error has occurred with
>
>    DATA=(8R?+2C0,NE,00000000,AND,8R?+2C0,NE,00000013)
>
>The trouble is, the storage overwritten is in a control block that is used to 
>manage a connection through the gateway, and for most of my gateway instances 
>there are 200-300 possible connections, so I have 200-300 possible places 
>where this might occur. The location that is being overwritten is consistent 
>within the data structure, but the location is specific to the subtask and 
>it's in dynamically-obtained storage. So, when I say
>
>    RANGE=(8R?+2C0,+2C7)
>
>the SLIP...is invalid, because it can't find the starting location. Do I 
>really, really need a few hundred dynamic SLIPs to trap this problem?
>
>On the other hand, if I wait until the storage is allocated and issue just a 
>single slip with this RANGE parameter, will each subtask be monitored, or just 
>the main task? AND, if I then use
>
>    TRDATA=(STD,REGS,8R?,8R?+33F)
>
>to dump the entire control block when the slip is triggered, will it just dump 
>the one that was overwritten, or will it try to dump the information for each 
>task?
>
. . .

As I see it, you have two problems.

Firstly, you don't know the address of the control block to be monitored by SA 
SLIP in advance. Dynamic PER allows you to solve that issue if you can identify 
a point in the code where the storage has been allocated (get the ball rolling 
with an IF trap at that point).

Secondly, you have not one control block, but hundreds of them. The PER 
hardware only allows one range to be defined, which is why you can only have 
one non-IGNORE SA trap "eligible for checking" at any one time. To monitor 
multiple control blocks, the range would have to start at the lowest address of 
any of the blocks, and end at the last byte of the block with the highest 
address (and covering anything in between if the blocks are not contiguous). 
You might be able to filter out unwanted updates using DATA (could be a 
challenge with so many blocks) or maybe with other traps using IGNORE or 
SUBTRAP, but still the overhead could be high.

Unless you know for sure that the control block is being hit a program which is 
addressing the control block using reg 8, the TRDATA you specified may not 
trace what you want. If the damage really is being done by "gatewaypgm", and it 
always does have a particular register pointing to the block, you could perhaps 
consider an IF trap over the whole module, with DATA used to identify when the 
block gets damaged, but since that would cause a PER interrupt for every 
instruction in the module, the overhead could also be high.

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to