• Julian Wiedmann's avatar
    s390/qeth: fix HiperSockets sniffer · bd74a7f9
    Julian Wiedmann authored
    Sniffing mode for L3 HiperSockets requires that no IP addresses are
    registered with the HW. The preferred way to achieve this is for
    userspace to delete all the IPs on the interface. But qeth is expected
    to also tolerate a configuration where that is not the case, by skipping
    the IP registration when in sniffer mode.
    Since commit 5f78e29c ("qeth: optimize IP handling in rx_mode callback")
    reworked the IP registration logic in the L3 subdriver, this no longer
    works. When the qeth device is set online, qeth_l3_recover_ip() now
    unconditionally registers all unicast addresses from our internal
    IP table.
    
    While we could fix this particular problem by skipping
    qeth_l3_recover_ip() on a sniffer device, the more future-proof change
    is to skip the IP address registration at the lowest level. This way we
    a) catch any future code path that attempts to register an IP address
       without considering the sniffer scenario, and
    b) continue to build up our internal IP table, so that if sniffer mode
       is switched off later we can operate just like normal.
    
    Fixes: 5f78e29c ("qeth: optimize IP handling in rx_mode callback")
    Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    bd74a7f9
qeth_l3_main.c 72.1 KB