CSa32/DS.S
author hh
Thu, 21 Nov 2019 14:55:10 +0100
changeset 0 5c129dd80d4f
permissions -rw-r--r--
--
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
hh
parents:
diff changeset
     1
	.equ	a, %eax
hh
parents:
diff changeset
     2
	.equ	b, %ebx
hh
parents:
diff changeset
     3
	.equ	c, %ecx
hh
parents:
diff changeset
     4
	.equ	d, %edx
hh
parents:
diff changeset
     5
	.equ	bp, %ebp
hh
parents:
diff changeset
     6
	.equ	sp, %esp
hh
parents:
diff changeset
     7
	.equ	di, %edi
hh
parents:
diff changeset
     8
#-----------------------------------------------
hh
parents:
diff changeset
     9
#	M A C R O   D E C L A R A T I O N S
hh
parents:
diff changeset
    10
#-----------------------------------------------
hh
parents:
diff changeset
    11
# subroutines list
hh
parents:
diff changeset
    12
	.macro	SUBRLIST
hh
parents:
diff changeset
    13
	SUBR	_start
hh
parents:
diff changeset
    14
	SUBR	D.init
hh
parents:
diff changeset
    15
	SUBR	D.setId
hh
parents:
diff changeset
    16
	SUBR	D.log
hh
parents:
diff changeset
    17
	SUBR	D.getTs
hh
parents:
diff changeset
    18
	SUBR	D.subr
hh
parents:
diff changeset
    19
	SUBR	Node
hh
parents:
diff changeset
    20
	SUBR	N.bind
hh
parents:
diff changeset
    21
	SUBR	N.conn
hh
parents:
diff changeset
    22
	SUBR	N.acc
hh
parents:
diff changeset
    23
	SUBR	N.closeSocket
hh
parents:
diff changeset
    24
	SUBR	N.read
hh
parents:
diff changeset
    25
	SUBR	N.write
hh
parents:
diff changeset
    26
	SUBR	N.get
hh
parents:
diff changeset
    27
	SUBR	N.put
hh
parents:
diff changeset
    28
	SUBR	N.sslErr
hh
parents:
diff changeset
    29
	SUBR	Data
hh
parents:
diff changeset
    30
	SUBR	Da.load
hh
parents:
diff changeset
    31
	SUBR	Da.chk
hh
parents:
diff changeset
    32
	SUBR	Da.unl
hh
parents:
diff changeset
    33
	SUBR	Da.dttl
hh
parents:
diff changeset
    34
	SUBR	Da.ttl
hh
parents:
diff changeset
    35
	SUBR	Da.getTs
hh
parents:
diff changeset
    36
	.endm
hh
parents:
diff changeset
    37
#-----------------------------------------------
hh
parents:
diff changeset
    38
# push subroutine addr, prints its name and addr
hh
parents:
diff changeset
    39
# leave subr name and addr on stack
hh
parents:
diff changeset
    40
	.macro	SUBR	subr:req
hh
parents:
diff changeset
    41
	push	$\subr
hh
parents:
diff changeset
    42
	push	$9f
hh
parents:
diff changeset
    43
	push	$8f
hh
parents:
diff changeset
    44
	push	stderr
hh
parents:
diff changeset
    45
	call	fprintf
hh
parents:
diff changeset
    46
	jmp	7f
hh
parents:
diff changeset
    47
9:	.asciz	"\subr"
hh
parents:
diff changeset
    48
8:	.asciz	"%-12s\t%p\n"
hh
parents:
diff changeset
    49
7:	lea	8(sp), sp
hh
parents:
diff changeset
    50
	.endm
hh
parents:
diff changeset
    51
#-----------------------------------------------
hh
parents:
diff changeset
    52
# prepare to define subroutine args; use macro DS to define args
hh
parents:
diff changeset
    53
	.macro	ARGS
hh
parents:
diff changeset
    54
	ac = 40
hh
parents:
diff changeset
    55
	.endm
hh
parents:
diff changeset
    56
#-----------------------------------------------
hh
parents:
diff changeset
    57
# prepare to define subroutine args; use macro DS to define args
hh
parents:
diff changeset
    58
	.macro	M_ARGS
hh
parents:
diff changeset
    59
	ac = 40
hh
parents:
diff changeset
    60
	DS	thisP
hh
parents:
diff changeset
    61
	.endm
hh
parents:
diff changeset
    62
#-----------------------------------------------
hh
parents:
diff changeset
    63
# declare storage
hh
parents:
diff changeset
    64
	.macro	DS	id:req, len=4
