OS-7556: IPv6 packets dropped after crossing MAC-loopback

Details

Issue Type:Bug
Priority:3 - Elevated
Status:Resolved
Created at:2019-02-04T21:08:28.142Z
Updated at:2019-02-06T03:22:15.167Z

People

Created by:Former user
Reported by:Former user
Assigned to:Former user

Resolution

Fixed: A fix for this issue is checked into the tree and tested.
(Resolution Date: 2019-02-06T03:22:15.155Z)

Fix Versions

2019-02-14 Liz Lemon (Release Date: 2019-02-14)

Description

The changes introduced in 20181108T015750Z, related to OS-2340 & friends, broke IPv6 traffic traveling over the MAC-loopback data path. Previously, VNICs wouldn't advertise LSO; thus the IP stack would generate software checksums on Tx. Giving VNICs LSO support caused the IP stack to start requesting HW checksums. This would have been fine except for two other problems:

1. As part of the OS-6778 work we stopped computing checksums for MAC-loopback traffic. Instead we updated the IP to accept these packets without verifying the checksum (because they travel DRAM only).

2. Even if we were still computing the software checksum on MAC-loopback, the software routine lacks IPv6 support (see OS-6878).

Both of these should be fixed; but for this ticket we are concerned with the first case. The IPv6 input path should be brought in line with the IPv4 path: to accept MAC-loopback packets as-is.

Comments

Comment by Former user
Created at 2019-02-04T22:19:33.317Z
Updated at 2019-02-05T23:02:43.952Z

I tested patch set 2 the following ways:

Physical links (both igb instances have Tx HW checksum disabled via tx_hcksum_enable = 0 in /kernel/drv/igb.conf).

<GZ> root@gaia [~]
# dladm show-phys
LINK         MEDIA                STATE      SPEED  DUPLEX    DEVICE
i40e0        Ethernet             up         10000  full      i40e0
igb0         Ethernet             up         1000   full      igb0
i40e1        Ethernet             up         10000  full      i40e1
igb1         Ethernet             up         1000   full      igb1

Verify the ill_t has no ILL_CAPAB_HCKSUM (value of 0x08).

> ::walk ill | ::printf "%s 0x%x\n" ill_t ill_name ill_capabilities ! egrep 'igb|i40'
igb0 0x1e0
igb1 0x1e0
igb0vn0 0x1e0
igb0vn1 0x1e0
i40e1vn0 0x1ec
i40e1vn1 0x1ec
i40e1vn2 0x0
i40e1vn3 0x0
i40e0 0x1ec
igb0vn0 0x0
igb0vn1 0x0
i40e1vn0 0x0
i40e1vn1 0x0
i40e1vn2 0x128
i40e1vn3 0x128
i40e0 0x128
igb1 0x120

Bridge

<GZ> root@gaia [~]
# dladm show-bridge -l hw_to_sw
LINK        STATE       UPTIME  DESROOT
i40e0       forwarding  1564    32768/3c:fd:fe:3:e:88
igb1        forwarding  1564    32768/3c:fd:fe:3:e:88

VNICs

# dladm show-vnic
LINK         OVER       SPEED MACADDRESS        MACADDRTYPE VID  ZONE
igb0vn0      igb0       1000  2:8:20:42:3d:8e   random      0    --
igb0vn1      igb0       1000  2:8:20:f3:94:30   random      0    --
i40e1vn0     i40e1      10000 2:8:20:52:12:ef   random      0    --
i40e1vn1     i40e1      10000 2:8:20:c5:76:38   random      0    --
i40e1vn2     i40e1      10000 2:8:20:f7:e5:90   random      0    --
i40e1vn3     i40e1      10000 2:8:20:87:87:d6   random      0    --

VLANs

# dladm show-vlan
LINK            VID      OVER         FLAGS
i40e5000        5        i40e0        -----
igb5001         5        igb1         -----

IP interfaces

# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
igb0/_a           static   ok           192.168.2.3/24
igb1/v4           static   ok           192.168.4.111/24
igb0vn0/v4        static   ok           192.168.3.100/24
igb0vn1/v4        static   ok           192.168.3.101/24
i40e1vn0/v4       static   ok           192.168.3.110/24
i40e1vn1/v4       static   ok           192.168.3.111/24
i40e0/v4          static   ok           192.168.4.110/24
lo0/v6            static   ok           ::1/128
i40e1vn2/v6       addrconf ok           fe80::8:20ff:fef7:e590/10
i40e1vn3/v6       addrconf ok           fe80::8:20ff:fe87:87d6/10
i40e0/v6          addrconf ok           fe80::3efd:feff:fe03:e88/10
igb1/v6           addrconf ok           fe80::1a66:daff:fea4:1357/10

Comment by Jira Bot
Created at 2019-02-06T03:16:32.859Z

illumos-joyent commit 63e028448bae2a1090e60d798e9cee9cdfbf7156 (branch master, by Ryan Zezeski)

OS-7556 IPv6 packets dropped after crossing MAC-loopback
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Dan McDonald <danmcd@joyent.com>
Approved by: Robert Mustacchi <rm@joyent.com>