chiark / gitweb /
Working on packaging
[vinegar-ip.git] / make-probes.tcl
index c3a1d3330b20eac311afc1c311f52dec7d971686..478fc3fc9b57bf59b6c92b8e252246d98eef500b 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/tclsh8.2
+#!/usr/bin/tclsh
 
 
 proc debug {level str} {
@@ -659,34 +659,6 @@ define icmp-inforeq-code 0 timestamp {} {}
 # MAYADD ICMP traceroute RFC1393
 # MAYADD ICMP router discovery RFC1256
 
-proc port-pair {scope} {
-    get-for $scope
-
-    get style choice-mult \
-           request 0.15 \
-           reply 0.15 \
-           servers 0.20 \
-           random
-
-    if {"$style" != "random"} {
-       get port enum-def
-       set def_port $port
-    } else {
-       set def_port x
-    }
-    if {"$style" != "servers"} {
-       get port enum-rand 0 0xffff
-       set rand_port $port
-    }
-    switch -exact $style {
-       random  { set source_port $rand_port; set dest_port $rand_port }
-       request { set source_port $rand_port; set dest_port $def_port }
-       reply   { set source_port $def_port;  set dest_port $rand_port }
-       servers { set source_port $def_port;  set dest_port $def_port }
-    }
-    return [list $source_port $dest_port $def_port $style]
-}
-
 
 define ip-proto 4 ip {mtu} {
     # RFC2003
@@ -760,7 +732,29 @@ define ip-proto 17 udp {mtu} {
            checksum_bad 0.10 \
            checksum_none 0.20 \
            checksum_good]
-    manyset [port-pair udp] source_port dest_port def_port style
+
+    get style choice-mult \
+           request 0.15 \
+           reply 0.15 \
+           servers 0.20 \
+           random
+
+    if {"$style" != "random"} {
+       get port enum-def
+       set def_port $port
+    } else {
+       set def_port x
+    }
+    if {"$style" != "servers"} {
+       get port enum-rand 0 0xffff
+       set rand_port $port
+    }
+    switch -exact $style {
+       random  { set source_port $rand_port; set dest_port $rand_port }
+       request { set source_port $rand_port; set dest_port $def_port }
+       reply   { set source_port $def_port;  set dest_port $rand_port }
+       servers { set source_port $def_port;  set dest_port $def_port }
+    }
 
     if {"$style" != "random"} {
        set port $def_port
@@ -1155,7 +1149,8 @@ namespace eval PCap {
 namespace import PCap::*
 
 proc emit {seed} {
-    global getlog_log errorInfo mtu
+    global getlog_log errorInfo mtu fake_time_t
+    global minframelen
 
     get-for ip
     get-config source 127.0.0.1 v4addr
@@ -1169,11 +1164,17 @@ proc emit {seed} {
        puts stderr "\nERROR\n$seed\n\n$emsg\n\n$errorInfo\n\n"
        puts stdout "[format %6s $seed] error"
     } else {
-       set ts_sec [clock seconds]
+       set ts_sec [incr fake_time_t]
        set ts_usec 0
 
-       set llpkt [random-bytes 12] ;# ether addrs
-       append llpkt 0800 ;# eth ip type
+       set l [packet-len $packet]
+       if {$l < $minframelen} {
+           append packet [string repeat 00 [expr {$minframelen - $l}]]
+       }
+
+       # RFC894
+       set llpkt [random-bytes 12]
+       append llpkt 0800
        append llpkt $packet
        
        set len [packet-len "$llpkt"]
@@ -1223,7 +1224,10 @@ set version_minor 4
 set thiszone 0
 set sigfigs 0
 set snaplen 131073
+
+# RFC894
 set linktype 1
+set minframelen 46
 
 pcap_write {
     x32 magic
@@ -1235,6 +1239,8 @@ pcap_write {
     s32 linktype
 }
 
+set fake_time_t [clock seconds]
+
 if {[llength $argv]} {
     foreach count $argv { emit "$xseed$count" }
 } else {