hh
parents:
diff changeset
    65
	\id = ac
hh
parents:
diff changeset
    66
	ac = ac + \len
hh
parents:
diff changeset
    67
	.endm
hh
parents:
diff changeset
    68
#-----------------------------------------------
hh
parents:
diff changeset
    69
# prepare to define subroutine local vars
hh
parents:
diff changeset
    70
	.macro	PROLOC
hh
parents:
diff changeset
    71
	ac = 0
hh
parents:
diff changeset
    72
	.endm
hh
parents:
diff changeset
    73
#-----------------------------------------------
hh
parents:
diff changeset
    74
# prepare to define subroutine local vars
hh
parents:
diff changeset
    75
	.macro	M_LOCAL
hh
parents:
diff changeset
    76
	ac = 0
hh
parents:
diff changeset
    77
	DL	deP
hh
parents:
diff changeset
    78
	.endm
hh
parents:
diff changeset
    79
#-----------------------------------------------
hh
parents:
diff changeset
    80
# declare local var
hh
parents:
diff changeset
    81
	.macro	DL	id:req, len=4
hh
parents:
diff changeset
    82
	ac = ac + \len
hh
parents:
diff changeset
    83
	\id = -ac
hh
parents:
diff changeset
    84
	.endm
hh
parents:
diff changeset
    85
#-----------------------------------------------
hh
parents:
diff changeset
    86
# terminate subroutine local vars definition
hh
parents:
diff changeset
    87
	.macro	EPILOC
hh
parents:
diff changeset
    88
	locL = ac
hh
parents:
diff changeset
    89
	.endm
hh
parents:
diff changeset
    90
#-----------------------------------------------
hh
parents:
diff changeset
    91
# subroutine prolog
hh
parents:
diff changeset
    92
# expects length of local storage under the name "locL"
hh
parents:
diff changeset
    93
	.macro	PROLOG
hh
parents:
diff changeset
    94
	pusha
hh
parents:
diff changeset
    95
	enter	$locL, $0
hh
parents:
diff changeset
    96
	.endm
hh
parents:
diff changeset
    97
#-----------------------------------------------
hh
parents:
diff changeset
    98
# subroutine prolog
hh
parents:
diff changeset
    99
# expects length of local storage under the name "locL"
hh
parents:
diff changeset
   100
	.altmacro
hh
parents:
diff changeset
   101
	.macro	M_PROLOG	m_prefix:req, m_name:req
hh
parents:
diff changeset
   102
	.global	\m_prefix\().\m_name
hh
parents:
diff changeset
   103
\m_prefix\().\m_name:
hh
parents:
diff changeset
   104
	pusha
hh
parents:
diff changeset
   105
	enter	$ac, $0
hh
parents:
diff changeset
   106
	mov	thisP(bp), b
hh
parents:
diff changeset
   107
	lea	\m_prefix\().debug(b), a
hh
parents:
diff changeset
   108
	mov	a, deP(bp)
hh
parents:
diff changeset
   109
	.endm
hh
parents:
diff changeset
   110
	.noaltmacro
hh
parents:
diff changeset
   111
#-----------------------------------------------
hh
parents:
diff changeset
   112
# subroutine epilog without return value
hh
parents:
diff changeset
   113
	.macro	EPILOG
hh
parents:
diff changeset
   114
	leave
hh
parents:
diff changeset
   115
	popa
hh
parents:
diff changeset
   116
	ret
hh
parents:
diff changeset
   117
	.endm
hh
parents:
diff changeset
   118
#-----------------------------------------------
hh
parents:
diff changeset
   119
# subroutine epilog with return value in EAX
hh
parents:
diff changeset
   120
# expects length of local storage under the name "locL"
hh
parents:
diff changeset
   121
	.macro	EPILOG_R
hh
parents:
diff changeset
   122
	leave
hh
parents:
diff changeset
   123
	mov	a, 28(sp)
hh
parents:
diff changeset
   124
	popa
hh
parents:
diff changeset
   125
	ret
hh
parents:
diff changeset
   126
#	mov	-36(sp), a
hh
parents:
diff changeset
   127
	.endm
hh
parents:
diff changeset
   128
#-----------------------------------------------
hh
parents:
diff changeset
   129
# ABEND at system routine err
hh
parents:
diff changeset
   130
	.macro	ERR	causer:req
hh
parents:
diff changeset
   131
	pushl	$9f
hh
parents:
diff changeset
   132
	call	printf
hh
parents:
diff changeset
   133
	pushl	$1
hh
parents:
diff changeset
   134
	call	exit
