• yupeng's avatar
    net: call sk_dst_reset when set SO_DONTROUTE · 0fbe82e6
    yupeng authored
    after set SO_DONTROUTE to 1, the IP layer should not route packets if
    the dest IP address is not in link scope. But if the socket has cached
    the dst_entry, such packets would be routed until the sk_dst_cache
    expires. So we should clean the sk_dst_cache when a user set
    SO_DONTROUTE option. Below are server/client python scripts which
    could reprodue this issue:
    
    server side code:
    
    ==========================================================================
    import socket
    import struct
    import time
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind(('0.0.0.0', 9000))
    s.listen(1)
    sock, addr = s.accept()
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_DONTROUTE, struct.pack('i', 1))
    while True:
        sock.send(b'foo')
        time.sleep(1)
    ==========================================================================
    
    client side code:
    ==========================================================================
    import socket
    import time
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('server_address', 9000))
    while True:
        data = s.recv(1024)
        print(data)
    ==========================================================================
    Signed-off-by: default avataryupeng <yupeng0921@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0fbe82e6
sock.c 82.3 KB