diff mbox series

[ovs-dev,06/13] tests: Use fmt_pkt in 3 HVs, 3 LS, 3 lports/LS.

Message ID 20231010203400.1045353-7-mmichels@redhat.com
State Changes Requested
Headers show
Series tests: Convert some tests to use fmt_pkt. | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_ovn-kubernetes success github build: passed
ovsrobot/github-robot-_Build_and_Test fail github build: failed

Commit Message

Mark Michelson Oct. 10, 2023, 8:33 p.m. UTC
This test is slower than it used to be since some of the test_ip calls
that were backgrounded (with '&') cannot do this anymore. This is
because there is a race condition with starting the scapy server when
the calls are backgrounded.

Execution time: 36.471s
Execution time on "main" branch: 13.913s

Signed-off-by: Mark Michelson <mmichels@redhat.com>
---
 tests/ovn.at | 97 ++++++++++++++++++++++++++++------------------------
 1 file changed, 52 insertions(+), 45 deletions(-)

Comments

Ihar Hrachyshka Oct. 12, 2023, 8:58 p.m. UTC | #1
On Tue, Oct 10, 2023 at 4:34 PM Mark Michelson <mmichels@redhat.com> wrote:

> This test is slower than it used to be since some of the test_ip calls
> that were backgrounded (with '&') cannot do this anymore. This is
> because there is a race condition with starting the scapy server when
> the calls are backgrounded.
>

While we should probably make sure that fmt_pkt can be safely executed
while another background job is already starting the server...

I think what you could do in this test scenario is "pre-seed" the test
environment by calling start_scapy_server just before the `Send IP packets
between all pairs of source and destination ports` section that runs
background tests. In this way, it's guaranteed that the server is already
running when the first &'d test is invoked.

I just tried it locally and it seems to work. Let me know if this resolves
the problem for you.


