• Bernard Pidoux's avatar
    rose: improving AX25 routing frames via ROSE network · fe2c802a
    Bernard Pidoux authored
    ROSE network is organized through nodes connected via hamradio or Internet.
    AX25 packet radio frames sent to a remote ROSE address destination are routed
    through these nodes.
    
    Without the present patch, automatic routing mechanism did not work optimally
    due to an improper parameter checking.
    
    rose_get_neigh() function is called either by rose_connect() or by
    rose_route_frame().
    
    In the case of a call from rose_connect(), f0 timer is checked to find if a connection
    is already pending. In that case it returns the address of the neighbour, or returns a NULL otherwise.
    
    When called by rose_route_frame() the purpose was to route a packet AX25 frame
    through an adjacent node given a destination rose address.
    However, in that case, t0 timer checked does not indicate if the adjacent node
    is actually connected even if the timer is not null. Thus, for each frame sent, the
    function often tried to start a new connexion even if the adjacent node was already connected.
    
    The patch adds a "new" parameter that is true when the function is called by
    rose route_frame().
    This instructs rose_get_neigh() to check node parameter "restarted". 
    If restarted is true it means that the route to the destination address is opened via a neighbour
    node already connected.
    If "restarted" is false the function returns a NULL.
    In that case the calling function will initiate a new connection as before.
    
    This results in a fast routing of frames, from nodes to nodes, until
    destination is reached, as originaly specified by ROSE protocole.
    Signed-off-by: default avatarBernard Pidoux <f6bvp@amsat.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    fe2c802a
rose_route.c 30.8 KB