On 18/11/30 22:32, Vincent Bernat wrote: > ❦ 15 juillet 2018 19:12 -0700, Mahesh Bandewar <mah...@bandewar.net>: > >> Commit b89f04c61efe ("bonding: deliver link-local packets with >> skb->dev set to link that packets arrived on") changed the behavior >> of how link-local-multicast packets are processed. The change in >> the behavior broke some legacy use cases where these packets are >> expected to arrive on bonding master device also. > > Unfortunately, this doesn't completely restore the previous > functionality as PACKET_ORIGDEV is broken for the copy: the original > interface is lost through the call to netif_rx(). A LLDP daemon > listening to the master interface won't get the original interface like > it was able to before 4.12. > > I am a bit lost of what the original patch was trying to achieve. I am > using the following test program: >
Basing on what you wrote below, it seems that everything was already possible before the Chonggang Li's commit ? If I understand correctly: - if listening on master, you could get both slave interface (PACKET_ORIGDEV) as well as bonding master - if listening on slave, you would just get the slave interface Right ? > <snip> > #!/usr/bin/env python3 > > import sys > import socket > import datetime > > socket.SOL_PACKET = 263 > socket.ETH_P_ALL = 3 > socket.PACKET_ORIGDEV = 9 > > interface = sys.argv[1] if len(sys.argv) > 1 else 'lag1' > > s = socket.socket(socket.AF_PACKET, > socket.SOCK_RAW, > socket.htons(socket.ETH_P_ALL)) > s.bind((interface, 0)) > s.setsockopt(socket.SOL_PACKET, socket.PACKET_ORIGDEV, 1) > while True: > data, addrinfo = s.recvfrom(1500) > if addrinfo[2] == socket.PACKET_OUTGOING: > continue > print(f"{datetime.datetime.now().isoformat()}: " > f"Received {len(data)} bytes from {addrinfo}") > #v- > > If I run it with a kernel compiled with the commit before b89f04c61efe > (plus a few more cherry-pick to make it work like ea8ffc0818d8 and > 72ccc471e13b), I get: > > #v+ > 2018-11-30T22:20:40.193378: Received 221 bytes from ('eth1', 35020, 2, 1, > b'RT3\x00\x00\x02') > 2018-11-30T22:20:40.194504: Received 221 bytes from ('eth0', 35020, 2, 1, > b'RT3\x00\x00\x01') > #v- > > If I send non link-local packets, I get: > > #v+ > 2018-11-30T22:25:57.300965: Received 98 bytes from ('eth0', 2048, 0, 1, > b'PT3\x00\x00\x02') > #v- > > I am also able to correctly receive link-local packets directly on each > interface. So, it seems everything was working as expected before > b89f04c61efe. >