chiark / gitweb /
Specify link addrs.
authorian <ian>
Sun, 3 Mar 2002 14:46:11 +0000 (14:46 +0000)
committerian <ian>
Sun, 3 Mar 2002 14:46:11 +0000 (14:46 +0000)
Makefile
make-probes.tcl

index caf4e30e3cd94eb47a0473782a7ba39fe93be9e7..3eb400003b23284173e426a1cd282eea0560967d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -22,8 +22,8 @@
 #############################################################
 # You should edit the parameters below for your site
 
-SOURCE=                172.18.45.35
-DEST=          172.18.45.6
+SOURCE=                172.18.45.35/00:04:76:1A:92:13
+DEST=          172.18.45.6/00:04:76:1A:8F:C6
 
 UNIQUE=
 # set UNIQUE to something random for less observability
index 3466cdbc63ad8d865f6bdad6b240743b9cc9baaa..f5816980a140df7e7bf7209e6501f51dcf90dc69 100755 (executable)
@@ -1176,7 +1176,7 @@ namespace import PCap::*
 
 proc emit {seed} {
     global getlog_log errorInfo mtu fake_time_t
-    global minframelen
+    global minframelen linktypename
 
     get-for ip
     get-config source 127.0.0.1 v4addr
@@ -1198,10 +1198,7 @@ proc emit {seed} {
            append packet [string repeat 00 [expr {$minframelen - $l}]]
        }
 
-       # RFC894
-       set llpkt [random-bytes 12]
-       append llpkt 0800
-       append llpkt $packet
+       set llpkt [link/$linktypename/linkencap $packet]
        
        set len [packet-len "$llpkt"]
        pcap_write {
@@ -1215,6 +1212,28 @@ proc emit {seed} {
 }
 
 
+# link/ether - RFC894
+proc link/ether/linkparams {} { return {1 46} }
+proc link/ether/defaddr {} { return 00:00:00:00:00:00 }
+proc link/ether/procaddr {input sd} {
+    set v [string tolower $input]
+    if {[regexp {^([0-9a-f]{2}\:){5}[0-9a-f]{2}$} $v]} {
+       set v [string map {: {}} $v]
+    }
+    if {![regexp -nocase {^[0-9]{12}$} $v]} {
+       error "invalid $sd ethernet addr $input ($v)"
+    }
+    return $v
+}
+proc link/ether/linkencap {packet} {
+    global link_source link_dest
+    set llpkt {}
+    append llpkt $link_source $link_dest 0800
+    append llpkt $packet
+    return $llpkt
+}
+
+
 proc nextarg {} {
     global argv
     if {![llength $argv]} { error "need another arg" }
@@ -1224,11 +1243,19 @@ proc nextarg {} {
 }
 
 proc nextarg_num {} { return [expr {[nextarg] + 0}] }
+proc nextarg_il {} {
+    set a [nextarg]
+    if {![regexp -nocase {^([0-9.]+)/([0-9a-f:]+)$} $a dummy i l]} {
+       error "--source/--dest needs <ip-addr>/<link-addr>"
+    }
+    return [list $i [string map {: {}} $l]]
+}
 
 set debug_level 0
 set mtu 576
 set upto {}
 set xseed {}
+set linktypename ether
 while {[regexp {^\-\-} [lindex $argv 0]]} {
     set o [nextarg]
     switch -exact -- $o {
@@ -1238,12 +1265,26 @@ while {[regexp {^\-\-} [lindex $argv 0]]} {
        --write { pcap_open [nextarg] }
        --mtu { set mtu [nextarg_num] }
        --xseed { set xseed [nextarg] }
-       --source { set config/ip-source [nextarg] }
-       --dest { set config/ip-dest [nextarg] }
+       --linktype { set linktypename [nextarg] }
+       --source { manyset [nextarg_ih] config/ip-source config/link-source }
+       --dest { manyset [nextarg_ih] config/ip-dest config/link-dest }
        default { error "bad option $o" }
     }
 }
 
+proc process_linkaddr {sd} {
+    global linktypename
+    upvar #0 link_$sd l
+    link/$linktypename/linktype
+    get-for link
+    get-config $sd [link/$linktypename/defaddr] linkaddr
+    set l [link/$linktypename/procaddr [set $sd] $sd]
+}
+
+manyset [link/$linktypename/linkparams] linktype minframelen
+process_linkaddr source
+process_linkaddr dest
+
 set magic d4c3b2a1
 set version_major 2
 set version_minor 4
@@ -1251,10 +1292,6 @@ set thiszone 0
 set sigfigs 0
 set snaplen 131073
 
-# RFC894
-set linktype 1
-set minframelen 46
-
 pcap_write {
     x32 magic
     u16 version_major