tests: Fix deprecated use of qw.
[sliver-openvswitch.git] / tests / flowgen.pl
index 45b9728..d397515 100755 (executable)
@@ -1,6 +1,6 @@
 #! /usr/bin/perl
 
-# Copyright (c) 2009 Nicira Networks.
+# 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.
@@ -32,19 +32,19 @@ print PACKETS pack('NnnNNNN',
 
 output(DL_HEADER => '802.2');
 
-for my $dl_header qw(802.2+SNAP Ethernet) {
+for my $dl_header (qw(802.2+SNAP Ethernet)) {
     my %a = (DL_HEADER => $dl_header);
-    for my $dl_vlan qw(none zero nonzero) {
+    for my $dl_vlan (qw(none zero nonzero)) {
         my %b = (%a, DL_VLAN => $dl_vlan);
 
         # Non-IP case.
         output(%b, DL_TYPE => 'non-ip');
 
-        for my $ip_options qw(no yes) {
+        for my $ip_options (qw(no yes)) {
             my %c = (%b, DL_TYPE => 'ip', IP_OPTIONS => $ip_options);
-            for my $ip_fragment qw(no first middle last) {
+            for my $ip_fragment (qw(no first middle last)) {
                 my %d = (%c, IP_FRAGMENT => $ip_fragment);
-                for my $tp_proto qw(TCP TCP+options UDP ICMP other) {
+                for my $tp_proto (qw(TCP TCP+options UDP ICMP other)) {
                     output(%d, TP_PROTO => $tp_proto);
                 }
             }
@@ -60,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;
@@ -78,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 {
@@ -109,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.
@@ -117,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
@@ -191,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";
@@ -203,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}),