X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=tests%2Fflowgen.pl;h=4e2e5ad74f9256e67d63909fc3c58bc060bc5508;hb=f7eaaeba017b2442edd730b929d4713ba4375b1e;hp=6325f1fea90144647a829236b8449680b5b6d94d;hpb=064af42167bf4fc9aaea2702d80ce08074b889c0;p=sliver-openvswitch.git diff --git a/tests/flowgen.pl b/tests/flowgen.pl index 6325f1fea..4e2e5ad74 100755 --- a/tests/flowgen.pl +++ b/tests/flowgen.pl @@ -1,5 +1,19 @@ #! /usr/bin/perl +# Copyright (c) 2009, 2010 Nicira Networks. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + use strict; use warnings; @@ -46,6 +60,7 @@ sub output { $flow{DL_SRC} = "00:02:e3:0f:80:a4"; $flow{DL_DST} = "00:1a:92:40:ac:05"; $flow{NW_PROTO} = 0; + $flow{NW_TOS} = 0; $flow{NW_SRC} = '0.0.0.0'; $flow{NW_DST} = '0.0.0.0'; $flow{TP_SRC} = 0; @@ -64,19 +79,20 @@ sub output { $flow{DL_TYPE} = 0x0800; # ETH_TYPE_IP $flow{NW_SRC} = '10.0.2.15'; $flow{NW_DST} = '192.168.1.20'; + $flow{NW_TOS} = 44; if ($attrs{TP_PROTO} eq 'other') { $flow{NW_PROTO} = 42; } elsif ($attrs{TP_PROTO} eq 'TCP' || $attrs{TP_PROTO} eq 'TCP+options') { - $flow{NW_PROTO} = 6; # IP_TYPE_TCP + $flow{NW_PROTO} = 6; # IPPROTO_TCP $flow{TP_SRC} = 6667; $flow{TP_DST} = 9998; } elsif ($attrs{TP_PROTO} eq 'UDP') { - $flow{NW_PROTO} = 17; # IP_TYPE_UDP + $flow{NW_PROTO} = 17; # IPPROTO_UDP $flow{TP_SRC} = 1112; $flow{TP_DST} = 2223; } elsif ($attrs{TP_PROTO} eq 'ICMP') { - $flow{NW_PROTO} = 1; # IP_TYPE_ICMP + $flow{NW_PROTO} = 1; # IPPROTO_ICMP $flow{TP_SRC} = 8; # echo request $flow{TP_DST} = 0; # code } else { @@ -95,6 +111,10 @@ sub output { my $packet = ''; $packet .= pack_ethaddr($flow{DL_DST}); $packet .= pack_ethaddr($flow{DL_SRC}); + if ($flow{DL_VLAN} != 0xffff) { + $packet .= pack('nn', 0x8100, $flow{DL_VLAN}); + } + my $len_ofs = length($packet); $packet .= pack('n', 0) if $attrs{DL_HEADER} =~ /^802.2/; if ($attrs{DL_HEADER} eq '802.2') { $packet .= pack('CCC', 0x42, 0x42, 0x03); # LLC for 802.1D STP. @@ -103,14 +123,11 @@ sub output { $packet .= pack('CCC', 0xaa, 0xaa, 0x03); # LLC for SNAP. $packet .= pack('CCC', 0, 0, 0); # SNAP OUI. } - if ($attrs{DL_VLAN} ne 'none') { - $packet .= pack('nn', 0x8100, $flow{DL_VLAN}); - } $packet .= pack('n', $flow{DL_TYPE}); if ($attrs{DL_TYPE} eq 'ip') { my $ip = pack('CCnnnCCnNN', (4 << 4) | 5, # version, hdrlen - 0, # type of service + $flow{NW_TOS}, # type of service 0, # total length (filled in later) 65432, # id 0, # frag offset @@ -177,8 +194,11 @@ sub output { $packet .= $ip; } } - substr($packet, 12, 2) = pack('n', length($packet)) - if $attrs{DL_HEADER} =~ /^802.2/; + if ($attrs{DL_HEADER} =~ /^802.2/) { + my $len = length ($packet); + $len -= 4 if $flow{DL_VLAN} != 0xffff; + substr($packet, $len_ofs, 2) = pack('n', $len); + } print join(' ', map("$_=$attrs{$_}", keys(%attrs))), "\n"; print join(' ', map("$_=$flow{$_}", keys(%flow))), "\n"; @@ -189,9 +209,11 @@ sub output { 1); # in_port print FLOWS pack_ethaddr($flow{DL_SRC}); print FLOWS pack_ethaddr($flow{DL_DST}); - print FLOWS pack('nnCxNNnn', + print FLOWS pack('nCxnCCxxNNnn', $flow{DL_VLAN}, + 0, # DL_VLAN_PCP $flow{DL_TYPE}, + $flow{NW_TOS}, $flow{NW_PROTO}, inet_aton($flow{NW_SRC}), inet_aton($flow{NW_DST}),