hh
parents:
diff changeset
   135
9:	.asciz	"\causer: %m\n"
hh
parents:
diff changeset
   136
	.endm
hh
parents:
diff changeset
   137
#-----------------------------------------------
hh
parents:
diff changeset
   138
# ABEND at system routine err using debug structure
hh
parents:
diff changeset
   139
# expects deP(bp)-->Debug inst
hh
parents:
diff changeset
   140
	.macro	SYSERR	causer:req
hh
parents:
diff changeset
   141
	push	$9f				# -->format
hh
parents:
diff changeset
   142
	push	$0				# no. of values
hh
parents:
diff changeset
   143
	push	$0				# msg debug level
hh
parents:
diff changeset
   144
	pushl	deP(bp)				# -->Debug instance
hh
parents:
diff changeset
   145
	call	D.log				# print msg
hh
parents:
diff changeset
   146
	call	C.abend
hh
parents:
diff changeset
   147
9:	.asciz	"\causer: %m"
hh
parents:
diff changeset
   148
	.endm
hh
parents:
diff changeset
   149
#-----------------------------------------------
hh
parents:
diff changeset
   150
# print SSL err msg queue and then abend
hh
parents:
diff changeset
   151
# -->Debug in deP(bp) is expected
hh
parents:
diff changeset
   152
	.macro	SSLERR	msg:req
hh
parents:
diff changeset
   153
	pushl	$9f
hh
parents:
diff changeset
   154
	pushl	deP(bp)
hh
parents:
diff changeset
   155
	call	N.sslErr
hh
parents:
diff changeset
   156
9:	.asciz	"\msg"
hh
parents:
diff changeset
   157
	.endm
hh
parents:
diff changeset
   158
#-----------------------------------------------------------
hh
parents:
diff changeset
   159
	.macro	SYS	name:req
hh
parents:
diff changeset
   160
	call	\name
hh
parents:
diff changeset
   161
	cmp	$-1, a
hh
parents:
diff changeset
   162
	jne	8f
hh
parents:
diff changeset
   163
	SYSERR	"\name"
hh
parents:
diff changeset
   164
8:	mov	thisP(bp), b
hh
parents:
diff changeset
   165
	test	a, a
hh
parents:
diff changeset
   166
	.endm
hh
parents:
diff changeset
   167
#-----------------------------------------------
hh
parents:
diff changeset
   168
# get integer value from ENV
hh
parents:
diff changeset
   169
	.macro	GETINTENV key:req
hh
parents:
diff changeset
   170
	pushl	$9f
hh
parents:
diff changeset
   171
	call	C.getArg
hh
parents:
diff changeset
   172
	lea	4(sp), sp
hh
parents:
diff changeset
   173
	cmp	$0, a
hh
parents:
diff changeset
   174
	jmp	8f
hh
parents:
diff changeset
   175
9:	.asciz	"\key"
hh
parents:
diff changeset
   176
8:
hh
parents:
diff changeset
   177
	.endm
hh
parents:
diff changeset
   178
#-----------------------------------------------
hh
parents:
diff changeset
   179
# set local debug ID
hh
parents:
diff changeset
   180
# supposed: local deP-->Debug
hh
parents:
diff changeset
   181
# expected on the stack:
hh
parents:
diff changeset
   182
#	\argc values to be put in debug ID according to format
hh
parents:
diff changeset
   183
# \argc may be zero
hh
parents:
diff changeset
   184
	.macro	DEBID	format:req, argc=0
hh
parents:
diff changeset
   185
	push	$9f				# -->format
hh
parents:
diff changeset
   186
	push	$\argc				# no. of values
hh
parents:
diff changeset
   187
	pushl	deP(bp)				# -->Debug instance
hh
parents:
diff changeset
   188
	call	D.setId				# put debug ID to Debug inst
hh
parents:
diff changeset
   189
	jmp	8f
hh
parents:
diff changeset
   190
9:	.asciz	"\format"
hh
parents:
diff changeset
   191
8:	lea	12(sp), sp
hh
parents:
diff changeset
   192
	.endm
hh
parents:
diff changeset
   193
#-----------------------------------------------
hh
parents:
diff changeset
   194
# debug output
hh
parents:
diff changeset
   195
# supposed: local deP-->Debug
hh
parents:
diff changeset
   196
# expected on the stack:
hh
parents:
diff changeset
   197
#	\argc values to be printed by \format at debug level \level
hh
parents:
diff changeset
   198
# \argc may be zero
hh
parents:
diff changeset
   199
