mirror of https://gitee.com/openkylin/linux.git
net/x25: fix restart request/confirm handling
We have to take the actual link state into account to handle restart requests/confirms well. Signed-off-by: Martin Schiller <ms@dev.tdt.de> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
62480b992b
commit
d023b2b9cc
|
@ -74,16 +74,43 @@ void x25_link_control(struct sk_buff *skb, struct x25_neigh *nb,
|
|||
|
||||
switch (frametype) {
|
||||
case X25_RESTART_REQUEST:
|
||||
confirm = !x25_t20timer_pending(nb);
|
||||
x25_stop_t20timer(nb);
|
||||
nb->state = X25_LINK_STATE_3;
|
||||
if (confirm)
|
||||
switch (nb->state) {
|
||||
case X25_LINK_STATE_2:
|
||||
confirm = !x25_t20timer_pending(nb);
|
||||
x25_stop_t20timer(nb);
|
||||
nb->state = X25_LINK_STATE_3;
|
||||
if (confirm)
|
||||
x25_transmit_restart_confirmation(nb);
|
||||
break;
|
||||
case X25_LINK_STATE_3:
|
||||
/* clear existing virtual calls */
|
||||
x25_kill_by_neigh(nb);
|
||||
|
||||
x25_transmit_restart_confirmation(nb);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case X25_RESTART_CONFIRMATION:
|
||||
x25_stop_t20timer(nb);
|
||||
nb->state = X25_LINK_STATE_3;
|
||||
switch (nb->state) {
|
||||
case X25_LINK_STATE_2:
|
||||
if (x25_t20timer_pending(nb)) {
|
||||
x25_stop_t20timer(nb);
|
||||
nb->state = X25_LINK_STATE_3;
|
||||
} else {
|
||||
x25_transmit_restart_request(nb);
|
||||
x25_start_t20timer(nb);
|
||||
}
|
||||
break;
|
||||
case X25_LINK_STATE_3:
|
||||
/* clear existing virtual calls */
|
||||
x25_kill_by_neigh(nb);
|
||||
|
||||
x25_transmit_restart_request(nb);
|
||||
nb->state = X25_LINK_STATE_2;
|
||||
x25_start_t20timer(nb);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case X25_DIAGNOSTIC:
|
||||
|
@ -214,8 +241,6 @@ void x25_link_established(struct x25_neigh *nb)
|
|||
{
|
||||
switch (nb->state) {
|
||||
case X25_LINK_STATE_0:
|
||||
nb->state = X25_LINK_STATE_2;
|
||||
break;
|
||||
case X25_LINK_STATE_1:
|
||||
x25_transmit_restart_request(nb);
|
||||
nb->state = X25_LINK_STATE_2;
|
||||
|
|
Loading…
Reference in New Issue