Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 Dec 2021 15:52:44 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 260474] ping -e does not forward packets to specified next-hop
Message-ID:  <bug-260474-227@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D260474

            Bug ID: 260474
           Summary: ping -e does not forward packets to specified next-hop
           Product: Base System
           Version: 13.0-STABLE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Many People
          Priority: ---
         Component: bin
          Assignee: bugs@FreeBSD.org
          Reporter: KOT@MATPOCKuH.Ru

"-e" option for ping should change next hop for outgoing packet, but it's
changes only source IP address for packet.
I'm checked this problem on clean FreeBSD 13.0-RELEASE VM image from site.
To reproduce this problem on machine without IPv6 access please follow this
steps:
# Create a two epairs
ifconfig epair1 plumb
ifconfig epair1a up
ifconfig epair2 plumb
ifconfig epair2a up

# Plug a epair1 into bridge1 and assign fd00:1::2 to bridge1
ifconfig bridge1 plumb addm epair1a
ifconfig bridge1 inet6 -ifdisabled fd00:1::2/64 auto_linklocal
# Run a jail gw1 which fd00:1::1 on bridge1
ifconfig epair1b name gw1
jail -c name=3Dgw1 path=3D/ vnet vnet.interface=3Dgw1 allow.raw_sockets=3D1=
 persist=3D1
jexec gw1 ifconfig gw1 inet6 -ifdisabled fd00:1::1/64 auto_linklocal
# Add a IPv6 default route via gw1
route -6 add default fd00:1::1

# Plug a epair2 into bridge2 and assign fd00:2::2 to bridge2
ifconfig bridge2 plumb addm epair2a
ifconfig bridge2 inet6 -ifdisabled fd00:2::2/64 auto_linklocal
# Run a jail gw2 which fd00:2::1 on bridge2
ifconfig epair2b name gw2
jail -c name=3Dgw2 path=3D/ vnet vnet.interface=3Dgw2 allow.raw_sockets=3D1=
 persist=3D1
jexec gw2 ifconfig gw2 inet6 -ifdisabled fd00:2::1/64 auto_linklocal

# Check reachability
ping -c 2 fd00:1::1
ping -c 2 fd00:2::1
# Check MAC addresses
ndp -a

# Next-hop fd00:2::1 is on bridge2, but packet sent via bridge1 to MAC of g=
w1:
tcpdump -c 1 -epni bridge1 icmp6 &
sleep 1
ping -e fd00:2::1 -c 1 fd00:3::1

I'm got:=20
# ndp -a
Neighbor                             Linklayer Address  Netif Expire    S F=
lags
fd00:2::1                            02:57:8a:b2:5e:0b bridge2 29s       R=
=20
fd00:1::1                            02:67:f1:0d:66:0b bridge1 32s       R=
=20

And packet on bridge1:
15:49:30.303387 58:9c:fc:10:04:75 > 02:67:f1:0d:66:0b, ethertype IPv6 (0x86=
dd),
length 70: fd00:2::2 > fd00:3::1: ICMP6, echo request, seq 0, length 16
Source IP fd00:2::2 is a address for bridge2, and it's correct.
But packet found on bridge1 and "02:67:f1:0d:66:0b" is a MAC address of gw1.

This problem affects only FreeBSD13.
FreeBSD12 does not affected by this issue. To check on FreeBSD12 "-e" option
should be replaced which "-g".

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-260474-227>