# all regs are preserved
hh
parents:
diff changeset
   200
	.macro LOG	level:req, format:req, argc=7
hh
parents:
diff changeset
   201
	push	$9f				# -->format
hh
parents:
diff changeset
   202
	push	$\argc				# no. of values
hh
parents:
diff changeset
   203
	push	$\level				# msg debug level
hh
parents:
diff changeset
   204
	pushl	deP(bp)				# -->Debug instance
hh
parents:
diff changeset
   205
	call	D.log		 		# print msg
hh
parents:
diff changeset
   206
	jmp	8f
hh
parents:
diff changeset
   207
9:	.asciz	"\format"
hh
parents:
diff changeset
   208
8:	lea	16(sp), sp
hh
parents:
diff changeset
   209
	.endm
hh
parents:
diff changeset
   210
#-----------------------------------------------
hh
parents:
diff changeset
   211
# flat print
hh
parents:
diff changeset
   212
# sp, bp are preserved
hh
parents:
diff changeset
   213
	.macro	PR	format:req
hh
parents:
diff changeset
   214
	push	$9f
hh
parents:
diff changeset
   215
	push	stderr
hh
parents:
diff changeset
   216
	call	fprintf
hh
parents:
diff changeset
   217
	jmp	8f
hh
parents:
diff changeset
   218
9:	.asciz	">>> \format\n"
hh
parents:
diff changeset
   219
8:	lea	8(sp), sp
hh
parents:
diff changeset
   220
	.endm
hh
parents:
diff changeset
   221
#-----------------------------------------------
hh
parents:
diff changeset
   222
# print ip, bp, sp before subroutine call
hh
parents:
diff changeset
   223
# to be placed directly before a call instruction
hh
parents:
diff changeset
   224
# expected deP(bp) as -->Debug
hh
parents:
diff changeset
   225
# all regs are preserved
hh
parents:
diff changeset
   226
	.macro	B_CALL	level:req, label="BEFORE SUBR CALL "
hh
parents:
diff changeset
   227
	push	a
hh
parents:
diff changeset
   228
	lea	4(sp), a
hh
parents:
diff changeset
   229
	push	a
hh
parents:
diff changeset
   230
	push	bp
hh
parents:
diff changeset
   231
	pushl	$7f+5
hh
parents:
diff changeset
   232
	LOG	\level, "\label: ip: %p, bp: %p, sp: %p", 3
hh
parents:
diff changeset
   233
	lea	12(sp), sp
hh
parents:
diff changeset
   234
	pop	a
hh
parents:
diff changeset
   235
	jmp	7f
hh
parents:
diff changeset
   236
7:
hh
parents:
diff changeset
   237
	.endm
hh
parents:
diff changeset
   238
#-----------------------------------------------
hh
parents:
diff changeset
   239
# print ip, bp, sp saved in sburoutine's stack frame
hh
parents:
diff changeset
   240
# to be placed anywhere before return seq and after deP(bp) is set
hh
parents:
diff changeset
   241
# expected deP(bp) as -->Debug
hh
parents:
diff changeset
   242
# all regs are preserved
hh
parents:
diff changeset
   243
	.macro	B_RET	level:req, label="BEFORE SUBR RETURN"
hh
parents:
diff changeset
   244
	push	a
hh
parents:
diff changeset
   245
	lea	8(bp), a
hh
parents:
diff changeset
   246
	push	a
hh
parents:
diff changeset
   247
	push	(bp)
hh
parents:
diff changeset
   248
	push	4(bp)
hh
parents:
diff changeset
   249
	LOG	\level, "\label: ip: %p, bp: %p, sp: %p", 3
hh
parents:
diff changeset
   250
	lea	12(sp), sp
hh
parents:
diff changeset
   251
	pop	a
hh
parents:
diff changeset
   252
	jmp	7f
hh
parents:
diff changeset
   253
7:
hh
parents:
diff changeset
   254
	.endm
hh
parents:
diff changeset
   255
#-----------------------------------------------
hh
parents:
diff changeset
   256
# print ip, bp, sp retained for return from sburoutine
hh
parents:
diff changeset
   257
# all regs are preserved
hh
parents:
diff changeset
   258
	.macro	A_CALL	label="AFTER  CALL"
hh
parents:
diff changeset
   259
	pusha
hh
parents:
diff changeset
   260
	lea	8(bp), a
hh
parents:
diff changeset
   261
	push	a
hh
parents:
diff changeset
   262
	push	(bp)
hh
parents:
diff changeset
   263
	push	4(bp)
hh
parents:
diff changeset
   264
	pushl	$9f
