fd: Introduce a unicast request timer.

This patch adds a new timer to be used by the client side unicast
negotiation logic.

Signed-off-by: Richard Cochran <richardcochran@gmail.com>
master
Richard Cochran 2018-03-27 15:35:29 -07:00
parent 1ccc55ef07
commit ffdb3f7192
4 changed files with 10 additions and 1 deletions

View File

@ -116,6 +116,7 @@ enum fsm_event e2e_event(struct port *p, int fd_index)
case FD_MANNO_TIMER: case FD_MANNO_TIMER:
case FD_SYNC_TX_TIMER: case FD_SYNC_TX_TIMER:
case FD_UNICAST_REQ_TIMER:
pr_err("unexpected timer expiration"); pr_err("unexpected timer expiration");
return EV_NONE; return EV_NONE;

3
fd.h
View File

@ -20,7 +20,7 @@
#ifndef HAVE_FD_H #ifndef HAVE_FD_H
#define HAVE_FD_H #define HAVE_FD_H
#define N_TIMER_FDS 6 #define N_TIMER_FDS 7
/* /*
* The order matters here. The DELAY timer must appear before the * The order matters here. The DELAY timer must appear before the
@ -37,6 +37,7 @@ enum {
FD_QUALIFICATION_TIMER, FD_QUALIFICATION_TIMER,
FD_MANNO_TIMER, FD_MANNO_TIMER,
FD_SYNC_TX_TIMER, FD_SYNC_TX_TIMER,
FD_UNICAST_REQ_TIMER,
FD_RTNL, FD_RTNL,
N_POLLFD, N_POLLFD,
}; };

View File

@ -119,6 +119,7 @@ enum fsm_event p2p_event(struct port *p, int fd_index)
case FD_MANNO_TIMER: case FD_MANNO_TIMER:
case FD_SYNC_TX_TIMER: case FD_SYNC_TX_TIMER:
case FD_UNICAST_REQ_TIMER:
pr_err("unexpected timer expiration"); pr_err("unexpected timer expiration");
return EV_NONE; return EV_NONE;

6
port.c
View File

@ -2239,6 +2239,7 @@ static void port_e2e_transition(struct port *p, enum port_state next)
port_clr_tmo(p->fda.fd[FD_QUALIFICATION_TIMER]); port_clr_tmo(p->fda.fd[FD_QUALIFICATION_TIMER]);
port_clr_tmo(p->fda.fd[FD_MANNO_TIMER]); port_clr_tmo(p->fda.fd[FD_MANNO_TIMER]);
port_clr_tmo(p->fda.fd[FD_SYNC_TX_TIMER]); port_clr_tmo(p->fda.fd[FD_SYNC_TX_TIMER]);
/* Leave FD_UNICAST_REQ_TIMER running. */
switch (next) { switch (next) {
case PS_INITIALIZING: case PS_INITIALIZING:
@ -2280,6 +2281,7 @@ static void port_p2p_transition(struct port *p, enum port_state next)
port_clr_tmo(p->fda.fd[FD_QUALIFICATION_TIMER]); port_clr_tmo(p->fda.fd[FD_QUALIFICATION_TIMER]);
port_clr_tmo(p->fda.fd[FD_MANNO_TIMER]); port_clr_tmo(p->fda.fd[FD_MANNO_TIMER]);
port_clr_tmo(p->fda.fd[FD_SYNC_TX_TIMER]); port_clr_tmo(p->fda.fd[FD_SYNC_TX_TIMER]);
/* Leave FD_UNICAST_REQ_TIMER running. */
switch (next) { switch (next) {
case PS_INITIALIZING: case PS_INITIALIZING:
@ -2448,6 +2450,10 @@ static enum fsm_event bc_event(struct port *p, int fd_index)
port_set_sync_tx_tmo(p); port_set_sync_tx_tmo(p);
return port_tx_sync(p, NULL) ? EV_FAULT_DETECTED : EV_NONE; return port_tx_sync(p, NULL) ? EV_FAULT_DETECTED : EV_NONE;
case FD_UNICAST_REQ_TIMER:
pr_debug("port %hu: unicast request timeout", portnum(p));
return EV_NONE;
case FD_RTNL: case FD_RTNL:
pr_debug("port %hu: received link status notification", portnum(p)); pr_debug("port %hu: received link status notification", portnum(p));
rtnl_link_status(fd, p->name, port_link_status, p); rtnl_link_status(fd, p->name, port_link_status, p);