From: ian Date: Sun, 3 Mar 2002 14:46:11 +0000 (+0000) Subject: Specify link addrs. X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=vinegar-ip.git;a=commitdiff_plain;h=9369cbec774c182fa8aa5ed7380dc393554a9d92 Specify link addrs. --- diff --git a/Makefile b/Makefile index caf4e30..3eb4000 100644 --- 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 diff --git a/make-probes.tcl b/make-probes.tcl index 3466cdb..f581698 100755 --- a/make-probes.tcl +++ b/make-probes.tcl @@ -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 /" + } + 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