hh
parents:
diff changeset
   265
	call	printf
hh
parents:
diff changeset
   266
	lea	16(sp), sp
hh
parents:
diff changeset
   267
	popa
hh
parents:
diff changeset
   268
	jmp	8f
hh
parents:
diff changeset
   269
9:	.asciz	"\label: ip: %p, bp: %p, sp: %p\n"
hh
parents:
diff changeset
   270
8:
hh
parents:
diff changeset
   271
	.endm
hh
parents:
diff changeset
   272
#-----------------------------------------------
hh
parents:
diff changeset
   273
	.macro SLEEPER	time:req, ident=">>>"
hh
parents:
diff changeset
   274
	pusha
hh
parents:
diff changeset
   275
	LOG	7, "\ident: sleeping \time"
hh
parents:
diff changeset
   276
	pushl	$\time
hh
parents:
diff changeset
   277
	call	sleep
hh
parents:
diff changeset
   278
	lea	4(sp), sp
hh
parents:
diff changeset
   279
	LOG	7, "\ident: woken up"
hh
parents:
diff changeset
   280
	popa
hh
parents:
diff changeset
   281
	.endm
hh
parents:
diff changeset
   282
#-----------------------------------------------
hh
parents:
diff changeset
   283
#	A B S T R A C T   D A T A   D E C L A R A T I O N S
hh
parents:
diff changeset
   284
#-----------------------------------------------
hh
parents:
diff changeset
   285
# 	rSA	reg save area
hh
parents:
diff changeset
   286
	ac = 0
hh
parents:
diff changeset
   287
	DS	retSA
hh
parents:
diff changeset
   288
	DS	regSA, 32
hh
parents:
diff changeset
   289
	DS	bpSA
hh
parents:
diff changeset
   290
	rSAL = ac
hh
parents:
diff changeset
   291
#-----------------------------------------------
hh
parents:
diff changeset
   292
# 	Timeval
hh
parents:
diff changeset
   293
	ac = 0
hh
parents:
diff changeset
   294
	DS	secs
hh
parents:
diff changeset
   295
	DS	usecs
hh
parents:
diff changeset
   296
	timevalL = ac
hh
parents:
diff changeset
   297
#-----------------------------------------------
hh
parents:
diff changeset
   298
#	AddrInfo		IP family net addr block
hh
parents:
diff changeset
   299
	ac = 0
hh
parents:
diff changeset
   300
	DS	ai_flags
hh
parents:
diff changeset
   301
	DS	ai_family
hh
parents:
diff changeset
   302
	DS	ai_socktype
hh
parents:
diff changeset
   303
	DS	ai_protocol
hh
parents:
diff changeset
   304
	DS	ai_addrlen
hh
parents:
diff changeset
   305
	DS	ai_addrP	# -->sockaddr
hh
parents:
diff changeset
   306
	DS	ai_canonnameP
hh
parents:
diff changeset
   307
	DS	ai_nextP
hh
parents:
diff changeset
   308
	AddrInfoL = ac
hh
parents:
diff changeset
   309
#-----------------------------------------------
hh
parents:
diff changeset
   310
	SIGUSR2 = 12
hh
parents:
diff changeset
   311
	SIG_IGN = 1
hh
parents:
diff changeset
   312
	SIG_UNBLOCK = 1
hh
parents:
diff changeset
   313
#	sigaction		signal handler definition
hh
parents:
diff changeset
   314
	ac = 0
hh
parents:
diff changeset
   315
	DS	sa_handler
hh
parents:
diff changeset
   316
	DS	sa_mask, 128
hh
parents:
diff changeset
   317
	DS	sa_flags
hh
parents:
diff changeset
   318
	DS	sa_unused
hh
parents:
diff changeset
   319
	SigActionL = ac
hh
parents:
diff changeset
   320
#-----------------------------------------------
hh
parents:
diff changeset
   321
#	SockAddr
hh
parents:
diff changeset
   322
	ac = 0
hh
parents:
diff changeset
   323
	DS	sa_family, 2
hh
parents:
diff changeset
   324
	DS	sa_data, 14
hh
parents:
diff changeset
   325
	SockAddrL = ac
hh
parents:
diff changeset
   326
#-----------------------------------------------
hh
parents:
diff changeset
   327
# 	timeval struct
hh
parents:
diff changeset
   328
	ac = 0
hh
parents:
diff changeset
   329
	DS	Ti.secs
hh
parents:
diff changeset
   330
	DS	Ti.usecs
hh
parents:
diff changeset
   331
	timevalL = ac