>
> Execution time: 36.471s
> Execution time on "main" branch: 13.913s
>
> Signed-off-by: Mark Michelson <mmichels@redhat.com>
> ---
>  tests/ovn.at | 97 ++++++++++++++++++++++++++++------------------------
>  1 file changed, 52 insertions(+), 45 deletions(-)
>
> diff --git a/tests/ovn.at b/tests/ovn.at
> index 4423f306d..1ab98eb80 100644
> --- a/tests/ovn.at
> +++ b/tests/ovn.at
> @@ -4887,7 +4887,9 @@ done
>  test_ip() {
>      # This packet has bad checksums but logical L3 routing doesn't check.
>      local inport=$1 src_mac=$2 dst_mac=$3 src_ip=$4 dst_ip=$5
> -    local
> packet=${dst_mac}${src_mac}08004500001c0000000040110000${src_ip}${dst_ip}0035111100080000
> +    local packet=$(fmt_pkt "Ether(dst='${dst_mac}', src='${src_mac}')/ \
> +                            IP(src='${src_ip}', dst='${dst_ip}',
> ttl=0x40)/ \
> +                            UDP(sport=53, dport=4369)")
>      shift; shift; shift; shift; shift
>      hv=hv`vif_to_hv $inport`
>      as $hv ovs-appctl netdev-dummy/receive vif$inport $packet
> @@ -4902,7 +4904,9 @@ test_ip() {
>              # Routing decrements TTL and updates source and dest MAC
>              # (and checksum).
>              out_lrp=`vif_to_lrp $outport`
> -            echo
> f00000000${outport}00000000ff${out_lrp}08004500001c00000000"3f1101"00${src_ip}${dst_ip}0035111100080000
> +            echo $(fmt_pkt
> "Ether(dst='f0:00:00:00:0$out_ls:${outport#?}',
> src='00:00:00:00:ff:${out_lrp}')/ \
> +                            IP(src='${src_ip}', dst='${dst_ip}',
> ttl=0x3f)/ \
> +                            UDP(sport=53, dport=4369)")
>          fi >> $outport.expected
>      done
>  }
> @@ -4920,7 +4924,8 @@ test_ip() {
>  test_arp() {
>      echo "$@"
>      local inport=$1 sha=$2 spa=$3 tpa=$4 reply_ha=$5
> -    local
> request=ffffffffffff${sha}08060001080006040001${sha}${spa}ffffffffffff${tpa}
> +    local request=$(fmt_pkt "Ether(dst='ff:ff:ff:ff:ff:ff',
> src='${sha}')/ \
> +                             ARP(hwsrc='${sha}',
> hwdst='ff:ff:ff:ff:ff:ff', psrc='${spa}', pdst='${tpa}')")
>      hv=hv`vif_to_hv $inport`
>      as $hv ovs-appctl netdev-dummy/receive vif$inport $request
>
> @@ -4932,7 +4937,7 @@ test_arp() {
>          for k in 1 2 3; do
>              # 192.168.33.254 is configured to the switch patch port for
> lrp33,
>              # so no ARP flooding expected for it.
> -            if test $i$j$k != $inport && test $tpa != `ip_to_hex 192 168
> 33 254`; then
> +            if test $i$j$k != $inport && test $tpa != 192.168.33.254; then
>                  echo $request >> $i$j$k.expected
>              fi
>          done
> @@ -4941,7 +4946,8 @@ test_arp() {
>      # Expect to receive the reply, if any.
>      if test X$reply_ha != X; then
>          lrp=`vif_to_lrp $inport`
> -        local
> reply=${sha}00000000ff${lrp}08060001080006040002${reply_ha}${tpa}${sha}${spa}
> +        local reply=$(fmt_pkt "Ether(dst='${sha}',
> src='00:00:00:00:ff:${lrp}')/ \
> +                               ARP(op=2, hwsrc='${reply_ha}',
> hwdst='${sha}', psrc='${tpa}', pdst='${spa}')")
>          echo $reply >> $inport.expected
>      fi
>  }
> @@ -4968,23 +4974,23 @@ for is in 1 2 3; do
>      for ks in 1 2 3; do
>        bcast=
>        s=$is$js$ks
> -      smac=f00000000$s
> -      sip=`ip_to_hex 192 168 $is$js $ks`
> +      smac=f0:00:00:00:0$is:$js$ks
> +      sip=192.168.$is$js.$ks
>        for id in 1 2 3; do
>            for jd in 1 2 3; do
>                for kd in 1 2 3; do
>                  d=$id$jd$kd
> -                dip=`ip_to_hex 192 168 $id$jd $kd`
> -                if test $is = $id; then dmac=f00000000$d; else
> dmac=00000000ff$is$js; fi
> +                dip=192.168.$id$jd.$kd
> +                if test $is = $id; then dmac=f0:00:00:00:0$id:$jd$kd;
> else dmac=00:00:00:00:ff:$is$js; fi
>                  if test $d != $s; then unicast=$d; else unicast=; fi
>
> -                test_ip $s $smac $dmac $sip $dip $unicast & #1
> +                test_ip $s $smac $dmac $sip $dip $unicast #1
>
>                  if test $id = $is && test $d != $s; then bcast="$bcast
> $d"; fi
>                done
>            done
>          done
> -      test_ip $s $smac ffffffffffff $sip ffffffff $bcast & #2
> +      test_ip $s $smac ff:ff:ff:ff:ff:ff $sip 255.255.255.255 $bcast #2
>        done
>    done
>    wait
> @@ -5001,8 +5007,8 @@ for is in 1 2 3; do
>    for js in 1 2 3; do
>      for ks in 1 2 3; do
>        s=$is$js$ks
> -      smac=f00000000$s
> -      sip=`ip_to_hex 192 168 $is$js $ks`
> +      smac=f0:00:00:00:0$is:$js$ks
> +      sip=192.168.$is$js.$ks
>        for id in 1 2 3; do
>          for jd in 1 2 3; do
>            if test $is$js = $id$jd; then
> @@ -5010,41 +5016,43 @@ for is in 1 2 3; do
>            fi
>
>            # Send the packet.
> -          dmac=00000000ff$is$js
> +          dmac=00:00:00:00:ff:$is$js
>            # Calculate a 4th octet for the destination that is
>            # unique per $s, avoids the .1 .2 .3 and .254 IP addresses
>            # that have static MAC bindings, and fits in the range
>            # 0-255.
>            o4=`expr $is '*' 9 + $js '*' 3 + $ks + 10`
> -          dip=`ip_to_hex 192 168 $id$jd $o4`
> +          dip=192.168.$id$jd.$o4
>            test_ip $s $smac $dmac $sip $dip
>
>            # Every LP on the destination subnet's lswitch should
>            # receive the ARP request.
> -          lrmac=00000000ff$id$jd
> -          lrip=`ip_to_hex 192 168 $id$jd 254`
> -
> arp=ffffffffffff${lrmac}08060001080006040001${lrmac}${lrip}000000000000${dip}
> +          lrmac=00:00:00:00:ff:$id$jd
> +          lrip=192.168.$id$jd.254
> +          arp=$(fmt_pkt "Ether(dst='ff:ff:ff:ff:ff:ff', src='${lrmac}')/ \
> +                         ARP(hwsrc='${lrmac}', hwdst='00:00:00:00:00:00',
> psrc='${lrip}', pdst='${dip}')")
>            for jd2 in 1 2 3; do
>              for kd in 1 2 3; do
>                echo $arp >> $id$jd2$kd.expected
>              done
>            done
>
> -          hmac=8000000000$o4
> -          rmac=00000000ff$id$jd
> -          echo
> ${hmac}${rmac}08004500001c00000000"3f1101"00${sip}${dip}0035111100080000 >>
> ${id}11.expected
> +          hmac=80:00:00:00:00:$o4
> +          rmac=00:00:00:00:ff:$id$jd
> +          echo $(fmt_pkt "Ether(dst='${hmac}', src='${rmac}')/ \
> +                          IP(src='${sip}', dst='${dip}', ttl=0x3f)/ \
> +                          UDP(sport=53, dport=4369)") >> ${id}11.expected
>
> -          host_mac=8000000000$o4
> -          lrmac=00000000ff$id$jd
> +          host_mac=80:00:00:00:00:$o4
> +          lrmac=00:00:00:00:ff:$id$jd
>
> -
> arp_reply=${lrmac}${host_mac}08060001080006040002${host_mac}${dip}${lrmac}${lrip}
> +          arp_reply=$(fmt_pkt "Ether(dst='${lrmac}', src='${host_mac}')/ \
> +                               ARP(op=2, hwsrc='${host_mac}',
> hwdst='${lrmac}', psrc='${dip}', pdst='${lrip}')")
>
>            hv=hv`vif_to_hv ${id}${jd}1`
>            as $hv ovs-appctl netdev-dummy/receive vif${id}${jd}1 $arp_reply
>
> -          host_ip_pretty=192.168.$id$jd.$o4
> -          host_mac_pretty=80:00:00:00:00:$o4
> -          echo lrp$id$jd,$host_ip_pretty,$host_mac_pretty >>
> mac_bindings.expected
> +          echo lrp$id$jd,$dip,$hmac >> mac_bindings.expected
>          done
>        done
>      done
> @@ -5064,12 +5072,12 @@ done
>  for i in 1 2 3; do
>    for j in 1 2 3; do
>      for k in 1 2 3; do
> -      smac=f00000000$i$j$k               # Source MAC
> -      sip=`ip_to_hex 192 168 $i$j $k`    # Source IP
> -      rip=`ip_to_hex 192 168 $i$j 254`   # Router IP
> -      rmac=00000000ff$i$j                # Router MAC
> -      otherip=`ip_to_hex 192 168 $i$j 55` # Some other IP in subnet
> -      externalip=`ip_to_hex 1 2 3 4`      # Some other IP not in subnet
> +      smac=f0:00:00:00:0$i:$j$k               # Source MAC
> +      sip=192.168.$i$j.$k    # Source IP
> +      rip=192.168.$i$j.254   # Router IP
> +      rmac=00:00:00:00:ff:$i$j                # Router MAC
> +      otherip=192.168.$i$j.55 # Some other IP in subnet
> +      externalip=1.2.3.4      # Some other IP not in subnet
>
>        test_arp $i$j$k $smac $sip        $rip        $rmac      #4
>        test_arp $i$j$k $smac $otherip    $rip        $rmac      #5
> @@ -5081,22 +5089,19 @@ for i in 1 2 3; do
>        lrp33_rsp=
>        if test $i = 3 && test $j = 3; then
>          lrp33_rsp=$rmac
> +        echo "lrp33_rsp is ${lrp33_rsp}"
>

^ debug line?


>        fi
>        test_arp $i$j$k $smac $externalip $rip        $lrp33_rsp #7
>
>        # MAC binding should be learned from ARP request.
> -      host_mac_pretty=f0:00:00:00:0$i:$j$k
> -
> -      host_ip_pretty=192.168.$i$j.$k
> -      echo lrp$i$j,$host_ip_pretty,$host_mac_pretty >>
> mac_bindings.expected
> +      echo lrp$i$j,$sip,$smac >> mac_bindings.expected
>
>        # mac_binding is learned and overwritten so only the last one
> remains.
>        if test $k = 3; then
>            # lrp33 will not learn from ARP request, because 192.168.33.254
> is
>            # configured to switch peer port for lrp33.
>            if test $i != 3 || test $j != 3; then
> -              host_ip_pretty=192.168.$i$j.55
> -              echo lrp$i$j,$host_ip_pretty,$host_mac_pretty >>
> mac_bindings.expected
> +              echo lrp$i$j,$otherip,$smac >> mac_bindings.expected
>            fi
>        fi
>
> @@ -5119,8 +5124,8 @@ for is in 1 2 3; do
>    for js in 1 2 3; do
>      for ks in 1 2 3; do
>        s=$is$js$ks
> -      smac=f00000000$s
> -      sip=`ip_to_hex 192 168 $is$js $ks`
> +      smac=f0:00:00:00:0$is:$js$ks
> +      sip=192.168.$is$js.$ks
>        for id in 1 2 3; do
>          for jd in 1 2 3; do
>            if test $is$js = $id$jd; then
> @@ -5128,20 +5133,22 @@ for is in 1 2 3; do
>            fi
>
>            # Send the packet.
> -          dmac=00000000ff$is$js
> +          dmac=00:00:00:00:ff:$is$js
>            # Calculate a 4th octet for the destination that is
>            # unique per $s, avoids the .1 .2 .3 and .254 IP addresses
>            # that have static MAC bindings, and fits in the range
>            # 0-255.
>            o4=`expr $is '*' 9 + $js '*' 3 + $ks + 10`
> -          dip=`ip_to_hex 192 168 $id$jd $o4`
> +          dip=192.168.$id$jd.$o4
>            test_ip $s $smac $dmac $sip $dip
>
>            # Expect the packet egress.
> -          host_mac=8000000000$o4
> +          host_mac=80:00:00:00:00:$o4
>            outport=${id}11
>            out_lrp=$id$jd
> -          echo
> ${host_mac}00000000ff${out_lrp}08004500001c00000000"3f1101"00${sip}${dip}0035111100080000
> >> $outport.expected
> +          echo $(fmt_pkt "Ether(dst='${host_mac}',
> src='00:00:00:00:ff:$id$jd')/ \
> +                          IP(src='${sip}', dst='${dip}', ttl=0x3f)/ \
> +                          UDP(sport=53, dport=4369)") >> $outport.expected
>          done
>        done
>      done
> --
> 2.40.1
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
Mark Michelson Nov. 14, 2023, 8:34 p.m. UTC | #2
On 10/12/23 16:58, Ihar Hrachyshka wrote:
> On Tue, Oct 10, 2023 at 4:34 PM Mark Michelson <mmichels@redhat.com 
> <mailto:mmichels@redhat.com>> wrote:
> 
>     This test is slower than it used to be since some of the test_ip calls
>     that were backgrounded (with '&') cannot do this anymore. This is
>     because there is a race condition with starting the scapy server when
>     the calls are backgrounded.
> 
> 
> While we should probably make sure that fmt_pkt can be safely executed 
> while another background job is already starting the server...
> 
> I think what you could do in this test scenario is "pre-seed" the test 
> environment by calling start_scapy_server just before the `Send IP 
> packets between all pairs of source and destination ports` section that 
> runs background tests. In this way, it's guaranteed that the server is 
> already running when the first &'d test is invoked.
> 
> I just tried it locally and it seems to work. Let me know if this 
> resolves the problem for you.

Unfortunately, this did not work for me. testsuite.log is full of lines 
like:

2023-11-14T20:28:38Z |  0  | daemon | ERR | 
/home/molinari/ovn/tests/testsuite.dir/079/scapy.pid: already running as 
pid 150836, aborting

The test might eventually stop, but I pressed ctrl+C after a couple of 
minutes since the test was still running.

> 
> 
>     Execution time: 36.471s
>     Execution time on "main" branch: 13.913s
> 
>     Signed-off-by: Mark Michelson <mmichels@redhat.com
>     <mailto:mmichels@redhat.com>>
>     ---
>       tests/ovn.at <http://ovn.at> | 97
>     ++++++++++++++++++++++++++++------------------------
>       1 file changed, 52 insertions(+), 45 deletions(-)
> 
>     diff --git a/tests/ovn.at <http://ovn.at> b/tests/ovn.at <http://ovn.at>
>     index 4423f306d..1ab98eb80 100644
>     --- a/tests/ovn.at <http://ovn.at>
>     +++ b/tests/ovn.at <http://ovn.at>
>     @@ -4887,7 +4887,9 @@ done
>       test_ip() {
>           # This packet has bad checksums but logical L3 routing doesn't
>     check.
>           local inport=$1 src_mac=$2 dst_mac=$3 src_ip=$4 dst_ip=$5
>     -    local
>     packet=${dst_mac}${src_mac}08004500001c0000000040110000${src_ip}${dst_ip}0035111100080000
>     +    local packet=$(fmt_pkt "Ether(dst='${dst_mac}',
>     src='${src_mac}')/ \
>     +                            IP(src='${src_ip}', dst='${dst_ip}',
>     ttl=0x40)/ \
>     +                            UDP(sport=53, dport=4369)")
>           shift; shift; shift; shift; shift
>           hv=hv`vif_to_hv $inport`
>           as $hv ovs-appctl netdev-dummy/receive vif$inport $packet
>     @@ -4902,7 +4904,9 @@ test_ip() {
>                   # Routing decrements TTL and updates source and dest MAC
>                   # (and checksum).
>                   out_lrp=`vif_to_lrp $outport`
>     -            echo
>     f00000000${outport}00000000ff${out_lrp}08004500001c00000000"3f1101"00${src_ip}${dst_ip}0035111100080000
>     +            echo $(fmt_pkt
>     "Ether(dst='f0:00:00:00:0$out_ls:${outport#?}',
>     src='00:00:00:00:ff:${out_lrp}')/ \
>     +                            IP(src='${src_ip}', dst='${dst_ip}',
>     ttl=0x3f)/ \
>     +                            UDP(sport=53, dport=4369)")
>               fi >> $outport.expected
>           done
>       }
>     @@ -4920,7 +4924,8 @@ test_ip() {
>       test_arp() {
>           echo "$@"
>           local inport=$1 sha=$2 spa=$3 tpa=$4 reply_ha=$5
>     -    local
>     request=ffffffffffff${sha}08060001080006040001${sha}${spa}ffffffffffff${tpa}
>     +    local request=$(fmt_pkt "Ether(dst='ff:ff:ff:ff:ff:ff',
>     src='${sha}')/ \
>     +                             ARP(hwsrc='${sha}',
>     hwdst='ff:ff:ff:ff:ff:ff', psrc='${spa}', pdst='${tpa}')")
>           hv=hv`vif_to_hv $inport`
>           as $hv ovs-appctl netdev-dummy/receive vif$inport $request
> 
>     @@ -4932,7 +4937,7 @@ test_arp() {
>               for k in 1 2 3; do
>                   # 192.168.33.254 is configured to the switch patch
>     port for lrp33,
>                   # so no ARP flooding expected for it.
>     -            if test $i$j$k != $inport && test $tpa != `ip_to_hex
>     192 168 33 254`; then
>     +            if test $i$j$k != $inport && test $tpa !=
>     192.168.33.254; then
>                       echo $request >> $i$j$k.expected
>                   fi
>               done
>     @@ -4941,7 +4946,8 @@ test_arp() {
>           # Expect to receive the reply, if any.
>           if test X$reply_ha != X; then
>               lrp=`vif_to_lrp $inport`
>     -        local
>     reply=${sha}00000000ff${lrp}08060001080006040002${reply_ha}${tpa}${sha}${spa}
>     +        local reply=$(fmt_pkt "Ether(dst='${sha}',
>     src='00:00:00:00:ff:${lrp}')/ \
>     +                               ARP(op=2, hwsrc='${reply_ha}',
>     hwdst='${sha}', psrc='${tpa}', pdst='${spa}')")
>               echo $reply >> $inport.expected
>           fi
>       }
>     @@ -4968,23 +4974,23 @@ for is in 1 2 3; do
>           for ks in 1 2 3; do
>             bcast=
>             s=$is$js$ks
>     -      smac=f00000000$s
>     -      sip=`ip_to_hex 192 168 $is$js $ks`
>     +      smac=f0:00:00:00:0$is:$js$ks
>     +      sip=192.168.$is$js.$ks
>             for id in 1 2 3; do
>                 for jd in 1 2 3; do
>                     for kd in 1 2 3; do
>                       d=$id$jd$kd
>     -                dip=`ip_to_hex 192 168 $id$jd $kd`
>     -                if test $is = $id; then dmac=f00000000$d; else
>     dmac=00000000ff$is$js; fi
>     +                dip=192.168.$id$jd.$kd
>     +                if test $is = $id; then
>     dmac=f0:00:00:00:0$id:$jd$kd; else dmac=00:00:00:00:ff:$is$js; fi
>                       if test $d != $s; then unicast=$d; else unicast=; fi
> 
>     -                test_ip $s $smac $dmac $sip $dip $unicast & #1
>     +                test_ip $s $smac $dmac $sip $dip $unicast #1
> 
>                       if test $id = $is && test $d != $s; then
>     bcast="$bcast $d"; fi
>                     done
>                 done
>               done
>     -      test_ip $s $smac ffffffffffff $sip ffffffff $bcast & #2
>     +      test_ip $s $smac ff:ff:ff:ff:ff:ff $sip 255.255.255.255 $bcast #2
>             done
>         done
>         wait
>     @@ -5001,8 +5007,8 @@ for is in 1 2 3; do
>         for js in 1 2 3; do
>           for ks in 1 2 3; do
>             s=$is$js$ks
>     -      smac=f00000000$s
>     -      sip=`ip_to_hex 192 168 $is$js $ks`
>     +      smac=f0:00:00:00:0$is:$js$ks
>     +      sip=192.168.$is$js.$ks
>             for id in 1 2 3; do
>               for jd in 1 2 3; do
>                 if test $is$js = $id$jd; then
>     @@ -5010,41 +5016,43 @@ for is in 1 2 3; do
>                 fi
> 
>                 # Send the packet.
>     -          dmac=00000000ff$is$js
>     +          dmac=00:00:00:00:ff:$is$js
>                 # Calculate a 4th octet for the destination that is
>                 # unique per $s, avoids the .1 .2 .3 and .254 IP addresses
>                 # that have static MAC bindings, and fits in the range
>                 # 0-255.
>                 o4=`expr $is '*' 9 + $js '*' 3 + $ks + 10`
>     -          dip=`ip_to_hex 192 168 $id$jd $o4`
>     +          dip=192.168.$id$jd.$o4
>                 test_ip $s $smac $dmac $sip $dip
> 
>                 # Every LP on the destination subnet's lswitch should
>                 # receive the ARP request.
>     -          lrmac=00000000ff$id$jd
>     -          lrip=`ip_to_hex 192 168 $id$jd 254`
>     -         
>     arp=ffffffffffff${lrmac}08060001080006040001${lrmac}${lrip}000000000000${dip}
>     +          lrmac=00:00:00:00:ff:$id$jd
>     +          lrip=192.168.$id$jd.254
>     +          arp=$(fmt_pkt "Ether(dst='ff:ff:ff:ff:ff:ff',
>     src='${lrmac}')/ \
>     +                         ARP(hwsrc='${lrmac}',
>     hwdst='00:00:00:00:00:00', psrc='${lrip}', pdst='${dip}')")
>                 for jd2 in 1 2 3; do
>                   for kd in 1 2 3; do
>                     echo $arp >> $id$jd2$kd.expected
>                   done
>                 done
> 
>     -          hmac=8000000000$o4
>     -          rmac=00000000ff$id$jd
>     -          echo
>     ${hmac}${rmac}08004500001c00000000"3f1101"00${sip}${dip}0035111100080000 >> ${id}11.expected
>     +          hmac=80:00:00:00:00:$o4
>     +          rmac=00:00:00:00:ff:$id$jd
>     +          echo $(fmt_pkt "Ether(dst='${hmac}', src='${rmac}')/ \
>     +                          IP(src='${sip}', dst='${dip}', ttl=0x3f)/ \
>     +                          UDP(sport=53, dport=4369)") >>
>     ${id}11.expected
> 
>     -          host_mac=8000000000$o4
>     -          lrmac=00000000ff$id$jd
>     +          host_mac=80:00:00:00:00:$o4
>     +          lrmac=00:00:00:00:ff:$id$jd
> 
>     -         
>     arp_reply=${lrmac}${host_mac}08060001080006040002${host_mac}${dip}${lrmac}${lrip}
>     +          arp_reply=$(fmt_pkt "Ether(dst='${lrmac}',
>     src='${host_mac}')/ \
>     +                               ARP(op=2, hwsrc='${host_mac}',
>     hwdst='${lrmac}', psrc='${dip}', pdst='${lrip}')")
> 
>                 hv=hv`vif_to_hv ${id}${jd}1`
>                 as $hv ovs-appctl netdev-dummy/receive vif${id}${jd}1
>     $arp_reply
> 
>     -          host_ip_pretty=192.168.$id$jd.$o4
>     -          host_mac_pretty=80:00:00:00:00:$o4
>     -          echo lrp$id$jd,$host_ip_pretty,$host_mac_pretty >>
>     mac_bindings.expected
>     +          echo lrp$id$jd,$dip,$hmac >> mac_bindings.expected
>               done
>             done
>           done
>     @@ -5064,12 +5072,12 @@ done
>       for i in 1 2 3; do
>         for j in 1 2 3; do
>           for k in 1 2 3; do
>     -      smac=f00000000$i$j$k               # Source MAC
>     -      sip=`ip_to_hex 192 168 $i$j $k`    # Source IP
>     -      rip=`ip_to_hex 192 168 $i$j 254`   # Router IP
>     -      rmac=00000000ff$i$j                # Router MAC
>     -      otherip=`ip_to_hex 192 168 $i$j 55` # Some other IP in subnet
>     -      externalip=`ip_to_hex 1 2 3 4`      # Some other IP not in subnet
>     +      smac=f0:00:00:00:0$i:$j$k               # Source MAC
>     +      sip=192.168.$i$j.$k    # Source IP
>     +      rip=192.168.$i$j.254   # Router IP
>     +      rmac=00:00:00:00:ff:$i$j                # Router MAC
>     +      otherip=192.168.$i$j.55 # Some other IP in subnet
>     +      externalip=1.2.3.4      # Some other IP not in subnet
> 
>             test_arp $i$j$k $smac $sip        $rip        $rmac      #4
>             test_arp $i$j$k $smac $otherip    $rip        $rmac      #5
>     @@ -5081,22 +5089,19 @@ for i in 1 2 3; do
>             lrp33_rsp=
>             if test $i = 3 && test $j = 3; then
>               lrp33_rsp=$rmac
>     +        echo "lrp33_rsp is ${lrp33_rsp}"
> 
> 
> ^ debug line?

Whoops, removed in v2.

> 
>             fi
>             test_arp $i$j$k $smac $externalip $rip        $lrp33_rsp #7
> 
>             # MAC binding should be learned from ARP request.
>     -      host_mac_pretty=f0:00:00:00:0$i:$j$k
>     -
>     -      host_ip_pretty=192.168.$i$j.$k
>     -      echo lrp$i$j,$host_ip_pretty,$host_mac_pretty >>
>     mac_bindings.expected
>     +      echo lrp$i$j,$sip,$smac >> mac_bindings.expected
> 
>             # mac_binding is learned and overwritten so only the last
>     one remains.
>             if test $k = 3; then
>                 # lrp33 will not learn from ARP request, because
>     192.168.33.254 is
>                 # configured to switch peer port for lrp33.
>                 if test $i != 3 || test $j != 3; then
>     -              host_ip_pretty=192.168.$i$j.55
>     -              echo lrp$i$j,$host_ip_pretty,$host_mac_pretty >>
>     mac_bindings.expected
>     +              echo lrp$i$j,$otherip,$smac >> mac_bindings.expected
>                 fi
>             fi
> 
>     @@ -5119,8 +5124,8 @@ for is in 1 2 3; do
>         for js in 1 2 3; do
>           for ks in 1 2 3; do
>             s=$is$js$ks
>     -      smac=f00000000$s
>     -      sip=`ip_to_hex 192 168 $is$js $ks`
>     +      smac=f0:00:00:00:0$is:$js$ks
>     +      sip=192.168.$is$js.$ks
>             for id in 1 2 3; do
>               for jd in 1 2 3; do
>                 if test $is$js = $id$jd; then
>     @@ -5128,20 +5133,22 @@ for is in 1 2 3; do
>                 fi
> 
>                 # Send the packet.
>     -          dmac=00000000ff$is$js
>     +          dmac=00:00:00:00:ff:$is$js
>                 # Calculate a 4th octet for the destination that is
>                 # unique per $s, avoids the .1 .2 .3 and .254 IP addresses
>                 # that have static MAC bindings, and fits in the range
>                 # 0-255.
>                 o4=`expr $is '*' 9 + $js '*' 3 + $ks + 10`
>     -          dip=`ip_to_hex 192 168 $id$jd $o4`
>     +          dip=192.168.$id$jd.$o4
>                 test_ip $s $smac $dmac $sip $dip
> 
>                 # Expect the packet egress.
>     -          host_mac=8000000000$o4
>     +          host_mac=80:00:00:00:00:$o4
>                 outport=${id}11
>                 out_lrp=$id$jd
>     -          echo
>     ${host_mac}00000000ff${out_lrp}08004500001c00000000"3f1101"00${sip}${dip}0035111100080000 >> $outport.expected
>     +          echo $(fmt_pkt "Ether(dst='${host_mac}',
>     src='00:00:00:00:ff:$id$jd')/ \
>     +                          IP(src='${sip}', dst='${dip}', ttl=0x3f)/ \
>     +                          UDP(sport=53, dport=4369)") >>
>     $outport.expected
>               done
>             done
>           done
>     -- 
>     2.40.1
> 
>     _______________________________________________
>     dev mailing list
>     dev@openvswitch.org <mailto:dev@openvswitch.org>
>     https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>     <https://mail.openvswitch.org/mailman/listinfo/ovs-dev>
>
diff mbox series

Patch

diff --git a/tests/ovn.at b/tests/ovn.at
index 4423f306d..1ab98eb80 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -4887,7 +4887,9 @@  done
 test_ip() {
     # This packet has bad checksums but logical L3 routing doesn't check.
     local inport=$1 src_mac=$2 dst_mac=$3 src_ip=$4 dst_ip=$5
-    local packet=${dst_mac}${src_mac}08004500001c0000000040110000${src_ip}${dst_ip}0035111100080000
+    local packet=$(fmt_pkt "Ether(dst='${dst_mac}', src='${src_mac}')/ \
+                            IP(src='${src_ip}', dst='${dst_ip}', ttl=0x40)/ \
+                            UDP(sport=53, dport=4369)")
     shift; shift; shift; shift; shift
     hv=hv`vif_to_hv $inport`
     as $hv ovs-appctl netdev-dummy/receive vif$inport $packet
@@ -4902,7 +4904,9 @@  test_ip() {
             # Routing decrements TTL and updates source and dest MAC
             # (and checksum).
             out_lrp=`vif_to_lrp $outport`
-            echo f00000000${outport}00000000ff${out_lrp}08004500001c00000000"3f1101"00${src_ip}${dst_ip}0035111100080000
+            echo $(fmt_pkt "Ether(dst='f0:00:00:00:0$out_ls:${outport#?}', src='00:00:00:00:ff:${out_lrp}')/ \
+                            IP(src='${src_ip}', dst='${dst_ip}', ttl=0x3f)/ \
+                            UDP(sport=53, dport=4369)")
         fi >> $outport.expected
     done
 }
@@ -4920,7 +4924,8 @@  test_ip() {
 test_arp() {
     echo "$@"
     local inport=$1 sha=$2 spa=$3 tpa=$4 reply_ha=$5
-    local request=ffffffffffff${sha}08060001080006040001${sha}${spa}ffffffffffff${tpa}
+    local request=$(fmt_pkt "Ether(dst='ff:ff:ff:ff:ff:ff', src='${sha}')/ \
+                             ARP(hwsrc='${sha}', hwdst='ff:ff:ff:ff:ff:ff', psrc='${spa}', pdst='${tpa}')")
     hv=hv`vif_to_hv $inport`
     as $hv ovs-appctl netdev-dummy/receive vif$inport $request
 
@@ -4932,7 +4937,7 @@  test_arp() {
         for k in 1 2 3; do
             # 192.168.33.254 is configured to the switch patch port for lrp33,
             # so no ARP flooding expected for it.
-            if test $i$j$k != $inport && test $tpa != `ip_to_hex 192 168 33 254`; then
+            if test $i$j$k != $inport && test $tpa != 192.168.33.254; then
                 echo $request >> $i$j$k.expected
             fi
         done
@@ -4941,7 +4946,8 @@  test_arp() {
     # Expect to receive the reply, if any.
     if test X$reply_ha != X; then
         lrp=`vif_to_lrp $inport`
-        local reply=${sha}00000000ff${lrp}08060001080006040002${reply_ha}${tpa}${sha}${spa}
+        local reply=$(fmt_pkt "Ether(dst='${sha}', src='00:00:00:00:ff:${lrp}')/ \
+                               ARP(op=2, hwsrc='${reply_ha}', hwdst='${sha}', psrc='${tpa}', pdst='${spa}')")
         echo $reply >> $inport.expected
     fi
 }
@@ -4968,23 +4974,23 @@  for is in 1 2 3; do
     for ks in 1 2 3; do
       bcast=
       s=$is$js$ks
-      smac=f00000000$s
-      sip=`ip_to_hex 192 168 $is$js $ks`
+      smac=f0:00:00:00:0$is:$js$ks
+      sip=192.168.$is$js.$ks
       for id in 1 2 3; do
           for jd in 1 2 3; do
               for kd in 1 2 3; do
                 d=$id$jd$kd
-                dip=`ip_to_hex 192 168 $id$jd $kd`
-                if test $is = $id; then dmac=f00000000$d; else dmac=00000000ff$is$js; fi
+                dip=192.168.$id$jd.$kd
+                if test $is = $id; then dmac=f0:00:00:00:0$id:$jd$kd; else dmac=00:00:00:00:ff:$is$js; fi
                 if test $d != $s; then unicast=$d; else unicast=; fi
 
-                test_ip $s $smac $dmac $sip $dip $unicast & #1
+                test_ip $s $smac $dmac $sip $dip $unicast #1
 
                 if test $id = $is && test $d != $s; then bcast="$bcast $d"; fi
               done
           done
         done
-      test_ip $s $smac ffffffffffff $sip ffffffff $bcast & #2
+      test_ip $s $smac ff:ff:ff:ff:ff:ff $sip 255.255.255.255 $bcast #2
       done
   done
   wait
@@ -5001,8 +5007,8 @@  for is in 1 2 3; do
   for js in 1 2 3; do
     for ks in 1 2 3; do
       s=$is$js$ks
-      smac=f00000000$s
-      sip=`ip_to_hex 192 168 $is$js $ks`
+      smac=f0:00:00:00:0$is:$js$ks
+      sip=192.168.$is$js.$ks
       for id in 1 2 3; do
         for jd in 1 2 3; do
           if test $is$js = $id$jd; then
@@ -5010,41 +5016,43 @@  for is in 1 2 3; do
           fi
 
           # Send the packet.
-          dmac=00000000ff$is$js
+          dmac=00:00:00:00:ff:$is$js
           # Calculate a 4th octet for the destination that is
           # unique per $s, avoids the .1 .2 .3 and .254 IP addresses
           # that have static MAC bindings, and fits in the range
           # 0-255.
           o4=`expr $is '*' 9 + $js '*' 3 + $ks + 10`
-          dip=`ip_to_hex 192 168 $id$jd $o4`
+          dip=192.168.$id$jd.$o4
           test_ip $s $smac $dmac $sip $dip
 
           # Every LP on the destination subnet's lswitch should
           # receive the ARP request.
-          lrmac=00000000ff$id$jd
-          lrip=`ip_to_hex 192 168 $id$jd 254`
-          arp=ffffffffffff${lrmac}08060001080006040001${lrmac}${lrip}000000000000${dip}
+          lrmac=00:00:00:00:ff:$id$jd
+          lrip=192.168.$id$jd.254
+          arp=$(fmt_pkt "Ether(dst='ff:ff:ff:ff:ff:ff', src='${lrmac}')/ \
+                         ARP(hwsrc='${lrmac}', hwdst='00:00:00:00:00:00', psrc='${lrip}', pdst='${dip}')")
           for jd2 in 1 2 3; do
             for kd in 1 2 3; do
               echo $arp >> $id$jd2$kd.expected
             done
           done
 
-          hmac=8000000000$o4
-          rmac=00000000ff$id$jd
-          echo ${hmac}${rmac}08004500001c00000000"3f1101"00${sip}${dip}0035111100080000 >> ${id}11.expected
+          hmac=80:00:00:00:00:$o4
+          rmac=00:00:00:00:ff:$id$jd
+          echo $(fmt_pkt "Ether(dst='${hmac}', src='${rmac}')/ \
+                          IP(src='${sip}', dst='${dip}', ttl=0x3f)/ \
+                          UDP(sport=53, dport=4369)") >> ${id}11.expected
 
-          host_mac=8000000000$o4
-          lrmac=00000000ff$id$jd
+          host_mac=80:00:00:00:00:$o4
+          lrmac=00:00:00:00:ff:$id$jd
 
-          arp_reply=${lrmac}${host_mac}08060001080006040002${host_mac}${dip}${lrmac}${lrip}
+          arp_reply=$(fmt_pkt "Ether(dst='${lrmac}', src='${host_mac}')/ \
+                               ARP(op=2, hwsrc='${host_mac}', hwdst='${lrmac}', psrc='${dip}', pdst='${lrip}')")
 
           hv=hv`vif_to_hv ${id}${jd}1`
           as $hv ovs-appctl netdev-dummy/receive vif${id}${jd}1 $arp_reply
 
-          host_ip_pretty=192.168.$id$jd.$o4
-          host_mac_pretty=80:00:00:00:00:$o4
-          echo lrp$id$jd,$host_ip_pretty,$host_mac_pretty >> mac_bindings.expected
+          echo lrp$id$jd,$dip,$hmac >> mac_bindings.expected
         done
       done
     done
@@ -5064,12 +5072,12 @@  done
 for i in 1 2 3; do
   for j in 1 2 3; do
     for k in 1 2 3; do
-      smac=f00000000$i$j$k               # Source MAC
-      sip=`ip_to_hex 192 168 $i$j $k`    # Source IP
-      rip=`ip_to_hex 192 168 $i$j 254`   # Router IP
-      rmac=00000000ff$i$j                # Router MAC
-      otherip=`ip_to_hex 192 168 $i$j 55` # Some other IP in subnet
-      externalip=`ip_to_hex 1 2 3 4`      # Some other IP not in subnet
+      smac=f0:00:00:00:0$i:$j$k               # Source MAC
+      sip=192.168.$i$j.$k    # Source IP
+      rip=192.168.$i$j.254   # Router IP
+      rmac=00:00:00:00:ff:$i$j                # Router MAC
+      otherip=192.168.$i$j.55 # Some other IP in subnet
+      externalip=1.2.3.4      # Some other IP not in subnet
 
       test_arp $i$j$k $smac $sip        $rip        $rmac      #4
       test_arp $i$j$k $smac $otherip    $rip        $rmac      #5
@@ -5081,22 +5089,19 @@  for i in 1 2 3; do
       lrp33_rsp=
       if test $i = 3 && test $j = 3; then
         lrp33_rsp=$rmac
+        echo "lrp33_rsp is ${lrp33_rsp}"
       fi
       test_arp $i$j$k $smac $externalip $rip        $lrp33_rsp #7
 
       # MAC binding should be learned from ARP request.
-      host_mac_pretty=f0:00:00:00:0$i:$j$k
-
-      host_ip_pretty=192.168.$i$j.$k
-      echo lrp$i$j,$host_ip_pretty,$host_mac_pretty >> mac_bindings.expected
+      echo lrp$i$j,$sip,$smac >> mac_bindings.expected
 
       # mac_binding is learned and overwritten so only the last one remains.
       if test $k = 3; then
           # lrp33 will not learn from ARP request, because 192.168.33.254 is
           # configured to switch peer port for lrp33.
           if test $i != 3 || test $j != 3; then
-              host_ip_pretty=192.168.$i$j.55
-              echo lrp$i$j,$host_ip_pretty,$host_mac_pretty >> mac_bindings.expected
+              echo lrp$i$j,$otherip,$smac >> mac_bindings.expected
           fi
       fi
 
@@ -5119,8 +5124,8 @@  for is in 1 2 3; do
   for js in 1 2 3; do
     for ks in 1 2 3; do
       s=$is$js$ks
-      smac=f00000000$s
-      sip=`ip_to_hex 192 168 $is$js $ks`
+      smac=f0:00:00:00:0$is:$js$ks
+      sip=192.168.$is$js.$ks
       for id in 1 2 3; do
         for jd in 1 2 3; do
           if test $is$js = $id$jd; then
@@ -5128,20 +5133,22 @@  for is in 1 2 3; do
           fi
 
           # Send the packet.
-          dmac=00000000ff$is$js
+          dmac=00:00:00:00:ff:$is$js
           # Calculate a 4th octet for the destination that is
           # unique per $s, avoids the .1 .2 .3 and .254 IP addresses
           # that have static MAC bindings, and fits in the range
           # 0-255.
           o4=`expr $is '*' 9 + $js '*' 3 + $ks + 10`
-          dip=`ip_to_hex 192 168 $id$jd $o4`
+          dip=192.168.$id$jd.$o4
           test_ip $s $smac $dmac $sip $dip
 
           # Expect the packet egress.
-          host_mac=8000000000$o4
+          host_mac=80:00:00:00:00:$o4
           outport=${id}11
           out_lrp=$id$jd
-          echo ${host_mac}00000000ff${out_lrp}08004500001c00000000"3f1101"00${sip}${dip}0035111100080000 >> $outport.expected
+          echo $(fmt_pkt "Ether(dst='${host_mac}', src='00:00:00:00:ff:$id$jd')/ \
+                          IP(src='${sip}', dst='${dip}', ttl=0x3f)/ \
+                          UDP(sport=53, dport=4369)") >> $outport.expected
         done
       done
     done