1fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. LevinBEGIN {
2fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  lines = 5
3fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  fail = 0
4fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin
5fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  r_i = "[1-9][0-9]*"
6fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  r_port = "[1-9][0-9][0-9][0-9]+"
7fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  r_localhost = "127\\.0\\.0\\.1"
8ed7ada24ac4647e56ce1bf3befbaec29a250cd38Dmitry V. Levin  r_connect = "^connect\\(0<TCP:\\[" r_i "\\]>, \\{sa_family=AF_INET, sin_port=htons\\((" r_port ")\\), sin_addr=inet_addr\\(\"" r_localhost "\"\\)\\}, " r_i ") += 0$"
9fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin}
10fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin
11fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. LevinNR == 1 && /^socket\(PF_INET, SOCK_STREAM, IPPROTO_IP\) += 0$/ {next}
12fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin
13fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. LevinNR == 2 {
14fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  if (match($0, r_connect, a)) {
15959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. Levin    port_r = a[1]
16959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. Levin    r_send = "^send\\(0<TCP:\\[" r_localhost ":(" r_port ")->" r_localhost ":" port_r "\\]>, \"data\", 4, MSG_DONTROUTE\\) += 4$"
17959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. Levin    r_sendto = "^sendto\\(0<TCP:\\[" r_localhost ":(" r_port ")->" r_localhost ":" port_r "\\]>, \"data\", 4, MSG_DONTROUTE, NULL, 0\\) += 4$"
18fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin    next
19fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  }
20fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin}
21fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin
22fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. LevinNR == 3 {
23959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. Levin  if (r_send != "" && (match($0, r_send, a) || match($0, r_sendto, a))) {
24fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin    port_l = a[1]
25959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. Levin    r_close = "^close\\(0<TCP:\\[" r_localhost ":" port_l "->" r_localhost ":" port_r "\\]>\\) += 0$"
26fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin    next
27fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  }
28fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin}
29fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin
30959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. LevinNR == 4 {if (r_close != "" && match($0, r_close)) next}
31fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin
32959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. LevinNR == lines && $0 == "+++ exited with 0 +++" {next}
33fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin
34fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin{
35fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  print "Line " NR " does not match: " $0
36fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  fail=1
37fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin}
38fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin
39fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. LevinEND {
40fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  if (NR != lines) {
41fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin    print "Expected " lines " lines, found " NR " line(s)."
42fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin    print ""
43fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin    exit 1
44fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  }
45fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  if (fail) {
46fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin    print ""
47fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin    exit 1
48fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin  }
49fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin}
50