hh
parents:
diff changeset
   332
#-----------------------------------------------
hh
parents:
diff changeset
   333
#	Debug		debug info
hh
parents:
diff changeset
   334
	ac = 0
hh
parents:
diff changeset
   335
	D.idL = 128
hh
parents:
diff changeset
   336
	DS	D.id, D.idL			# debug ID of process
hh
parents:
diff changeset
   337
	D.msgL = 256
hh
parents:
diff changeset
   338
	DS	D.msg, D.msgL			# debug msg workspace
hh
parents:
diff changeset
   339
	DebugL = ac
hh
parents:
diff changeset
   340
hh
parents:
diff changeset
   341
	.macro	DebugA				# returns -->Debug
hh
parents:
diff changeset
   342
	push	$DebugL
hh
parents:
diff changeset
   343
	call	malloc
hh
parents:
diff changeset
   344
	cmp	$0, a
hh
parents:
diff changeset
   345
	ja	8f
hh
parents:
diff changeset
   346
	SYSERR	"malloc"
hh
parents:
diff changeset
   347
8:	movl	$0, D.id(a)
hh
parents:
diff changeset
   348
	.endm
hh
parents:
diff changeset
   349
#-----------------------------------------------
hh
parents:
diff changeset
   350
#	CS		top level attributes
hh
parents:
diff changeset
   351
	ac = 0
hh
parents:
diff changeset
   352
	DS	C.debug, DebugL
hh
parents:
diff changeset
   353
	DS	C.debMaxLev			# max level of debug msgs to be printed
hh
parents:
diff changeset
   354
	DS	C.txtP				# -->text to be sent in messages
hh
parents:
diff changeset
   355
	DS	C.ttl				# TTL for circulating msgs
hh
parents:
diff changeset
   356
	DS	C.mp0				# TCP port of first mash node
hh
parents:
diff changeset
   357
	DS	C.mn				# intended # of nodes in mash
hh
parents:
diff changeset
   358
	DS	C.rp0				# TCP port of first ring node
hh
parents:
diff changeset
   359
	DS	C.rn				# intended # of nodes in ring
hh
parents:
diff changeset
   360
	DS	C.pace.tv_sec			# timespec.tv_sec
hh
parents:
diff changeset
   361
	DS	C.pace.tv_nsec			# timespec.tv_nsec
hh
parents:
diff changeset
   362
	DS	C.pacing			# pacing indicator
hh
parents:
diff changeset
   363
#	DS	C.rs				# random() seed
hh
parents:
diff changeset
   364
	DS	C.ssl				# ssl mask: 01B=noSSL, 10B=SSL, 11B=both
hh
parents:
diff changeset
   365
	DS	C.connTh			# connection retry threshhold
hh
parents:
diff changeset
   366
	DS	C.shP				# -->shared counters
hh
parents:
diff changeset
   367
	DS	C.pathP				# -->pathname to application home dir
hh
parents:
diff changeset
   368
	DS	C.cePathP			# -->pathname to SSL dir
hh
parents:
diff changeset
   369
	DS	C.caPathP			# -->pathname to SSL CA CERT dir
hh
parents:
diff changeset
   370
	CSL = ac
hh
parents:
diff changeset
   371
hh
parents:
diff changeset
   372
	.macro	CSA				# returns -->CS
hh
parents:
diff changeset
   373
	push	$CSL
hh
parents:
diff changeset
   374
	call	malloc
hh
parents:
diff changeset
   375
	cmp	$0, a
hh
parents:
diff changeset
   376
	ja	8f
hh
parents:
diff changeset
   377
	SYSERR	"malloc"
hh
parents:
diff changeset
   378
8:
hh
parents:
diff changeset
   379
	.endm
hh
parents:
diff changeset
   380
#-----------------------------------------------
hh
parents:
diff changeset
   381
# 	Share		counters shared between procs or threads
hh
parents:
diff changeset
   382
	ac = 0
hh
parents:
diff changeset
   383
	DS	S.counter_sem, 16		# semaphore for counters
hh
parents:
diff changeset
   384
	DS	S.conns				# overall connections counter both in ring and mash
hh
parents:
diff changeset
   385
	DS	S.msgs				# overall forewards# both in ring and mash
hh
parents:
diff changeset
   386
	DS	S.act				# active node processes counter
hh
parents:
diff changeset
   387
	DS	S.mash_open_client_count	# no. of opened clients in mash
hh
parents:
diff changeset
   388
	DS	S.mash_open_SSL_client_count	# no. of opened SSL clients in mash
hh
parents:
diff changeset
   389
	ShareL = ac
hh
parents:
diff changeset
   390
hh
parents:
diff changeset
   391
	.macro ShareA				# returns -->Share
hh
parents:
diff changeset
   392
	push	$0
hh
parents:
diff changeset
   393
	push	$-1
hh
parents:
diff changeset
   394
	push	$0x21				# PROT_READ | PROT_WRITE
hh
parents:
diff changeset
   395
	push	$0x03				# MAP_SHARED | MAP_ANONYMOUS
hh
parents:
diff changeset
   396
	push	$ShareL
hh
parents:
diff changeset
   397
	push	$0
hh
parents:
diff changeset
   398
	call	mmap
hh
parents:
diff changeset
   399
	cmp	$-1, a
hh
parents:
diff changeset
   400
	jne	8f
hh
parents:
diff changeset
   401
	SYSERR	"mmap"
hh
parents:
diff changeset
   402
8:
hh
parents:
diff changeset
   403
	.endm
hh
parents:
diff changeset
   404
#-----------------------------------------------
hh
parents:
diff changeset
   405
# Data - container for data sent through connection topology
hh
parents:
diff changeset
   406
#	Container Header
hh
parents:
diff changeset
   407
	ac = 0
hh
parents:
diff changeset
   408
	DS	H.ttl				# msg TTL
hh
parents:
diff changeset
   409
	DS	H.ts				# timestamp
hh
parents:
diff changeset
   410
	DS	H.lport				# listening TCP port
hh
parents:
diff changeset
   411
	HeaderL = ac
hh
parents:
diff changeset
   412
#	Container Payload
hh
parents:
diff changeset
   413
	ac = 0
hh
parents:
diff changeset
   414
#	Pa.loadL = 256
hh
parents:
diff changeset
   415
	DS	Pa.ts				# timestamp
hh
parents:
diff changeset
   416
	DS	Pa.text, 0			# load sent in msg
hh
parents:
diff changeset
   417
	PayloadL = ac
hh
parents:
diff changeset
   418
#	Container to be send
hh
parents:
diff changeset
   419
	ac = 0
hh
parents:
diff changeset
   420
	DS	Co.hdr, HeaderL			# Header
hh
parents:
diff changeset
   421
	DS	Co.payl, PayloadL		# Payload
hh
parents:
diff changeset
   422
#	ContainerL = ac
hh
parents:
diff changeset
   423
# 	Data instantion
hh
parents:
diff changeset
   424
	ac = 0
hh
parents:
diff changeset
   425
	DS	Da.debug, DebugL		# Debug
hh
parents:
diff changeset
   426
	DS	Da.contP			# -->Container
hh
parents:
diff changeset
   427
	DS	Da.datalen			# container length
hh
parents:
diff changeset
   428
	DataL = ac
hh
parents:
diff changeset
   429
hh
parents:
diff changeset
   430
	.macro	DataA				# returns -->Data
hh
parents:
diff changeset
   431
	push	$DataL
hh
parents:
diff changeset
   432
	call	malloc
hh
parents:
diff changeset
   433
	cmp	$0, a
hh
parents:
diff changeset
   434
	ja	8f
hh
parents:
diff changeset
   435
	SYSERR	"malloc"
hh
parents:
diff changeset
   436
8:
hh
parents:
diff changeset
   437
	.endm
hh
parents:
diff changeset
   438
#-----------------------------------------------
hh
parents:
diff changeset
   439
#	Node		general attributes of node
hh
parents:
diff changeset
   440
	ac = 0
hh
parents:
diff changeset
   441
	DS	N.debug, DebugL			# debug info
hh
parents:
diff changeset
   442
	DS	N.cnstlnP			# -->Constellation block
hh
parents:
diff changeset
   443
	DS	N.topo				# constellation topology
hh
parents:
diff changeset
   444
	DS 	N.locPort			# TCP port node binds to
hh
parents:
diff changeset
   445
	DS	N.first				# port # of first node in constellation
hh
parents:
diff changeset
   446
	DS	N.last				# port # of last node in constellation
hh
parents:
diff changeset
   447
	DS	N.nodes				# number of nodes
hh
parents:
diff changeset
   448
	DS	N.div				# random node choise divisor (MAX_INT / nodes)
hh
parents:
diff changeset
   449
	DS	N.kicker			# kicker indicator
hh
parents:
diff changeset
   450
	DS	N.forwP				# -->shared forward indicator
hh
parents:
diff changeset
   451
	DS	N.closing			# closing in progress indicator
hh
parents:
diff changeset
   452
	DS	N.ssc				# server side socket
hh
parents:
diff changeset
   453
	DS	N.data, DataL			# data block
hh
parents:
diff changeset
   454
	DS	N.dataP				# -->data block
hh
parents:
diff changeset
   455
	DS	N.srvSideP			# -->array of server side Sockets
hh
parents:
diff changeset
   456
	DS	N.cliSideP			# -->array of client side Sockets
hh
parents:
diff changeset
   457
	DS	N.sockArrLen			# socket array length
hh
parents:
diff changeset
   458
	DS	N.next				# next node's port#
hh
parents:
diff changeset
   459
	DS	N.nfds				# highest FD# in FD sets
hh
parents:
diff changeset
   460
	DS	N.rs, 128			# read FD set
hh
parents:
diff changeset
   461
	DS	N.es, 128			# exceptional FD set
hh
parents:
diff changeset
   462
	DS	N.t, timevalL			# timeval for select
hh
parents:
diff changeset
   463
	DS	N.ssl				# SSL switch: 0=noSSL, 1=SSL
hh
parents:
diff changeset
   464
	DS	N.ctxP				# -->SSL context
hh
parents:
diff changeset
   465
	DS	N.pid				# process ID
hh
parents:
diff changeset
   466
	DS	N.ptid				# closing thread ID
hh
parents:
diff changeset
   467
	NodeL = ac
hh
parents:
diff changeset
   468
hh
parents:
diff changeset
   469
	.macro	NodeA				# returns -->Node
hh
parents:
diff changeset
   470
	push	$NodeL
hh
parents:
diff changeset
   471
	call	malloc
hh
parents:
diff changeset
   472
	cmp	$0, a
hh
parents:
diff changeset
   473
	ja	8f
hh
parents:
diff changeset
   474
	SYSERR	"malloc"
hh
parents:
diff changeset
   475
8:
hh
parents:
diff changeset
   476
	.endm
hh
parents:
diff changeset
   477
#-----------------------------------------------
hh
parents:
diff changeset
   478
#	SocketInfo	comm socket info
hh
parents:
diff changeset
   479
	ac = 0
hh
parents:
diff changeset
   480
	DS	So.remPort			# TCP port on remote site
hh
parents:
diff changeset
   481
	DS	So.sc				# comm socket#
hh
parents:
diff changeset
   482
	DS	So.sslP				# -->SSL structure
hh
parents:
diff changeset
   483
	SocketInfoL = ac
hh
parents:
diff changeset
   484
hh
parents:
diff changeset
   485
	.macro	SocketA				# returns -->Socket
hh
parents:
diff changeset
   486
	push	$SocketL
hh
parents:
diff changeset
   487
	call	malloc
hh
parents:
diff changeset
   488
	cmp	$0, a
hh
parents:
diff changeset
   489
	ja	8f
hh
parents:
diff changeset
   490
	SYSERR	"malloc"
hh
parents:
diff changeset
   491
8:
hh
parents:
diff changeset
   492
	.endm
hh
parents:
diff changeset
   493
#-----------------------------------------------
hh
parents:
diff changeset
   494
#	Constellation	attributes of constellation of nodes (mash or ring)
hh
parents:
diff changeset
   495
	ac = 0
hh
parents:
diff changeset
   496
	DS	Cn.debug, DebugL		# debug info
hh
parents:
diff changeset
   497
	DS	Cn.topo				# Constellation topology
hh
parents:
diff changeset
   498
		Cn.ring = 0
hh
parents:
diff changeset
   499
		Cn.mash = 1
hh
parents:
diff changeset
   500
	DS	Cn.first
hh
parents:
diff changeset
   501
	DS	Cn.nodes
hh
parents:
diff changeset
   502
	DS	Cn.div				# random node choise divisor (MAX_INT / nodes)
hh
parents:
diff changeset
   503
	DS	Cn.ssl
hh
parents:
diff changeset
   504
	DS	Cn.forwP
hh
parents:
diff changeset
   505
	ConstellationL = ac
hh
parents:
diff changeset
   506
hh
parents:
diff changeset
   507
	.macro	ConstellationA			# returns -->Constellation
hh
parents:
diff changeset
   508
	push	$ConstellationL
hh
parents:
diff changeset
   509
	call	malloc
hh
parents:
diff changeset
   510
	cmp	$0, a
hh
parents:
diff changeset
   511
	ja	8f
hh
parents:
diff changeset
   512
	SYSERR	"malloc"
hh
parents:
diff changeset
   513
8:
hh
parents:
diff changeset
   514
	.endm